对于特定的.WAV文件,程序返回“无法从输入文件获取音频输入流”

时间:2011-04-23 13:27:56

标签: java matlab audio signal-processing wav

我有一个涉及.wav文件分析和输出的程序。它与来自cds或互联网的曲目完美搭配但是我使用matlab生成了一系列纯正弦波音调进行分析,它给出了标题中显示的错误。 matlab文件在iTunes中运行正常,所以我不确定为什么我的程序有问题。

public static void signalToFile(File f) throws IOException, UnsupportedAudioFileException
{
    AudioInputStream inputStream = AudioSystem.getAudioInputStream(f);
    int numBytes = inputStream.available();
    byte[] buffer = new byte[numBytes];
    inputStream.read(buffer, 0, numBytes);

    String newFile = f.getName().replace(".wav", ".txt");
    System.out.println("Beginning file write: " + newFile + " (soundUtilities)");
    BufferedWriter fileOut = new BufferedWriter(new FileWriter(new File("src/examples/Media/" + newFile)));
    System.out.println("Ending file write: " + newFile + " (soundUtilities)");
    System.out.println(buffer.length);
    ByteBuffer myBB = ByteBuffer.wrap(buffer);
    myBB.order(ByteOrder.LITTLE_ENDIAN);
    while(myBB.remaining() > 1)
    {
        short current = myBB.getShort();
        fileOut.write(String.valueOf(current));
        fileOut.newLine();
    }

    fileOut.flush();
    fileOut.close();
    inputStream.close();
}

此方法的第一行是导致错误的原因。该方法涉及文件到txt文件的信号信息。任何帮助将不胜感激。

以下是我用来创建wav文件的一小部分matlab代码:

x13 = sin(2*pi*220*t1); % A3 long sample
x13envelope = [1:-1/length(x13):1/length(x13)];
x13full = x13.*x13envelope;

totalSound = [x1full x2full x3full x4full x5full x6full x7full x8full x9full x10full x11full x12full x13full]; % combines the notes

 wavwrite(totalSound, fs, 32, 'TestTune');

“totalSound”数组中的每个条目都代表一个音符

2 个答案:

答案 0 :(得分:1)

WAV files有一个标题。您似乎没有创建该标头。您似乎创建的是原始PCM文件。

答案 1 :(得分:0)

我解决了这个问题“JBoss 4.2和JBoss 7的输出不同 JBoss 4.2: 支持WAVE = true

JBoss 7: 支持WAVE = false“ 另请查看此https://community.jboss.org/message/729654