【问题标题】:Stopping a track (at a certain point) on Android在 Android 上停止曲目(在某个点)
【发布时间】:2010-04-25 19:02:48
【问题描述】:

我知道您可以使用 Mediaplayer seekto() 从某个时间点开始。

但是有没有办法让曲目(音频播放)在某个点停止?还是必须在计时器循环上使用 if 语句?

【问题讨论】:

    标签: java android audio


    【解决方案1】:

    似乎不可能(如果我错了,请纠正我)使用媒体播放器执行此操作而不在计时器循环中使用 seekto()。但是,您可以尝试将 AudioTrack 与设置通知标记结合使用:

    AudioTrack.setNotificationMarkerPosition

    设置通知标记的位置。

    并覆盖播放位置更新监听器AudioTrack.OnPlaybackPositionUpdateListener

    AudioTrack的播放头位置到达通知标记或增加一定时间时调用回调的接口定义。

    【讨论】:

    • 我会尝试一个计时器循环,=] 我对效率不太感兴趣,但我猜计时器循环效率低下? :P :)
    • 我会说它比低效更混乱,可能不会显着减慢应用程序的速度。
    【解决方案2】:

    你必须做出会触发getCurrentPosition()的威胁。

    当它到达停止点时,你必须停止 MediaPlayer。

    public void run() {
        while (mp != null && mPosition < mTotal) {
            try {
                Thread.sleep(500); // you can modify sleep time for better accuracy
                if (mp.isPlaying()) {
                    mPosition = mp.getCurrentPosition();
                    if (mPosition == mYourStopPoint) { //remember to set mYourStopPoint
                        mp.stop();
                        break;
                    }
                }
            } catch (InterruptedException e) {
                return;
            } catch (Exception e) {
                return;
            }
    
        }
    }
    

    onPreapared回调中启动这个线程。

    public void onPrepared(MediaPlayer genericPlayer) {
        mTotal = mp.getDuration();
        new Thread(this).start();
    }
    

    【讨论】:

      【解决方案3】:

      遗憾的是,AudioTrack 的位置回调似乎被严重破坏了。 http://code.google.com/p/android/issues/detail?id=2563

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        相关资源
        最近更新 更多