0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MIDIファイルとPythonコード

Last updated at Posted at 2025-03-31

Pythonを使ってMIDIファイルを作成し、WAVフォーマットに変換する方法

この記事では、MIDIファイルを作成し、それをFluidSynthを使ってWAVフォーマットに変換し、Pythonで再生する方法を紹介します。このプロセスには、midofluidsynthpyfluidsynthなどのライブラリを使用します。

ステップ1: 必要なパッケージのインストール

まず最初に、必要なPythonパッケージと外部ツールをインストールします。

!pip install mido
!apt install -y fluidsynth
!pip install pyfluidsynth

以下は各ライブラリの簡単な説明です:

  • mido: MIDIファイルを操作するためのPythonライブラリです。
  • fluidsynth: ソフトウェアシンセサイザーで、MIDIをWAVファイルに変換するのに使用します。

ステップ2: SoundFontのダウンロード

FluidSynthを使用するためには、SoundFontという音色データが必要です。最初にSoundFontをダウンロードします。

!wget -q https://github.com/urish/csr8670/raw/master/tools/soundfonts/FluidR3_GM.sf2 -O soundfont.sf2

ステップ3: MIDIファイルの作成

次に、簡単なメロディを作成し、それをMIDIファイルとして保存します。例えば、「Twinkle Twinkle Little Star」のメロディを使用します。

from mido import MidiFile, MidiTrack, Message

# MIDIファイルを作成する関数
def create_midi(notes, midi_filename):
    """
    MIDIファイルを作成し、保存する関数。
    
    Parameters:
    notes (list): MIDIノート番号のリスト。
    midi_filename (str): 保存するMIDIファイルの名前。
    """
    midi = MidiFile()
    track = MidiTrack()
    midi.tracks.append(track)

    note_length = 480  # 四分音符の長さ
    velocity = 64      # ノートのベロシティ(音量)

    # ノートオンとノートオフメッセージを追加
    for note in notes:
        track.append(Message('note_on', note=note, velocity=velocity, time=0))
        track.append(Message('note_off', note=note, velocity=velocity, time=note_length))

    midi.save(midi_filename)

# 「Twinkle Twinkle Little Star」のノートリスト
twinkle_notes = [60, 60, 67, 67, 69, 69, 67, 65, 65, 64, 64, 62, 62, 60]

# MIDIファイルを作成
twinkle_midi = "twinkle.mid"
create_midi(twinkle_notes, twinkle_midi)

ステップ4: MIDIファイルをWAVフォーマットに変換

次に、作成したMIDIファイルをWAVフォーマットに変換します。これにはFluidSynthを使用します。

import subprocess

# MIDIをWAVに変換する関数
def convert_midi_to_wav(midi_file, wav_file, soundfont="soundfont.sf2"):
    """
    MIDIファイルをWAVファイルに変換する関数。
    
    Parameters:
    midi_file (str): 入力のMIDIファイルのパス。
    wav_file (str): 出力するWAVファイルのパス。
    soundfont (str): 使用するSoundFontのパス。
    """
    subprocess.run(["fluidsynth", "-ni", soundfont, midi_file, "-F", wav_file, "-r", "44100"])

# 「Twinkle Twinkle Little Star」のMIDIをWAVに変換
twinkle_wav = "twinkle.wav"
convert_midi_to_wav(twinkle_midi, twinkle_wav)

ステップ5: WAVファイルを再生

作成したWAVファイルを再生するために、IPythonのAudioクラスを使用します。

from IPython.display import Audio

# 「Twinkle Twinkle Little Star」のWAVファイルを再生
Audio(twinkle_wav)

結果

これで、「Twinkle Twinkle Little Star」のMIDIファイルを作成し、それをWAVフォーマットに変換して再生することができました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?