当前位置: 首页 > 面试题库 >

播放AudioInputStream时出错

田意致
2023-03-14
问题内容

我想创建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);
            }
        });
    }
}


 类似资料:
  • 我试图在电池完全充电时播放铃声。为了实现这一点,我提供了服务。当我第一次执行我的代码时,它工作了,第二次没有,我在日志中不断地得到这些错误。 根据logcat,错误在

  • 安装Flutter包时遇到错误= 我使用的是颤振4.2.2; 错误: kotlin. Unit类使用不兼容的静态编程语言版本编译。其元数据的二进制版本为1.5.1,预期版本为1.1.15。 在连续3天试图找到解决方案后,我现在遇到了这个错误。 错误2: Android Studio在运行Gradle时使用以下JDK位置://C:\Program Files\Android\Android Stud

  • 但是,我得到以下错误: 现在我注意到它在/home/graffixnyc/android-studio/gradle/m2repository/com/google/gms/play-services/11.0.4/play-services-11.0.4.pom中查找 但是,我的位置是:/home/graffixnyc/android-sdk/extras/google/m2repository

  • 硬件和软件:Raspberry PI4,IP camera,Raspbian Buster,Gstreamer 1.14.1(来自存储库)。覆盆子和摄像机都在本地网络上。 null 其他信息: > 我的相机在图像上方显示时间(时、分、秒)。回放总是在秒的某个值停止。相机重启时,这个数值随机变化--17、32、55……改变相机中的时间并不能解决问题。 Raspberry上的VLC播放器从该相机播放流

  • null null 在我的设备上,它显示了缩略图,但当我按播放时,它显示“发生错误,请稍后再试”。 使用Xcode7和iOS9的Im。

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