使用Sound eXchange (SoX)進(jìn)行DSD、PCM格式轉(zhuǎn)換

不是什么嚴(yán)肅的文字內(nèi)容,就考慮用點(diǎn)廢話的樣子來寫了。
一、如何遇到Sound eXchange (SoX)這個(gè)軟件的:
hifi群友推薦的博客——浴沂詠歸(ZexWoo's Blog):https://zexwoo.blog/
翻找文章的時(shí)候,有兩篇文章提到過SoX:
《重采樣與降位深指南》:https://zexwoo.blog/posts/tutorials/resampling-and-bit-depth-reduction/????里面說用SoX在降采樣率速度快,效果好。
《SACD》:https://zexwoo.blog/posts/knowledge/sacd/
當(dāng)中有一篇名叫《DSD轉(zhuǎn)PCM分析》跳轉(zhuǎn)到國外的博客——@Archimago:https://archimago.blogspot.com/,一番找尋后,里面直接提到SoX這個(gè)軟件很牛,DSD to PCM效果不輸專業(yè)付費(fèi)音頻轉(zhuǎn)換軟件的。(文章標(biāo)題太長我偷懶了):https://archimago.blogspot.com/2021/10/measurements-look-at-dsd-and-using-sox.html
好奇心滿滿的我,開始了一些嘗試。
二、SoX有什么效果
SoX是開源軟件,只有命令行,沒有GUI圖形界面。
SoX的重采樣能力很強(qiáng),轉(zhuǎn)換速度快,聽感上數(shù)據(jù)保留量較好。
SoX同時(shí)可以進(jìn)行抖動(dòng)(Dither)處理,關(guān)于44.1/48kHz采樣率還可以使用一些噪聲整形(Noise?Shaping)處理音頻數(shù)據(jù)。
SoX也可以做一些音效處理,也可以調(diào)整音量(音頻增益或音量歸一化)。
我主要是用來做格式轉(zhuǎn)換和抖動(dòng)處理的,音效方面沒怎么使用過。
介紹文章請看:https://www.jianshu.com/p/be8977de4a6b

三、SoX的使用
SoX的下載:
https://sourceforge.net/projects/sox/files/sox/
按照Archimago博客的推薦,我使用了以下兩個(gè)版本的SoX:
https://audiodigitale.eu/repo/sox/ (AVX、AVX2)
https://www.audiofaidate.org/sw/sox-dsd/ (MSVC、x86_64)
以上兩個(gè)改版支持PCM to DSD,原版只能PCM to PCM。
我使用的是AVX2版本的,具體可以用CPU-Z查看自己的CPU指令集,找適合自己CPU的。
還有一個(gè)小細(xì)節(jié)就是,原版對日文等字符的支持不佳,文件名需要更改才能正常運(yùn)行。但在改版上就沒有這個(gè)問題。
SoX的使用(全局環(huán)境的部署):參照該文章部署SoX全局環(huán)境
簡單點(diǎn)說,將SoX解壓對應(yīng)位置,將文件夾對應(yīng)路徑加入系統(tǒng)Path環(huán)境中,就完成了。

SoX的使用命令:
SoX命令原則為:sox [gopts] [[fopts] infile]... [fopts] outfile [effect [effopt]]
SoX命令介紹:
[gopts]:全局選項(xiàng),用于配置全局設(shè)置,如全局緩沖區(qū)大小、多線程等。
[[fopts] infile]...:輸入文件和相關(guān)選項(xiàng),[fopts]代表文件選項(xiàng),可以配置輸入文件的格式、采樣率等。infile代表輸入文件的路徑。
[fopts] outfile:輸出文件和相關(guān)選項(xiàng),[fopts]代表文件選項(xiàng),可以配置輸出文件的格式、采樣率等。outfile代表輸出文件的路徑。
[effect [effopt]]:SoX支持多種效果和效果選項(xiàng),可以對音頻進(jìn)行處理、轉(zhuǎn)換和調(diào)整。effect代表效果的名稱,effopt代表效果的選項(xiàng)。
一個(gè)例子:sox -S -V3 -D -G --buffer 4194304 --multi-threaded <輸入文件> -r 176.4k -b 32 -f? <輸出文件>
從左到右為:顯示轉(zhuǎn)換狀態(tài),不進(jìn)行抖動(dòng),自動(dòng)音量增益,內(nèi)存緩存為4G,啟用多線程,<輸入文件>,輸出比特率176.4K,輸出位深32位,浮點(diǎn),<輸出文件>
具體命令如下:
-r 輸出比特率,即44.1k/88.2k/176.4k/352.8k/705.6k/1411.2k(DSD轉(zhuǎn)PCM請嚴(yán)格按照44.1k計(jì)算)
-b 輸出位深,即16/24/32 (-f)。
-f 與輸出位深-b結(jié)合使用,采用浮點(diǎn)方式輸出。
DSD to PCM建議轉(zhuǎn)換參數(shù):DSD to PCM建議轉(zhuǎn)換參數(shù)
DSD64????88.2k/24
DSD128????88.2&176.4k/24
DSD256????176.4/352.8k/24
[全局]-G(--guard),即“gain -h+gain -r”,自動(dòng)計(jì)算音量增益,防止頻率被削波。
[全局]-S(--show-progress),顯示轉(zhuǎn)換狀態(tài)。默認(rèn)是隱藏的,建議加入此命令。
[全局]-D(--no-dither),即不進(jìn)行抖動(dòng)(不進(jìn)行量化失真)。
[全局]-V[1-6],顯示SoX運(yùn)行狀態(tài)。1只顯示錯(cuò)誤信息,2顯示警告,3顯示細(xì)節(jié),4-6屬于調(diào)試級別。建議加入此命令。(注意要寫成【-V3】,而非【-V 3】)
[全局]--buffer 任意數(shù)字,單位為千字節(jié)(KB)。即手動(dòng)設(shè)定使用多少內(nèi)存容量用于轉(zhuǎn)換,默認(rèn)8192KB(8MB)。與啟用多線程--multi-threaded結(jié)合使用。
(1G=1048576、2G=2097152、4G=4194304、10G=10485760、20G=20971520)
[全局]--multi-threaded,即啟用多線程。
SoX的批處理文件:
感謝ChatGPT編寫的批處理,這下終于可以解決輸入命令問題了:

舉個(gè)例子:將音頻文件轉(zhuǎn)換成88.2k/24?wav文件,轉(zhuǎn)換過程中不進(jìn)行抖動(dòng)處理。
@echo off
setlocal enabledelayedexpansion
for %%F in (*.wav *.flac *.w64 *.dff *.dsf) do (
? ? set "filename=%%~nF"
? ? set "output_filename=!filename! (88.2+24+禁dither).wav"
? ? sox -S -D -V3 --buffer 4194304 --multi-threaded "%%F" -r 88.2k -b 24 "!output_filename!"?
)
endlocal

【for %%F in (*.wav *.flac *.w64 *.dff *.dsf) do (】
%%F in?后面可以加入想要的格式,例如(*.wav *.flac *.w64 *.dff *.dsf)
【output_filename=!filename! (88.2+24+禁dither).wav】
!filename!后面可以加入想要的內(nèi)容,!filename!前面加入想要的內(nèi)容似乎會(huì)報(bào)錯(cuò)。
“!filename! (88.2+24+禁dither).wav”,.wav這里可以修改為需要的格式,例如(.wav/.flac/.w64)
【sox -S -D -V3 --buffer 4194304 --multi-threaded "%%F" -r 88.2k -b 24 "!output_filename!"】
這部分是具體的命令了,請參照上文來填寫。


以上的命令全部打包上傳在123網(wǎng)盤了:
https://www.123pan.com/s/Fm0qVv-NGIl.html提取碼:KbS0