播放 AudioInputStream 时出错

2023-12-05

我想创建2个JMenuItem可以启动和停止背景音频。

这是我的代码:

public class MainClass extends JFrame
{
    private AudioInputStream audioInputStream;
    private Clip clip;

    public MainClass(String title)
    {
        try
        {
            audioInputStream = AudioSystem.getAudioInputStream(new File("Background.wav"));
            clip = AudioSystem.getClip();
            clip.loop(Clip.LOOP_CONTINUOUSLY);
            clip.open(audioInputStream);
        }
        catch(Exception e)
        {
            System.out.println("Error with playing sound.");
            e.printStackTrace();
        }
    }
    public void startSound()
    {   
        clip3.start();
        settingSubMenuItem1.setEnabled(false);
        settingSubMenuItem2.setEnabled(true);
    }

    public void stopSound()
    {
        clip3.stop();
        settingSubMenuItem1.setEnabled(true);
        settingSubMenuItem2.setEnabled(false);
    }

    private class MenuItemListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if(e.getSource() == settingSubMenuItem1)
            {
                startSound();
            }
            if(e.getSource() == settingSubMenuItem2)
            {
                stopSound();        
            }
        }
    }
}

当我点击settingSubMenuItem1,工作正常,可以播放音频。

但是当我点击settingSubMenuItem2,有错误,如果再次点击settingSubMenuItem1,就不会再有声音了。

这是错误:

Error with playing sound.
java.lang.IllegalStateException: Clip is already open with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian and frame lengh of 7658

我的程序有什么错误?


此 SSCCE 在这里是“空结果”,因为音频重新启动(至少尝试了 3 次),没有例外。

import java.net.URL;
import java.awt.event.*;
import javax.swing.*;
import javax.sound.sampled.*;

public class RestartableLoopSound {

    public static void main(String[] args) throws Exception {
        URL url = new URL(
            "http://pscode.org/media/leftright.wav");
        final Clip clip = AudioSystem.getClip();
        AudioInputStream ais = AudioSystem.
            getAudioInputStream( url );
        clip.open(ais);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                final JToggleButton b = new JToggleButton("Loop");
                ActionListener listener = new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        if (b.isSelected()) {
                            // loop continuously
                            clip.loop(Clip.LOOP_CONTINUOUSLY);
                        } else {
                            clip.stop();
                        }
                    }
                };
                b.addActionListener(listener);
                JOptionPane.showMessageDialog(null, b);
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

播放 AudioInputStream 时出错 的相关文章

