2016-01-23 22 views
5

Ses dosyasını kodda sağlanan URL'den almak ve oynatmak istiyorum (mp3 biçimindedir). Bu soruna ilişkin bazı Stack Overflow sorularını inceledim ve hepsinin mp3plugin.jar'u almasını sağladım.Giriş akışından ses giriş akışı alınamadı

Eclipse'de, Yapılandırma Yapılandırma Yapılandırması altından harici bir kavanoz olarak (Yüklemelerim klasörünün içinde yer aldığından emin olmamak üzere, bunun için en iyi yer olduğundan emin değilim) ekledim. Tekrar koştum ve hala bana bu hatayı veriyor:

İşte

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)

kodudur:

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

Hiç ne okuduğunuzu kontrol ettiniz mi var? Bir html hata sayfasını bir MP3 olarak ele alıyor olabilirsiniz. – Marged

+0

Bu URL'yi Chrome'uma girdiğimde, ağ sekmesinde 2 satır gördüm. Gerçek akışı – Gavriel

+0

vermek için biraz daha fazla başlık gerekebilir. Bunun medya bölümünü nasıl alabilirim? (Belge ve medya diyor). JSoup'un java'da bazı html işlemleriyle başa çıkabileceğini duydum. –

cevap

0

Sen http://www.javazoom.net/mp3spi/docs/doc1.9.4/javazoom/spi/mpeg/sampled/file/MpegAudioFileReader.html

indirme kavanoz almak gerekir.

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

muhtemelen sadece mp3spi1.9.4.jar ihtiyaç olarak benim sınıf yolunu var - bunlardan bazıları diğer biçimlere içindir ama o kadar hepsini kapsar emin değilim.

Daha sonra aşağıdaki programı

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); } 
}