佳明手表音乐服务搭建

neevop 十一月 25, 2024

在超多用户给这两个大厂音乐应用打了低分后,下载这两个软件也就意味着要容忍他们在佳明手表上不佳的体验和额外的会员升级费用。在查询了网友建议后,有一款同步音乐的软件备受好评,就是本文的主角之一——submusic

CA97DC7A-C63F-49BD-99AD-B3595AD7D6BD_1_201_a

在佳明的应用商店可以方便的下载到这款软件,github上也有它开源的项目文件:https://github.com/memen45/SubMusic,在项目的说明上大致可以确认的是,这款应用适用于当前主流的佳明手表,请放心使用。

但实际上,submusic并不能称为一款音乐软件,因为它作为一款开源工具,只提供了同步音乐服务器上的播放列表的功能,并且不出意外的是它当前并不支持从这两个大厂的产品中同步音乐到手表。那么就需要解决两个问题:搭建一个自己的音乐服务器,下载喜欢的音乐和音频文件到音乐服务器。

image-20241126200020592

上图展示了整个音乐管理的全流程,接下来请跟随本文一起来折腾吧!

1. 搭建gonic音乐服务

submusic官方说支持Nextcloud、Subsonic、Ampache、Airsonic、Plex这些服务的音乐播放列表同步,但实际上这些工具在国内并不常用,因此本文就放弃了介绍的主流音乐服务器。在submusic的介绍中说它可以支持subsonic api的后端接口,因此我们如果可以搭建一个支持subsonic api的音乐服务器即可,本文选取了一个相对轻量的开源方案——gonic.

部署这个项目需要的资源如下:

  • 公网IP和域名。(域名非必需)
  • docker 环境。(gonic占用资源非常少)
  • SSL证书。(佳明官方要求同步站点需要有SSL验证)

gonic项目地址:https://github.com/sentriz/gonic,这个项目提供docker镜像,因此可以通过docker快速部署起来。如果你也是像我一样使用了frp,可以参考如下docker-compose.yml进行部署。如果你直接在公网IP服务器本地启动,可以直接映射端口到宿主机。

version: '3.8'

services:
  gonic:
    image: sentriz/gonic:latest
    pull_policy: never
    restart: unless-stopped
    command: gonic
    env_file:
      - default.env
    volumes:
      - /volume1/gonic/cache:/cache
      - /volume1/gonic/music:/music
      - /volume1/gonic/data:/data
      - /volume1/gonic/podcast:/podcast
      - /volume1/gonic/playlist:/playlist
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "5"
    deploy:
      resources:
        limits:
          memory: 2048M
        reservations:
          memory: 128M

  frpc:
    image: stilleshan/frpc:latest
    pull_policy: never
    restart: unless-stopped
    volumes:
      - ./frpc.toml:/frp/frpc.toml
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "5"
    depends_on:
      - gonic

gonic服务的配置可以通过设置环境变量来实现,因此在上述docker-compose.yml中定了default.env来设定这些设置,内容如下:

TZ=Asia/Shanghai
GONIC_DB_PATH=/data/gonic.db
GONIC_LISTEN_ADDR=:80
GONIC_MUSIC_PATH=/music
GONIC_PODCAST_PATH=/podcast
GONIC_CACHE_PATH=/cache
GONIC_PLAYLISTS_PATH=/playlist

其他环境变量设置,可以参考官方文档:https://github.com/sentriz/gonic?tab=readme-ov-file#configuration-options

如果有子域名,可以使用nginx服务进行代理,此处我已经将gonic服务转发到公网服务器的8048端口,使用nginx将music.neevop.com域名指向gonic服务端口。

upstream music {
    server localhost:8048;
}

server {
    listen 80;
    server_name music.neevop.com;
    return 301 https://music.neevop.com$request_uri;
}

