json转mid文件问题
要求把json文件转为mid文件
python的库转不了
json文件链接:https://pan.baidu.com/s/1Epyv1FURdph39LP14dZbEQ?pwd=tc91
提取码:tc91
json文件部分内容:
{"ver":1,"rightHandTrack":0,"roughProgress":false,"beats":4,"tempos":[{"tempo":857142,"tick":1920},{"tempo":625000,"tick":9840}],"leftHandTrack":1,"tracks":[{"channel":0,"name":"","program":0},{"channel":0,"name":"","program":0}],"measures":{"40560":{"duration":1920,"note_ticks":[0,240,480,720,840,960,1200,1440,1680],"measure":20},"9840":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":4},"17520":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":8},"44400":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440],"measure":22},"61680":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":31},"5760":{"duration":2040,"note_ticks":[0,240,360,480,600,720,960,1200,1440],"measure":2},"19440":{"duration":1920,"note_ticks":[0,240,480,720,960,1440],"measure":9},"38640":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":19},"65520":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":33},"13680":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":6},"59760":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":30},"73200":{"duration":1920,"note_ticks":[0],"measure":37},"63600":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":32},"71280":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":36},"75120":{"duration":1920,"note_ticks":[],"measure":38},"27120":{"duration":1920,"note_ticks":[0,240,480,720,960],"measure":13},"34800":{"duration":1920,"note_ticks":[0,240,480,720,960],"measure":17},"23280":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":11},"30960":{"duration":1920,"note_ticks":[0,240,480],"measure":15},"55920":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":28},"25200":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":12},"57840":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":29},"32880":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":16},"11760":{"duration":1920,"note_ticks":[0,240,480,720,960,1440],"measure":5},"15600":{"duration":1920,"note_ticks":[0,480,960],"measure":7},"21360":{"duration":1920,"note_ticks":[0,240,480,960,1200,1440,1680],"measure":10},"46320":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":23},"69360":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":35},"36720":{"duration":1920,"note_ticks":[0,240,480,960,1200,1440,1680],"measure":18},"42480":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":21},"48240":{"duration":1920,"note_ticks":[0,240,480,720,840,960,1200,1440,1680],"measure":24},"67440":{"duration":1920,"note_ticks":[0,240,480,960,1200,1440,1680],"measure":34},"29040":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440],"measure":14},"52080":{"duration":1920,"note_ticks":[0,240,480,960,1200,1440,1680],"measure":26},"1920":{"duration":1920,"note_ticks":[0],"measure":0},"50160":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":25},"54000":{"duration":1920,"note_ticks":[0,240,480,720,960,1200,1440,1680],"measure":27},"7800":{"duration":2040,"note_ticks":[],"measure":3},"3840":{"duration":1920,"note_ticks":[0],"measure":1}},"beatsUnit":4,"measureInfos":[],"lyrics":[],"events":[{"repeatIndex":0,"duration":0,"tick":0,"track":0,"event":[176,7,100]},{"repeatIndex":0,"duration":0,"tick":0,"track":1,"event":[176,7,100]},{"repeatIndex":0,"duration":0,"tick":0,"track":1,"event":[176,64,0]},{"repeatIndex":0,"duration":0,"tick":0,"track":0,"event":[192,0,0]},{"repeatIndex":0,"duration":0,"tick":0,"track":1,"event":[192,0,0]},{"finger":0,"note":0,"part":0,"repeatIndex":0,"staff":1,"tick":1840,"duration":1800,"measure":0,"elem_ids":["n_0_0"],"meas_start_tick":1920,"id":"n_0_0","track":0,"event":[144,83,51]},
他结构不太一样吧?
【相关推荐】
援引讯飞星火:
首先,你需要将json文件转换为midi文件。可以使用在线工具或者本地软件进行转换。这里以本地软件为例,使用Python的库pydub
和mido
来实现。
pip install pydub mido
import json
from mido import MidiFile, MidiTrack, Message
from pydub import AudioSegment
# 读取json文件
with open('json_file.json', 'r') as f:
data = json.load(f)
# 创建一个新的MIDI文件
midi = MidiFile()
track = MidiTrack()
midi.tracks.append(track)
# 设置轨道和时间
track.append(Message('set_tempo', tempo=500000, time=0))
# 遍历json数据,将音符添加到MIDI轨道
for item in data:
if item['measureInfos']:
measure_time = 0
for note_tick in item['measureInfos'][0]['note_ticks']:
track.append(Message('note_on', note=note_tick[2], velocity=note_tick[3], time=measure_time))
track.append(Message('note_off', note=note_tick[2], velocity=note_tick[3], time=measure_time + note_tick[4]))
measure_time += note_tick[4]
# 保存MIDI文件
midi.save('output.mid')
这段代码将读取json文件,提取音符信息,并将其添加到一个新的MIDI文件中。最后,将MIDI文件保存为output.mid
。
使用Python的JSON库解析JSON文件,将其中的数据提取出来。
根据提取出的数据,使用适当的库或工具来生成音乐数据。MIDI文件包含音符、乐器、时序等信息,你需要根据数据来创建这些信息。
GPT的回答,有用可以采纳一下,谢谢!
当然!下面是将JSON文件转换为MID文件的Python操作步骤:
确保您已经安装了所需的库。在Python中,您可以使用json
库来处理JSON文件,使用mido
库来处理MIDI文件。如果您尚未安装这些库,可以使用以下命令安装它们:
pip install json
pip install mido
导入所需的库。在Python脚本的开头,使用以下代码导入json
和mido
库:
import json
import mido
打开JSON文件并解析为Python对象。假设JSON文件名为data.json
,您可以按照以下方式打开并解析它:
with open('data.json') as file:
data = json.load(file)
现在,您可以通过`变量访问JSON文件中的数据了。
创建MIDI文件。使用mido
库创建一个新的MIDI文件对象,并设置要生成的MID文件的属性,例如MIDI类型、时间分辨率等。以下是一个示例代码:
```python
mid = mido.MidiFile(ticks_per_beat=480)
track = mido.MidiTrack()
mid.tracks.append(track)
这会创建一个具有默认时间分辨率的MIDI文件,并添加一个空的轨道。
5. 根据JSON数据创建MIDI事件。根据JSON数据中的内容,使用`mido`库添加相应的MIDI事件到轨道中。您可以使用循环来遍历JSON数据并根据需要添加MIDI事件。以下是一个示例代码:
```python
for event in data['events']:
# 根据JSON中的事件类型创建相应的MIDI事件
if event['type'] == 'note_on':
msg = mido.Message('note_on', note=event['note'], velocity=event['velocity'], time=event['time'])
elif event['type'] == 'note_off':
msg = mido.Message('note_off', note=event['note'], velocity=event['velocity'], time=event['time'])
# 添加MIDI事件到轨道中
track.append(msg)
在这个示例中,假设JSON数据具有events
键,它包含一个包含诸如音符开和音符关等事件的列表。您需要根据您的JSON文件结构和内容相应地更改代码。
mido
库将生成的MIDI文件保存为MID文件。以下是一个示例代码:mid.save('output.mid')
此代码将生成的MIDI文件保存为名为output.mid
的文件。完整的示例代码如下所示:
import json
import mido
with open('data.json') as file:
data = json.load(file)
mid = mido.MidiFile(ticks_per_beat=480)
track = mido.MidiTrack()
mid.tracks.append(track)
for event in data['events']:
if event['type'] == 'note_on':
msg = mido.Message('note_on', note=event['note'], velocity=event['velocity'], time=event['time'])
elif event['type'] == 'note_off':
msg = mido.Message('note_off', note=event['note'], velocity=event['velocity'], time=event['time'])
track.append(msg)
mid.save('output.mid')
请确保将上述代码中的data.json
替换为实际的JSON文件名。此代码将根据JSON文件中的内容生成一个MID文件,并将其保存为output.mid
。
希望这些步骤可以帮助您将JSON文件成功转换为MID文件。如果有任何问题,请随时提问。