在Java上使用Raspberry Pi播放音频并不起作用

时间:2017-09-19 13:24:56

标签: java audio raspberry-pi raspbian raspberry-pi3

我试图在java上播放r​​pi音频。我正在建立一个聊天机器人,所以这是一个text2speech部分。我试过通过aux,hdmi引导声音,甚至usb也没有改变问题。

对于USB音频,我尝试过:this guide

我有很多问题。有谁知道如何以一致的方式使用rpi播放音频(wav或flac)文件?

系统信息:

  • Raspberry Pi 3型号B +
  • 操作系统版本:最新的Raspbian
  • Java:1.8 / 8

我尝试过的不起作用:

  • 正常的Java方式(在我的机器上运行):

    try {
        final Clip clip = (Clip) AudioSystem.getLine(new Line.Info(Clip.class));
    
        clip.addLineListener(new LineListener() {
            @Override
            public void update(LineEvent event) {
                if (event.getType() == LineEvent.Type.STOP)
                    clip.close();
            }
        });
    
        clip.open(AudioSystem.getAudioInputStream(queue.remove()));
    
        clip.start();
    
    } catch (Exception e) {
        e.printStackTrace();
    }
    

我尝试过的半成品:

  • 启动流程并通过omxplayer或aplay播放

    try {
         process = Runtime.getRuntime().exec("aplay " + file.getAbsolutePath()); // or omxplayer
    
         BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
         while ((reader.readLine()) != null) {}
    
         System.out.println("waiting");
         process.waitFor(120, TimeUnit.SECONDS); // timeout sometimes
         System.out.println("done waiting");
    
         process.destroy();
    } catch (IOException | InterruptedException e) {
         e.printStackTrace();
    }
    

    这可以工作几次,然后突然停止播放,这个过程就会挂起。即使我在PID上执行killall / kill -9,如果我尝试从终端播放,此时也会发生相同的情况。我必须重新启动才能再次播放音频几次。虽然我确实看到process.destroy()并不总是杀死进程?但除此之外,我无法理解为什么这不起作用。

任何人都可以对此有所了解,可能还有如何让它发挥作用?

0 个答案:

没有答案