AudioTrack: как определить конец звука? - PullRequest
2 голосов
/ 04 октября 2011

Я использую AudioTrack для воспроизведения звукового файла PCM WAV на Android (см. Также здесь ). Потоковый режим, рабочий поток. Мне интересно, как мне определить конец звука, чтобы я мог освободить и освободить AudioTrack. Кажется, что вызов write() блокирует, но блокирует ли он до тех пор, пока воспроизведение предоставленных данных не будет завершено? Не уверен.

Это я или документы по этому классу неадекватны? Если у вас есть ссылка на хороший неофициальный путеводитель по AudioTrack, я бы хотел его увидеть.

1 Ответ

11 голосов
/ 11 сентября 2012

Исходя из моего опыта, AudioTrack.write() вызов блокируется, пока данные не будут записаны в аудиобуфер HW.

Таким образом, после завершения write() звук гарантированно будет воспроизведен. В основном это работает хорошо.

Для более точного определения конца звука используйте AudioTrack.setNotificationMarkerPosition() и AudioTrack.setPlaybackPositionUpdateListener(). Примечание setNotificationMarkerPosition() считайте сэмплы аудио (не байты), поэтому, если ваш аудио - 16-битный семпл, позиция будет dataSize / 2.

В моем проекте есть пример: https://github.com/mine260309/android-sexypsf-player/blob/psf2/src/com/mine/psf/sexypsf/MineSexyPsfPlayer.java

...