Android OpenSLES 缓冲队列上的声音故障

Sound glitch on Android OpenSLES buffered queue

我已经按照此处的示例实现了一个 OpenSLES 缓冲队列:https://github.com/googlesamples/android-ndk/blob/master/native-audio/app/src/main/cpp/native-audio-jni.c

然而,当我将我的声音加入队列并(隐含地)播放时,我可以在声音开始时听到一个故障:

(*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, nextBuffer, nextSize);

(文件)示例中不存在此故障。

如果我将样本排入队列两次,我可以听到两次这个故障。

样本使用 Audacity 编码为 44kHz 的单声道 .wav

实际上,.wav 格式并不意味着原始格式,因此文件以 header 开头。这就是一开始产生故障的原因。

使用 Audacity,导出为 "Other uncompressed format" > "RAW (header-less)"、"Signed 16-bit PCM" 解决了问题。