解码 binary/hex WAV 文件元数据的建议 - Pro Tools UMID 块

Advice for decoding binary/hex WAV file metadata - Pro Tools UMID chunk

Pro Tools(AVID 的 DAW 软件)有一个使用 Unique ID 字段管理和链接到其所有独特媒体的过程,该字段以 [=12] 的形式嵌入到 WAV 文件中=] 元数据块。检查 Pro Tools 中的一个特定文件,我可以看到该文件的 Unique ID 以 11 个字符串的形式出现,看起来像:rS9ipS!x6Tf.

当我检查 WAV 文件中的原始数据时,我发现了一个 32 字节的数据块 - 4 个字节用于字符 'umid'; 4字节为后面数据块的大小——24;那么 24 字节的数据块,在 Hex Fiend 中检查时,看起来像这样:

00000000 0000002A 5B7A5FFB 0F23DB11 00000000 00000000

如您所见,只有 9 个字节包含任何非零信息,但这以某种方式用于存储 11 个字符 Unique ID 字段。在我看来,好像正在做一些事情来解释这个原始数据以检索那个唯一 ID 字符串,但我对原始数据进行解码的所有尝试都没有取得任何成果。我已经尝试通过所有有意义的不同格式使用 https://gchq.github.io/CyberChef/ 到 运行 它,但没有任何东西指向我正确的方向。我还尝试以 6 位增量查看数据,看看它是否以某种方式被压缩(9 字节 * 8 位 == 72 == 12 块 * 6 位),但还没有运气绊倒模式.

所以我想知道是否有人有任何具体的 tips/tricks/suggestions 关于如何最好地弄清楚这里可能发生的事情 - 如何以我可能最终得到的方式解压缩这些数据足够的信息来生成这 11 个字符,我猜很可能是 UTF-8。

所有 help/suggestions 欢迎!谢谢。

它似乎是一个 base64 编码,只是字符映射略有不同,这是我的 python 实现,我发现它与 Pro Tools 最匹配。

char_map = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#!"

def encode_unique_id(uint64_value):
    # unique id is a uint64_t, clamp
    value = uint64_value & 0xFFFFFFFFFFFFFFFF
    if value == 0:
        return ""

    # calculate the min number of bytes
    # needed store value for int
    byte_length = 0
    tmp = value
    while tmp:
        tmp =tmp >> 8
        byte_length += 1

    # calculate number of chars needed to store encoding
    char_total, remainder = divmod(byte_length * 8, 6)
    if remainder:
        char_total += 1

    s = ""
    for i in range(char_total):
        value, index = divmod(value, 64)
        s += char_map[index]
    return s

运行 encode_unique_id(0x2A5B7A5FFB0F23DB11) 应该给你 rS9ipS!x6Tf