使用 JLayer 停止/静音播放音乐

发布于 2024-10-22 00:10:10 字数 1436 浏览 6 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

墨落成白 2024-10-29 00:10:10

您可以挂起其线程以实现简单的暂停功能。

You could suspend its thread for a simple pause function.

2024-10-29 00:10:10

只需在线程中一次播放一帧,如果设置了“暂停”标志,则暂停线程...

如果按下 Enter 键(在控制台中)并“退出”,下面的代码将暂停/恢复播放器线程终止应用程序。

            final AtomicBoolean pause = new AtomicBoolean(false);

        final Player player = new Player(bis);
        Thread playerThread = new Thread() {
            @Override
            public void run() {
                try {
                    while (player.play(1)) {
                        if(pause.get()) {
                            LockSupport.park();
                        }
                    }
                }
                catch (Exception e) {
                    System.err.printf("%s\n", e.getMessage());
                }
            }
        };

        playerThread.start();

        Scanner scanner = new Scanner(System.in);
        String s = null;
        while (!(s = scanner.nextLine()).equals("exit")) {
            if (s.isEmpty()) {
                pause.set(!pause.get());
                if (!pause.get()) {
                    LockSupport.unpark(playerThread);
                }
            }
        }
        System.exit(0);

Just play one frame at a time in the thread, if the "pause" flag is set, then pause the thread...

The code below pauses/resumes the player thread if enter key is pressed (in console) and "exit" to terminate the application.

            final AtomicBoolean pause = new AtomicBoolean(false);

        final Player player = new Player(bis);
        Thread playerThread = new Thread() {
            @Override
            public void run() {
                try {
                    while (player.play(1)) {
                        if(pause.get()) {
                            LockSupport.park();
                        }
                    }
                }
                catch (Exception e) {
                    System.err.printf("%s\n", e.getMessage());
                }
            }
        };

        playerThread.start();

        Scanner scanner = new Scanner(System.in);
        String s = null;
        while (!(s = scanner.nextLine()).equals("exit")) {
            if (s.isEmpty()) {
                pause.set(!pause.get());
                if (!pause.get()) {
                    LockSupport.unpark(playerThread);
                }
            }
        }
        System.exit(0);
疧_╮線 2024-10-29 00:10:10

我从 fileInputStream 获取 mp3。当我想暂停时,我会这样做(fis是文件输入流)fis.available()(或类似的东西)。这给出了流中剩余的字节数...如果您在开始之前执行此操作,您将获得总长度。所以总剩余量 - 当前剩余量 = 当前位置。然后我只是创建一个新的输入流并执行 fis.skip(themount);恢复..很棒的方法,但是它有效..

I get my mp3's from a fileInputStream. When I want to pause, I do (fis is the fileinputstream) fis.available() (or something similar). This gives how many bytes left in the stream... If you do this before it starts, you get the total length. So total left - amount currently left = Current position. Then i just create a new inputstream and do fis.skip(theamount); to resume.. Aweful method but yeah it works..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文