2011-04-23 54 views
1

我有涉及的.wav文件的分析和输出的程序。它的工作原理与CD或互联网曲目完全正常,但我已经生成的用matlab分析纯正弦波音序列,这是给我的标题所示的错误。 matlab文件在iTunes中运行良好,所以我不确定为什么我的程序遇到问题。程序返回“无法从输入文件音频输入流”为特定的.wav文件

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文件中。任何帮助将不胜感激。

下面是MATLAB代码的小部分我用来创建wav文件:

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”阵列中的条目中的每一个代表一个音符

回答

1

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

+0

@ 9000我会加我用来创建wav文件MATLAB代码段,但我假设,如果我没有做的wav文件头那就不是在iTunes中播放? – Joneser 2011-04-23 13:48:56

+0

iTunes可以足够聪明地接受原始PCM。仍然用文件查看器打开一个好的.wav文件(或者在远处或者mc处使用F3),看看它是否以'RIFF'开始。 – 9000 2011-04-23 14:00:07

+0

@Joneser:“我猜想,如果我没有做的wav文件头那就不是在iTunes中播放?”这是一个轻率的假设。大多数玩家花费非常多的时间去分析无效的媒体文件。 – 2011-04-23 14:01:52