2013-03-06 74 views
1

我想将音频转换为audiostream,然后转换回使用java的音频。当我读取字节数组中的wav文件时,它显示大约30000字节,但是当我将它写入新的文件时,它只会写入44个字节。请告诉我我错在哪里。的代码片段如下:无法将完整的audiostream写入java中的音频文件

File src = new File("C:\\test.wav"); 
    AudioInputStream ais = AudioSystem.getAudioInputStream(src); 
    byte[] data = new byte[ais.available()]; 
    int x = ais.read(data); 

    int n = AudioSystem.write(ais, AudioFileFormat.Type.WAVE, new File("C:\\test2.wav")); 
    System.out.println("x="+x+" n="+n); 

n的输出为44

回答

0

我相信问题是,您已经阅读的AudioInputStream的全部内容复制到字节数组。这意味着当您将AudioInputStream实例传递给AudioSystem.write()方法时,它将已经在文件的末尾。 (它写的44个字节可能只是标题信息或类似的东西。)

诊断的快速方法是将对ais.read(data)的调用注释掉,看看它是否开始正确写出文件。

一个可能的解决方案是在将文件读入字节数组后,使用AudioInputStream上的mark()和reset()方法移回文件的起始位置。