当前位置:  编程技术>移动开发
本页文章导读:
    ▪对音频文件的操作 录音跟播放        对音频文件的操作 录音和播放 录音,并且把录影文件放在了外存储设备sdcard中: package com.quidng.practice; import java.io.File; import java.io.IOException; import android.app.Activity; import android.media.MediaRecorder;.........
    ▪ GOOGLE打开了潘多拉匣子        GOOGLE打开了潘多拉盒子 手机系统大战 算不算 GOOGLE打开了潘多拉盒子   开发者的噩梦啊 ......
    ▪ Matrix容易使用       Matrix简单使用 Matrix是一个3*3的矩阵:平移的矩阵计算:现设点P0(x0, y0)进行平移后,移到P(x,y),其中x方向的平移量为△x,y方向的平移量为△y,那么,点P(x,y)的坐标为:x = x0.........

[1]对音频文件的操作 录音跟播放
    来源: 互联网  发布时间: 2014-02-18
对音频文件的操作 录音和播放

录音,并且把录影文件放在了外存储设备sdcard中:

package com.quidng.practice;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;

public class RecordSound extends Activity implements OnClickListener{

	private Button btnRecord,btnStop;
	private MediaRecorder recorder;
	private File soundFile;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.record_sound);
		
		btnRecord = (Button) findViewById(R.id.record_sound_record);
		btnRecord.setOnClickListener(this);
		btnStop = (Button) findViewById(R.id.record_sound_stop);
		btnStop.setOnClickListener(this);
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		if(soundFile != null && soundFile.exists() && recorder != null){
			recorder.stop(); 	//**停止录音**
			recorder.release(); //**释放资源**
			recorder = null;	
		}
	}

	@Override
	public void onClick(View v) {
		if(v.getId() == R.id.record_sound_record){
		    try {
		    	//直接存储到了sdcard中
		    	soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/sound1.amr");
				recorder = new MediaRecorder();
			    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  //录制的声音的来源
//			    recorder.setVideoSource(video_source);   //录制视频
			    
			    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);   //录制的声音的输出格式(必须在设置声音的编码格式之前设置)
			    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  //设置声音的编码格式
			    recorder.setOutputFile(soundFile.getAbsolutePath());    //设置声音的保存位置
				recorder.prepare();	 //**准备录音**
			    recorder.start();    //**开始录音**
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}else if(v.getId() == R.id.record_sound_stop){
			if(soundFile != null && soundFile.exists()){
				recorder.stop(); 	//**停止录音**
				recorder.release(); //**释放资源**
				recorder = null;	
			}
		}
	}
}

 播放音乐:

package com.quding.widget.musicplayer;

import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;

public class MusicPlayerService extends Service{

	private MediaPlayer player;
	private AssetFileDescriptor asserAssetFileDescriptor;
	
	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	
	@Override
	public void onCreate() {
		super.onCreate();
		AssetManager assetManager = this.getAssets();   //获得一个assert资源管理器的实例
		try {
		    asserAssetFileDescriptor = assetManager.openFd("run_with_myself.mp3");   //获取一个raw资源
		} catch (IOException e) {
			e.printStackTrace();
		}
		player = new MediaPlayer();   //播放assert中的文件

//		player = MediaPlayer.create(getApplicationContext(), R.raw.run_with_myself);     //这个是播放raw中的音频文加

 //		player = new MediaPlayer();     //播放sdcard中的文件
//		try {
//			player.setDataSource("/sdcard/sound1.arm");   //指明路径
//			player.prepare();   //装载音频文件
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		Log.i("tag", "service已经存在");
	}
	
	@Override
	public void onStart(Intent intent, int startId) {
		super.onStart(intent, startId);
		if(intent != null){
			Log.i("tag", intent.getData().toString());
				int operator = Integer.parseInt(intent.getData().toString()); //operate带着具体的操作信息
				switch (operator) {
				case 1 :    //打开
					playMusic();
					break;
				case 2 :	//暂停
					pauseMusic();
					break;
				case 3 :	//停止
					stopMusic();
					break;
			}
		}
	}
	
	private void playMusic() {
		if(player != null && !player.isPlaying()){
			try {
				//设置资源
				player.setDataSource(asserAssetFileDescriptor.getFileDescriptor(),
						asserAssetFileDescriptor.getStartOffset(),
						asserAssetFileDescriptor.getLength());
				player.prepare(); //加载资源
				player.start();
				Log.i("tag", "播放音乐");
			} catch (Exception e) {
				e.printStackTrace();
			} 
		}
	}
	
	private void pauseMusic(){
		if(player != null && player.isPlaying()){
			player.pause();
			Log.i("tag", "暂停");
		}
	}
	
	private void stopMusic(){
			player.stop();
			Log.i("tag", "停止");
		try {
			player.reset();   //使mediaPlayer会回到初始化之前的地方,需要重新加载文加,
			player.setDataSource(asserAssetFileDescriptor.getFileDescriptor(),
					asserAssetFileDescriptor.getStartOffset(),
					asserAssetFileDescriptor.getLength());
			player.prepare(); //加载资源
			Log.i("tag", "重新加载文件");
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
}

 


    
[2] GOOGLE打开了潘多拉匣子
    来源: 互联网  发布时间: 2014-02-18
GOOGLE打开了潘多拉盒子

手机系统大战 算不算 GOOGLE打开了潘多拉盒子

 

开发者的噩梦啊


    
[3] Matrix容易使用
    来源: 互联网  发布时间: 2014-02-18
Matrix简单使用
Matrix是一个3*3的矩阵:


平移的矩阵计算:
现设点P0(x0, y0)进行平移后,移到P(x,y),其中x方向的平移量为△x,y方向的平移量为△y,那么,点P(x,y)的坐标为:
x = x0  + △x
y = y0  + △y
采用矩阵表达上述如下:



图像旋转的矩阵计算:
现设点P0(x0, y0)旋转θ角后的对有点为P(x, y)。通过使用向量,我们得到如下:

x0 = r  cosα
y0 = r  sinα

x = r cos(α-θ) = x0 cosθ+ y0 sinθ
y = r sia(α-θ) = -x0 sinθ+y0 cosθ

于是我们得到矩阵:



矩阵的放大缩小:
放大缩小是利用最下面的一行数值改变实现的。右下角的数值n>1表示缩放n,n<1表示扩展n倍

旋转和放大缩小是以当前左上角进行的。因此如果要以某点(x,y)旋转或者缩放,需要进行:
matrix.setScale(0.5f,0.5f);
matrix.preTranslate(-x,-y);
matrix.postTranslate(x,y);

执行顺序-->平移元素,将点(x,y)移动到元素左上角,缩小元素为原来的一半,将元素平移到原来的位置。
旋转也是用同样的方式。注意先后顺序。
1 楼 lipeng88213 2011-10-12  
问一下 楼主
现设点P0(x0, y0)旋转θ角后的对有点为P(x, y)。通过使用向量,我们得到如下:

x0 = r  cosα
y0 = r  sinα

这个是怎么算的啊

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3