potplayer、ffdshow
以DTS为例,图1。图2是设置步骤的gif,之后会详细介绍每一步。图3是potplayer到声音被播放出的音频流程。以下步骤更多理论、经验谈,若无需求,按照步骤设置,再试听一下即可。
另附:potplayer的WASAPI设置。potplayer也可以设置WASAPI,优点是可以绕过windows音频处理,包括windows混音。这里不建议使用独占模式,不然其他应用、系统将无法调用该音频设备,如果是独立的音频涉笔而非主声音驱动程序(系统默认音频设备),无所谓!据说论坛网友说,win10的WASAPI和DS音质一样,而以前的系统会有差异,源于win10新的音频处理Media Foundation,他替换了DS,不过表面上保留DS、MME等接口。之后会测试xp、win7基础版等老系统与新系统的资源占用,届时会测试一下音频、图像等差异!
首先安装potplayer和ffdshow,这里ffdshow是K-Lite Mega自带的,版本是4534,而且所含ffmpeg.dll已更新至2016-11-15,不过这次是用的解码器是libdts,仍是4534自带的:ffdshow官网版本4531,sourceforge最新版本4533,而这款是paehl编译的,发布时间是2015-08-09,被K-Lite、完美解码等解码包所包含。potplayer和ffdshow都有32位和64位版本,请安装相应的版本,potplayer不能调用不一样位数的ffdshow!
使用potplayer调用ffdshow,用他做解码、混音。
这里使用libdts解码,而非libavcodec(ffmpeg),因为ffmpeg会将DTS解码为7声道(6.1),而非6声道(5.1)。potplayer也是ffmpeg解码。而原始声道其实是5.1声道,6.1声道是将后左后右移动到侧左侧右,然后根据这两条音轨混音出本不存在的后中。所以我宁愿选择DTS解码。而且如果是预设的混音模式的话,会有区别,如果自定义矩阵混音的话,7声道和6声道是一样的,因为矩阵可以更灵活的写,而预设是固定矩阵。
输出扬声器配置:选择立体声,功能是给系统标识为双声道输出(杜比定向逻辑同样效果,因为他也是双声道输出),因为系统或声卡也会对多声道自动混音,如果不标识为双声道的话,系统输出会音量减小,因为系统的混音算法就是前左前右声道音量降低,realtek声卡和VIA声卡也有各自的混音算法。避免这些再混音的方法就是标识为双声道输出。而potplayer这边是使用源声道输出还是2.0立体声输出,都可以~虚拟声场空间和头部相关转换函数,这两个是函数而非矩阵,虽然同样是双声道输出,但是当选择这两个的时候,无法使用自定义矩阵,其他的模式,自定义矩阵是会覆盖预设矩阵,但声闲海道是模式的输出。下面的耳机间距就是虚拟声场空间唯一可调的一项参数,而头部相关转换函数是无可调项的!
矩阵,是原声道到目标声道的映射,因为四四方方一个阵,大概就叫成矩阵了吧!ffmpeg的一个参数-ac channels set number of audio channels其算法来自于ATSC(美国数字电视国家标准)。音频滤镜中有一个pan,可以自定义声道映射、混音!potplayer和ffdshow都参考甚至搬运于ffmpeg,这个矩阵的原型大概就是pan。图1的自定义矩阵可以写做:
-af
'pan=stereo|FL
规格化矩阵:为了避免混音时,声音叠加后,音量过大而产生爆音。ffmpeg的文档中,pan滤镜的原文是:如果通道规范中的'='替换为'<',则该规范的增益将被重新归一化,以使总数为1,从而避免削波噪声。在杜比定向逻辑中可以看到,负值是按照绝对值算得,而非按照负值算。开启规格化矩阵后,混音音量会变小,之后再用potplayer增益下即可!图2、图3分别是规格化矩阵在potplayer和LAV中的设置。
关于混音的看法,最简单的混音就是1+1+1...,音量过大就开启规格化矩阵。杜比定向逻辑,又名杜比环绕,最初就是为了增强环绕效果而来。在影音作品中,声音都是经过定向处理过的,本是提供电影院,家庭影院的多声道音响播放的,而非耳机。所以耳机需要的双声道还原多声道的听感。而非简单的混音,因为即便是多声道,摆放也是有讲究的,在realtek、potplayer、ffdshow中,都有针对多声道中每条声道的音量处理。所以立体声转多声道不再是简单的1+1+1...。之前调出一个很妙的效果,能听出自制的测试音频的后、侧效果,但自制音频并未做过定向处理,调出的参数可以看作是第一次定向处理。而以上所提,影音成品都是做过定向处理的。于是这个矩阵不能拿来用作5.1转2.0。
potplayer开启声音处理滤镜,这样外部解码的声音就可以回馈给potplayer,才能再做声音处理、以及录制。反之potplayer的声音处理无法生效,也无法录制到声音!
potplayer默认是开启规格化音量的,但是预设75,音量太高,很多时候会产生爆音,动漫的话问题更严重,因为大几率齿音。增益后,齿音更加明显。我倾向50,其实25已经可以用可以接受了,在网页、系统正常播放音量下,potplayer的声音25增益也可以清晰的听到!中文翻译的水平扩展和水平衰减,不明其意,英文就很明了。gain:增益,并不只是放大,预设类型中,增益是最终音量,如果原音量大于设置音量,则是变小。relesae time:释放时间,待处理音量到处理后音量的过度变换时间,不至于音量突然增大的突兀、不自然!预设类型是不断调整音量,直到音量到达最终音量,可以看到5和25,是同一个坡度减小的,因为增益算法是一样的,所以坡度一样,25提早到达了指定音量,不再变化。而5,继续缩小,直到指定音量。此预设类型可以理解为处理再处理,直到整个音频的放大量维持在指定音量下。而后两者处理类型以及ffdshow的音量处理并无法如此先进,所以potplayer的该算法是很优秀的,遗憾的就是预设音量有点高!
以上就是过程中涉及到的相关知识,之后会在其他文章中详解相关知识点。毕竟一周搞出一堆知识,才写一篇文章,不甘心呀!即便如此,上面还是堆出一堆东西!