Android 音频录制与播放

2019-10-22 14:34:52 浏览数 (1)

音频录制

录制

代码语言:javascript复制
private MediaRecorder mMediaRecorder;
private void startRecord(){
   if (mMediaRecorder == null){
       mMediaRecorder = new MediaRecorder();
       mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
       mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
       mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
       File file = new File(Environment.getExternalStorageDirectory().getPath(), "hello.log");
       if (!file.exists()) {
           try {
               file.createNewFile();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
       mMediaRecorder.setOutputFile(file.getAbsolutePath());
       mMediaRecorder.setMaxDuration(1000 * 60 * 10);
       try {
           mMediaRecorder.prepare();
       } catch (IOException e) {
           e.printStackTrace();
       }
       mMediaRecorder.start();
   }
   
   handler.postDelayed(runnable, 200);
}

停止录制

代码语言:javascript复制
private void stopRecord(){
   handler.removeCallbacks(runnable);
   mMediaRecorder.stop();
   mMediaRecorder.release();
   mMediaRecorder = null;
}

每200毫秒反复调用 获取声音大小

代码语言:javascript复制
Handler handler=new Handler();
Runnable runnable=new Runnable() {
   @Override
   public void run() {
       //要做的事情
       if(mMediaRecorder==null) return;
       double ratio = (double) mMediaRecorder.getMaxAmplitude() / 100;
       double db = 0;// 分贝
       //默认的最大音量是100,可以修改,但其实默认的,在测试过程中就有不错的表现
       //你可以传自定义的数字进去,但需要在一定的范围内,比如0-200,就需要在xml文件中配置maxVolume
       //同时,也可以配置灵敏度sensibility
       if (ratio > 1)
           db = 30 * Math.log10(ratio);
        //设置声波大小
       soundWaveViewLeft.setVolume((float)db);
       soundWaveViewRight.setVolume((float)db);
       //只要有一个线程,不断调用这个方法,就可以使波形变化
       //主要,这个方法必须在ui线程中调用
       handler.postDelayed(this, 200);
   }
};

音频播放

1、从资源文件中播放

代码语言:javascript复制
MediaPlayer   player  =   new MediaPlayer.create(this,R.raw.test);
player.start();

2、从文件系统播放

代码语言:javascript复制
MediaPlayer player = new MediaPlayer();
String path = "/sdcard/test.mp3";
player.setDataSource(path);
player.prepare();
player.start();

3、从网络播放

(1)通过URI的方式:

代码语言:javascript复制
String path="http://**************.mp3";     //这里给一个歌曲的网络地址就行了
Uri  uri  =  Uri.parse(path);
MediaPlayer player = new MediaPlayer.create(this,uri);
player.start();

(2)通过设置数据源的方式:

代码语言:javascript复制
MediaPlayer player = new MediaPlayer.create();
String path="http://**************.mp3";          //这里给一个歌曲的网络地址就行了
player.setDataSource(path);
player.prepare();
player.start();

0 人点赞