Android(安卓)pcm文件播放方法(AudioTrack)
16lz
2021-01-26
pcm文件不能直接使用MediaPlayer进行播放, 因为mediaplayer不支持这种格式的音频文件,
我们可以使用AudioTrack对录到的pcm文件进行播放, 使用AudioTrack的步骤如下:
1.获取一个合适的缓存区
int bufferSize = AudioTrack.getMinBufferSize(16000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
第一个参数是采样率这里我是用的是16000(另外还有8000等格式), 第二个参数是单声道还是多声道(这里我用的是单声道), 第三个表示录音数据的格式这里用的是PCM_16BIT
2.创建一个AudioTrack对象
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 16000, AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
3.调用play()方法, 并向audiotrack里写入录音数据:
try {audioTrack.play();fis = new FileInputStream(path);byte[] buffer = new byte[bufferSize];int len = 0;isPlaying = true;while ((len = fis.read(buffer)) != -1 && !isStop) {// Log.d(TAG, "playPCMRecord: len " + len);audioTrack.write(buffer, 0, len);}} catch (Exception e) {Log.e(TAG, "playPCMRecord: e : " + e);}
来看一个完整的写法:
private Runnable playPCMRecord = new Runnable() { @Override public void run() { int bufferSize = AudioTrack.getMinBufferSize(16000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT); audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 16000, AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM); FileInputStream fis = null; try { audioTrack.play(); fis = new FileInputStream(path); byte[] buffer = new byte[bufferSize]; int len = 0; isPlaying = true; while ((len = fis.read(buffer)) != -1 && !isStop) {// Log.d(TAG, "playPCMRecord: len " + len); audioTrack.write(buffer, 0, len); } } catch (Exception e) { Log.e(TAG, "playPCMRecord: e : " + e); } finally { isPlaying = false; isStop = false; if (audioTrack != null) { audioTrack.stop(); audioTrack = null; } if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } };
更多相关文章
- Android(安卓)API 中文 (51) —— ZoomButtonsController
- Android(安卓)中传递 json 的问题
- Android(安卓)Post请求SQL数据库
- [android]android自动化测试三之设定AVD各项参数
- [置顶] S5PV210 Android(安卓)fimc驱动分析 - fimc_regs.c
- Android之旅十三 android中的数据传递方法
- 录音权限(Android(安卓)8.0)
- Android开发——SQLite数据库(二)android studio创建数据库,进行插
- Flutter String格式化