Zip*_*ppy 6 mp3 android ogg android-mediaplayer
当试图循环MP3文件时,我的KitKat和Lollipop设备上存在非常小的差距,但在旧的Gingerbread手机上,循环之间的差距更加明显.这足以让我需要做点什么......
经过大量的研究,我才知道,MP3文件,把"填充"一点点在文件的开始,因此,循环的时候,它并没有给一个"干净循环"和这种效果可能是在旧/较慢更加明显手机(显然).
所以,我读到的建议是切换到使用OGG Vorbis文件.它们没有任何空格/填充和"完美循环".
然而,在尝试多次后,我真的开始使用OGG文件更坏的结果比我用MP3的 - 但问题是相反的,即当循环应该回到OGG文件的开始,它实际上似乎重新开始但是从它开始大约2或3秒(即没有'间隙',它只是没有正确循环).
我应该指出OGG文件本身似乎没问题,它们在Audacity中完美循环.
我正在使用2个MediaPlayer对象 - 一个用于介绍,一个用于主循环,介绍长度约为30秒,主循环长度约为3分钟.
我也(对豆形软糖及更高版本的设备),采用setNextMediaPlayer从前奏到主循环过渡-这工作正常(或至少它在我测试过它的两台设备上) -和预杰利贝恩我正在onCompletitionListener回调方法中启动我的主循环 - 我只有一个pre-JB设备,但同样,过渡似乎没问题).
请注意它是否有帮助,但这里有一些代码,尽管问题似乎与Android MediaPlayer处理OGG Vorbis文件的方式有关.
我一直试图让这个循环正常工作近一个星期,所以希望有人之前遇到过这个并且可以对它进行一些说明.
public void setDataSource() {
try {
loopPlayer.reset();
loopPlayer.setDataSource(myContext, Uri.parse("android.resource://com.me.myapp/" + R.raw.loop));
loopPlayer.prepare();
loopPlayer.setLooping(true);
introPlayer.reset();
introPlayer.setDataSource(myContext, Uri.parse("android.resource://com.me.myapp/" + R.raw.intro));
introPlayer.prepare();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
introPlayer.setNextMediaPlayer(loopPlayer);
loopPlayer.setLooping(true);
}
introPlayer.setOnCompletionListener(this);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onCompletion(MediaPlayer mp){
//If OS < Jelly Bean, then start loop
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN){
loopPlayer.start();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
615 次 |
| 最近记录: |