本帖最后由 xxbin1911 于 2024-11-15 23:01 编辑
先说达菲
达菲基本上就是早期的MIUI那样的东西,就是国产安卓手机早期的安卓皮肤。安卓皮肤不管怎么做,它的底层一定会是安卓,并且也受限于安卓,除非像华为,做个纯血鸿蒙。
LMS和Squeezelite就那么些参数可以改,达菲玩出花来,也就是那么点东西,UI上的一些设置选项,也只是让使用者觉得用起来舒服或者能更多的开脑放而已。
音频优化并不仅仅是对Linux是否熟悉的问题,而是要对各种播放软件以及音频输出的底层软硬件比较熟悉才可能有的放矢。我举个例子,Squeezlite有两个Buffer大家都比较熟悉的,Stream Buffer,Output Buffer,我在前面的帖子有时候会加上Decode Buffer,那种是在有DSP的情况才有的。我们挑简单的模式来说,就Stream Buffer+Output Buffer这种情况。
Stream Buffer存放从网络或者文件获取的原始音频数据,Output Buffer存放解码(FLAC->PCM)之后的待输出的音频数据。另外还有个声卡驱动层面的Buffer,那个是操作系统级别的,这里先忽略。
当使用比较大的Stream Buffer和Output Bufffer会发生什么事情呢?如果这两个Buffer足够大,那么在几秒内(取决于你的网络速度),Stream Buffer就存放了将要解码的这个音频的所有数据,之后网络线程就会退出,然后再过几秒钟,Decode线程也就能够把这些数据全部解码并存放到Output Buffer中,接下来,Decode线程也不做任何其他工作,处于类似休眠的状态。
也就是说,当你的Buffer足够大的时候,在歌曲的后半段,根本就没有网络处理和解码这回事,Squeezelite只会从Output Buffer中读取数据并填入ASLA声卡的缓冲区来播放。
这是在Squeezelite播放时会发生的事情,你能听出来什么时候网络线程停止工作了么?能听出来什么时候Decode线程休眠了么?你能听出来在一首歌的快结束的时候有什么不一样么?(Gapless的回放,在歌曲末尾,播放器会做一些其他事情,我不说,可能一般人也不知道内部的工作原理)
如果你能听出来这些差别,那么做一些软件上的优化是有意义的,如果你听不出来这些差别,那么解码线程在哪台机器上以及它工作与否,又有什么差别呢?
再则,当Squeezelite将音频数据填入内核的ALSA缓冲区之后,又会发生什么?这些数据又如何变成USB DAC所需要的URB(USB Reuqest Block),Squeezelite填入ALSA缓冲区的速度和块大小和URB又是怎么个关系?Squeezelite通过USB发送的音频数据(URB)到了USB界面又会发生什么?USB界面中的XMOS或者ARM又是如何处理这些数据的?USB界面中的CPLD或者FPGA又是干嘛用的?USB界面输出的I2S信号的Jitter和什么有关系?播放器的哪些设置会影响到USB界面的I2S信号输出?又是怎么影响的?种种这些问题如果没有去思考和了解,说不好听点也只能是盲人摸象,能弄出好声音那就是撞大运了。
当这些问题都不能了解背后的原理的时候,却认为达菲的作者是因为不够了解才会说出建议换个最好的DAC那种话来,那也只是自己的一厢情愿了。搞技术的,特别是能做出达菲这样的东西的,他不会是一个随便的人,他也不可能把一段他现在觉得有问题的话一直挂在网上的。似乎玩HIFI的都不太乐意听这些音频播放软件的作者的话,比如Foobar的作者说,Realtime对于回放基本无意义,只要能保证缓冲区不Under-run,实时和非实时内核,没差别。有谁会听呢?
再来是NAA
NAA只是一个网络到音频输出的异步FIFO转换,它不负责任何转码和DSP处理,它只会把已经解码好的音频数据用音频驱动所需要的方式异步输出。解码和DSP处理都是在HQ Player。HQ Player+NAA的架构与LMS+Squeezelite的架构是不太一样的,这基本上代表了两种典型音频回放架构。
Network audio is especially useful to give freedom from cables when player is run on a tablet or other wireless device.
Processing is performed by the player application and the processed data is then asynchronously streamed over network to a very lightweight network audio adapter interfacing to the DAC. Asynchronous FIFO provides maximum isolation between processing and audio reproduction.
至于我的系统,可能对大家没有啥参考价值,我用NAS+LMS,播放器用Squeezelite(树莓派或MAC MINI),偶尔也用自己写的播放器(Linux版本或Android版本,还不够稳定)。
|