2016-01-23 11 views
5

Desidero ottenere il file audio dall'URL fornito nel codice e riprodurlo (È nel formato mp3). Ho esaminato alcune domande di Stack Overflow relative a questo problema, e tutte hanno detto di prendere mp3plugin.jar così ho fatto.Impossibile ottenere il flusso di input audio dal flusso di input

In Eclipse, l'ho aggiunto come un jar esterno (poiché si trova all'interno della cartella Download, non è sicuro che sia il posto migliore) in Configure Build Path. Mi sono imbattuto di nuovo ed è ancora mi dà questo errore:

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at Starter.main(Starter.java:21)

Ecco il codice:

public class Starter { 

    public static void main(String[] args) { 
     AudioInputStream din = null; 
     try { 
      URL url = new URL("http://c5.rbxcdn.com/2e6d33a5b3b1d8f250c395816ff9f145"); 
      HttpURLConnection httpcon = (HttpURLConnection) url.openConnection(); 
      InputStream bufferedIn = new BufferedInputStream(httpcon.getInputStream()); 
      AudioInputStream in = AudioSystem.getAudioInputStream(bufferedIn); 
      AudioFormat baseFormat = in.getFormat(); 
      AudioFormat decodedFormat = new AudioFormat(
        AudioFormat.Encoding.PCM_SIGNED, 
        baseFormat.getSampleRate(), 16, baseFormat.getChannels(), 
        baseFormat.getChannels() * 2, baseFormat.getSampleRate(), 
        false); 
      din = AudioSystem.getAudioInputStream(decodedFormat, in); 
      DataLine.Info info = new DataLine.Info(SourceDataLine.class, decodedFormat); 
      SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info); 
      if(line != null) { 
       line.open(decodedFormat); 
       byte[] data = new byte[4096]; 
       // Start 
       line.start(); 

       int nBytesRead; 
       while ((nBytesRead = din.read(data, 0, data.length)) != -1) { 
        line.write(data, 0, nBytesRead); 
       } 
       // Stop 
       line.drain(); 
       line.stop(); 
       line.close(); 
       din.close(); 
      } 

     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
     finally { 
      if(din != null) { 
       try { din.close(); } catch(IOException e) { } 
      } 
     } 
    } 
} 
+1

Avete mai controllato quello che stai leggendo? Si potrebbe trattare una pagina di errore html come MP3. – Marged

+0

Quando ho inserito l'URL sul mio Chrome, ho visto 2 righe nella scheda di rete. Potrebbe essere necessario un numero maggiore di intestazioni per fornire il flusso effettivo – Gavriel

+0

Come faccio a ottenere il supporto multimediale di questo? (Dice documento e media). Ho sentito che jSoup può aiutarti a gestire alcuni comandi HTML in java. –

risposta

0

è necessario per ottenere http://www.javazoom.net/mp3spi/docs/doc1.9.4/javazoom/spi/mpeg/sampled/file/MpegAudioFileReader.html

scaricare i vasi. Ho il mio percorso di classe come

.;C:\Vision\Audio\libs\vorbisspi1.0.3.jar;C:\Vision\Audio\libs\tritonus_share.jar;C:\Vision\Audio\libs\tritonus_remaining-0.3.6.jar;C:\Vision\Audio\libs\jorbis-0.0.15.jar;C:\Vision\Audio\libs\jogg-0.0.7.jar;C:\Vision\Audio\libs\jl1.0.jar;C:\Vision\Audio\libs\mp3spi1.9.4.jar; 

probabilmente solo bisogno mp3spi1.9.4.jar - alcuni di questi sono per altri formati, ma non sono sicuro così li includo.

quindi avere la seguente programma

public AudioInputStream readMP3URL(String f) { 
AudioInputStream audioInputStream=null; 
AudioFormat targetFormat=null; 
try { 
    AudioInputStream in=null; 
    MpegAudioFileReader mp=new MpegAudioFileReader(); 
    in=mp.getAudioInputStream(new URL(f)); 
    AudioFormat baseFormat=in.getFormat(); 
targetFormat=new AudioFormat(
      AudioFormat.Encoding.PCM_SIGNED, 
      baseFormat.getSampleRate(), 
      16, 
      baseFormat.getChannels(), 
      baseFormat.getChannels() * 2, 
      baseFormat.getSampleRate(), 
      false); 
     audioInputStream=AudioSystem.getAudioInputStream(targetFormat, in); 
} 
catch(Exception ue) { System.out.println("\nUnsupported Audio"); } 
return audioInputStream; 
} 

public void readURL() { 
    int i, j, k=0, l, basicU=1024; 
    AudioFormat targetFormat=null; 
audioInputStream=readMP3URL("http://c5.rbxcdn.com/2e6d33a5b3b1d8f250c395816ff9f145"); 
    if(audioInputStream==null) System.out.println("null audiostream"); 
targetFormat=audioInputStream.getFormat(); 
byte[] data=new byte[basicU]; 
DataLine.Info dinfo=new DataLine.Info(SourceDataLine.class, targetFormat); 
SourceDataLine line=null; 
    try { 
    line=(SourceDataLine)AudioSystem.getLine(dinfo); 
    if(line!=null) { 
    line.open(targetFormat); 
    line.start(); 
     while((k=audioInputStream.read(data, 0, data.length))!=-1) { 
     line.write(data, 0, k); 
    } 
    line.stop(); 
    line.close(); 
    } 
} 
catch(Exception ex) { ex.printStackTrace(); System.out.println("audio problem "+ex); } 
}