🎼
Pythonで音楽を生成してwavで出力する
背景
- pretty_midiでmidi作れるのはいいけどmacだと再生がめんどくさいので楽にしたい
環境
- MacOS Big Sur
- Python 3.8
準備
- 素のfulid-synthでも音は鳴るが、リッチな音を鳴らすためにサウンドフォントをいれておく
pip install pretty_midi
brew install fluid-synth
wget 'https://www.dropbox.com/s/4x27l49kxcwamp5/GeneralUser_GS_1.471.zip'
unzip GeneralUser_GS_1.471.zip
mv "GeneralUser GS 1.471" sf
結論
- pretty_midiでmidiを作る
- fluid-synthでサウンドフォント使った音に変換
- scipy.ioでwavファイルに書き出し
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pretty_midi
from scipy.io import wavfile
from pathlib import Path
CURRENT_DIR = str(Path(__file__).resolve().parent)
def create_music():
# 準備
new_music = pretty_midi.PrettyMIDI()
# チェロを設定
cello_program = pretty_midi.instrument_name_to_program("Cello")
cello = pretty_midi.Instrument(program=cello_program)
# どれみふぁそらしどを鳴らす
time = 0.0
for note_name in ["C5", "D5", "E5", "F5", "G5", "A5", "B5", "C6"]:
note_number = pretty_midi.note_name_to_number(note_name)
note = pretty_midi.Note(
velocity=100, pitch=note_number, start=time, end=(time + 0.5)
)
cello.notes.append(note)
time = time + 0.5
new_music.instruments.append(cello)
# fuildsynthを使ってサウンドフォントを使ったデータに変換
audio_data = new_music.fluidsynth(
sf2_path=CURRENT_DIR + "/sf/GeneralUser GS v1.471.sf2"
)
filename = CURRENT_DIR + "/output/sample.wav"
# wavで書き出し
wavfile.write(filename, 44100, audio_data)
create_music()
おわり
- wavはFinderで再生ができるので確認作業がとっても楽になるよやったね!
- scipyって科学計算ライブラリだと思ってたんですけどwavの入出力とかもできるんですね…音楽も突き詰めると波の集まりなので対応できるのもわからないでもないですけど、手広くてすごいですね
参考文献
-
Pythonでwavを作成する - ゆめをみること.
- こちらの記事がubuntu環境でやっているのを、Mac化
-
MacでMIDIファイルを再生&WAV出力する - Qiita
- 環境構築はこちらの記事を参考に
Discussion