2015-05-21 3 views
5

Ciao ho questo codice quiRiproduzione audio a Raspberry Pi con 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(); 
     } 
    } 
} 

per riprodurre un suono sul lampone. Ma quando lo eseguo, non produce alcun output.
L'ho provato su entrambi i sistemi Windows e Linux dove funziona.
Il programma tuttavia rileva il file poiché dorme per l'intera durata dell'audio e non mi fornisce alcuna eccezione di runtime.
Inoltre, non può essere l'altoparlante che causa il problema perché posso riprodurre il suono con
aplay test.wav e mi dà un'uscita. Volevo usare la libreria JavaFX ma sembra essere stata rimossa dalla versione java ridotta di resbian.

+0

Hai provato a eseguire questo su Windows? Lo stai rendendo specifico su raspberry-pi, ma sarebbe un'aringa rossa se il codice non funziona da qualche altra parte. – Gimby

+1

Sì, l'ho provato su Windows e Linux e funziona su entrambi. Penso che java abbia qualche tipo di problema a notare l'uscita audio –

+0

Dovresti modificare la tua domanda e aggiungere il fatto che il codice è testato e funziona su Windows e Linux; è un indizio piuttosto importante che potrebbe effettivamente essere specifico per i lamponi. Quando si esegue java -version sul PI, che cosa produce? – Gimby

risposta

2

Questo non ha nulla a che fare con Java o Raspbian ... Controllare la configurazione di RPi sudo raspi-config e assicurarsi che l'uscita audio sia configurata correttamente tra HDMI o Jack Out. Quello dovrebbe fare il trucco ...

+0

Questo è corretto ma cosa succede se abbiamo selezionato una scheda audio USB esterna come dispositivo audio predefinito? Nel mio caso, funziona per registrare l'audio (poiché è l'unico dispositivo di registrazione rilevato dal sistema) ma mentre aplay riproduce l'audio con esso (l'ho configurato in asound.conf) Java si attacca all'audio interno del jack, che è molto peggio qualità come qualsiasi scheda audio USB economica. Eventuali indizi su come rendere JDK utilizzare il dispositivo di uscita audio selezionato? – icordoba

+0

La tua carta ha funzionato bene su Raspbian ?, ad esempio, registrando e giocando direttamente con gli strumenti del sistema? – hyprfrcb

+0

Sì, funziona con qualsiasi comando Alsa. Ad ogni modo, ho risolto il problema dimenticando il microfono USB e l'utilizzo di una semplice scheda audio USB vecchia con uscita audio in ingresso. Funziona alla grande e la qualità della registrazione è molto migliore rispetto alla USB micro, mentre mostra anche nessun problema con la frequenza di 16000. – icordoba