欢迎光临散文网 会员登陆 & 注册

使用Sound eXchange (SoX)进行DSD、PCM格式转换

2023-08-18 12:34 作者:Taokaka00  | 我要投稿


不是什么严肃的文字内容,就考虑用点废话的样子来写了

一、如何遇到Sound eXchange (SoX)这个软件的:

hifi群友推荐的博客——浴沂咏归(ZexWoo's Blog):https://zexwoo.blog/

翻找文章的时候,有两篇文章提到过SoX:

《重采样与降位深指南》:https://zexwoo.blog/posts/tutorials/resampling-and-bit-depth-reduction/    里面说用SoX在降采样率速度快,效果好。

《SACD》:https://zexwoo.blog/posts/knowledge/sacd/

当中有一篇名叫《DSD转PCM分析》跳转到国外的博客——@Archimago:https://archimago.blogspot.com/,一番找寻后,里面直接提到SoX这个软件很牛,DSD to PCM效果不输专业付费音频转换软件的。(文章标题太长我偷懒了):https://archimago.blogspot.com/2021/10/measurements-look-at-dsd-and-using-sox.html

好奇心满满的我,开始了一些尝试。

二、SoX有什么效果

SoX是开源软件,只有命令行,没有GUI图形界面。

SoX的重采样能力很强,转换速度快,听感上数据保留量较好。

SoX同时可以进行抖动(Dither)处理,关于44.1/48kHz采样率还可以使用一些噪声整形(Noise Shaping)处理音频数据。

SoX也可以做一些音效处理,也可以调整音量(音频增益或音量归一化)。

我主要是用来做格式转换和抖动处理的,音效方面没怎么使用过。

介绍文章请看:https://www.jianshu.com/p/be8977de4a6b

三、SoX的使用

SoX的下载:

https://sourceforge.net/projects/sox/files/sox/

按照Archimago博客的推荐,我使用了以下两个版本的SoX:

https://audiodigitale.eu/repo/sox/ (AVX、AVX2)

https://www.audiofaidate.org/sw/sox-dsd/ (MSVC、x86_64)

以上两个改版支持PCM to DSD,原版只能PCM to PCM。

我使用的是AVX2版本的,具体可以用CPU-Z查看自己的CPU指令集,找适合自己CPU的。

还有一个小细节就是,原版对日文等字符的支持不佳,文件名需要更改才能正常运行。但在改版上就没有这个问题。
SoX的使用(全局环境的部署):参照该文章部署SoX全局环境

简单点说,将SoX解压对应位置,将文件夹对应路径加入系统Path环境中,就完成了。

SoX的使用命令:

SoX命令原则为:sox [gopts] [[fopts] infile]... [fopts] outfile [effect [effopt]]


SoX命令介绍:

[gopts]:全局选项,用于配置全局设置,如全局缓冲区大小、多线程等。

[[fopts] infile]...:输入文件和相关选项,[fopts]代表文件选项,可以配置输入文件的格式、采样率等。infile代表输入文件的路径。

[fopts] outfile:输出文件和相关选项,[fopts]代表文件选项,可以配置输出文件的格式、采样率等。outfile代表输出文件的路径。

[effect [effopt]]:SoX支持多种效果和效果选项,可以对音频进行处理、转换和调整。effect代表效果的名称,effopt代表效果的选项。


一个例子:sox -S -V3 -D -G --buffer 4194304 --multi-threaded <输入文件> -r 176.4k -b 32 -f  <输出文件>

从左到右为:显示转换状态,不进行抖动,自动音量增益,内存缓存为4G,启用多线程,<输入文件>,输出比特率176.4K,输出位深32位,浮点,<输出文件>

具体命令如下:

-r 输出比特率,即44.1k/88.2k/176.4k/352.8k/705.6k/1411.2k(DSD转PCM请严格按照44.1k计算)

-b 输出位深,即16/24/32 (-f)。

-f 与输出位深-b结合使用,采用浮点方式输出。

DSD to PCM建议转换参数:DSD to PCM建议转换参数

DSD64    88.2k/24

DSD128    88.2&176.4k/24

DSD256    176.4/352.8k/24

[全局]-G(--guard),即“gain -h+gain -r”,自动计算音量增益,防止频率被削波。

[全局]-S(--show-progress),显示转换状态。默认是隐藏的,建议加入此命令。

[全局]-D(--no-dither),即不进行抖动(不进行量化失真)。

[全局]-V[1-6],显示SoX运行状态。1只显示错误信息,2显示警告,3显示细节,4-6属于调试级别。建议加入此命令。(注意要写成【-V3】,而非【-V 3】)

[全局]--buffer 任意数字,单位为千字节(KB)。即手动设定使用多少内存容量用于转换,默认8192KB(8MB)。与启用多线程--multi-threaded结合使用。

(1G=1048576、2G=2097152、4G=4194304、10G=10485760、20G=20971520)

[全局]--multi-threaded,即启用多线程。


SoX的批处理文件:

感谢ChatGPT编写的批处理,这下终于可以解决输入命令问题了:

举个例子:将音频文件转换成88.2k/24 wav文件,转换过程中不进行抖动处理。

@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!后面可以加入想要的内容,!filename!前面加入想要的内容似乎会报错。

!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网盘了:

https://www.123pan.com/s/Fm0qVv-NGIl.html提取码:KbS0

使用Sound eXchange (SoX)进行DSD、PCM格式转换的评论 (共 条)

分享到微博请遵守国家法律