使用我的应用程序进行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的周期太大,而更快(更小)的周期将解决问题.
有人能告诉我如何摆脱缓冲区溢出?