Getting 'UnsupportedFileException' when playing wav file from URL in Java

此生再无相见时 提交于 2019-12-04 18:42:41

WAV is a container format (like a zip file is a container of many different files) so there is no actual WAV Audio format (LPCM is the most common). In this case your WAV contains a format called "CCITT u-Law" which isn't widely supported (its used for Cisco VoIP phones). I haven't seen a Java Library that can read it, but maybe knowing what to look for will help.

developer

Below link helped me and I am able to play the wav file now.

How to play wav file with format CCITT u-Law

Edit

As per Millimoose comments, I am pasting some of the code from the above link to help others.

I am changing format of the wav file from CCITT U-Law to PCM_SIGNED which is the exact wav format.

URL url = new URL(
                          "https://sssss/xxxxx/playback.php?access=subscriber&login=501%40mix&domain=mix.nms.mixnetworks.net&user=501&type=vmail&file=vm-20130109213243000082_mixnetworks_net.wav&time=20130110170638&auth=c43ff32546e126be9b895bbf225b2e75&submit=PLAY");
                 AudioInputStream fis =
                  AudioSystem.getAudioInputStream(url);
                 System.out.println("File AudioFormat: " + fis.getFormat());
                 AudioInputStream ais = AudioSystem.getAudioInputStream(
                  AudioFormat.Encoding.PCM_SIGNED,fis);
                 AudioFormat af = ais.getFormat();
                 System.out.println("AudioFormat: " + af.toString());

                 int frameRate = (int)af.getFrameRate();
                 System.out.println("Frame Rate: " + frameRate);
                 int frameSize = af.getFrameSize();
                 System.out.println("Frame Size: " + frameSize);

                 SourceDataLine line = AudioSystem.getSourceDataLine(af);
                 line.addLineListener(new MyLineListener());

                 line.open(af);
                 int bufSize = line.getBufferSize();
                 System.out.println("Buffer Size: " + bufSize);

                 line.start();

                 byte[] data = new byte[bufSize];
                 int bytesRead;

                 while ((bytesRead = ais.read(data,0,data.length)) != -1)
                     line.write(data,0,bytesRead);

                 line.drain();
                 line.stop();
                 line.close();
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!