Ваш первый шаг - позвонить setPositionNotificationPeriod(periodInFrames)
. Это определяет, как часто ваше приложение будет получать вызов onPeriodicNotification
. Таким образом, если вы выполняете визуализацию типа осциллографа и хотите в любой момент отображать на экране аудиоданные на 50 миллисекунд, вы должны использовать значение periodInFrames
2205 (при условии, что ваш файл WAV моно, 16 бит за образец и частоту дискретизации 44100 Гц).
Внутри вашего события уведомления вы можете определить, где в данный момент воспроизводится ваш объект AudioTrack, а затем получить соответствующий фрагмент данных из исходного файла или массива. Затем вы используете, а затем рисуете этот фрагмент данных на своем экране, используя обычные методы 2D-графики (здесь нет необходимости в openGL). Этот ответ имеет образец C # для рисования фрагмента аудиоданных - его легко перевести на Java.
Итак, ваш код будет выглядеть примерно так:
audioTrack.setPositionNotificationPeriod(2205);
audioTrack.setPlaybackPositionUpdateListener(this);
...
public void onPeriodicNotification(AudioTrack track) {
int pos = track.getNotificationMarkerPosition();
short[] slice = Array.copy(_data, pos, _sliceSize) // pseudo-code
// render the slice to the view
}