【问题标题】:Sounds are canceling eachother out?声音互相抵消?
【发布时间】:2015-11-14 20:13:23
【问题描述】:

我有一些代码,其中按钮单击音频每隔十秒(在后台服务中)。我有以下代码可以在播放十秒间隔时停止按钮音频,并且效果很好:

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),让另一个音频播放(来自后台服务的那个)。现在,当他们同时玩时,我遇到了问题。例如,当我在确切同时点击按钮时,后台服务的音频即将开始。发生这种情况时,我的应用程序会自动静音!有没有办法优先考虑后台服务音频?不知怎的说:如果两个音频片段同时开始,我想让后台服务音频播放。我一直在寻找这个,但它似乎不是一个常见问题...?非常感谢您帮助解决这个问题!

谢谢,

丰富

【问题讨论】:

    标签: android multithreading audio service timer


    【解决方案1】:

    我认为当您单击按钮时,media 尚未更新其状态。所以它会调用pop。为防止这种情况发生,请等待一段时间后再检查状态。

     public static void myPop(Context context){
    
     try{
        Thread.sleep(500);//500ms = 0.5s
     }catch(InterruptedException ex){
     }
        AudioManager manager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
    
        //Wait for sometime and then check status 
    
        if(!manager.isMusicActive() && hasDelayed1s) {       //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");
        }
    }
    

    【讨论】:

    • 这不会阻止音频自行播放吗?但这不是问题,我想阻止两个单独的音频相互抵消。请解释。非常感谢您的回复!
    • 但这不是问题。 myPop 一切正常。问题是,如果 pop 与我的 other MediaPlayer(在后台运行)同时开始,那么 both 声音都是静音。每个单独的声音都很好,只是当它们两个同时播放时,它们会抵消。我怎样才能解决这个问题?如果我误解了你,请纠正我。非常感谢!
    • 可能是什么问题?
    • 你能看到更新的答案吗?如果你愿意,我可以发布一些延迟检查的代码
    • 我应该等多久。你能发布延迟检查的东西吗,因为我不太熟悉它。谢谢!
    猜你喜欢
    • 2019-09-30
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2015-07-15
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多