2011-07-28 66 views
6

我已經嘗試編寫播放聲音文件但迄今未成功的程序。 我無法理解代碼的某些部分:瞭解AudioFormat,AudioInputStream和啓動方法的構造函數

InputStream is = new FileInputStream("sound file"); 
    AudioFormat af = new AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian); // I don't understand it's constructor 
    long length ; // length in sample frames 
    // how cani i know the length of frames ? 
    AudioInputStream ais = new AudioInputStream(is , af , length); 
    // open (ais); 
    // start playing by invoking start method 
  • AudioFormat我怎麼能知道採樣率,提前文件大小,什麼是渠道的構造,並在2個布爾變量結束?
  • 如何獲得樣本框的值length
  • 另外我該如何調用啓動方法?我不希望從任何線,但該文件中的數據的文件夾中保持(即,剪輯)

回答

3

除了編碼做,音頻格式包括其他 性質進一步指定數據的確切安排。這些包括通道數量,採樣率,採樣大小,字節數 順序,幀率和幀大小。聲音可能有不同的音頻通道編號 :一個用於單聲道,兩個用於立體聲。採樣率 測量每聲道每秒鐘拍攝多少聲壓「快照」(採樣)爲 。 (如果聲音是立體聲而不是單聲道的,則在每個時刻實際測量兩個樣本:一個爲左聲道爲 ,另一個爲右聲道;但是,採樣率仍然測量每個聲道的數量,所以速率是 ,不管通道的數量如何,這是 這個術語的標準用法。)樣本大小表示用於存儲 每個快照的位數; 8和16是典型值。對於16位採樣(或其他任何大於一個字節的採樣大小),字節順序很重要;每個樣本中的 字節按「小端」或「大端」樣式排列。對於像PCM這樣的編碼,幀由給定時間點的所有通道的樣本組成,因此幀的大小(以字節爲單位)始終等於樣本的大小(在 字節中)乘以頻道數量。但是,對於某些其他種類的編碼,幀可以包含整個樣本系列的一組壓縮數據以及其他非樣本數據。對於這樣的 編碼,採樣率和採樣大小是指將其解碼爲PCM之後的數據,因此它們與幀率和幀大小完全不同。

Link

+0

什麼是小端,大端? 8與16有什麼不同? –

+0

提示:在'ClassName + 6'上搜索通常會引導您使用Java 6 JavaDocs(如果它是泛型類名稱,例如'Thread',則可以將'​​javadoc'添加到搜索中)。 –

+0

[Endianness](http://en.wikipedia.org/wiki/Endianness) – James

1

可能是一個更好的方式來處理,這是沿Java Sound info.頁所示的「播放Clip的源代碼行。它使大多數問題變得多餘(因爲我們不需要擔心使用Clip時的細節問題)。

如果您在嘗試源代碼後還有其他問題,請告訴我。

+0

我不想從URL播放聲音文件。 –

+0

爲了避免浪費你的時間和耐心,回去閱讀該源代碼的所有25行,但特別是第一行的註釋。爲了向我證明你已經做到了,請回復那條評論。 –

+0

'// getAudioInputStream()也接受一個File或InputStream' –