![]()
1992年,港乐鼻祖之一、被谭校长尊为“歌神”的许冠杰宣布退出乐坛,在TVB举办了《许冠杰光荣引退汇群星》晚会。尾声时,他分享了一桩趣事。
他说,《急流勇退》本是写给张国荣作为退休纪念的。但后来从报纸上看到,张国荣自己已写了一首《风再起时》,于是“害羞”的许冠杰便再没提起此事。《急流勇退》就像歌名预示的那样,巧合地成了他写的最后一首歌,收录于最后一张大碟,并在引退晚会上送给了自己。
不过,我的关注点落在了他口中的“大碟”上。我一直好奇那是什么。从我听歌起,接触的就是数字音乐——从网站下载音乐文件,用千千静听播放,那个界面,真是满满的古早梦核感。
后来流媒体兴起,下载听歌渐渐成为过去。点一下就能播,歌单云端同步,方便又快捷。直到有次朋友买了张专辑,没有CD播放器,听说电脑能导出音频,便请我帮忙。那次我才真正弄懂“大碟”与“专辑”的含义。
流媒体时代,我们听歌几乎都是碎片化的,偏爱哪首就收藏哪首。可在CD、黑胶统治的实体唱片年代,唱片公司很少单独发行单曲碟。背后是实实在在的成本考量:一张标准CD能刻录74分钟音频,可放下十几首歌。
如果只刻一两首单曲就单独发售,盘片、外壳、印刷、包装、物流——所有成本摊不开,极度浪费,售价会高得离谱,无论唱片公司还是听众都无法接受。只有将十首左右的作品整合收录,填满碟片合理容量,才能压缩单首歌的分摊成本,让定价亲民、量产可控。这是唱片工业最基础的商业逻辑。
除去成本,专辑更是歌手的完整创作故事。一张大碟有统一的风格、概念和情绪线,曲目顺序精心编排——有铺垫、有高潮、有收尾,是连贯的听觉叙事,而非零散歌曲的堆砌。
时间飞逝。当年那台陪我很久的老电脑早已卡顿老旧,一次大扫除时,我索性把它当废品扔了。但不知为何,我拆下了光驱,保存至今。
偶然翻出这台老光驱,我才发现:机身面板上自带3.5mm耳机孔、音量旋钮,还有简单的播放控制按键。原来它完全可以脱离电脑独立使用。这么实用的设计,当年的我竟从未留意。
但它只有一个二合一的播放/切歌按键,功能简陋,当正经CD机用实在谈不上优雅。而且光驱需要12V与5V双路供电,接线繁琐,日常摆放和使用都很不方便。
所以,要改造这台老光驱,必须解决两个问题:播放控制与电源。电源最好办——买个12V直流电源,再用经典的LM2596降压到5V,这样12V和5V就都有了。看机身上的供电要求,3A的电源就足够,还有一点冗余。
我起初天真地以为,光驱主控板本身就预留了扩展按键接口,只是原厂没引出,稍加接线就能完善操控。拆开后才发现想得太简单。只好上网翻资料,没想到早有前辈做过同款改造。
他的方案是用AT89C52单片机做主控,依靠公开的ATAPI、MMC协议文档,实现了光驱音乐播放控制。但参考后发现,他开源的代码完成度很低,功能简陋——没有音量控制,也没有播放模式等基础功能,远达不到我想要的使用体验。
于是,借助前辈分享的协议资料作参考,我决定从零开始自研开发,亲手编写程序、搭建电路,打造一台属于自己的光驱专用音乐控制器。
说干就干。要实现光驱的完整播放控制,核心在于与它通信。IDE光驱用的是ATAPI协议,底层是并行总线——这和咱们平时熟悉的I2C、SPI完全是两个世界。
I2C、SPI是串行协议,一根数据线一位一位地传,优雅、省脚、省脑子。而并行总线呢?一次传16位数据,数据线、地址线、状态线、控制线……一大堆引脚同时干活。你得精确控制每条线的时序,什么时候写、什么时候读、什么时候中断,稍有一点偏差,光驱就根本不搭理你。
更要命的是,ATAPI和MMC协议栈的文档动辄几百页,全是英文,寄存器、命令、响应包结构密密麻麻。我花了整整两周,才把最小可用协议栈跑通——从识别光驱、读取光盘目录,到播放、暂停、切歌、获取曲目时长,一步步啃下来。那种感觉,就像在跟一个90年代的固执工程师对话,他说:“你得按我的规矩来,少一个字节都不行。”
搞定通信只是第一步。我还想给这台播放器加个屏幕,显示歌曲序号、播放时间,甚至是一些小图标和中文字符。但问题来了:我用的单片机片上Flash只有8KB。
8KB什么概念?一首低码率的MP3都塞不进去。而一个16×16的中文字库就要几十KB。显然,完整字库想都别想。
于是我开始“挤牙膏”。首先,英文和数字用5×7点阵,每个字符只占5字节。常用图标——播放、暂停、上一首、下一首、光盘、文件夹——自己手绘点阵,一个图标也就十几个字节。中文字符呢?我只把需要的几个字做进程序里,比如“歌”“曲”“时”“分”“秒”“播放中”。每个字16×16点阵占32字节,十个字也就320字节。
再加上精简的菜单逻辑、状态机复用、代码反复重构……最终整个固件塞进了7.8KB。那种感觉,就像玩俄罗斯方块到最后一行,恰好消掉,舒坦。
硬件搞定了,固件硬挤出来了,接下来就是PCB打板。
这次我给自己定了一个原则:全部用插接件。不是说贴片元件不好,而是我这种手残党,0402、0603的电阻电容,风枪一吹就飞,烙铁一拖就连锡,调试的时候随便丢一个都找不着。所以这次我彻底妥协了能用插接件,就坚决不贴片。
于是板子上你看得见的:电阻是1/4W的色环电阻,电容是瓷片或者小型电解,主控芯片用的DIP封装的STC51,晶振是圆柱形直插,屏幕是排针排母对插,按键是6×6×7的轻触开关,红外接收头、编码器、DC电源插座、IDE接口的简易牛角座……清一色直插。
评论 (0)