安卓使用Audio Record自定义录音
2017-11-21 18:45
99 查看
全栈工程师开发手册 (作者:栾鹏)
安卓教程全解
安卓使用Audio Record自定义录音。
录音功能函数
安卓教程全解
安卓使用Audio Record自定义录音。
创建异步任务后台录音
创建异步任务recordbutton.setOnClickListener(new OnClickListener() { public void onClick(View v) { //创建异步任务,在后台录制声音 AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { isRecording = true; record(); return null; } }; task.execute(); } });
录音功能函数
//使用Audio Record录制原始音频 private boolean isRecording = false; private void record() { int frequency = 11025; //录音频率 int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; //频道配置 int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; //录音编码 File file = new File(Environment.getExternalStorageDirectory(), "raw.pcm"); //创建新文件 try { file.createNewFile(); } catch (IOException e) { Log.d("自定义录音", "IO Exception", e); } try { OutputStream os = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(os); DataOutputStream dos = new DataOutputStream(bos); int bufferSize = AudioRecord.getMinBufferSize(frequency,channelConfiguration,audioEncoding); short[] buffer = new short[bufferSize]; //创建一个新的AudioRecord对象来录制音频 AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,frequency,channelConfiguration,audioEncoding, bufferSize); audioRecord.startRecording(); Log.v("自定义录音", "开始录音"); while (isRecording) { int bufferReadResult = audioRecord.read(buffer, 0, bufferSize); for (int i = 0; i < bufferReadResult; i++) dos.writeShort(buffer[i]); } audioRecord.stop(); dos.close(); } catch (Throwable t) { Log.d("自定义录音", "An error occurred during recording", t); } }
停止录音
只需要将全局变量isRecording 设置为false即可跳出后台程序,停止录音。播放录制的音频
//使用Audio Track播放原始音频 private void playback() { int frequency = 11025/2; int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; File file = new File(Environment.getExternalStorageDirectory(), "raw.pcm"); //用于存储音轨的short数组,(每个short占用16位,即2个字节) int audioLength = (int)(file.length()/2); short[] audio = new short[audioLength]; try { InputStream is = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(is); DataInputStream dis = new DataInputStream(bis); int i = 0; while (dis.available() > 0) { audio[i] = dis.readShort(); i++; } //关闭输入流 dis.close(); Log.v("自定义录音", "播放录音"); //创建和播放新的AudioTrack对象 AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, frequency, channelConfiguration, audioEncoding, audioLength, AudioTrack.MODE_STREAM); audioTrack.play(); audioTrack.write(audio, 0, audioLength); } catch (Throwable t) { Log.d("自定义录音", "An error occurred during playback", t); } }
相关文章推荐
- 安卓基础:对话框的简单使用
- 安卓学习笔记之使用widget桌面小控件
- 图解安卓-c++开发-通过java 调用c++ jni的使用
- 安卓 Handler使用方法
- 【安卓】如何使用Loaders
- 安卓使用Java语言从身份证号码中截取出生日期、省份、性别、年龄
- 关于android安卓的wifi功能使用需要申请的权限和管理类
- 安卓逆向学习笔记 (4) - 使用IDA Pro动态调试so文件
- 如何在安卓系统上使用arm-linux-gdb调试内核
- 使用万能框架HttpHelper抓取安卓APP数据
- 安卓开发进阶之RxJava在实际项目中使用--第一篇
- apktool 在mac下的使用 -反编译安卓apk文件
- 关于安卓如何使用android-async-http开源框架
- 使用react-native启动安卓项目时JS SERVER 未启动报错(Starting JS server...)
- 安卓如何使用WebView组件加载HTML代码
- 安卓JNI使用OpenCV
- 安卓使用StringBuffer和FileOutputStream生成xml文档
- 安卓:Loader访问联系人,并使用菜单弹出对话框的形式添加联系人
- 【安卓笔记】CardView+RecyclerView使用示例