2011-07-30 273 views
20

我正在使用SoX將一組wav文件修剪爲16kHz,16bit,單聲道wav文件(這將是其中一個初始wav文件的子集)。大多數源wav文件已經設置爲這個規範,但是,我發現其中一些具有不同的採樣率。因爲它會使用的ProcessBuilder在Java中實現自動化,我想我可以用下面的命令:在轉換採樣率時減少SoX中的削波

sox <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime> 

,它會只改變採樣率,如果它不是16000赫茲。它做什麼,它應該與相同規格的文件,但對不同的採樣率的文件,我得到:

sox WARN rate: rate clipped 48 samples; decrease volume? 
sox WARN dither: dither clipped 44 samples; decrease volume? 

我應該如何處理這種不降低音頻的質量?請注意,我對信號處理一無所知。

回答

29

正如該工具所建議的那樣,嘗試減小音量,例如,通過前面加上-v 0.99(或0.98等)。體積的這種小的變化是不可察覺的。

例子:

sox -v 0.99 <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime> 

如果仍然出現削波,則音頻可能嚴重削波(即disorted)開始與(這是與現代音樂常見;看到維基百科:Loudness war)等的警告可以被忽略 - 不會引入額外的失真。

正如在評論中提到的那樣,可以給出-G選項,它會自動調整避免削波所需的體積(代價是稍微多一點的CPU時間,即使用-G稍微慢一些) 。

+4

我重讀了文檔,並意識到我錯過了'-G'選項,它自動修復增益。我想避免設置一個任意數字,所以決定使用'-G'選項。如果您將防護選項的用法附加到您的答案中,我會很高興將此信息提供給您,因爲這些信息非常豐富。 – cesar

+1

您還可以使用'--norm'選項來防止剪輯,並且如果音頻太安靜,請增加它以使其成爲無剪輯的最大音量。 – drojf

0

我有問題。修改wav文件的編碼固定它:

sox input.wav -e signed-integer output.wav