当前位置: 首页 > 知识库问答 >
问题:

Java MP3播放器-播放、暂停和查找与jLayer不一致

谭鹏云
2023-03-14
    null

关键是我使用jLayer的实现不起作用:当我执行play-pause-resume时,音频被暂停,但随后从文件中的随机点恢复。

public class MPlayer{
    AdvancedPlayer player;
    private static int pausedOnFrame =0;
    private byte[] decrypted = null;
    private long audioLength;
    private AudioInputStream stream;
    private InputStream bytesToStream(byte[] in) {
        InputStream is = new ByteArrayInputStream(in);
        return is;
    }

    public MPlayer(String fname) {
        /* here file is encrypted to variable byte[] decrypted and then: */
        InputStream is = bytesToStream(decrypted);
        stream = AudioSystem.getAudioInputStream(is);
        audioLength = stream.getFrameLength();

        player = new AdvancedPlayer(stream);
        player.setPlayBackListener(new PlaybackListener() {
            @Override
            public void playbackFinished(PlaybackEvent event) {
                System.err.println(event.getFrame());
                pausedOnFrame = event.getFrame();
            }

        }
    }

    public void play() throws Exception {
        Thread th = new Thread() {
            public void run() {
                player.play(MPlayer.pausedOnFrame, Integer.MAX_VALUE);
            }
        };
        th.start();
    }

    public void fastforward() {
        pausemusic();
        long nextFrame = (long) (pausedOnFrame+0.02*audioLength);
        if (nextFrame < audioLength)
            play();
    }
    public void rewind() {
        pausemusic();
        long nextFrame = (long) (pausedOnFrame-0.02*audioLength);
        if (nextFrame > 0)
            play();
        }
    }

    public void pausemusic() throws LineUnavailableException {
        player.stop();
    }
    public void stopmusic() throws LineUnavailableException {
        player.stop();
        pausedOnFrame = 0;
    }
}

我该怎么修好它?

共有1个答案

锺离明煦
2023-03-14

您似乎必须在pause方法上调用stop,而不给它一个位置。

    public void pausemusic() throws LineUnavailableException {
    player.stop();
}
public void stopmusic() throws LineUnavailableException {
    player.stop();
    pausedOnFrame = 0;
}

我不熟悉您的代码是如何工作的,但是如果'stopmusic'方法通过'paused onframe=0'将歌曲重置为0,那么为什么不在播放过程中保留一个计数器,以便创建一个知道在哪里定位的pause方法呢?

简而言之,你为什么不追踪这首歌在哪里?

 类似资料:
  • 我正在开发一个音频播放器,它可以在后台播放音频文件。我的问题是,当录像机或视频播放器启动时,我需要暂停音频播放器。 有什么方法可以处理这个任务吗?例如,我有来处理这些调用。当我接到呼叫或wnat呼叫时,我们可以使用呼叫状态暂停播放器。我想为录像机或视频播放器以及相同的场景。当视频/录制开始时,我需要暂停音频播放器。

  • 问题内容: 如何在以下代码中添加“播放/暂停”按钮? 问题答案: 您需要使用该类而不是just类,因为更简单的类不能真正开始在中间播放文件。 您需要添加一个并监听该方法。然后,您可以从停下来的那一刻起重新开始。 这将记住播放的帧已暂停(如果已暂停)。 现在,在暂停后再次按Play键时,您将检查文件中的数字是否介于0和帧数之间,然后调用。 请注意,在执行此操作之前,您应该知道文件中的帧数。如果没有,

  • ap.pauseBackgroundAudio(CALLBACK) 暂停播放音乐。 代码示例 <script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.inc.min.js"></script> <style>.output{ display:block; max-width: 100%

  • 我正在使用ExoPlayer播放视频的应用程序。出于某种原因,当我试图暂停时,视频播放器没有显示播放/暂停图标。我只为播放/暂停做了一个自定义布局,并将其设置在PlayerView上。使用或播放/暂停视频。到处都找不到解决办法,好像我错过了什么,但又不知道是什么。

  • 在webview iframe和webview上播放的视频设置在回收卡视图上。许多视频都在他们的recyclerview上。 我想在用户开始滚动回收器时暂停播放视频,并在用户播放另一个视频时暂停播放视频。 查看代码 我想用这个: 请帮我解决这个问题。任何帮助都将不胜感激。谢谢!