Я пытаюсь воспроизвести файл PCM на Android, используя класс AudioTrack
. Я могу получить файл, чтобы играть очень хорошо, но я не могу уверенно сказать, когда воспроизведение закончилось. AudioTrack.getPlayState
говорит, что воспроизведение остановилось, когда оно еще не закончилось. У меня такая же проблема с AudioTrack.setNotificationMarkerPosition
, и я уверен, что мой маркер установлен в конец файла (хотя я не совсем уверен, что делаю это правильно). Аналогично, воспроизведение продолжается, когда getPlaybackHeadPosition
находится в конце файла и перестает увеличиваться. Может ли кто-нибудь помочь?Как узнать, когда объект AudioTrack закончил игру?
12
A
ответ
14
Я нашел, что с помощью audioTrack.setNotificationMarkerPosition (audioLength) и audioTrack.setPlaybackPositionUpdateListener работал для меня. Смотрите следующий код:
// Get the length of the audio stored in the file (16 bit so 2 bytes per short)
// and create a short array to store the recorded audio.
int audioLength = (int) (pcmFile.length()/2);
short[] audioData = new short[audioLength];
DataInputStream dis = null;
try {
// Create a DataInputStream to read the audio data back from the saved file.
InputStream is = new FileInputStream(pcmFile);
BufferedInputStream bis = new BufferedInputStream(is);
dis = new DataInputStream(bis);
// Read the file into the music array.
int i = 0;
while (dis.available() > 0) {
audioData[i] = dis.readShort();
i++;
}
// Create a new AudioTrack using the same parameters as the AudioRecord.
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, RECORDER_SAMPLE_RATE, RECORDER_CHANNEL_OUT,
RECORDER_AUDIO_ENCODING, audioLength, AudioTrack.MODE_STREAM);
audioTrack.setNotificationMarkerPosition(audioLength);
audioTrack.setPlaybackPositionUpdateListener(new OnPlaybackPositionUpdateListener() {
@Override
public void onPeriodicNotification(AudioTrack track) {
// nothing to do
}
@Override
public void onMarkerReached(AudioTrack track) {
Log.d(LOG_TAG, "Audio track end of file reached...");
messageHandler.sendMessage(messageHandler.obtainMessage(PLAYBACK_END_REACHED));
}
});
// Start playback
audioTrack.play();
// Write the music buffer to the AudioTrack object
audioTrack.write(audioData, 0, audioLength);
} catch (Exception e) {
Log.e(LOG_TAG, "Error playing audio.", e);
} finally {
if (dis != null) {
try {
dis.close();
} catch (IOException e) {
// don't care
}
}
}
3
Это работает для меня:
do{ // Montior playback to find when done
x = audioTrack.getPlaybackHeadPosition();
}while (x< pcmFile.length()/2);
Смежные вопросы
- 1. Как найти, что audioTrack закончил/остановился?
- 2. Как узнать, когда закончил воспроизведение аудиоэлемента HTML5?
- 3. Как узнать, когда тост закончил показ itslelf
- 4. Как узнать, когда initWithContentsOfURL NSData закончил загрузку.
- 5. GWT: как узнать, когда закончил рендеринг datagrid
- 6. Как узнать, когда Soundpool закончил воспроизведение аудиофайла?
- 7. Как узнать, когда SoundPlayer закончил воспроизведение звука
- 8. Как узнать, когда закончил рисование холста HTML5?
- 9. Как узнать, когда закончил загрузку ajax?
- 10. Как я могу выгрузить видео, когда он закончил игру?
- 11. Узнайте, когда закончил QTMovieView
- 12. Как узнать, закончил ли музыкальный файл воспроизведение?
- 13. Как узнать, когда выпустить объект NSDate?
- 14. Как узнать, когда GitHub Pages закончил создание Jekyll?
- 15. Chrome расширений: Как узнать, когда вкладка имеет АЯКС вызов закончил
- 16. Как узнать, когда Delphi TDBGrid закончил заполнение базы данных?
- 17. Как узнать, когда MediaRecorder закончил запись данных в файл
- 18. Как я могу узнать, когда SVG закончил рендеринг
- 19. Как узнать, когда ListBox закончил рендеринг в Silverlight?
- 20. Как узнать, когда пользователь закончил редактирование файла в Paint.NET?
- 21. Как узнать, когда пользователь закончил вводить текстовые поля формы C#
- 22. Как узнать, когда swf закончил загрузку с javascript?
- 23. Как узнать, когда UIWebView закончил рисование в контексте?
- 24. Как узнать, когда проигрыватель OSMF закончил Воспроизведение видео
- 25. Как узнать, закончил ли WebBrowser загрузку страницы?
- 26. Как узнать, закончил ли клиент загрузку файла
- 27. Как узнать момент после вращения X закончил
- 28. Как узнать, когда пользователь оценивает приложение/игру iOS
- 29. Когда я нажимаю игру, исчезает игровой объект
- 30. оповещать когда звук закончил играть