录音类MediaRecorder的简单应用-录音频
16lz
2021-01-24
MediaRecorder类可用类录制音频文件,它直接将音频数据写入到文件里去。而AudioRecord类是直接获取到pcm音频数据.对外界来说,MediaRecorder向外提供音频文件,而AudioRecord向外提供音频数据流,这是主要两者区别之一。下面小结下MediaRecorder的简单应用步骤:
第一步:实例化一个对象:mRecord = new MediaRecorder();
第二步:设置音频来源:mRecord.setAudioResource(*);
第三步:设置输出音频文件的格式:mRecord.setOutFormat(*);
第四步:设置输出的音频编码方式、采样率、编码位率:一般设置编码方式即可,其他设置为默认值mRecord.setEncorder(*);
第五步:设置音频写入的文件:mRecord.setOutFile(*);
第六步:准备:mRecord.prepare();
第七步:开始录音:mRecord.start();
第八步:停止录音:mRecord.stop(),然后再记得释放资源mRecord.release();
注:记得添加权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
具体代码:
public class MyAudioRecordActivity extends Activity{/** Called when the activity is first created. */MediaRecorder mRecord;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);initWidget();}private void initWidget(){// TODO Auto-generated method stubButton play = (Button) findViewById(R.id.start);play.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubif (mRecord == null){boolean result = startRecord();if(!result){stopRecord();}}}});Button stop = (Button) findViewById(R.id.stop);stop.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubstopRecord();}});}private void stopRecord(){if (mRecord != null){mRecord.stop();mRecord.release();mRecord = null;}}private boolean startRecord(){/*实例化对象*/mRecord = new MediaRecorder();/*设置音频输入源*/mRecord.setAudioSource(MediaRecorder.AudioSource.MIC);/*设置音频输出格式*/mRecord.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);/*设置音频编码方式*/mRecord.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);/*设置音频写入的文件*/File file = createFile(".arm");mRecord.setOutputFile(file.getAbsolutePath());/*准备录音频*/try{mRecord.prepare();}catch (IllegalStateException e){// TODO Auto-generated catch blocke.printStackTrace();return false;}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();return false;}/*开始录像*/mRecord.start();return true;}/*创建指定后缀名的文件*/private File createFile(String suffix){if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { return null; }File sdcardDir = Environment.getExternalStorageDirectory();Time t = new Time();t.setToNow();String filename = null;try{filename = sdcardDir.getCanonicalPath()+ String.format("/AudioTest%04d%02d%02d%02d%02d%02d"+ suffix, t.year, t.month + 1, t.monthDay, t.hour,t.minute, t.second);}catch (IOException e){e.printStackTrace();return null;}File file = new File(filename);if (!file.exists()){try{file.createNewFile();}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}return file;}/*创建底部退出菜单*/public boolean onCreateOptionsMenu(Menu menu){super.onCreateOptionsMenu(menu);MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit");item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){public boolean onMenuItemClick(MenuItem item){System.exit(0);return true;}});return true;}}
demo下载:
http://download.csdn.net/detail/sunnyfans/4939776
更多相关文章
- Android(安卓)A/B System OTA分析(二)系统image的生成
- Android(安卓)之 Files
- Android音频框架笔记
- android studio 各种设置以及常见问题
- 为手机定制ROM
- 关于Android(安卓)drawable和drawable-v24文件夹有什么区别
- android 如何在JNI编程中使用logCat
- Android布局文件xml
- eclipse Android(安卓)工程在Libs导入第三方jar / Android工程作