你好,我是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、机器学习、深度学习等文章,感兴趣的朋友可以关注一下,期待与您交流。