Android'de AudioTrack
sınıfını kullanarak bir PCM dosyasını oynatmaya çalışıyorum. Dosyayı sadece iyi oynayabilirim, ancak oynatmanın ne zaman biteceğini güvenilir bir şekilde anlayamıyorum. AudioTrack.getPlayState
, oynatmayı bitirmediğinde oynatmanın durduğunu söylüyor. Ben AudioTrack.setNotificationMarkerPosition
ile aynı sorunu yaşıyorum, ve ben eminim benim işaretleyici dosyanın sonuna kadar ayarlanmış (her ne kadar ben tam olarak emin değilim). Benzer şekilde, getPlaybackHeadPosition
dosya sonunda oynatma devam eder ve art arda durur. Biri yardım edebilir mi?AudioTrack nesnesi ne zaman bittiğini nasıl anlarsınız?
12
A
cevap
14
AudioTrack.setNotificationMarkerPosition (audioLength) ve audioTrack.setPlaybackPositionUpdateListener'ın benim için çalıştığını buldum.
// 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
Bu benim için çalışıyor:
do{ // Montior playback to find when done
x = audioTrack.getPlaybackHeadPosition();
}while (x< pcmFile.length()/2);
aşağıdaki kodu Bkz
İlgili konular
- 1. AudioTrack - bir sesin ne zaman başlayacağını/bittiğini nasıl anlarsınız?
- 2. Bir HTML5 ses öğesinin ne zaman bittiğini nasıl anlarım?
- 3. Bir UITwitch'in bir UITableViewCell içine ne zaman eklendiğini nasıl anlarsınız?
- 4. Bir dosyanın iCloud'da ne zaman değiştiğini nasıl anlarsınız?
- 5. AudioTrack: play() başlatılmamış AudioTrack üzerinde çağrıldı
- 6. Sütunlamanın bittiğini nasıl anlarım?
- 7. Ayrıştırıcı ayrıştırıcı yok - ne olup bittiğini nasıl kaydederim?
- 8. DST'nin Python'da belirli bir konumda ne zaman başladığını veya bittiğini nasıl belirleyebilirim?
- 9. glVertexPointer() verileri ne zaman kopyalayacaktır?
- 10. Android, Animasyonun bittiğini nasıl bilebilirim?
- 11. Android'in AudioTrack sınıfından gecikme bilgilerini nasıl alabilirim?
- 12. Google Maps v3: Bir ImageMapType yer paylaşımının döşemesinin ne zaman tamamlandığını nasıl anlarsınız?
- 13. Bir istisna nesnesi ne zaman imha edilir (ve kontrol edilebilir)?
- 14. Rotasyonun ne zaman setRequestedOrientation
- 15. Android AudioTrack arabelleğe yükleme sorunları
- 16. JavaScript "Counter" nesnesi, ne var?
- 17. Paket nesneler ne zaman başlatılıyor?
- 18. RequireJS ne zaman arama asenkron gerektirir? Ne zaman senkronize edilir?
- 19. HttpPostedFile.InputStream - ve ne zaman kullanılmalıdır?
- 20. Ne zaman kullanılmalı ve Aurelia'da ne zaman kullanılır?
- 21. [MTAThread] ne zaman kullanılmalıdır?
- 22. Zaman birimi ne zaman geri döner?
- 23. UICollectionView: UICollectionViewCell nesnesi her zaman null boyutundadırForItemAtIndexPath
- 24. OpenGLES 2 - glBindTexture ne zaman ve ne zaman glActiveTexture?
- 25. Ne zaman assert() kullanılmalı ve ne zaman kullanılmalı?
- 26. Gen_Fsm ne zaman kullanılır ve Gen_Server ne zaman kullanılır?
- 27. GörünümWillAppear ve ne zaman viewDidLoad içine koymak ne zaman?
- 28. Vektörler ne zaman kullanılır ve C++ dizini ne zaman kullanılır?
- 29. undef_method ne zaman kullanılır ve remove_method ne zaman kullanılır?
- 30. Eklentiler ne zaman seçilecek ve ne zaman ipucu seçileceği