标准midi文件使用什么样的编码?

gor*_*ous 2 python midi encoding file

标准midi文件使用什么样的编码?

以下是提出这个问题的原因:

with open(path + "/OneChance1.mid") as f:
  for line in f.readline():
        print(line)
Run Code Online (Sandbox Code Playgroud)

在这里,我只是想读一个midi文件来搜索其内容.然后我收到此错误消息:| UnicodeDecodeError:'charmap'编解码器无法解码153位的字节0x90:字符映射到|

如果我像这样使用open()的第二个参数:UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 153: character maps to <undefined>然后我收到这个错误:| UnicodeDecodeError:'utf-8'编解码器无法解码位置13中的字节0x80:无效的起始字节|

如果我将编码参数更改为ascii,我会收到有关序数超出范围的另一个错误.最后我尝试了utf-16,它说文件没有以BOM开头(这让我因某种原因而笑).此外,如果我忽略错误,我会得到与我期望的数据类似的字符.我的期望是基于这个来源:http://www.sonicspot.com/guide/midifiles.html

无论如何,有谁知道midi文件使用什么样的编码?我的研究在这方面做得很短,所以我认为值得询问.或者也许有人可以指出其他一些可能性或错误?

多谢你们.

Mar*_*ers 7

MIDI文件是二进制内容.然而,通过将文件作为文本文件打开,Python在尝试将文本解码为Unicode时应用默认系统编码.

改为以二进制模式打开文件:

with open(midifile, 'rb') as mfile:
    leader = mfile.read(4)
    if leader != b'MThd':
        raise ValueError('Not a MIDI file!')
Run Code Online (Sandbox Code Playgroud)

你必须学习MIDI标准文件格式,如果你想了解从该文件的更多.另请参阅MIDI文件的结构是什么?