安卓使用Audio Record自定义录音
来源:互联网 发布:淘宝精华帖子 编辑:程序博客网 时间:2024/06/10 17:56
全栈工程师开发手册 (作者:栾鹏)
安卓教程全解
安卓使用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); } }
阅读全文
0 0
- 安卓使用Audio Record自定义录音
- Record Audio(录音)
- ubuntu skype 录音-Record Audio
- 安装Linux 录音软件 Record Audio
- 安装Linux 录音软件 Record Audio
- h5使用audio标签录音
- html5 record 录音实例 使用websocket
- 安卓录音
- Windows Phone 7 – 写一个会Record Audio的录音程式
- Record录音简介
- Stop Audio Record
- Android Audio Record
- IOS7使用Audio Queue同时进行录音和播放
- 安卓实现录音机的录音功能
- 自定义录音
- 微录音--Android通话录音(vluyin-callrecorder)一款安卓通话录音软件
- audio:mt6236 录音驱动小结
- 安卓自定义权限的使用
- 输出一个多位数的各位上的数字
- mysql中sql语句中常见的group_concat()函数意思以及用法,oracle中与其一样的功能函数是wmsys.wm_concat()
- qt发布打包工具
- MBA读后感悟
- Python多线程之fork
- 安卓使用Audio Record自定义录音
- SpringBoot应用 Automatic Restart以及静态资源 livereload 设置
- 201711211840->unity调用安卓方法
- endl
- poj 2632 Crashing Robots【模拟】【略坑~】【刷题计划】
- 二分查找 先输入数据库的个数再一一录入数据 然后输入要查找对象的个数再一一录入对象 最后依次输出对象是否在数据库中的结论
- 内联函数和宏代码的比较
- unity 读取外部的obj文件的方法(可读取任意地址的文件包括沙盒中之类的)
- Java文件读写IO/NIO及性能比较总结