有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Ubuntu20.04 java上的音频不播放:LineUnavailableException为每个可能的混音器引发

我正试图在Ubuntu 20.04中播放一些WAV文件中的音频。我编写了捕获LineUnavailableException的代码,并尝试了每一个混音器。即使是混音器。isLineSupported()对于所有选定的混音器都为true,每次调用clip时都会抛出异常。开放式(ais)

我没有其他音频播放,并且关闭了浏览器和除Eclipse之外的所有进程

当我导出jar并在Windows上运行时(我有一台双启动笔记本电脑),它第一次工作, 所以java。声音在Windows和我的硬件上工作

在Linux上,输出是系统。出来println,多次(每个混频器尝试一个异常): “LUE已捕获:尝试的线路不可用”

最后一句话是:“找不到线”

我的java版本是: openjdk版本“1.8.0_265” OpenJDK运行时环境(构建1.8.0_265-8u265-b01-0ubuntu2~20.04-b01) OpenJDK 64位服务器虚拟机(构建25.265-b01,混合模式)

java真的有什么不好的地方吗。Ubuntu 20.04上的声音?。我的硬件:

$lspci 00:1楼。3音频设备:英特尔公司Sunrise Point LP高清音频(第21版)

$aplay-l PCH[HDA英特尔PCH],设备0:ALC3227模拟[ALC3227模拟]

class AudioPlay2 implements LineListener 
{
        File soundFile;
        JDialog playingDialog;
        Clip clip;

        public static void main(String[] args)
        {
            AudioPlay2 s = new AudioPlay2();
        }

        public AudioPlay2()
        {
            JFileChooser chooser = new JFileChooser();
            chooser.showOpenDialog(null);
            soundFile = chooser.getSelectedFile();
            System.out.println("Playing " + soundFile.getName());       
            Line.Info lineInfo = new Line.Info(Clip.class);
            boolean foundLine = false;
            
            for (Mixer.Info mixerInfo : AudioSystem.getMixerInfo()) 
            {
                try
                {
                    Mixer mixer = AudioSystem.getMixer(mixerInfo);
                    if (mixer.isLineSupported(lineInfo)) 
                    {
                        Line line = AudioSystem.getLine(lineInfo);
                        clip = (Clip) line;
                        clip.addLineListener(this);
                        AudioInputStream ais = AudioSystem.getAudioInputStream(soundFile);
                        clip.open(ais);
                        foundLine = true;
                        break;
                    }
                }
                catch (LineUnavailableException lue)
                {
                    System.out.println("LUE caught: Line tried was unavailable");
                    clip.removeLineListener(this);
                }
                catch(UnsupportedAudioFileException | IOException e)
                {
                    System.out.println("Execption was " + e.getMessage());
                    clip.removeLineListener(this);
                }
            }       
                    
            
            if (foundLine)
            {
                clip.start();
            }
            else
            {
                System.err.println("No Line Found");
            }
        }

        public void update(LineEvent le) {
            LineEvent.Type type = le.getType();
            if (type == LineEvent.Type.OPEN) {
                System.out.println("OPEN");
            } else if (type == LineEvent.Type.CLOSE) {
                System.out.println("CLOSE");
                System.exit(0);
            } else if (type == LineEvent.Type.START) {
                System.out.println("START");
                playingDialog.setVisible(true);
            } else if (type == LineEvent.Type.STOP) {
                System.out.println("STOP");
                playingDialog.setVisible(false);
                clip.close();
            }
        }
    }

共 (0) 个答案