Domanda:
Come posso far funzionare Java Sound?
nanoman
2012-07-29 22:12:08 UTC
view on stackexchange narkive permalink

Ho un lettore MP3 basato su Java basato sul framework JLayer / BasicPlayer che vorrei che funzionasse sul Pi. Ho installato OpenJDK sul Raspbian più recente. Il BasicPlayer apre la riga correttamente, ma ottiene solo un rumore di balbuzie durante la riproduzione di un file.

La riproduzione del suono utilizzando lo strumento della riga di comando mpg123 funziona bene.

C'è qualcosa di sbagliato con Implementazione Java Sound di ARM OpenJDK?

Sono grato per qualsiasi suggerimento nella giusta direzione.

Questo è il codice:

  BasicPlayer pl = new BasicPlayer (); prova {String path = "/home/pi/Music/testmp3.mp3"; File file = nuovo file (percorso); pl.open (file); pl.play ();} catch (Exception e) {CubeLog.logException (e);}  

Grazie.

Immagino che questo significhi che la decodifica di "mp3" avverrà nel software. Dubito seriamente che il Pi sarebbe abbastanza in grado di farlo.
una possibile ragione potrebbe essere la confusione bigendian / littleendian nel decoder.
Thorbjørn: Interessante, si tradurrà in un rumore balbettante e distorto?
Quattro risposte:
#1
+5
gfelisberto
2012-07-31 01:14:11 UTC
view on stackexchange narkive permalink

Non ho abbastanza punteggio per inserire commenti. Quindi pubblicherò qui:

1- "CPU insufficiente" - Ero solito eseguire la decodifica mp3 dal software in una Sparc Station con una CPU a 35 MHz. Quindi, a meno che quel decodificatore non sia seriamente difettoso, dovrebbe funzionare.

Puoi eseguire la decodifica completa in un file? In caso affermativo, misurare il tempo necessario. Se è inferiore alla durata totale della canzone sei in affari. Successivamente copia il file undecode su un'altra macchina e vedi se il wav è ok.

[EDIT]:

Ho fatto alcuni test con JLayer1.0.1 sul mio RPI ed è lento:

time java -cacao -classpath jl1.0.1.jar javazoom.jl.converter.jlc file.mp3 -p out.wav

Richiede 3 volte di più per decodificare rispetto al runtime di la canzone.

[EDIT 2]:

Riuscito a decodificare un mp3 in meno tempo rispetto al runtime utilizzando Java SE Embedded 6 http://www.oracle.com /technetwork/java/embedded/downloads/javase/index.html:

pi @ raspbmc: ~ / java / JLayer1.0.1 $ rm out.wav; time ../ejre1.7.0_04/bin/java -classpath jl1.0.1.jar javazoom.jl.converter.jlc Gill \ Scott-Heron- \ The \ Revolution \ Will \ Not \ Be \ Televised.mp3 -p out. wavFileName = Gill Scott-Heron- La rivoluzione non verrà trasmessa in televisione.mp3

real 0m57.624suser 0m49.900ssys 0m2.320s

Su un wav di 3 minuti.

Il problema è che non funziona su raspbian:

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=66&t=11671

Grazie per la spiegazione: quale distribuzione stai utilizzando?
Questi test sono stati eseguiti con raspbmc rc3. Ma nessun xbmc o X era in esecuzione.
#2
+4
Jivings
2012-07-30 02:41:26 UTC
view on stackexchange narkive permalink

Ecco il tuo problema:

di MartenR »giovedì 5 luglio 2012 11:09

Il suono viene sempre eseguito sui codec cpufor diversi dai codec gratuiti, nessuna licenza acquistata per la codifica del suono per audio mpeg o ac3.

Il Raspberry Pi semplicemente non è abbastanza potente per decodificare l'mp3 in tempo reale tempo nel software durante l'esecuzione sulla JVM.

Puoi provare alcune cose per farlo funzionare:

  • Aumenta la memoria disponibile per la CPU

  • Prova a far funzionare un giocatore che non è limitato dalla JVM (anche se non ho idea se questo produrrà miglioramenti ...)

      Runtime.getRuntime (). exec ("omxplayer [filename]");  
Ciò non dovrebbe fornire frammenti statici ma ripetitivi.
@ThorbjørnRavnAndersen: È pertinente per la mia risposta? Tranne la parte Java?
Ebbene, sì, se il sintomo indica qualcos'altro.
@ThorbjørnRavnAndersen: Non capisco cosa intendi. Puoi spiegare?
La statica si verifica quando i byte sbagliati vengono inviati al circuito audio. Se il software è lento, vengono inviati i byte _right_, ma non abbastanza velocemente in modo che i buffer utilizzati contengano dati non aggiornati, causando il loop del suono nel buffer. Almeno è così che ho visto quel sintomo su altri sistemi.
@ThorbjørnRavnAndersen: Ah, capisco. nanoman afferma che l'audio "balbetta". Forse se gli chiediamo di elaborare, allora aiuterà con la diagnosi.
@Jivings: L'audio è appena riconoscibile, suona come un rumore distorto e con più pause al secondo.
#3
+2
Damjan Jovanovic
2012-08-04 16:03:11 UTC
view on stackexchange narkive permalink

Se qualsiasi applicazione può riprodurre il suono senza problemi utilizzando la CPU, allora tutte le applicazioni dovrebbero essere in grado di riprodurlo senza problemi.

OpenJDK 6 ha problemi con ALSA (non riproduce il dispositivo "predefinito" per esempio), quindi usa invece OpenJDK 7. Inoltre, entrambe le versioni di OpenJDK utilizzano l'interprete Zero, che è molto lento. Dovresti usare una JVM che sia JIT, come CACAO su una distribuzione soft-float, o Avian JVM su una distribuzione hard-float (come Raspbian).

Ma qualcosa può riprodurre senza problemi gli mp3? Nessuna delle mie applicazioni può
#4
  0
nanoman
2012-08-16 23:06:48 UTC
view on stackexchange narkive permalink

Grandi notizie: ce l'ho in esecuzione!

Ho installato la nuova immagine softfloat Debian wheezy, quindi ho installato il JDK 7 Update 6 a appena rilasciato > su di esso e funziona perfettamente. Assicurati solo di installare questo JDK su una distribuzione basata su softfloat.

Il consumo di CPU durante la riproduzione di un MP3 è costantemente di circa il 45%.

Quindi era un problema di JVM.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...