Failed to get input audio stream from input stream

I want to get the sound file at the URL specified in the code and play it (it is in mp3 format). I looked through some questions related to this problem and they all said to get mp3plugin.jar so that I do it.

In Eclipse, I added it as an external jar (since it is inside the "My Files" folder, I'm not sure if this is the best place for it) in the "Configure the build path" section. I ran it again and still gave me this error:

javax.sound.sampled.UnsupportedAudioFileException: Failed to get input audio stream from input stream
in javax.sound.sampled.AudioSystem.getAudioInputStream (Unknown source)
at Starter.main (Starter.java21)

Here is the code:

 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) { } } } } } 
+5
source share
1 answer

You need to get http://www.javazoom.net/mp3spi/docs/doc1.9.4/javazoom/spi/mpeg/sampled/file/MpegAudioFileReader.html

load the jars. I have a classpath like

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

you probably only need mp3spi1.9.4.jar - some of them are for other formats, but I'm not sure, so I included all of them.

Then run the following 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); } } 
0
source

Source: https://habr.com/ru/post/1241335/


All Articles