一拉一扯,磁带行者
by SouthFox
2026-01-18
磁带播放器就这么悄悄退出了历史舞台,而我现在跑到后台拿到了它的联系方式。

契机
现在是一月份都过去大半的二六年了,我却还在折腾磁带播放器,是的,流媒体很方便音质也好,那我为什么不用呢? 因为我是老用户与狗,在运营商那混不到什么好脸色,套餐流量额度还维持在七八年前的水准,不怎么高。 音质上我更是个「木耳」,听不出流媒体音质之间的区别。不过这些问题可以通过在应用里开启缓存解决所以我也没什么抱怨, 但在去年七月份的早起赶工出门时手机没握住让手机从楼梯上摔到楼下成功报废,也是体验了一把现代社会没有智能终端的尴尬(没 戴现金过地铁都要靠好心工作人员「施舍」)。当时上午就紧急下单了(还有十几分钟就过了能下午当日送的点了)新手机,下午 到货时没配置多久就傻眼了……这手机没有先进的 3.5 耳机接口!只有一个干巴巴的 type-c 接口,没办法,只能再去网上买了 个 3.5 转 type-c 的 DAC 用着。不过我一直耿耿于怀,毕竟耳机要绑个「小尾巴」太麻烦了,每次从手机切换到电脑都要多 一步操作不说,这个钥匙般大小的转接头还经常要我好找(不要指望对有 ADHD 特质的人能放好东西)。
在十二月时,看到了奇客的报道 奇客Solidot | 美国 Z 世代再次青睐实体媒介 动了想折腾实体介质的念头。黑胶 CD 这些我没怎么 用过没什么兴趣,但磁带,似乎还能从模糊的童年记忆里翻找出一些场景,一个磁带播放器放入一卷磁带播放英语录音什么的。好吧,那就来 看看磁带播放器吧。
下单
动了心思后就在淘宝上和视频平台乱逛,了解到一些大概信息。本来是想买更现代的近产设备,毕竟时代在发展,科技在进步不是吗?还能 享受到 type-c 接口和更大容量的电池……但我看了下在小众领域可不是这样的,当时的磁带生产线清出的那么快,而这个市场现在又那么 小众,就造就了一种「绝地天通」断代级别的现象。好的解码芯片已经无法在现代由小厂家中生产出来了,看到一些临近出的机子甚至 没有自动翻面的功能,而自动翻面功能在千禧年一众旗舰磁带播放器可是标配功能。折腾小众的播放器确实有格调但是要自己每隔半小时或四十 多分钟手动拿出机器来手动翻面也太「装」太折腾了。
最后还是选择了以二手的磁带热潮时期出产的播放器为目标。因为觉得没什么精力在二手市场「狩猎」和折腾维 修(虽然我有嵌入式经验但已不想再握住焊枪了)及养护机子了,所以就找了个专门做这种的店铺,里面的溢价我就当成保险费了。最后选择是 索尼的 WM GX677 型号。看重的主要原因是录放一体机,意味着我可以用机器的麦克风输入来录点磁带,虽然效果不如专业做这些的卡座机,不 过有就行了,或许这个磁带产生的「摇晃飘离」感正适合我喜欢的 lofi 音乐呢。到手后确实感叹世纪初那种集成电路大爆发的科技进步,复杂的 机械结构和操作逻辑就这样压缩在了比磁带大不了多少的机器里,好像我对这种既有笨重实物又有先进集成电路的「混合感」的物件没什么抵抗力呢。
然后是磁带,这个就直接从「二手 磁带 一类」的搜索结果挑了家最多人买的店铺买,虽然很战损成色,不过能用啊。最后就是一个 3.5 对 3.5 的 线,将播放设备从 3.5 输出在输入进 GX677 麦克风口就能实现录音了。
电台
播放器首先比磁带先到货没磁带的情况下就先听了听 FM 电台的功能,在刺啦刺啦的噪声中找到一个电台还是挺新奇的,在这时才发觉现在手机已经不 支持插个耳机当天线收听 FM 电台了啊……
稍微带着这个播放器听着电台出去走了走,感受是现在的无线电干扰也挺大的,走到某个路牌下或者路过某个店铺就能明显感受到刺啦的 杂音。听久了电台发现基本都是交通台和精准针对目标人群的广告例如保健品或装修优惠啥的,不由感叹一代产品就盯着一代人使劲薅啊,或许 三四十年后现在「传统」搓玻璃屏幕设备广告也都是保健品和什么保养手术,更现代更新奇的广告只会在脑机接口设备上展示。
下载
磁带到货后首先是就拿一些 lofi 电台的歌试了下,首先是用 Livestream - Chillhop Music 的……API 获取音乐文件地址 然后 MPV 播放器播放录入到磁带机里。效果十分不错,这种 lofi 味搭配磁带机的「摇晃暖糯」感确实更有味道了。
不过除了 lofi 音乐我还想听点网易云上的音乐。嗯,简单点可以通过一些工具将手机上下载的专有 ncm 格式文件转换 成 mp3 就行了吧,不,其实还有个更简单的办法就是通过网易云的……API (当个游走在自由软件和专有平台的狐不得不点了挖 掘 API 的技能点)然后直接获取 mp3 地址,然后就能直接下载了。去年初我还将相关 API 封装了 个 Emacs 包: elisp/enep.el 方便自己使用。因为现在只有通过 ID 直接下载歌曲的功能(其它功能需要数据设计,而歌曲、 歌手、专辑是经典的多对多关系,想想就觉得麻烦就没继续弄了)。不过就算这样在 Emacs 里也能方便下这个过程,意识到网易云 WEB 端可以轻易复制类似的链接 https://music.163.com/song?id=478507889 从里面获取 ID 然后通过写好的函数下载歌曲。 就糊了个小函数:
(defun my/direct-download-netease-music (link)
(interactive (list (org-cliplink-clipboard-content)))
(let ((music-id (car (last (string-split link "id=")))))
(enep-download-music music-id)))作用直接读取剪贴板的内容并 split 链接读取到 ID 丢到下载函数。
制作
那么有了歌曲就该来制作点混音带(MixTape)了,在七八十的洪荒年代的人们没有像现在应用里一键新建个歌单那么简单,只能自 己从广播录音或从自己有的磁带「裁剪」转录到一张磁带上,这点上可以将混音带理解成私人制作的喜爱歌单吧。在现在自己动手做 一个混音带有着实体形式的喜爱歌单也是挺酷的一件事了。
但在操作中问题接踵而来,首先就是为了方便 GX677 的快进快退选歌功能,每首歌之间要加个三秒空白时间;播放列表的的歌要方便添删和移动 歌曲的移动顺序;六十分钟的磁带一面只有三十分钟,要方便看出每首歌时间并计算总和时间(包括每两首歌之间的空白三秒)。这些需求如果让我 自己慢慢算拿握可能很快丧失热情了,到那里能够找到能够在两首歌之间加空白段的播放器和管理歌曲并计算歌曲总和时间的软件呢……?
幸好我知道有歌软件能做到这些,就是 Emacs ,准确来说是 Emacs 里的 GNU Emms 包,可以很方便查看歌曲元数据和管理播放流程。
首先是每个歌曲之间加个 3 秒空白时间,因为 Emms 贴心的将播放下一首弄成可以自定义的,所以只需要:
(setq emms-player-next-function
(lambda ()
(run-at-time
3 nil
(lambda ()
(emms-next)))
))就是将直接运行 emms-next 改成了用定时器在 3 秒后执行,完美。
之后是管理播放列表,这方面当真是了不得,按下快捷键添加某首歌到当前的页面、能用 Vim 的方式选择多行 按下 D 删除、按下快捷键将某首歌上升或下降顺序……欸,Emacs 你赢了,我甘愿将我的热情和心血奉献给你。
最后是便捷查看歌曲时长并算出整体时间,这方面虽然 Emms 的歌曲信息显示是以「歌手」- 「专辑」- 「歌曲」名格式显示的,但是其实相关 元数据在文本属性中(就像网页一样, <p info="xxx">Hello World!</p> ,实际显示的文字背后可以装点数据)已经有包含了歌曲的长度 信息了,因为 Emms 贴心的将歌曲信息查看函数弄成可以自定义的,所以只需要:
(defun my/emms-info-track-description (track)
(let ((artist (emms-track-get track 'info-artist))
(album (emms-track-get track 'info-album))
(title (emms-track-get track 'info-title))
(mtime (emms-track-get track 'info-playing-time)))
(format "%s - %s - %s - %02d:%02d"
(or artist "Unknown")
(or album "Unknown")
(or title "Unknown")
(/ mtime 60) (% mtime 60))))
(setq emms-track-description-function 'my/emms-info-track-description)就能在歌曲管理页面显示歌曲长度信息了,最后效果类似于这样:

最后是计算所选歌曲的长度信息,这个就更加直接了,写一个函数获取选择区域的文本提取出文本属性中的歌曲信息然后循环遍历加和(顺带也加上 三秒空白时间):
(defun my/emms-playlist-sum-duration (beg end)
(interactive "r")
(let ((total-seconds 0)
(gap-seconds 3))
(save-excursion
(goto-char beg)
(while (< (point) end)
(let* ((track (emms-playlist-track-at (point)))
(duration (and track (emms-track-get track 'info-playing-time))))
(when duration
(setq total-seconds (+ total-seconds duration gap-seconds))))
(forward-line 1)))
(let ((hours (/ total-seconds 3600))
(minutes (/ (% total-seconds 3600) 60))
(seconds (% total-seconds 60)))
(message "Total Time: %02d:%02d:%02d"
hours minutes seconds)))))这样子一套组合拳下来就完满了,方便管理歌曲和计算总体时间。三十分钟一面的磁带准确来说还会多出两分钟所以最后定在了以三十二分钟为一面,不断 折腾中也用到了 sayonara wild hearts 这种轻快的一两分钟游戏原声填补(我折腾磁带好像也跟这游戏前几年出了磁带版游戏原声带有关,这 游戏真是给我下降头了!),最后余下一分钟的实在补不足的就用 O Superman 这种前后没什么起伏的轻人声硬补。
实际录制只要将磁带快退到开头然后按下磁带录音键等个六七秒按下 Emacs 里的回车播放就能进行录制了,GX677 录制并没有什么特殊功能,所以要 自己在实际录制前试录一段,音量如果过高就会出现类似「炒豆声」的细微爆裂声。录完之后按下 GX677 的播放翻页一体的按键转面继续录完剩下的歌, 就能得到一份自己制作的混音带了!
总结
其实,我只是在远处观望过磁带盛行的时代,不过可能这种若有若无的感觉让我着迷吧。话说,感觉我的风格就是在追逐旧日 幻梦一样,就像我从来没经历过的时代、从来没体验过只在书本上描述的「开放互联网」,不过,至少我现在有个磁带机了。

