mp3到java中的wav转换

我将mp3转换为wav的代码是:

package audio1; import java.io.File; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; public class NewClass { public static void main(String [] args){ try{ AudioFileFormat inputFileFormat = AudioSystem.getAudioFileFormat(new File("c:\\1.mp3")); AudioInputStream ais = AudioSystem.getAudioInputStream(new File("c:\\1.mp3")); AudioFormat audioFormat = ais.getFormat(); System.out.println("File Format Type: "+inputFileFormat.getType()); System.out.println("File Format String: "+inputFileFormat.toString()); System.out.println("File lenght: "+inputFileFormat.getByteLength()); System.out.println("Frame length: "+inputFileFormat.getFrameLength()); System.out.println("Channels: "+audioFormat.getChannels()); System.out.println("Encoding: "+audioFormat.getEncoding()); System.out.println("Frame Rate: "+audioFormat.getFrameRate()); System.out.println("Frame Size: "+audioFormat.getFrameSize()); System.out.println("Sample Rate: "+audioFormat.getSampleRate()); System.out.println("Sample size (bits): "+audioFormat.getSampleSizeInBits()); System.out.println("Big endian: "+audioFormat.isBigEndian()); System.out.println("Audio Format String: "+audioFormat.toString()); AudioInputStream encodedASI = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, ais); try{ int i = AudioSystem.write(encodedASI, AudioFileFormat.Type.WAVE, new File("c:\\converted.wav")); System.out.println("Bytes Written: "+i); }catch(Exception e){ e.printStackTrace(); } }catch(Exception e){ e.printStackTrace(); } } } 

但我得到以下输出:

 File Format Type: MP3 File Format String: MP3 (.mp3) file, byte length: 9631340, data format: MPEG1L3 48000.0 Hz, unknown bits per sample, stereo, unknown frame size, 41.666668 frames/second, , frame length: 10030 File lenght: 9631340 Frame length: 10030 Channels: 2 Encoding: MPEG1L3 Frame Rate: 41.666668 Frame Size: -1 Sample Rate: 48000.0 Sample size (bits): -1 Big endian: true Audio Format String: MPEG1L3 48000.0 Hz, unknown bits per sample, stereo, unknown frame size, 41.666668 frames/second, java.lang.ArrayIndexOutOfBoundsException: 1 at org.tritonus.sampled.convert.javalayer.MpegFormatConversionProvider$DecodedMpegAudioInputStream$DMAISObuffer.append(MpegFormatConversionProvider.java:386) at javazoom.jl.decoder.Obuffer.appendSamples(Unknown Source) at javazoom.jl.decoder.SynthesisFilter.compute_pcm_samples(Unknown Source) at javazoom.jl.decoder.SynthesisFilter.calculate_pcm_samples(Unknown Source) at javazoom.jl.decoder.LayerIIIDecoder.decode(Unknown Source) at javazoom.jl.decoder.LayerIIIDecoder.decodeFrame(Unknown Source) at javazoom.jl.decoder.Decoder.decodeFrame(Unknown Source) at org.tritonus.sampled.convert.javalayer.MpegFormatConversionProvider$DecodedMpegAudioInputStream.execute(MpegFormatConversionProvider.java:307) at org.tritonus.share.TCircularBuffer.read(TCircularBuffer.java:138) at org.tritonus.share.sampled.convert.TAsynchronousFilteredAudioInputStream.read(TAsynchronousFilteredAudioInputStream.java:194) at javax.sound.sampled.AudioInputStream.read(AudioInputStream.java:292) at com.sun.media.sound.PCMtoPCMCodec$PCMtoPCMCodecStream.read(PCMtoPCMCodec.java:506) at com.sun.media.sound.SunFileWriter$NoCloseInputStream.read(SunFileWriter.java:199) at java.io.SequenceInputStream.read(SequenceInputStream.java:208) at java.io.SequenceInputStream.read(SequenceInputStream.java:211) at java.io.InputStream.read(InputStream.java:101) at com.sun.media.sound.WaveFileWriter.writeWaveFile(WaveFileWriter.java:247) at com.sun.media.sound.WaveFileWriter.write(WaveFileWriter.java:145) at javax.sound.sampled.AudioSystem.write(AudioSystem.java:1354) at audio1.NewClass.main(NewClass.java:33) 

