android – AudioRecord:缓冲区溢出?

android – AudioRecord:缓冲区溢出?,第1张

概述使用我的应用程序进行RECORDING时,我收到缓冲区溢出.录制在服务中执行.我无法弄清楚为什么我从AudioFlinger收到此消息. 下面我实例化AudioRecord对象并设置它的回调. bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);aRecorder = new Audi 使用我的应用程序进行RECORDING时,我收到缓冲区溢出.录制在服务中执行.我无法弄清楚为什么我从audioflinger收到此消息.

下面我实例化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的缓冲区大小更改为最小缓冲区大小的2倍.

您可以使用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:缓冲区溢出?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1148910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存