|
87楼
楼主 |
发表于 2020-5-9 08:43
|
只看该作者
来自 广东深圳
本帖最后由 DETHONRAY德森瑞 于 2020-5-9 09:28 编辑
简单即美 prelude DTR1开发的故事
截拳道从不虚张声势,不走迂回之路。它直指目标。两点之间最短的距离是直线,此谓之简洁。 --李小龙 《武道释义》
以李小龙先生的遗作《武道释义》作为开始,其一是这本书的哲学意义曾经深深的影响过无数的人,也在充满嘈杂的世界中,成为一代又一代人的静心良药。其二,在音频发烧这个圈子中,近10年整个形势,和六七十年代的武坛一样,百花齐放,“门派”层出不穷,掀起涟漪不断。
2018年底,德森瑞科技开始构建团队,准备定义自己的音频产品。首先选取的目标是数字播放器,在2018年立项做数字播放器,风险很大的,因为在市场上,数播的品牌林立,有世界级大牌,有初出茅庐的不少新品,价格区间也是从几千到数万一应俱全。产品的定位是首先需要解决的问题,在这个过程中,也有过外观、声音、价格的挣扎。最终定位主打声音,因为这是音频这个行业的根本出发点,在素质和听感的权衡上,以听感为准,素质作为基本的保证。作为新品牌,必须考量产品的性价比,只有理性的价格,听感良好的播放器才能真正敲开市场女神的幸运之门。
很多目标的确立,经过讨论和取舍就可以有一个产品的框架出来。但是作为一个产品,必须经历工程的考验。如果一张蓝图,没有良好的工程落地实现,最后都会成为无源之水、无本之木,呈现给用户的就是众多的系统级bug,长久的不良用户体验会消磨掉用户对品牌的信心。
在系统的架构上,提出3个基本要求:1. 不用很“潮牌”的IC,确保不会在起步阶段跳入“白老鼠”的陷阱,另外在成本上可以可控,在最终产品上能保证“低价靓声”。2.产品功能做减法,设计功能的宽裕,但是落实到便携性上,功能服从便携性。在结构设计上,极限利用所有器件之间的配合,在散热有保证基础上,结构和电子做深度配合。3. 系统级的高效和稳定性。在电子设计上,做到电路精简,在保证稳定性冗余的基础上,不添加任何“花巧”特性。软件上坚持每行代码的效率和稳定性优化,即使第三方库引入,必须要阅读核心部分代码,跟踪代码流程,排除“连锁反应”。
所有的规划和计划,最终都要落实到个人。建立团队的根本是需要经验丰富的工程师团队,在通过“同事圈”的推荐和交流,锁定电子、软件、结构基本的框架,要求在各自的领域至少10年的工程经验。经过几个月的反复交流和沟通,几个”臭皮匠“终于凑齐。作为都是各自领域的”老手“,大家都明白”定制“的难度。在做通用领域,参考设计基本可以完成项目的百分之八十的工作量,而在小众的”发烧“领域,通用的东西只能做出通用的效果。真正的磨合是从电路设计开始的,因为电路不能确定,结构外观、软件设计都只能处在待命状态。
在音响的领域,大到千瓦的舞台音响,小到FM收音机,想在声音上“安身立命”,电源是重中之重,只要解决电源问题,一半的工作量就基本完成。因为只要电源足够干净、效率足够高,后端的DAC、LPF和耳放即使沿用标准电路都能出不错的声音,就是所谓“一耳朵”的差异。在电源的方案上,通用的升压降压方案,基本不在考虑范围之内,因为DC/DC升压,再经由LDO降压,效率已经远远低于85%,这对于大动态多层次的音乐信号来说是致命的,从听感上来说就是弹性和力度,层次都是被直接打折扣的。最终方案采用定制电池组和充电电路,采用正负8.6V的高密度电池组。因为考虑到充电电路的面积和发热问题,决定将充电电路外置,以充电器的方式来设计。而在充电器设计上,必须规避掉高压输出被用户误用连接手机的风险,选用音视频的通用接口Micro HDMI。这个Micro HDMI的充电器,被众多的烧友所诟病,认为是“无脑”的设计,实际上也是在工程设计上的“妥协”。如果一定以USB TYPE C 来设计,项目又会陷入在体积和散热的“泥潭”之中。后来DTR1在销售后,又经历近一年的优化,现在才有一个“相对优化”的USB C口的充电方案,当然这是后话。
在DAC,LPF和耳放的设计上,DAC是基础,是所谓的声底。当时选型方案众多,ESS/Cirrus Logic/AKM三家是市面上的主力,ESS的IC以高解析、动态凌厉见长,从听感上做到耐听和舒适,能细腻体现感情难度最大,就直接排除在外。随后选择CS4398和AK4490、AK4497设计作为设计调试对象。当三个调试版回来后,一开声,AK4490的中正和耐听,真如AKM在官网描述中所言:“天鹅绒一般的声音”,相比AK4497的力量和素质感的增强,功耗的翻倍,让做小体积,更便携的目标很难实现,遂将AK4497排除在外。CS4398在和AK4490的比对中,有其自身的特点,声音走向偏薄一点,简单清丽的风格,在对流行的演绎上,明显多份解析,少一分温暖,故AK4490是首选。在AK4490的选型确定后,就到LPF部分的和耳放部分的细调,耳放部分其实没有太多的繁杂的选择,因为要保证在染色少基础上,足够低的失真和强大电流输出能力,AD8397也是为数不多的经典IC之一,很多DIY的烧友戏称其力大声粗,其实根本是供电不够优质导致工作状态不佳导致。在音色的最终调配上,是大量器件适配的过程,本质上是一个经验预判和试验的迭代过程。运放芯片的选型也经历了NE5534和OPA1611的长时间不同版本和厂家的IC的置换和周边电路的匹配过程。经过3个月的反复试听对比,我们筛选出几套方案,给不同烧友试听和获取反馈信息,最终确认为TI OPA1611。大部分的烧友认为该版本的LPF,在流行上的人声氛围更好,更有倾诉感,器乐和人声搭配更得当;在对古典和摇滚动态要求高的音乐类型上,杂食性更好。
到此为止,很多人认为一个播放器应该可以定版完工,投递到烧友手中了。事实上,DTR1软件在这个阶段,版本仅仅在0.3版本,解码部分是运行在裸的Linux操作系统之上,SD卡中文件管理、热插拔事件的响应、GUI显示部分和不同事件的优先级调度管理都只有一个粗略的原型。而这一切是用户体验和声音继续优化的开始。如果说电子部分决定声音的框架,软件部分则是赋予其灵魂和骨肉。
一首歌曲存储在SD卡上,经由操作系统读取到内存之中,由解码系统进行格式解析,转换为PCM码流,再将PCM码流投递到操作系统音频环形Buffer中,Buffer中的数据再经由操作系统经过IIS总线发送至DAC。这个过程的的效率至关重要,读得足够快,解码足够快,环形Buffer中生产者消费者的调度关系的优化。无不影响声音的流畅性,更重要的是按键的响应、SD卡的热插拔事件、电池电量的监控、播放时间的开始结束、播放时间和歌曲信息的更新这些事件在不定时插入到数据流的处理过程。这一切的关系,看似简单,在实际中,必须有一套实时性很高的软件系统来实现管理调度。归结到一点,唯有效率和调度策略才能保证声音数据流的连贯性。也应了武学中一句俗语:唯快不破!
在操作系统的选择上,Linux是不二选择,因为所有代码完全开放,所有技术细节都可以进行外科手术式的定制,解码部分也是采用开源组织的解码库进行优化。在操作系统和解码上,作为整个音频系统的基础,我们放弃部分开源组织的软件设计思路-在通用的软件设计上,为了实现代码的通用性和适配性,都建议是降低耦合度,以便于逻辑扩展和维护。但是在音频数据传输通路上,越实时,声音会越流畅。在工程学和行业特点相冲突时,谁是主导者?团队在此发生争论,因为都是十多年的老手,每个人都有自己的习惯和定式。当“老狗遇到新把戏”,只有尝试、尝试、尝试。尝试中的负面有时让人抓狂,因为努力的结果是变差,完全不是自己预想的那样,哪怕效率有1%提升也是鼓舞。一个多月,不停的修正逻辑,改变方法,在熟悉的代码海洋里面尝试打破,重新封装,终于将解码和数据Buffer的效率提高到预期的地步。有时候,知识和经验受到时间的限制,但是求知和创造欲却能够持续不断,唯有打破,才能更好。
当操作系统和解码部分到预期后,进入到GUI系统,作为在操作系统和平台上工作过数十年的工程师,面临GUI系统开源的架构问题。国外大名鼎鼎的QT、GTK,国内的芯片原厂的自带方案、MiniGUI。大部分的方案,都会基于芯片原厂的方案走,因为已经经过验证测试,不用“自造轮子”,可以缩短开发周期。Qt和GTK首先是被排除在外的,Qt的商业化,很多良好的机制可以借鉴,但是不能开源。GTK和Qt两者已经统治了整个Linux的桌面系统,不再是10多年前那样轻量级的选择了。在MiniGUI的方案前面犹豫过,但是考虑在Android的强势碾压之下,MiniGUI已经早就放弃自己蝇量级的初衷,变得越来越庞大和互联网化。在早期版本上,对Linux内核的支持并不算友好。既然不满足于当前的,是否考虑自己开发一套,充分利用Linux的多线程和阻塞机制,来实现实时性的消息投递和事件处理呢?没有什么能比起撸起袖子来干更重要了!首先分析需求,定义功能化模块图,不同分层的接口规范,一周多时间,基本的框架就下来了。接下来就是细化各个模块的实现,对于在开源社区活跃十年以上的工程师来说,80%的工作是搭积木游戏,选取合适的高效库,诸如字体、图片处理、多国语、输入输出系统等诸多开源软件。首先进行移植、测试和分析,填充整个架构,两个多月,素材基本都到位。如何利用这个高质量的软件模块素材进行协调工作,能将解码和操作系统无缝粘合到一起,保持稳定、高效就需要系统级的定义和把控能力。
事件系统和调度系统是GUI的核心,也是软件部分的中枢神经。如何能快速灵巧的响应,不滞后,需要有一套良好的调度策略。所有策略当中,保持声音数据为第一优先级,在这方面可以“偷师”的是Windows下的”ASIO:Audio Stream Input Output”,如何降低对音频信号流的延迟,在Linux 系统和解码上已经过最难的一关,但是按键响应、卡的热插拔、歌曲信息的更新,这些是作为一个有按键和屏幕显示的数播的基本功能。如何做到插入但不影响音频数据流的流畅度是相当考验系统设计能力的事情。Linux这个先进的操作系统优势在这里得到很好的发挥。充分利用Linux中多线程(并且是轻量级线程)的优势,让不同事件能够在时间的纬度并行,在并行当中进行优先级排序。在排序过程中,如果轮转发生突发,可以利用阻塞机制,继续让时间给更重要的送数据流。设计理念一旦明晰,剩下就是详细的软件实现,又经过3个多月的实现和测试,基本的GUI系统和解码、OS终于能稳定的播放通用的格式。整个过程从0.3演化到1.0版本,经历大约半年时间。这半年,两位工程师基本都是老僧入定一般有条不紊的协作沟通,可贵的是在设计思想上没有冲突和磨合,大家在沿着一条线的左右两边交替前行,相互完美的配合,都在运用自己的智慧寻求最佳路径。如果有过深度团队科研经验的人,才能理解何为“拥有整体和本来面目”,因为“整体和本来面目”是不断流动和变化的。如果当中一人锚定于特定观点,他将不能追随“整体和本来面目”进变化和前进。优秀的团队从来不需要太多人,而是需要灵魂和目标感一致的人。
2019年元月,首批30台通过烧友实现国外的销售,正值中国新年前。这个春节注定是无法安静度过的,一周后,收到不少国外烧友的邮件反馈。集中在两点上,第一是播放习惯,第二是耳机的适配性。诸如播放误触导致跳歌、DSD格式支持、切歌的Noise、更多播放模式、电池电量显示不准确、多功能键的定义等等。但是在软件稳定性、定价和声音上,国外烧友给与充分的肯定。整个春节,就在忙于修正烧友的Buglist,基本以每几天一个子版本号的速度在更新。最终经过大量的反馈和修改,通过定义低、中、高三档增益,可以很好适配动铁、动圈、头戴三类耳机,也在这个过程积累第一手关于耳机音量曲线的数据和经验。到4月份,软件版本到了2.3左右,中国的烧友通过Headfi烧友圈逐渐了解到DTR1。在国内的最大问题是软件的细节,毕竟国外和国内对播放模式和使用习惯上差异较大。国内烧友对操控细节的关注和内容显示比国外要求高很多,软件团队对汉字显示和多国语的支持进行继续优化。随着越来越多烧友的加入,我们发现个性化定制,变成一个不可完成的任务。这时面临的问题是必须进行国内外需求的收集和分析,确认优先级,共性的问题列入修改列表,特殊的定制暂时搁置。这个迭代的过程一直延续到2019年的10月份。随着国内需求的加入,对于国外的烧友会产生不习惯,继续开始细化,添加可选项。在版本3.2上基本停止对国外用户反馈的修正。3.3-4.0版本,是集中收集国内用户的反馈,同时开始试听巡回,充分听取不同烧友的意见反馈。根据不同使用场景添加功能,如果对车载输入和小众耳放匹配支持,对不同按键使用的调整和修正,针对烧友要求开发大字版本,让小屏幕在浏览是更加舒适。大字版本最终成为大家比较喜欢的最终版本。在走向市场面对烧友的过程,是一个真正离开“研发”的过程,必须让昨日认为正确的自己”死去”,去认知他我的过程,仔细学会倾听和学习。也只有清空自己的杯子,方可再行注满。
作为一个新生的公司,在经历一年多时间的成长和磨砺,当回国头看这段的高高低低,曲曲折折的路,细想也没有努力之处,唯有平凡而无特别。用自己的膳,做自己的法事,挑自己的水,累了,倒头便睡。无知者会取笑我们,但智者却会明白我们。
2020-5-6
|
|