Music Launcher作为原生控,我有基本的了「自我修养」——订阅 Apple Music。诚然,Spotify 甚至国内音乐平台的体验都要比较好,但是作为「儿子」的 AM 有不可取代的优势,就是与系统的结合更密切一些。AM 的推荐榜单对我来说只能作为「随便听听」,本人一点也不感冒。通常,我会定期从Live iTunes USBillboard Top Chart两处挖掘感兴趣的当红音乐。前者是单曲在 iTunes 上的实时销量排名,后者无必再多解释。这两处并不会有现成的 AM Playlist,因此我们借助 Workflow 完成这一任务。

提要

(V1.2) Cron 任务改用 Python 执行;修改了部分后端代码,把 Acoustic 和 Live 版本的搜索结果也都统统清理掉了(该结果非榜单结果的情况下),尽可能还原榜单原曲;由于 iTunes Search API 有限流机制,搜索任务也限制了只处理前 50 首歌曲,过多的请求仍会被禁止访问。

分析

Workflow 提供了很方便的音乐处理相关 Actions,这给本流程提供了必要的条件。这看似很方便,但是种种随之而来的坑,一步一步地消磨了我的嘴角。这些坑,包括:

  1. 欧美音乐有一个现象,便是制作人会就当红歌曲发行各种版本的单曲,包括与不同 DJ 的 Remix、Acoustic 等。Acoustic 本身不抗拒,俗称「不插电」有不一样的干净的感觉,但是种种 Remix 就不那么讨喜了。其一,DJ Remix 很「吵」(个人观点),很多时候破坏了我对原曲的兴趣;其二,大多数情况我是通过听榜单来挖掘喜欢的音乐,一首全新的歌曲开始就听到 Remix 版本会让我无法辨别原曲是什么;
  2. Workflow 不能删除 Playlist。对于这类流行榜单,时效性比较重要,要不断地添加新 Playlist。若把榜单添加到 Playlist,而 Workflow 不能删除 Playlist 会使每一期的 Playlist 不断堆积,最终污染了 Playlists 的环境;
  3. Workflow「Add to Playlist」的动作十分缓慢,以每首歌曲耗时 3 秒计算,30 首歌曲要耗时多达一分半钟,这显然不是想要的体验;
  4. Workflow 通过 Action「Search iTunes Store」能够得到 iTunes Media,但保存只能得到关于歌曲名、URL 的文本,导致通过搜索获得的结果可以直接播放,一旦从保存的文本中播放,则会播放其整个专辑而不是单曲。

实现

针对上述的局限,做了折中的处理:

  • (针对1、4)通过后端代替 Workflow 作前期歌曲搜索。简单来说后端做了大量的检索工作,一方面检查歌曲搜索的正确性,如同一曲名不同歌手的结果会排除;另一方面解决 Remix 版本太多导致搜索结果得不到原曲的问题。因为正确的搜索结果很多时候不是来自第一个搜索结果,假如以每首歌曲搜索 1.5 次计算,30 首歌曲将要搜索 45 次,即需要将近 1 分钟时间等待全部搜索结束(推测,未考究)。后端搜索以 ID 为结果返回,免去了本地检索的工作,即 30 首歌曲就是 30 次搜索。
  • (针对2、3、4)每次播放都通过「Search iTunes Store」以 ID 重新搜索,否则不能直接播放。同时,考虑到榜单是一份快餐,听过一遍以后挑选了喜欢的歌曲就很少重复再听完整的榜单,所以没有必要忍受「Add to Playlist」动作缓慢和 Playlist 无法删除的折磨。

最终,通过对比结果可以看出(左: Before 右: After),处理后基本摆脱了 Remix 的困扰。虽然仍要消耗本地等待的时间,但这既是无奈之举又在可以接受的范围之内。Remix Issue

其它

除了两个动态 Playlists 以外,还有一些本地曲库相关的选项,各位可以按需删减。以本人自身使用习惯来说明,几个选项的作用分别是:

  • Nap Music:午休时收听的本地随机 10 首音乐,音量自动降低;
  • Newest 30:本地最新添加的前 30 首音乐。特别值得注意的是,这里做了一定处理,可以通过下图看出(左: Before 右: After)。未做处理前,简单筛选可能会出现最近添加了整个专辑导致前 30 首音乐被独占的尴尬局面。Newest 30
  • Random 30:本地随机 30 首音乐;

说明

  • 后端搜索十分耗时,同时出于自身使用习惯,目前每个榜单只会返回最多 30 个结果,日后有待改善;
  • 本流程已经使用了相当长的时间了,虽然后端单次处理时间长偶尔会出错,但尚属稳定,短期没有优化的计划,搜索失败(AM 本身未有记录或搜索出错)都会以通知的形式告知,失败通知未必都是 AM 本身未有记录,请自行按需手动搜索;
  • 如有任何推荐榜单(偏好欧美音乐,风格不限),敬请留言告知。

附件

Workflow:Music Launcher

V1.4 [2018-02-04 22:00]

  • Fixes for Top Playlists.

V1.3 [2017-09-01 21:00]

  • Fixed an issue of Top Playlists when the number of songs is less than 50.

V1.2 [2017-08-26 21:00]

  • Support inputting Top Playlist number of songs to play before playing. (Requires iCloud Drive service)

V1.1 [2017-03-30 19:35]

  • Support Apple Music in US region.

V1.0 [2017-02-22 19:27]

  • Basic function.

如有问题,欢迎留言或邮件咨询