音樂創作者 / 軟體開發者

我棄用了 Funkwhale 並蓋了自己的音樂網站

這個網站剛創立的時候,我架了自由的音樂平台 FunkWhale 來發佈我的音樂。FunkWhale 是我目前找到唯一比較面向創作者的音樂平台,而且支援 ActivityPub 這個聯邦式協議,也就是說別的 FunkWhale 站點可以聽到我網站上的音樂(反之亦是),到目前看來都非常理想。我在安裝時,由於是比較複雜的反向代理環境,遇到了很多困難,但我最後仍一一克服了。

FunkWhale 最大的問題是它超級慢~~,FunkWhale 是用 Django 寫的,本來體質就特肥,而且又有一堆我其實不需要的「功能」,每次上傳一首歌就在後台跑一堆轉碼處理,然後等幾個小時都不會好,得要重開機才行,而且網頁載入也超慢,打開首頁可能就要等個 5、6 秒。它的嵌入播放器也一樣,網頁打開後還要等個 5、6 秒才能播音樂,而且 FunkWhale 填歌曲資料的地方很難用,沒辦法用單行的斷行,這讓歌詞被排版的很醜。

我開始尋找 FunkWhale 的替代品,驚訝的發現,幾乎所有 Self-Hosted Music Streaming 的軟體都是設計給「音樂收藏者」而非創作者,意思是會買專輯、收集自己愛聽的音樂(這麼做很好),而不只是用串流媒體的人(串流媒體的音樂不是你的音樂)。這些軟體都很不錯,我自己改天應該也會架一個,但就不符合我發佈音樂的需求。

正當我快絕望,打算自己寫一個(?)的時候,我突然想到:為何不直接把音樂放在我的網站裡?就是字面上的意思,把音檔放在網站上,直接傳到瀏覽器播放,不用什麼愚蠢的資料庫和肥大的前後端,歌曲的資料直接寫在網站裡(而且有好看的排版)。我直接用網頁標準裡的 <video> 來播放音檔,不需要任何 stupid JavaScript。由於無損壓縮 FLAC 沒有被瀏覽器廣泛支援,WAV 又真的太大,OGG 某些瀏覽器不支援(Safari),我最後還是選擇比較通用的 MP3 格式。

我寫了一個 Hugo Shortcode 用來放音樂播放器,同時還有下載、嵌入按鈕,Shortcode 播放器部分內容如下(按鈕比較冗長這篇先不寫,也不包含所有 styling 的內容):

<!-- layouts/shortcodes/audio.html -->
<div align="center">
  <video
    controls
    poster='/img/{{ with .Get "cover" }}{{ . }}{{ else }}cover.jpg{{ end }}'
  >
    <source src='/music/{{ .Get "src" }}' type="audio/mpeg" />
  </video>
</div>

把音檔放在 /static/music 資料夾,封面放 /static/img 資料夾,只要在文章裡寫:

{{< audio src=Reborn.mp3 cover=Reborn.jpg >}}

就能得到:

如果不提供 cover 就會帶入預設的 cover.jpg。

HTML 內建播放器載入超爆快超好用,我之前竟然用一堆又複雜又慢的程式,而根本不知道有這個好東西可以用。解決問題時真的是愈簡單的作法愈好啊!


如果你喜歡我的內容,希望你幫我註冊 LikeCoin 拍手,幫我投票,我就會分到 LikeCoin 的創作基金。也可以加入我的讚賞公民,用行動支持我!

或是直接用加密貨幣:

Monero: 8AJP26rdNVBTEBkh545EvSF8arbktfyEccjT6dHDw3W4EmfhHrVuBN7dHzBb4BLS7yMoERgMBf8bs38QX92GG7QTHZVuoAE

Bitcoin: bc1q0m5hu5tvlsfgl2zrsse2y3rczpz67mtpmzm30z