1

我正在尝试将音频转换为音频流,然后使用 java 转换回音频。当我将 wav 文件读入字节数组时,它显示大约 30000 个字节,但是当我将它写入一个新文件时,它只写入 44 个字节。请告诉我我哪里出错了。代码片段如下:

    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。

4

1 回答 1

0

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

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

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

于 2013-03-06T01:20:48.510 回答