Showing posts with label Audio Processing. Show all posts
Showing posts with label Audio Processing. Show all posts

Tuesday, January 29, 2019

語音格式 Audio Format 批量轉換

    某一天當語音處理的大量檔案格式不符合要求時,如果逐個使用軟體轉換,將會相當費時費力。這裡將再次使用到CLI指令方式,完成批量處理語音檔案。

Solution:
    解決方法將會使用到以下的指令、option,和一個for迴圈,
sox 指令: 專門處理語音轉換,支援大部分的格式,有許多轉換的options,
常用的options 有:
-v 調整語音音量大小
-t 文件格式
-b 語音bits
-c channels數,mono or stereo
-r 語音sample rate
-e encoding 編碼

完整執行指令如下:

Silhouette@Home:~$ for f in YOURAUDIOPATH/*.nist; do
sox -t raw -e signed-integer -b 16 -c 1 -r 8000 "$f" -t wav -e signed-integer -b 16 -c 1 -r 8000 "${f%.nist}.wav" trim 0.023 ;
done

trim 為nist 的header 可去除,主要處理語音為紅色highlight,
完成!!!

Thursday, January 24, 2019

如何使用unix CLI統計folder底下語音的總時長

    某一天當發現需要統計folder 和subfolder底下二三十萬條語音數據時,確實不是能夠靠人工逐個計算那麽簡單的事。


Solution:
    需要使用到以下5個pipeline 形式的指令

ls = 顧名思義就是 "list" 當下folder內的所有資料
grep = 抓取自定義的文件名稱或副檔名
soxi = Sox 的親兄弟,能夠顯示語音檔案的所有資訊,如:-t filetype, -r sample-rate, -c channel,             -D duration, -b bits per sample等
awk = 非常強大的一個文件處理指令,能夠處理計算、比較、批量處理、文件合併等等,
           可參考:https://awk.readthedocs.io/en/latest/index.html
parallel = 平行處理對應指令,可以由 -j $(nproc) 最大化機器平行處理jobs的數目

利用這些指令在terminal 內輸入以下的pipeline形式,

YOURDATAFOLDER~$ ls | grep ".wav" | parallel -j $(nproc) soxi -D {} | awk '{SUM += $1} END {printf "%d:%d:%d\n", SUM/3600, SUM%3600/60, SUM%60}'


會得到以下結果,完成!!!