server {
    listen 443 ssl;
    server_name music.neevop.com;

    ssl_certificate /etc/nginx/ssl/music.neevop.com.pem;
    ssl_certificate_key /etc/nginx/ssl/music.neevop.com.key;
 
    # Allow special characters in headers
    ignore_invalid_headers off;
    # Allow any size file to be uploaded.
    # Set to a value such as 1000m; to restrict file size to a specific value
    client_max_body_size 0;
    # Disable buffering
    proxy_buffering off;
    proxy_request_buffering off;
    ssl_protocols TLSv1.3 TLSv1.2;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';


    location / {
        proxy_pass http://music;

        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # proxy_connect_timeout 300;
        # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        chunked_transfer_encoding off;
    }
    
}

至此,我们就完成了音乐服务器的搭建,在网页端打开音乐服务器地址,使用admin/admin默认用户名密码登录。登录后务必修改admin用户名和密码,将看到如下界面。

image-20241126012438710

2. 下载并导入音乐文件

完成gonic音乐服务创建后,还需要下载自己喜欢的音乐或音频文件。音乐版权问题和各个音乐软件自己的文件格式限制,导致下载音乐并不是一件简单的事情。

如果你恰好是mac用户,推荐使用Downie,这是一款买断制付费软件(价格还可以接受),可以方便的帮助你下载到想要的视频或音频文件,实际使用过程中不需要翻墙,目前测试下来支持b站、网易云音乐等。

image-20241126013058288

例如,如果你是网易云用户,可以直接在Downie浏览器模式下打开music.163.com站点,扫码登录自己的用户后,选取自己收藏的播放清单播放。当你在切换新的音乐后,Downie就会自动识别音频文件,并提供下载。

音频下载列表最下放即最新的音乐文件,点击即可下载,可以直接使用.m4a文件,不用转换格式。需要注意的是,这种方式获取音乐文件是不得已而为之,并没有得到官方的授权,因此坚决不要进行传播或共享,防止法律风险。

当获取到音乐文件后,将包含音乐文件的文件夹放置到gonic服务对应的/music路径下,即docker映射的/volume1/gonic/music路径下。在gonic网页页面中点击scan按钮,即可将音乐发布到自己的音乐服务器中。这里建议不同清单的音乐文件采用不同的文件夹管理,方便后期新建音乐清单。

注意: 此处音乐文件的命名中不要包含空格,会导致后面佳明手表同步失败。

至此,我们已经完成了将音乐文件导入音乐服务器的步骤。后续如果要新添加歌曲,下载对应歌曲文件,复制到音乐服务器路径下后在界面上点击scan按钮即可。

3. 创建播放列表

gonic音乐服务器的网页界面并不支持建立播放列表,佳明手表的submusic应用在同步音乐时是以播放列表为单位同步的,因此我们还需要通过一个客户端创建播放列表。常用的支持subsonic api接口的手机音乐客户端都支持新建播放列表,iphone用户推荐使用iSub。下载安装后,在设置界面配置步骤二中建立的音乐服务器站点,即可在音乐界面同步到音乐服务器上的音乐,是按照文件夹展示的。

image-20241126100237780

点击文件夹上的Play All按钮即可播放文件夹下的所有歌曲,在playlists页面点击Save Playlist会弹出保存播放列表的位置,选取Server即可在音乐服务器上新建一个播放列表。

4. 手表同步音乐

在佳明的ConnectIQ软件中找到submusic应用,安装后点击设置,配置音乐服务器信息。然后在佳明手表中或者garmin Connect软件中点开已连接的手表音乐栏,将submusic设置为音乐源。

image-20241126185531174

先将手表连上WIFI。

长按手表down按键,打开音乐应用,按up键打开设置界面,找到submusic选项。进入submusic设置界面后点击More...找到Test Server选项测试音乐服务器连接。理论上可以正常测试通过,如果不通过,请检查WIFI连接和音乐文件命名是否不规范。

测试链接通过后,即可点击Test Server同级目录下的Sync按钮同步音乐列表到手表内了。submusic官方说音乐有25首的限制,实际测试并没有遇到。

完成同步后,退出到手表上submusic的设置界面中可以选择同步的Playlists进行音乐播放,接下来请享受你的跑步音乐自由吧😎!