1
雖然經驗豐富的開發,我是新來的Android,和我想開發一個應用程序通過Android的麥克風在錄製音頻的用戶可定義的部分之間循環。Android的音頻循環
我想低延遲當循環點被擊中時(即尋找該部分的起始點並恢復回放的最短時間)。
我以後的一般建議如我:
音頻文件格式
哪些類,我應該考慮播放(如的Soundpool,媒體播放器等)
感謝您的任何意見
Dave
雖然經驗豐富的開發,我是新來的Android,和我想開發一個應用程序通過Android的麥克風在錄製音頻的用戶可定義的部分之間循環。Android的音頻循環
我想低延遲當循環點被擊中時(即尋找該部分的起始點並恢復回放的最短時間)。
我以後的一般建議如我:
音頻文件格式
哪些類,我應該考慮播放(如的Soundpool,媒體播放器等)
感謝您的任何意見
Dave
您可以使用像這樣的媒體播放器和OnCompletetionListener:
MediaPlayer mp;
mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.create(getApplicationContext(), R.raw.nextsound);
mp.prepare();
mp.start();
}
});
mp.prepare();
mp.start();
至於聲音文件類型,我從來沒有注意到它們之間的很大區別。我傾向於堅持使用.mp3或.ogg,儘管只是因爲文件大小比.wav小。
編輯:啊我明白了,如果你是想在播放整個音頻文件並通過你只需要調用setLooping(真)是這樣的:
MediaPlayer mp;
mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
mp.setLooping(true);
mp.prepare();
mp.start();
如果你正在嘗試播放全音頻文件一次,然後循環它的一些小部分它可以使用像這樣的completionlistener內的.seekTo()方法:
MediaPlayer mp;
mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp = MediaPlayer.create(getApplicationContext(), R.raw.yoursound);
mp.seekTo(3000); //3 seconds in
mp.prepare();
mp.start();
}
});
mp.prepare();
mp.start();
謝謝!如果我正確理解這一點,這裏描述的是R.raw.yoursound的完成會觸發R.raw.nextsound的播放,這與我之後的不一樣。我希望能夠指示播放對象在某個點(循環結束)到達時在文件中的特定點(循環開始)處恢復播放 - 在一個聲音文件中。雖然總是有這種機會,但我錯過了一些微妙的東西! – David 2011-04-19 14:07:44
行Tim,謝謝 - 鑑於它是觸發循環的**完成**監聽器,這意味着終點必須始終是文件的結尾,而不是聲音文件中的任意點 - I想知道如果audiotrack類可能更多我在尋找哪裏我可以getPlaybackHeadPosition()回放期間確定循環的開始和結束點,然後使用setLoopPoints()重複該部分 - 你用過這個?你能看到這個appoach有什麼問題嗎? – David 2011-04-20 08:23:46
我以前沒有用過那個類。但對我來說這似乎是一個很好的方法。 – FoamyGuy 2011-04-22 15:52:15