Tôi đang cố gắng phát tệp PCM trong Android bằng cách sử dụng lớp AudioTrack
. Tôi có thể nhận được tập tin để chơi tốt, nhưng tôi không thể tin tưởng một cách đáng tin cậy khi phát lại đã kết thúc. AudioTrack.getPlayState
cho biết quá trình phát lại đã dừng khi chưa phát xong. Tôi gặp vấn đề tương tự với AudioTrack.setNotificationMarkerPosition
và tôi chắc chắn rằng điểm đánh dấu của tôi được đặt ở cuối tệp (mặc dù tôi không hoàn toàn chắc chắn rằng mình đang làm đúng). Tương tự như vậy, phát lại tiếp tục khi getPlaybackHeadPosition
nằm ở cuối tệp và đã dừng tăng dần. Có ai giúp được không?Làm cách nào để biết khi nào đối tượng AudioTrack đã phát xong?
12
A
Trả lời
14
Tôi nhận thấy rằng việc sử dụng audioTrack.setNotificationMarkerPosition (audioLength) và audioTrack.setPlaybackPositionUpdateListener đã hoạt động đối với tôi. Xem đoạn mã sau:
// 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
này làm việc cho tôi:
do{ // Montior playback to find when done
x = audioTrack.getPlaybackHeadPosition();
}while (x< pcmFile.length()/2);
Các vấn đề liên quan
- 1. Làm cách nào để biết khi nào phần tử âm thanh HTML5 đã phát xong?
- 2. Làm cách nào để biết khi nào một UIWebView đã vẽ xong một ngữ cảnh?
- 3. ALSA: Cách để biết khi nào âm thanh được phát xong
- 4. Làm thế nào để bạn phát hiện khi âm thanh HTML5 đã phát xong (nhiều lần)?
- 5. Trên UILongPressGestureRecognizer làm cách nào để phát hiện đối tượng nào đã tạo sự kiện?
- 6. Làm thế nào để phát hiện khi một tập tin mp3 phát xong
- 7. Làm thế nào để biết khi nào bộ nhớ của một đối tượng Java được phát hành?
- 8. Làm cách nào để phát một đối tượng trong Angularj?
- 9. Khi nào phát hành đối tượng NSUrlConnection
- 10. Làm cách nào để biết id thứ trước khi lưu đối tượng trong jpa
- 11. Làm cách nào để biết khi nào OutputDataReceived cuối cùng đã đến?
- 12. Làm cách nào để biết đối tượng JSON nào đang được sử dụng (Crockford hay đối tượng khác)?
- 13. Làm thế nào để biết một đối tượng là một đối tượng RegExp?
- 14. Làm cách nào để biết đối tượng thuộc tính nào không hoạt động?
- 15. cách biết khi nào danh sách xem xong tải dữ liệu trên android
- 16. Làm cách nào để biết khi nào một ListBox đã hoàn tất hiển thị trong Silverlight?
- 17. Làm cách nào để biết khi nào MKMapview setRegion: hoạt ảnh: đã hoàn tất?
- 18. Làm cách nào để biết một đối tượng có phải là mô hình Mockito không?
- 19. Khi tải dữ liệu ngoài, bảng điều khiển cho biết: XHR đã tải xong
- 20. Làm cách nào để biết một đối tượng Linq-to-Sql đã cho có được gắn vào một datacontext không?
- 21. Cách biết khi nào phông chữ đã được áp dụng
- 22. Cách phát hiện âm thanh đã phát xong trong trang web?
- 23. Định hướng đối tượng đã biết trong một hình ảnh
- 24. Làm thế nào để biết khi nào MPMoviePlayerController đã bị tạm dừng trong iPhone?
- 25. phát video youtube bên trong uiwebview. Làm cách nào để xử lý nút "xong"?
- 26. Làm cách nào để biết được bộ sưu tập được lặp lại đã được sửa đổi?
- 27. Biết khi nào hình ảnh được tải xong trong phản hồi AJAX
- 28. Làm cách nào để biết liệu sự kiện $ (window) .load()/window.onload đã được kích hoạt chưa?
- 29. Làm cách nào để phát hiện đối tượng trên ảnh cách xa đối tượng khác trên ảnh đó?
- 30. Android: Phát hiện khi ScrollView đã cuộn xong và quay trở lại?