我正在开发一个 Android 应用程序,我想播放一些短的声音(~ 2 秒)。我尝试过 Soundpool,但它并不适合我,因为它无法检查声音是否已经在播放。所以我决定使用 AudioTrack。
它工作得很好,但大多数时候,当它开始播放声音时,会发出“咔嗒”声。我检查了我的音频文件,它们是干净的。
我在流模式下使用音轨。我发现静态模式更适合短声音,但经过多次搜索后我仍然不明白如何使其工作。我还读到,点击噪音可能是由 wav 文件的标头引起的,因此如果我使用setPlaybackHeadPosition(int positionInFrames)函数跳过此标头(应该仅在静态模式下工作),声音可能会消失
这是我的代码(所以问题是开始时的滴答声)
int minBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);
audioTrack.play();
int i = 0;
int bufferSize = 2048; //don't really know which value to put
audioTrack.setPlaybackRate(88200);
byte [] buffer = new byte[bufferSize];
//there we open the wav file >
InputStream inputStream = getResources().openRawResource(R.raw.abordage);
try {
while((i = inputStream.read(buffer)) != -1)
audioTrack.write(buffer, 0, i);
} catch (IOException e) {
// …Run Code Online (Sandbox Code Playgroud)