利益相关声明:作者与文中产品有直接的利益相关(开发者、自家产品等)

回忆起起高中宿舍里的夜晚,熄完灯安静下来以后,房间里只剩下风扇、翻身的声音,这时候最惬意的莫过于掏出mp3听午夜音乐电台,那时候具体听的是哪档节目,我已经记不太清了。可能是 MusicRadio 音乐之声,可能是本地的城市音乐台,也可能只是某个午夜情感节目里穿插的几首歌。不是某一首歌本身,而是主持人在歌和歌之间轻轻说几句话:介绍一下歌手,讲一点背景。你不用盯着屏幕,也不用主动搜索,只要躺着听,音乐就会自己慢慢展开。

后来听歌变得太方便了。歌单一点开,下一首自动接上下一首,效率很高,但那种“有人陪你进入一首歌”的感觉反而少了。

如果你也喜欢这种音乐电台式的听歌方式,我顺便安利一个播客:《野声宝库》。它是一个音乐分享类播客,顺便分享一下最近喜欢听的这期《百期特辑|华语情歌30年(下)2006-2020》

野声宝库

也正是这种感觉,让我想做一个小插件:能不能让普通歌单也多一点电台味?

我一直觉得,认真听一张专辑或一份歌单的时候,最容易被打断的不是音乐本身,而是“切歌”这个瞬间。

上一首刚结束,下一首突然开始。你可能还没从上一段情绪里出来,也还不知道下一首歌是谁唱的、来自哪张专辑、为什么值得听。于是歌单变成了背景音,音乐从“被听见”慢慢退回“被播放”。

所以我做了一个浏览器插件:每首歌播放前,它会像电台主持人一样,用一小段口播介绍接下来要听的歌,然后再自然进入音乐。

它现在支持网易云音乐网页版和 QQ 音乐网页版。你可以把它理解成一个很轻的小电台 DJ:它不会替你选歌,只负责在歌曲之间多说几句,让你更容易进入下一首。

它能做什么

插件的名字暂时叫「歌单电台」。

装好之后,在网易云音乐或 QQ 音乐网页版播放歌单,它会在每首歌开始前暂停一下,读取当前歌曲的信息,比如歌名、歌手、专辑,然后生成一段适合朗读的中文介绍:

接下来要听到的是来自xxx歌曲,收录在xxx这张专辑里。这首歌的情绪比较克制,旋律也很适合在晚上慢慢听。现在就一起来听一下吧。

目前它支持几种使用方式:

  • 不填 API Key:使用简单播报文案,加浏览器或系统自带语音朗读。
  • 填百炼 API Key:用通义千问生成更自然的电台文案,也可以使用百炼的云端音色。
  • 填 DeepSeek API Key:文案可以改走 DeepSeek 生成,但如果要用云端音色,仍然需要百炼 Key。
  • 选择系统语音:不走云端 TTS,免费、延迟低,也更适合长期使用。
挑选你的主播

下载和安装

因为它还是一个自用性质比较强的小插件,目前没有上架 Chrome 应用商店,需要用“开发者模式”安装。

下载方式:

  1. 下载项目里的 netease-intro-extension.zip
  2. 解压这个 zip,得到 netease-intro-extension 文件夹。
  3. 打开 Chrome 或 Edge,在地址栏输入 chrome://extensions/
  4. 打开右上角「开发者模式」。
  5. 点击「加载已解压的扩展程序」。
  6. 选择刚才解压出来的 netease-intro-extension 文件夹。

安装完成后,浏览器右上角会出现「音乐播报」插件。建议把它固定到工具栏,方便随时开关。

如果你之后修改了插件文件,或者我发布了新版本,只需要回到扩展程序页面,点击这个插件卡片上的「重新加载」即可。

第一次使用

安装后,打开网易云音乐网页版或 QQ 音乐网页版,随便播放一份歌单。

点击浏览器右上角的插件图标,你会看到几个选项:

  • 「播放前语音播报」:总开关。关闭后就和普通播放器一样。
  • 「AI 生成介绍」:开启后会尝试生成更像电台口播的介绍;关闭时使用简单文案。
  • 「音色」:可以选择浏览器系统语音,或者百炼云端音色。
    • 目前里面有几类比较有特色的声音,比如
      • Neil · 新闻主持男声 更像正经电台播报
      • Vincent · 烟嗓江湖男声 有一点故事感
    • 方言里还有粤语、四川话、上海话等。
    • 我自己最喜欢的是 Maia · 知性温柔女声,声音比较松弛,不会太甜,也不会太像播报,很像回忆中的声音(所以插件默认选择是 Maia😄)。
  • 「百炼 API Key」:用于通义千问文案和百炼云端语音。
  • 「用 DeepSeek 替代生成文案」:如果你更想用 DeepSeek 生成口播,可以打开它并填写 DeepSeek Key。
插件长这样

最省心的设置是:

  1. 音色先选择默认的 Maia;如果暂时没有百炼 Key,就改成「浏览器默认」或某个系统语音。
  2. 如果你有百炼 Key,就填入百炼 Key,并开启「AI 生成介绍」。
  3. 如果暂时没有 Key,也可以直接用,只是文案会变成比较基础的“接下来为您播放xxx歌手的xxx歌”。

它是怎么实现的

这个插件的核心其实不复杂,可以拆成四步:

第一步,知道什么时候要播下一首歌。

在网易云音乐里,插件会监听页面中的音频播放动作。当播放器准备播放新的音频时,插件先把这次播放拦一下,等口播结束后再恢复播放。

