2015-05-21 13 views
5

Hallo habe ich diesen Code hierAudio-Wiedergabe auf Raspberry Pi mit 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(); 
     } 
    } 
} 

einen Ton auf der Himbeere zu spielen. Aber wenn ich es ausführe, produziert es keine Ausgabe.
Ich habe es sowohl auf Windows-und Linux-Systemen getestet, wo es funktioniert.
Das Programm bemerkt jedoch die Datei, da es für die gesamte Dauer des Sounds schläft und mir keine Runtime-Ausnahme gibt.
Es kann auch nicht der Lautsprecher sein, der das Problem verursacht, weil ich den Sound mit
aplay test.wav wiedergeben kann und es gibt mir eine Ausgabe. Ich wollte die JavaFX-Bibliothek verwenden, aber sie scheint auf der heruntergeschnittenen Java-Version von Resbian entfernt zu sein.

+0

Haben Sie versucht, dies auf sagen Windows auszuführen? Du machst es spezifisch über Himbeer-Pi, aber das wäre ein Ablenkungsmanöver, wenn der Code auch nicht woanders funktioniert. – Gimby

+1

Ja, ich habe es auf Windows und Linux versucht und es funktioniert auf beiden. Ich denke, Java hat eine Art Problem, die Audioausgabe zu beachten –

+0

Sie sollten Ihre Frage bearbeiten und die Tatsache hinzufügen, dass der Code getestet und unter Windows und Linux funktioniert; Es ist ein ziemlich wichtiger Hinweis, dass es tatsächlich Himbeer-Pi-spezifisch sein kann. Wenn Sie Java-Version auf dem PI ausführen, was gibt das aus? – Gimby

Antwort

2

Das hat nichts mit Java oder Raspbian zu tun ... Überprüfen Sie die RPi-Konfiguration sudo raspi-config, und stellen Sie sicher, dass Sie Ihren Audioausgang gut zwischen HDMI oder Jack Out konfiguriert haben. Das sollte den Trick machen ...

+0

Das ist richtig, aber was ist, wenn wir eine externe USB-Soundkarte als Standard-Audiogerät ausgewählt haben? In meinem Fall funktioniert es um Audio aufzunehmen (da es das einzige vom System erkannte Aufnahmegerät ist), aber während aplay Audio damit wiedergibt (ich habe es in asound.conf konfiguriert), bleibt Java im internen Klinken-Audio, was viel schlimmer ist Qualität wie jede billige USB-Audiokarte. Irgendwelche Hinweise, wie JDK das ausgewählte Audio-Ausgabegerät nutzen kann? – icordoba

+0

Hat Ihre Karte auf Raspbian funktioniert? Zum Beispiel, indem Sie direkt mit den Tools des Systems aufnehmen und spielen? – hyprfrcb

+0

Ja, es funktioniert mit allen Alsa-Befehlen. Wie auch immer, ich habe es gelöst, vergesssen über USB-Mikrofon und eine einfache alte USB-Soundkarte mit Audio-Eingang verwenden. Funktioniert gut und die Aufnahmequalität ist viel besser als USB Micro, während auch 16000 Rate kein Problem zeigt. – icordoba