Android之认识多媒体


Android 的多媒体

  • 拍照
  • 录音
  • 播放音乐
    • SoundPool
    • MediaPlayer
  • 播放视频

录音的使用

初始化
 MediaRecorder mr = new MediaRecorder();
mr.setAudioSource(MediaRecorder.AudioSource.MIC);  //音频输入源
mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);   //设置输出格式
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);   //设置编码格式
mr.setOutputFile(soundFile.getAbsolutePath());
开始录制  
try {
     mr.prepare();
   mr.start();  //开始录制
} catch (IOException e) {
    e.printStackTrace();
}
停止录制
if(mr != null){
    mr.stop();
    mr.release();
    mr = null;
}

MediaPlayer使用实例

初始化
MediaPlayer mp = new MediaPlayer();
//无需再调用setDataSource
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);  
//①raw下的资源:
MediaPlayer.create(this, R.raw.test);
//②本地文件路径:
mp.setDataSource("/sdcard/test.mp3");
//③网络URL文件:
mp.setDataSource("http://www.xxx.com/music/test.mp3");
设置文件描述
AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");
m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());

本地Uri:
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();

外部URL:
String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.start();

SoundPool使用实例

SoundPool使用
初始化
//设置最多可容纳5个音频流,音频的品质为5
SoundPool mSoundPool = new SoundPool(5, AudioManager.STREAM_SYSTEM, 5);
soundID.put(1, mSoundPool.load(this, R.raw.duang, 1));
soundID.put(2 , mSoundPool.load(getAssets().openFd("biaobiao.mp3") , 1));  //需要捕获IO异常

Android 5.0之后
SoundPool.Builder spb = new SoundPool.Builder();
spb.setMaxStreams(10);
spb.setAudioAttributes(null);    //转换音频格式
SoundPool sp = spb.build();      //创建SoundPool对象

播放
//声音ID,左声道,右声道,播放声音优先级(数值越大,优先级越大),是否循环(1,0,-1),播放速率(0.5-2.0)
mSoundPool.play(soundID.get(index), 1, 1, 0, 0, 1);

监听是否播放完成
mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
        Toast.makeText(MainActivity.this,"加特技准备完毕~",Toast.LENGTH_SHORT).show();
    }
});