QQ 音乐的网页结构不太一样,不能完全照搬网易云的方式。所以插件用了另一套方案:定时观察页面底部播放器的信息变化,一旦发现歌名变了,就认为进入了下一首歌。

第二步,读取当前歌曲信息。

插件会尽量从播放器里拿到歌名、歌手、专辑等信息。

网易云这边优先读页面里的播放器对象,读不到就退回到播放栏 DOM,再不行就看页面标题。QQ 音乐则主要从底部播放器 DOM 里读取歌曲和歌手。

第三步,生成一段介绍。

插件会把歌曲信息交给 AI,提示它“请用中文,以电台主持人的口吻,为这首歌写一段 120 字以内的口播介绍”。提示词里还加了一点规则:

  • 第一首歌要有开场白。
  • 中间的歌要有自然过渡。
  • 最后一首歌要有收尾感。
  • 不确定的信息不要乱编。
  • 直接输出正文,不要 Markdown。

如果没有配置 API Key,或者接口超时、失败,插件就自动退回简单文案。这样至少不会因为 AI 挂了而影响听歌。

第四步,把文字读出来,再播放音乐。

语音有两条路线。

如果选择系统语音,插件使用浏览器自带的 speechSynthesis。它免费、快,而且不用上传文本到云端。

如果选择百炼云端音色,插件会调用百炼的 TTS 接口生成音频,再在页面里播放这段口播音频。

为了不让“主持人说完话”和“音乐开始”之间断得太硬,我还加了一个简单的淡入淡出:云端口播快结束时,歌曲会以很低的音量提前进来,等口播结束后再慢慢恢复到正常音量。这样会更像真正的电台串场。

遇到的问题,以及怎么解决的

第一个问题是:不同音乐网站差异较大。

一开始我以为只要拦截网页里的 audio 播放就行。但 QQ 音乐不太吃这一套,它的播放器状态和页面结构更复杂。最后我把插件拆成了“通用拦截逻辑 + 网站适配器”:网易云用播放拦截,QQ 音乐用页面观察。这样以后如果要支持别的网站,只要再写一个适配器,不必重写整个插件。

在QQ音乐的适配上花了最多时间

第二个问题是:AI 或 TTS 失败时,不能影响正常听歌。

听歌插件最重要的是不要打扰听歌。所以后台请求都设置了超时:文案生成大约 8 秒,语音生成大约 15 秒。失败就失败,插件会退回到简单文案和系统语音,不会卡住播放器。

第三个问题是:切歌太快时,上一段口播可能还没结束。

如果用户连续切歌,旧口播必须立刻停掉,否则就会出现“主持人还在介绍上一首,播放器已经到了下一首”的尴尬。现在插件里有一个 activeIntro 状态,每次新歌触发时都会取消上一段口播、清理淡入淡出计时器,并恢复原来的音量。

第四个问题是:系统语音质量不稳定。

有些系统自带中文语音听起来比较生硬,尤其在 Windows 上,不同机器可用的语音差异很大。所以插件会优先挑选更自然的中文语音,比如 Xiaoxiao、Yunxi 这类声音;如果用户手动选择了某个系统语音,就尊重用户选择。

第五个问题是:API Key 放在哪里才安全。

Chrome 插件前端没有真正安全的“藏 key”方式。只要把 key 内置进插件,别人拿到插件包就有机会看到它。因此我最终删掉了内置 Key 和免费次数逻辑,只保留用户自己填写 Key 的方式。它不如“开箱即用”那么丝滑,但更诚实,也更安全。

适合谁用

这个插件不适合所有听歌场景。

如果你只是想开一份歌单当背景音,它可能会显得有点啰嗦。但如果你喜欢认真听专辑、听主题歌单,或者想让一份歌单更像一档节目,它会有一种很微妙的仪式感。

它也适合这些场景:

  • 晚上一个人听歌,希望有人帮你轻轻串场。
  • 播放一张不熟悉的专辑,想先知道歌手和专辑背景。
  • 做自己的主题歌单,想让它更像一档私人电台。
  • 给朋友放歌时,希望每首歌开始前有一点说明。

现在还不完美

目前它还是一个很早期的小工具,有几个明显限制:

  • 只支持网页端,不支持桌面客户端和手机 App。
  • 歌曲介绍依赖网页能读到的信息,遇到页面结构变化可能会失效。
  • AI 生成的背景介绍不一定百分百准确,尤其是冷门歌曲。
  • 云端音色需要用户自己的百炼 API Key。
  • QQ 音乐目前主要靠观察页面变化,稳定性可能不如网易云方案。

但对我来说,它已经完成了最重要的一件事:让“下一首歌开始之前”不再只是一个空白。

由于目前插件还在上架Chrome 应用商店的流程中 ,因此需要手动下载插件。
插件下载地址:song2radio(如果喜欢,也请给个仓库一个star🥺)

如果无法访问,也提供了网盘下载:https://pan.baidu.com/s/1lFgs92MQFrOIQDoDNMf89A?pwd=s4ws

最后

我做这个插件,不是为了把听歌变得更复杂。恰恰相反,我是想让自己少看一点屏幕,少查一点资料,少在歌和歌之间走神。

好的电台主持人不会抢音乐的风头。他只是把门轻轻推开,告诉你:下一首要来了,你可以认真听一下。

这个插件也是这样。

如果你也喜欢把歌单当成一段旅程,而不是一串文件列表,它也许会刚好适合你。

 

2
0