大佬教程收集整理的这篇文章主要介绍了android – AudioRecord:缓冲区溢出?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
下面我实例化AudioRecord对象并设置它的回调.
bufferSize = AudioRecord.getMinBufferSize(sampleRate,chAnnelConfig,audioFormat); aRecorder = new AudioRecord(audiosource,sampleRate,audioFormat,bufferSizE); aRecorder.setRecordPositionupdateListener(updateListener); bytesPerSample = bitsPerSample / 8; int bytesPerFrame = nChAnnels * bytesPerSample; framePeriod = bufferSize / bytesPerFrame; // nr of frames that can be kept in a bufferSize dimension int result = aRecorder.setPositionNotificationPeriod(framePeriod); buffer = new byte[bufferSize];
audioRecord回调:
private AudioRecord.onRecordPositionupdateListener updateListener = new AudioRecord.onRecordPositionupdateListener(){ public void onPerioDicNotification(AudioRecord recorder){ int result = aRecorder.read(buffer,buffer.length); } public void onMarkerReached(AudioRecord recorder) {} };
我怀疑这个问题与:aRecorder.setPositionNotificationPeriod(framePeriod)有关; – 也许这个bufferSize的周期太大,而更快(更小)的周期将解决问题.
有人能告诉我如何摆脱缓冲区溢出?
您可以使用AudioRecord.getMinBufferSize()静态方法.这将为您提供用于当前格式的最小缓冲区大小.
getMinBufferSize()方法的语法是:
public static int getMinBufferSize ( int sampleRateInHz,int chAnnelConfig,int audioFormat)
在创建AudioRecord对象时,任何小于此数字的内容都将导致失败.
您应该一直在减小缓冲区大小,以免压低音频子系统对数据的需求.
请记住将重写的方法(@OverridE)用于audioRecord回调,如下所示:
private AudioRecord.onRecordPositionupdateListener updateListener = new AudioRecord.onRecordPositionupdateListener(){ @Override public void onPerioDicNotification(AudioRecord recorder){ int result = aRecorder.read(buffer,buffer.length); } @Override public void onMarkerReached(AudioRecord recorder) {} };
我建议阅读帖子:Android audio recording,part 2
您可以尝试的另一件事是在记录时使用线程,在记录的字节上使用另一个进程,从而避免主UI线程上的过多重载.
此方法的开源示例代码:musicg_android_demo
查看这篇文章了解更多 – android-audiorecord-class-process-live-mic-audio-quickly-set-up-callback-func
以上是大佬教程为你收集整理的android – AudioRecord:缓冲区溢出?全部内容,希望文章能够帮你解决android – AudioRecord:缓冲区溢出?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。