谁能帮助我,我做错了什么?

 public static byte [] getAudioDataBytes(byte [] sourceBytes, AudioFormat audioFormat) throws UnsupportedAudioFileException, IllegalArgumentException, Exception{ if(sourceBytes == null || sourceBytes.length == 0 || audioFormat == null){ throw new IllegalArgumentException("Illegal Argument passed to this method"); } ByteArrayInputStream bais = null; ByteArrayOutputStream baos = null; AudioInputStream sourceAIS = null; AudioInputStream convert1AIS = null; AudioInputStream convert2AIS = null; try{ bais = new ByteArrayInputStream(sourceBytes); sourceAIS = AudioSystem.getAudioInputStream(bais); AudioFormat sourceFormat = sourceAIS.getFormat(); AudioFormat convertFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, sourceFormat.getSampleRate(), 16, sourceFormat.getChannels(), sourceFormat.getChannels()*2, sourceFormat.getSampleRate(), false); convert1AIS = AudioSystem.getAudioInputStream(convertFormat, sourceAIS); convert2AIS = AudioSystem.getAudioInputStream(audioFormat, convert1AIS); baos = new ByteArrayOutputStream(); byte [] buffer = new byte[8192]; while(true){ int readCount = convert2AIS.read(buffer, 0, buffer.length); if(readCount == -1){ break; } baos.write(buffer, 0, readCount); } return baos.toByteArray(); } catch(UnsupportedAudioFileException uafe){ //uafe.printStackTrace(); throw uafe; } catch(IOException ioe){ //ioe.printStackTrace(); throw ioe; } catch(IllegalArgumentException iae){ //iae.printStackTrace(); throw iae; } catch (Exception e) { //e.printStackTrace(); throw e; }finally{ if(baos != null){ try{ baos.close(); }catch(Exception e){ } } if(convert2AIS != null){ try{ convert2AIS.close(); }catch(Exception e){ } } if(convert1AIS != null){ try{ convert1AIS.close(); }catch(Exception e){ } } if(sourceAIS != null){ try{ sourceAIS.close(); }catch(Exception e){ } } if(bais != null){ try{ bais.close(); }catch(Exception e){ } } } } 

这里sourceBytes表示MP3文件或WAV文件。 audioFormat是您希望转换的PCM格式。 我们还需要在classpath中输入javazoom.com中的mp3spi.jar,tritonus_mp3.jar,jl * .jar,tritonus_share.jar。 希望这可能有助于其他。

Java 7版本:

 public static byte [] getAudioDataBytes(byte [] sourceBytes, AudioFormat audioFormat) throws UnsupportedAudioFileException, IllegalArgumentException, Exception { if(sourceBytes == null || sourceBytes.length == 0 || audioFormat == null){ throw new IllegalArgumentException("Illegal Argument passed to this method"); } try (final ByteArrayInputStream bais = new ByteArrayInputStream(sourceBytes); final AudioInputStream sourceAIS = AudioSystem.getAudioInputStream(bais)) { AudioFormat sourceFormat = sourceAIS.getFormat(); AudioFormat convertFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, sourceFormat.getSampleRate(), 16, sourceFormat.getChannels(), sourceFormat.getChannels()*2, sourceFormat.getSampleRate(), false); try (final AudioInputStream convert1AIS = AudioSystem.getAudioInputStream(convertFormat, sourceAIS); final AudioInputStream convert2AIS = AudioSystem.getAudioInputStream(audioFormat, convert1AIS); final ByteArrayOutputStream baos = new ByteArrayOutputStream()) { byte [] buffer = new byte[8192]; while(true){ int readCount = convert2AIS.read(buffer, 0, buffer.length); if(readCount == -1){ break; } baos.write(buffer, 0, readCount); } return baos.toByteArray(); } } } 

Maven的:

  com.googlecode.soundlibs mp3spi 1.9.5-1   com.googlecode.soundlibs jlayer 1.0.1-1   junit junit