iTunes_CDDB_1 から MusicBrainz の Disc ID に変換する

タイトルを読んで何の話をするかわかる人だけ特するニッチな情報です。

例として iTunes_CDDB_1 2203FC04+76718+4+150+19520+38496+57866 から Disc ID を引いてみます。

適当に + 区切りなので split して、1つめは FreeDB、残りは CD の TOC です。

なので適当に最初は捨てて、次は最終セクタ、その次はトラック数、それ以降は各トラックの開始セクタっぽいですね?とやっていくと、このようになります。

# SPDX-License-Identifier: CC0-1.0
import hashlib
import base64
cdtoc = "2203FC04+76718+4+150+19520+38496+57866"
cdtoc = [int(x) for x in cdtoc.split("+")[1:]]

discid_src = "%02X%02X" % (1, cdtoc[1])
for x in range(100):
    n = 0
    if x == 0:
        n = cdtoc[0]
        print(n)
    elif x <= cdtoc[1]:
        n = cdtoc[x + 1]
        print(x + 1, n)
    discid_src += "%08X" % (n)

discid = hashlib.sha1(discid_src.encode("ascii")).digest()
discid = base64.b64encode(discid, altchars=b"._").decode("ascii").replace("=", "-")

これで吐かれた Disc ID は my3OXxY9iND0U9tzO6SKFtOm0Xo- で、無事 MusicBrainz で元CDを見つけることができました。よかったですね。

ちなみに SHA-1 にかけている文字列は 010400012BAE0000009600004C40000096600000E20A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 になっています。デバッグ用にどうぞ。