Java 如何修复音频?(优先次序)
当同时播放两个音频时…声音将被抵消。如何修复这种奇怪的现象? 我有一些代码,其中有音频按钮点击和音频,间隔10秒(在后台服务中)。我有以下代码在播放10秒间隔时停止按钮音频,并且工作正常:Java 如何修复音频?(优先次序),java,android,multithreading,android-activity,optimization,Java,Android,Multithreading,Android Activity,Optimization,当同时播放两个音频时…声音将被抵消。如何修复这种奇怪的现象? 我有一些代码,其中有音频按钮点击和音频,间隔10秒(在后台服务中)。我有以下代码在播放10秒间隔时停止按钮音频,并且工作正常: public static void myPop(Context context){ AudioManager manager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); if(!manager.isMusi
public static void myPop(Context context){
AudioManager manager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
if(!manager.isMusicActive()) { //Only if there isn't any other audio playing
MediaPlayer pop = MediaPlayer.create(context, R.raw.pop);
pop.start();
}
else{
Log.v(TAG, "Audio is already playing");
}
}
这可以正常工作,它会停止播放一个音频(pop),让另一个音频播放(来自后台服务的音频)。现在,当他们同时打球时,我就明白了问题所在。例如,当我在后台服务的音频即将启动的同时,在准确地点击按钮时。当它们同时播放时,音频就会被切断
有没有办法优先选择后台服务音频?不知怎么说:如果两个音频片段同时启动,我想让后台服务音频播放。
要直观地思考这一点:
()
我想说,如果我可以在苹果和桔子之间选择,那就摘苹果吧。如果我有两台音频播放器同时播放,请选择一台(苹果)。
谢谢你的帮助
Ruchir您可能有比赛条件。在这三行中
1 if(!manager.isMusicActive()) {
2 MediaPlayer pop = MediaPlayer.create(context, R.raw.pop);
3 pop.start();
在第1行和第3行之间,另一个播放器有机会获得媒体播放器并开始播放,特别是在第2行速度较慢的情况下
我建议制作一个两个播放器都可以访问的媒体播放器(即在别处创建“MediaPlayer pop”并共享),或者找到另一种方法来同步不同的播放器。可能在播放前发出停止,而不是检查播放状态。当其他播放器启动或暂停时,您可以使用代码播放或暂停音频
AudioManager.OnAudioFocusChangeListener afChangeListener =
new AudioManager.OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT) {
// Pause playback
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
// Resume playback
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
am.abandonAudioFocus(afChangeListener);
// Stop playback
}
}
};
更多参考资料
您介意提供一个如何做到这一点的示例吗?我不知道怎么做,因为这两个媒体播放器属于两个不同的类别…你介意提供一个如何做到这一点的例子吗?我不知道怎么做,因为这两个媒体播放器在两个不同的班级。。。