把 300 張黑膠的播放紀錄寫進試算表,再倒回 foobar2000

这篇内容暂时只有 繁體中文 版本,以下是原文。

客廳那台唱盤接上 USB 錄音介面之後,我開始想記錄每一張黑膠到底聽了幾次。起點很土:一個 Google Sheet,四個欄位——專輯、廠牌、首次播放日期、累計次數。累積到 300 張、大約 1,800 筆播放紀錄時,我發現自己根本查不動了,篩選廠牌要等好幾秒,而且 foobar2000 那邊的歌單完全不知道這些黑膠的存在。於是我把整份表倒出來,做成 foobar2000 讀得懂的格式。

做法不複雜。先從 Sheet 匯出 CSV,用 Python 轉成 foobar2000 的 title formatting 能吃的欄位:

import csv

rows = list(csv.DictReader(open('vinyl.csv', encoding='utf-8')))
for r in rows:
    plays = int(r['累計次數']) if r['累計次數'] else 0
    print(f"%album artist%|{r['專輯']}|{r['廠牌']}|{plays}")

接著把輸出存成 vinyl.txt,在 foobar2000 的 Album List 自訂欄位裡用 $if(%album artist%,$puts(x,1)) 這種方式抓不到外部檔,所以我改用另一條路:把每張專輯建成一個 .m3u,檔名就是「廠牌 - 專輯 - 播放次數」,放進同一個資料夾。foobar2000 的 Media Library 指過去,搜尋列直接打廠牌就能撈出整批。播放次數放在檔名而不是標籤,是因為我不想為了改一個數字去重寫 FLAC 標籤,那會拖慢整個掃描。

為什麼折騰這一步?黑膠沒有檔案可以掃,播放次數只存在我的記憶和那張表裡。把它變成檔名的一部分,等於讓「聽過幾次」變成檔案總管和 foobar2000 都看得見的屬性,不用另外開一個視窗查。代價是檔名會變長,而且每次播放都要手動改檔名——我後來寫了一個 AutoHotkey 小腳本,按一下熱鍵就把當前資料夾的檔名尾數加一,勉強能接受。

會失效的地方我踩過兩個。第一,專輯名稱裡有斜線或冒號時,檔名會直接爆掉,Windows 不給存;我現在匯出前會先做 re.sub(r'[\\/:*?"<>|]', '-', name)。第二,播放次數超過 999 之後檔名排序會亂,因為字串排序不是數值排序;我改成固定三位數補零,f"{plays:03d}",才恢復正常。另外 CSV 如果用手機版 Sheet 匯出,欄位順序偶爾會跑掉,我現在一律先開一次確認標頭。

你們在整理這種「沒有檔案」的收藏——黑膠、卡帶、CD——的時候,是習慣把中繼資料放在檔名、標籤,還是另外開一張表?我目前是檔名派,但每次改次數都覺得有點蠢。

0
赞同度 100% · 0 条评论 · 2 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。