找回密码
 -注册-
查看: 4146|回复: 1
打印 上一主题 下一主题

知乎上的播放器段子

[复制链接]
跳转到指定楼层
1
发表于 2018-1-25 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自 山东青岛
挺搞笑的,转自知乎wzk的回答,侵删。


问:
程序员大牛与菜鸡分别写音乐播放器,播放同一首歌,音质会有差别吗?

答:
作者:wzk
链接:https://www.zhihu.com/question/68023552/answer/260478403
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

差别非常大,笔记本外放我都能听出来,while循环声音更纯,但是复杂混音解析度不够,for循环在对于i的操作过于规整化,导致内存固定周期的读写会产生干扰波,不属于白噪,会导致音乐略微失真。
好的播放器尽可能使用静态变量,不得不用非静态的时候尽量让变量创建和删除的时候有高频音或鼓点的遮盖,这个就非常需要经验了。不过现在可以用机器学习来解决。
内存回收一定要手动进行,不要用智能指针,更不要用java,java写出的播放器内存块不停移动的噪音就像一个施工队在你家窗外修路一样。android音质一直不如iphone和语言也有很大关系。
新手写的播放器往往只有一种解码方式,能听个响就算成功。高手写的播放器至少要有6个解码模块来适配不同类型的电流,还有一个电流预判的贝叶斯模块来预测电压波动和抗电涌,和一个解码器实时调参模块来做分支预测选择合适的参数适配电流,调参模块非常难,没有大cpu厂做分支预测5年以上经验的,基本搞不好。6个基本模块分别是针对水电,火电,风电,核电,电池和太阳能,但是现在城市供电都是混合供电,一般还需要一个卡尔曼滤波器来对6个解码模块加权来进行协作解码。
最终解码出的信号还需要和原音频信号和解码时电流特征信号做一次畸变修正才能传输进音频输出接口里。
新手写的播放器在无外界电磁干扰,设备用电池的时候还勉强能听。但是需要外接电源的时候基本属于噪音生成器,高手写的播放器无论电池还是电源基本能达到一致。



评论:
值得一提的是,给变量取名也会对音质有所影响。大牛程序员会尽量使用同一风格的作曲家给变量取名,而菜鸟程序员则不会注意这一点,造成音质上有所欠缺

新手因为没学过数据结构,只会使用线性查找,复杂度为O(N),听码率高的mp3时可能会产生延迟,左右声道进行不一致的情况。而高手在这里会使用二分查找树,或哈希算法,复杂度能减少为O(logN)甚至O(1),即使mp3码率达到320kbps,也不会听出任何延迟的感觉。

哈希查找声音比较杂,不如二分查找听起来均衡。

其实编译器也有很大讲究,gcc编译出的播放器奔放热烈,适合听欢快音乐,vs编译器编译的我个人感觉听蔡琴的更有味道,声音醇柔绵长,过几天想试试clion的效果呢

基本说到点上了,我还要补充一点。高手写播放器从来不会用break, continue, goto这类的语句,贸然的分支截断会产生音阶严重跳变,进而导致可怕的失真。btw,科普一下,齿音一般就是这么来的。

2
发表于 2018-1-25 17:04 | 只看该作者 来自 河南平顶山
牛X!哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | -注册-

本版积分规则

Archiver|手机版|粤icp备09046054号|耳机网-耳机大家坛

粤公网安备 44030602000598号 耳机大家坛、www.erji.net、网站LOGO图形均为注册商标

GMT+8, 2025-10-4 07:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表