Как воспроизводить образцы файлов WAV через Android AudioTrack?

У меня есть звуковые эффекты в файлах 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?

Большое спасибо за вашу помощь!


person Bruce    schedule 01.10.2020    source источник
comment
Хорошо, похоже, что на самом деле моя кодировка в порядке, потому что я обнаружил, что как только я начал зацикливать звуки, они начали воспроизводиться нормально. Я думаю, что это как-то связано с необходимостью заполнения буфера AudioTrack перед его воспроизведением, а не с кодировкой. Я оставлю этот код в качестве примера того, что кодирование в порядке, если только кто-то не решит его удалить.   -  person Bruce    schedule 01.10.2020