2015-05-21 105 views
5

嗨,我这里有这个代码播放音频上树莓派与Java

import java.io.File; 
import java.io.IOException; 

import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
import javax.sound.sampled.LineUnavailableException; 
import javax.sound.sampled.UnsupportedAudioFileException; 

public class Playmusic implements Runnable { 
    public static void main(String[] args){ 
     Thread t = new Thread(new Playmusic()); 
     t.start(); 
    } 

    @Override 
    public void run() { 
     AudioInputStream audioIn; 
     try { 
      audioIn = AudioSystem.getAudioInputStream(new File("test.wav")); 
      Clip clip; 
      clip = AudioSystem.getClip(); 
      clip.open(audioIn); 
      clip.start(); 
      Thread.sleep(clip.getMicrosecondLength()/1000); 
     } catch (UnsupportedAudioFileException | IOException | LineUnavailableException | InterruptedException e1) { 
      e1.printStackTrace(); 
     } 
    } 
} 

播放声音的树莓。但是当我运行它时,它不会产生任何输出。
我已经在Windows和Linux系统上测试过它。
该程序确实会注意到该文件,因为它会在整个声音期间休眠,并且不会给我任何运行时异常。
它也不能是导致问题的扬声器,因为我可以用
aplay test.wav播放声音,它给了我一个输出。我想使用JavaFX库,但它似乎被删除的java版本的resbian删除。

+0

你试过在Windows上运行这个吗?你正在制作关于树莓派的具体内容,但如果代码在其他地方无法使用,那将会是一个红鲱鱼。 – Gimby

+1

是的,我已经在Windows和Linux上尝试过它,它在两者上都能正常工作。我认为java有注意音频输出的某种问题 –

+0

您应该编辑您的问题并添加代码已经过测试并在Windows和Linux上运行的事实;它是一个非常重要的线索,它确实可能是树莓特定的。当您在PI上运行java -version时,该输出是什么? – Gimby

回答

2

这与Java或Raspbian无关......检查RPi配置sudo raspi-config,并确保您的音频输出在HDMI或Jack Out之间配置良好。这应该是诀窍...

+0

这是正确的,但如果我们选择外部USB声卡作为默认音频设备呢?在我的情况下,它可以记录音频(因为它是系统检测到的唯一记录设备),但是当aplay用它重现音频时(我在asound.conf中配置了它)Java坚持使用内部插孔音频,这更糟糕作为任何便宜的USB音频卡的质量。有关如何使JDK使用所选音频输出设备的任何线索? – icordoba

+0

您的卡在Raspbian上工作正常吗?例如,通过录制和直接播放系统工具? – hyprfrcb

+0

是的,它适用于任何Alsa命令。无论如何,我已经解决了它忘记了uSB麦克风,并使用一个简单的老式USB声卡与音频输入输出。工作很好,录音质量比USB micro好很多,而16000的速率也没有问题。 – icordoba