У меня есть звуковые эффекты в файлах WAV, но я хочу объединить их и воспроизвести через Android AudioTrack, поэтому я пытаюсь понять, как правильно кодировать образцы WAV в 16-битный PCM.
Я могу нормально воспроизводить белый шум через AudioTrack, согласно этому полезному ответу AudioTrack в потоковом режиме MODE_STREAMING< /а>
Однако по какой-то причине мне кажется, что мои приятные звуковые эффекты вообще не воспроизводят какой-либо звук, когда я загружаю их в AudioTrack.
Я снимаю 44-символьный заголовок WAV, а затем обрабатываю каждую пару байтов с прямым порядком байтов в короткое со знаком следующим образом:
byte[] arr = baos.toByteArray();
short[] shortArr = new short[arr.length/2]; // Half the length
for (int i=0; i<arr.length; i+=2){ // Need to go 2 at a time because we're converting
// 2 little-endian bytes into one short
shortArr[i/2] = (short)(arr[i] + (arr[i+1]*256));
}
Мой AudioTrack выглядит так:
m_audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT, 176400 /* 1 second buffer */,
AudioTrack.MODE_STREAM);
и я звоню так:
final short[] hiclick = getWavDataBytesAsPCM16(getResources().openRawResourceFd(R.raw.created_hi_click_188_samples));
m_audioTrack.write(hiclick, 0, hiclick.length);
Вместо ожидаемых звуковых эффектов я ничего не получаю.
Как правильно извлекать сэмплы из файлов WAV и передавать их в AudioTrack?
Большое спасибо за вашу помощь!