【发布时间】:2013-07-21 08:50:21
【问题描述】:
RECORDING 使用我的应用程序时出现缓冲区溢出。录制在Service 中进行。我不明白为什么我会收到来自AudioFlinger 的这条消息。
下面我实例化AudioRecord 对象并设置它的回调。
bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
aRecorder = new AudioRecord(audioSource, sampleRate, channelConfig, 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, 0, buffer.length);
}
public void onMarkerReached(AudioRecord recorder)
{}
};
我怀疑这个问题与:aRecorder.setPositionNotificationPeriod(framePeriod); 有关 - 也许这个bufferSize 的周期太大了,更快(更小)的周期将解决问题。
谁能告诉我如何摆脱缓冲区溢出?
【问题讨论】:
标签: android buffer-overflow audiorecord android-audiorecord