随机推荐

  • 带有深思熟虑的冠层的 scipy

    我正在评估 Enthought 包 我安装了32位canopy 从下载https www enthought com downloads 在Ubuntu中 sudo bash canopy 1 0 1 rh5 32 sh 经过测试我没有看到
  • Symfony 在预持久上将数据添加到对象

    我有一个用于创建文档的表格 一方面 我可以添加名称和描述 在旁边我可以选择一个或多个机构创建的文档属于谁 每个机构被分配一个specific市场 一共有7个市场 所以一个市场可以有多个代理机构 但一个代理机构只能属于一个市场 我想要实现的是
  • 如何使用c++运行批处理文件?

    如何使用c 运行批处理文件 我对此一无所知 请参阅 system 函数 http www cplusplus com reference clibrary cstdlib system
  • 将函数保留在头文件中还是源文件中更好

    是将函数保留在头文件中并将它们包含到主源文件中更好 还是将函数保留在源文件中并将它们链接到主源文件中更好 一些库将函数保存在单独的源文件中 这些源文件在特殊的头文件中声明 当您将该头文件包含在主源文件中时 您就链接了所有这些函数 但是 它为
  • ActionBarSherlock 不支持浅色主题警报对话框?

    正如标题所说 我正在使用 actionBarSherlock 库和浅色主题 有时我需要使用alertDialog Builder 类显示一个对话框 问题是 无论我尝试什么 主题都不适用于对话框本身 该主题应该适用于新 API 和旧 API
  • 如何在 Ubuntu 14.04 x64 上安装 Theano 并配置它以使用 GPU?

    我尝试按照以下说明进行操作在当前 Ubuntu 上轻松安装优化的 Theano但它不起作用 每当我使用 GPU 运行 Theano 脚本时 它都会给我错误消息 CUDA已安装 但设备gpu不可用 错误 无法获取可用gpu的数量 未检测到支持
  • 干净的 C++ 粒度朋友等效吗? (答案:律师-委托人习语)

    为什么C 有public任何人都可以呼叫的成员以及friend暴露的声明all private会员到given外部类或方法 但不提供向给定调用者公开特定成员的语法 我想用一些例程来表达接口 这些例程只能由已知的调用者调用 而不必授予这些调用
  • Facebook 应用“通过 {APP_NAME}”重定向到现有页面

    我在 Facebook 上创建了一个应用程序 多亏了这个应用程序 用户可以在他们的墙上发布 一切正常 但我想指定一个当用户点击出版物上的 通过 APP NAME 链接时重定向到的网址 目前 它正在重定向到https www facebook
  • 如何在java中发出curl请求

    这是我的卷曲请求 curl X POST header Content Type application x www form urlencoded header Accept application json header apikey
  • C# 播放多个wav文件

    我有一个应用程序 当按下或单击某个键或按钮时 我需要播放 wav 文件 我使用 SoundPlayer 类 但是当我尝试同时播放另一个 wav 文件时 正在播放的文件会停止 有没有办法同时播放多个wav文件 如果是这样 您能给我示例或教程吗
  • pg-promise 将整数作为字符串返回

    我对包含类型列的表进行了这个简单的查询bigint 然而当我查询它时 pg 承诺以字符串形式返回该列的值 我在文档中找不到相关信息 这是标准行为吗 var ids 180 120 db any SELECT id brand brand f
  • 什么是 WinTypes、WinProcs 和 SW_NORMAL?

    在下面的程序中 哪里是WinTypes WinProcs目的是什么SW NORMAL program ex uses Wincrt WinTypes WinProcs var ch string procedure exe che stri
  • HttpModule 更改响应

    调用 Web 服务时 我需要在调用某些操作时更改响应文本 因此我创建了 HttpModule 来捕获响应并更改它 代码如下 public class BeginEnd IHttpModule public void Init HttpApp
  • 片段开始两次

    我有这个应用程序 其中使用片段 但不知何故 每次启动应用程序时 每个活动 片段 都会启动两次 我正在为此绞尽脑汁 但找不到答案 有人能帮我吗 这是我的主要 FragmentActivity public class TestSearch e
  • 从字符串解析到日期

    我在这里有点迷失 我想我做的一切都很好 但它仍然不起作用 PaseException String time Fri Apr 15 14 29 57 IDT 2011 SimpleDateFormat sdf new SimpleDateF
  • 使用 scala 的运行时反射查找对象

    Context 我目前使用 scala 2 11 6 将来可能使用 2 11 7 鉴于类路径中已编译的类文件 我想做两件事 查找实现特定接口的任何对象的名称 trait Service trait ServiceFactory def cr
  • 创建包含 .Net Framework 3.5 SP1 的安装项目

    我正在创建一个安装项目 客户希望拥有已包含 Net Framework 3 5 SP1 的 setup exe 文件 但是 当我右键单击 设置项目 特性 在 属性页面 上有一个名为 Prerequistes 的按钮 在那里你有 3 个选择
  • ']' aria-label='NoReverseMatch:未找到参数“(1,)”的“完整”反转。尝试了 1 个模式:['complete/']'> NoReverseMatch:未找到参数“(1,)”的“完整”反转。尝试了 1 个模式:['complete/']

    urls py from django conf urls import url from import views urlpatterns url views index name index url add views addTodo
  • 回调函数中的变量出现 PHP 错误 [重复]

    这个问题在这里已经有答案了 我在 php laravel 中有这个函数 public static function isUserParticipatesInTournament tourId userId var dump userId
  • 播放 AudioInputStream 时出错

    我想创建2个JMenuItem可以启动和停止背景音频 这是我的代码 public class MainClass extends JFrame private AudioInputStream audioInputStream privat