2011-04-23 56 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