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