2016-01-23 2 views
5

Я хочу получить звуковой файл по URL-адресу, указанному в коде, и воспроизвести его (он находится в формате mp3). Я просмотрел некоторые вопросы о переполнении стека, связанные с этой проблемой, и все сказали, что получили mp3plugin.jar, поэтому я это сделал.Не удалось получить поток аудиовхода из потока ввода

В Eclipse я добавил его как внешнюю банку (поскольку он находится внутри папки «Мои загрузки», не уверен, что это лучшее место для него) в разделе «Настроить путь сборки». Я запустил его снова и она по-прежнему дает мне эту ошибку:

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)

Вот код:

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

Вы когда-нибудь проверил, что вы читаете? Возможно, вы рассматриваете страницу html error как MP3. – Marged

+0

Когда я ввел этот url в свой Chrome, я увидел 2 строки на вкладке сети. Может понадобиться еще несколько заголовков, чтобы дать вам фактический поток. – Gavriel

+0

. Как я могу получить медиа-часть этого? (В нем говорится документ и средства массовой информации). Я слышал, что jSoup может помочь справиться с обработкой html в java. –

ответ

0

Вы должны получить http://www.javazoom.net/mp3spi/docs/doc1.9.4/javazoom/spi/mpeg/sampled/file/MpegAudioFileReader.html

скачать банки. У меня есть путь к классам

.;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; 

вы, вероятно, нужно только mp3spi1.9.4.jar - некоторые из них для других форматов, но я не уверен, так что я включить их всех.

Тогда имеют следующую программу

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); } 
} 
Смежные вопросы