【问题标题】:Identifying the running time of an playing audio file识别正在播放的音频文件的运行时间
【发布时间】:2017-08-15 10:53:24
【问题描述】:

我正在开发一个简单的音频播放器,它会在我暂停/停止播放时显示音频播放了多长时间(编辑:例如,如果我在 52 秒处重新开始音乐,然后在 55 秒处暂停,则吐司说“3”)。截至目前,我正在使用这个:

long startTime = System.currentTimeMillis();
long stopTime = System.currentTimeMillis();
Toast.makeText(getApplicationContext(), "Elapsed time was " + ((stopTime - startTime)/1000) + " seconds.", Toast.LENGTH_LONG).show();}

显示时差。我遇到的问题是 startTime 是从我第一次点击播放开始的,而不是最近的时间(只是不断地计数)。

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private Button playMusic;
private MediaPlayer mediaPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mediaPlayer = new MediaPlayer();
    mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.adele);
    mediaPlayer.setLooping(true);
    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
        @Override
        public void onCompletion(MediaPlayer mp){
            int duration = mp.getCurrentPosition()/1000;
            Toast.makeText(getApplicationContext(), "Duration:" + duration + " seconds", Toast.LENGTH_LONG).show();
        }
    });

    playMusic = (Button) findViewById(R.id.playButton);
    playMusic.setOnClickListener(new View.OnClickListener(){
        long startTime = System.currentTimeMillis();
        @Override
        public void onClick(View v){

            if (mediaPlayer.isPlaying()) {
                pauseMusic();
                long stopTime = System.currentTimeMillis();
                Toast.makeText(getApplicationContext(), "Elapsed time was " + ((stopTime - startTime)/1000) + " seconds.", Toast.LENGTH_LONG).show();}
            else {
                startMusic();
            }
        }
    });

    setVolumeControlStream(AudioManager.STREAM_MUSIC);
}

public void pauseMusic(){
    if (mediaPlayer !=null){
        mediaPlayer.pause();
        playMusic.setText(getString(R.string.button_start));
    }
}

public void startMusic(){
    if (mediaPlayer != null){
        mediaPlayer.start();
        playMusic.setText(getString(R.string.button_pause));
    }
}

protected void onDestroy(){
    if (mediaPlayer !=null && mediaPlayer.isPlaying()) {
        mediaPlayer.stop();
        mediaPlayer.release();
        mediaPlayer = null;
    }
    super.onDestroy();
    }
}

【问题讨论】:

    标签: java android audio time


    【解决方案1】:

    首先将 long startTime 和 stopTime 放在 onCreate() 方法之上。现在,尝试在 onPause() 方法中添加这些代码行并像这样更改代码:

    public void pauseMusic(){
        if (mediaPlayer !=null){
            mediaPlayer.pause();
            startTime=mediaPlayer.getCurrentPosition();
            playMusic.setText(getString(R.string.button_start));
        }
    }
    

    【讨论】:

    • 您好 Android Geek,感谢您的帮助。当我更改代码时,它现在总是说“经过的时间是 1490313723 秒”,无论我播放歌曲的时间有多短或多长时间。我确实将您的 startTime=mp1.... 更改为 startTime=mediaPlayer.... 因为 mp1 在我的代码中不是一个变量,而且(我认为,虽然我是新手)它应该是 mediaPlayer。另外,如果我没看错,我把“long startTime = System.currentTimeMillis();”和“long stopTime = System.currentTimeMillis();”就在“private MediaPlayer mediaPlayer;”的正下方在我上面的代码中。
    • 好吧,我知道我相信你有什么是使用当前歌曲位置作为它播放多长时间的吐司。这是一个很好的解决方案。不幸的是,我认为我没有很好地表达我想要的东西。我试图询问能够计算开始/暂停之间的时间(即,如果我重新开始播放一首歌,然后在 55 秒处暂停,吐司会说“3”)。
    • 我希望它对你有所帮助。我也做了同样的修改。
    • 是的,谢谢你,我很感激编辑!您对我可以做些什么来显示歌曲中间的开始/暂停之间的时间有什么想法吗?即,如果我在歌曲中重新开始 52 秒,然后在 55 秒处暂停,它将敬酒“3”。照原样,代码会烤“55”
    • 您的意思是要在 toast 中打印 55 秒?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多