解码 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
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