在Timer上播放声音文件

时间:2011-03-12 15:26:43

标签: android

我在屏幕上显示一个Timer。

要求是我需要在计时器持续时间为5秒时每秒播放一次声音。最后当它达到0(结束)时,我需要播放另一种声音。

我使用以下代码:

    public void onTick(long millisUntilFinished) {

    long timeLeft = secondsRemaining // I am getting the seconds left here

   if (timeLeft <= 5) {
                playAlertSound(R.raw.beep);
            }
            else if(timeLeft == 0){
                playAlertSound(R.raw.beep1);
            }


    public void playAlertSound(int sound) {

        MediaPlayer mp = MediaPlayer.create(getBaseContext(), sound);
        mp.start();
        mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.release();
            }
        });

我使用上面的代码遇到的问题,虽然每个蜂鸣声持续时间小于1秒,但我得到声音的延续。我希望从剩下的5秒开始每秒都有单独的哔声,直到达到零。

此外,声音的音量太低。

请提供您的意见,我是否需要遵循任何其他逻辑?

提前致谢。

温暖的问候,

CB

2 个答案:

答案 0 :(得分:0)

您应该确保使用setLooping功能禁用循环,对于音量问题,您可以使用setVolume功能设置播放音量。

但是,对于您的应用,您可能希望使用SoundPool类而不是MediaPlayer,因为当您想要多次播放相同的短音时,它更适合像您这样的情况。

使用示例代码,我也会颠倒设置onCompleteListener并开始播放的顺序,如下所示:

    MediaPlayer mp = MediaPlayer.create(getBaseContext(), sound);
    // move the mp.start() from here..        
    mp.setOnCompletionListener(new OnCompletionListener() {
          // your handler logic here..
    });
    // and add the setLooping and setVolume calls here..
    mp.setLooping(false);
    mp.setVolume(1.0, 1.0);
    mp.start(); // to here..

答案 1 :(得分:0)

我在没有OnCompletionListener的情况下尝试了这个代码,它没有循环工作正常吗?我想我不理解你的问题。另外...... setVolume(1.0,1.0)不正确,你需要(浮动,浮动)不是双倍。