深度学习生成音乐:MIDI格式,Python mido库使用

发布时间:2024年01月09日

你好,我是kelly。

最近一段时间会写自动生成音乐的系列文章,今天是第1篇:如何创建MIDI文件。

一、MIDI文件

什么是音乐?

音乐的构成有四个基本要素:

  • 音强:音振幅的大小,音强的不断变化是音乐表达情感的因素之一

  • 音高:高低相间的音

  • 音长短:声音的时长

  • 音质:也称音色,发出音乐的乐器声或人声

什么是MIDI文件?

MIDI(Musical Instrument Digital Interface)是一种数字音乐文件格式,用来描述音符、歌曲结构、曲调、速度等元素。对于计算机而言,MIDI相当于乐谱。

MIDI用音符、控制参数等来记录音乐,而不是声音信号本身,用以告诉MIDI设备要做什么、怎么做。

因此,MIDI文件不是一段真正声音,而是记录声音的信息,用以告诉声卡如何播放音乐的一组指令。

MIDI文件优势:

MIDI文件体积非常小,存1分钟的音乐只用大约5~10KB。

MIDI文件和音乐的关系:

音乐 ≈ MIDI + 音色库

二、创建MIDI文件

安装:

pip3 install mido

mido库的官网:

https://github.com/mido/mido

创建MIDI文件:

from mido import Message, MidiFile, MidiTrack

mid = MidiFile()  # 创建MIDI文件
track = MidiTrack()  # 创建一个音轨
mid.tracks.append(track)

# 创建各个音符,并添加到音轨中
# MIDI文件kaishi
track.append(Message('program_change', program=12, time=0))
# 音符开始
track.append(Message('note_on', note=64, velocity=64, time=32))
# 音符结束
track.append(Message('note_off', note=64, velocity=127, time=32))

mid.save("new_song.mid")

解析:

一个MIDI文件包括一个或者多个音轨,而一个音轨包括多个Message消息。

1)program_change:选择不同乐器,确定音色

  • channel:通道/乐器类型,取值0~15

  • program:乐器编号,一般取值为0~127

2)note_on:一个音的开始

  • note:音高

  • velocity:音量或者音强

  • time:与前一个音的间隔,单位为毫秒。

3)note_off:一个音的结束

下一篇会介绍MIDI文件如何转换为MP3、Wav等音频。

kelly会在公众号「kelly学技术」不定期更新Python、机器学习、深度学习等文章,感兴趣的朋友可以关注一下,期待与您交流。

文章来源:https://blog.csdn.net/qm5132/article/details/135471606
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。