如何把rmi转mid

如何把rmi转mid

rmi格式是在mid格式外套了一个riff信息

image
image

简单来说,就是把自 4d54 6864(MThd) 开头的部分到文件最后一个 00ff 2f00(轨道结束) 部分提取出来就是 mid了

已知 Awave Studio 可以提取 rmi 格式的 midi 文件

在哪里下载,如何使用?

謝謝次較~~~~~~~~~~~~~~~~~~~

用 python3 写了一个简单的转换脚本

#!/usr/bin/env python3
import sys

RIFF_HEADER = b'RIFF'
MIDI_HEADER = b'MThd'
MIDI_TAIL = b'\x00\xff\x2f\x00'


class NoRIFFException(Exception):
    pass


class NoMTrkException(Exception):
    pass


class NoMThdException(Exception):
    pass


try:
    with open(sys.argv[1], 'rb') as fr:
        rmi_dat = fr.read()
        if rmi_dat[0:4] != RIFF_HEADER:
            raise NoRIFFException

        midi_head_index = rmi_dat.find(MIDI_HEADER)
        if midi_head_index < 0:
            raise NoMThdException

        midi_tail_index = rmi_dat.rfind(MIDI_TAIL)
        if midi_tail_index < 0:
            raise NoMTrkException

        midi_data = rmi_dat[midi_head_index:midi_tail_index + len(MIDI_TAIL)]
        with open(sys.argv[2], 'wb') as fw:
            fw.write(midi_data)

except NoRIFFException:
    print('Bad RIFF Format!')

except NoMThdException:
    print('SMF Header not found.')

except NoMTrkException:
    print('SMF Tail "00ff 2f00" not found.')

except Exception:
    print('Usage: {0} input_file.rmi output_file.mid'.format(sys.argv[0]))

使用方法:

python3 riff_to_midi.py <输入的rmi文件> <输出的midi文件>