2012-03-06 61 views
1

使用sox轉換爲.dat格式的值似乎沒有被標準化 - 希望有人能看到我做錯了什麼。我試圖做一些類似於this great SO post about sox and gnuplot(我發送的值在Java中處理,所以有點不同的上下文)中描述的東西。問題是,在我的.dat文件中,我得到「只有很小的值」,而手冊頁說,它們將在-1和1之間進行歸一化。使用sox轉換爲.dat格式的值似乎沒有被標準化

安裝sox和mp3處理包後,我執行以下操作測試:

sox elevator.mp3 -c 1 -r 11000 elevator_mediumres.dat 
cat elevator_mediumres.dat |cut -c21-33 > elevator_mediumres_values_only.dat 
sort -n elevator_mediumres_values_only.dat > elevator_mediumres_values_only_sorted.dat 
# echo min $(head -1 elevator_mediumres_values_only_sorted.dat) max $(tail -1 elevator_mediumres_values_only_sorted.dat) 

這給出了輸出「最小-0.48370361最大9.1552734e-05」。如果我的第一個命令是wav而不是dat,那麼wav文件聽起來就OK了(就像Aerosmith的「愛在電梯裏」的11kHz單聲道那樣)。我當然可以手動規範化數據,但我希望有一個更好,更直接的方法。

感謝,

-S-

+0

我最終在Java中自己手動進行了規範化(工作正常),但仍然有興趣知道是否有人爲了更好的方式添加了一些東西。 – Sondre 2012-03-20 12:05:45

回答

1

你似乎有在文件中主要的DC-shift。根據你需要處理的數據,你可能需要在正常化之前刪除它。要使用sox來執行此操作,請首先確定直流偏移。下面是與soxawkbash一個辦法:

dc_shift=$(sox infile.wav -n stats 2>&1 | awk '/DC offset/ { print $3 }') 

現在應用的DC-shift和標準化的輸入文件:

sox infile.wav normalized.wav dcshift $((-dc_shift)) gain -n 

sox命令行建立起來這樣的:

sox IN OUT EFFECTS 

每個效果都按順序應用。

相關問題