1. 概要(Overview)
YouTubeにアップロードした自作曲やフリー音源を、
MIDIデータとして再利用したい場合、以下の3ステップで行えます。
YouTube動画 → MP3抽出 → MIDI変換 → Pythonで再生・編集
本記事では:
- Google Colab と Python による自動処理
- 無料AIツール「TopMediai」などを使った音源→MIDI変換
を組み合わせて、教育・研究・作曲学習に使える完全ワークフローを紹介します。
2. ステップ①:YouTubeからMP3を抽出
💻 またはColabでの実行コード
from pytube import YouTube
from pydub import AudioSegment
#---------------------------------------------
# YouTubeのURLを指定 / Set your own video URL
#---------------------------------------------
url = "https://www.youtube.com/watch?v=XXXXXXXXXXX" # ←ここに自分の動画URLを入れる
yt = YouTube(url)
#---------------------------------------------
# 音声ストリーム抽出 / Download audio stream
#---------------------------------------------
stream = yt.streams.filter(only_audio=True).first()
file_path = stream.download(filename="source.mp4")
#---------------------------------------------
# MP3に変換 / Convert to MP3
#---------------------------------------------
audio = AudioSegment.from_file(file_path, format="mp4")
audio.export("source.mp3", format="mp3")
print("✅ MP3ファイルを作成しました: source.mp3")
実行後、Colabのファイル一覧に source.mp3 が出力されます。
3. ステップ②:MP3をMIDIに変換(AIツール TopMediai)
🌐 無料オンラインツール
🧭 操作手順
- 上記サイトを開く
- 「クリック/ドロップで追加」から
source.mp3をアップロード - AIが音源を解析(数十秒〜数分)
- 「MIDIをダウンロード」をクリック
-
source.midが生成される
💡 TopMediai はピアノロールで確認しながらダウンロードできるため、精度が高いです。
4. ステップ③:MIDIをPythonで再生(ファミコン音風)
以下のスクリプトで、MIDIを8-bit矩形波音源として再生します。
Google Colabで直接音声出力が可能です。
import mido
import numpy as np
from scipy.io.wavfile import write
from google.colab import files
from IPython.display import Audio
#---------------------------------------------
# ファイルアップロード / Upload MIDI file
#---------------------------------------------
print("🎵 MIDIファイルをアップロードしてください")
uploaded = files.upload()
midi_path = list(uploaded.keys())[0]
print("✅ Uploaded:", midi_path)
#---------------------------------------------
# パラメータ設定 / Parameter settings
#---------------------------------------------
sr = 44100 # サンプリングレート
volume = 0.3 # 音量
duty = 0.25 # デューティ比(矩形波の比率)
output_wav = "/content/famicom_output.wav"
#---------------------------------------------
# ファミコン矩形波生成関数 / Square wave generator
#---------------------------------------------
def square_wave(freq, dur, duty=0.25):
t = np.linspace(0, dur, int(sr*dur), endpoint=False)
return volume * np.where(np.mod(t*freq, 1) < duty, 1, -1)
#---------------------------------------------
# MIDI読み込み / Load MIDI
#---------------------------------------------
mid = mido.MidiFile(midi_path)
print(f"Loaded: {midi_path} | Length: {mid.length:.2f} sec")
#---------------------------------------------
# 音声合成 / Synthesize sound
#---------------------------------------------
audio = np.zeros(int(mid.length * sr), dtype=np.float32)
current_time = 0.0
for msg in mid:
current_time += msg.time
if msg.type == 'note_on' and msg.velocity > 0:
freq = 440.0 * (2.0 ** ((msg.note - 69) / 12.0))
start = int(current_time * sr)
dur = 0.25
end = start + int(dur * sr)
if end < len(audio):
audio[start:end] += square_wave(freq, dur, duty)
#---------------------------------------------
# 正規化&保存 / Normalize and save
#---------------------------------------------
audio = np.clip(audio, -1.0, 1.0)
write(output_wav, sr, (audio * 32767).astype(np.int16))
print("✅ ファミコン風WAVを保存しました:", output_wav)
#---------------------------------------------
# Colab上で再生 / Playback
#---------------------------------------------
Audio(output_wav)
実行すると、ブラウザ内でファミコン風BGMが再生されます。
MuseScore や DAW でもそのまま読み込み可能。
5. ステップ④:MIDIの再利用・編集
生成された source.mid は以下のツールで編集可能です:
| 用途 | ツール |
|---|---|
| 楽譜・打ち込み編集 | MuseScore / FL Studio / Cubase |
| AI作曲入力 | Magenta / Riffusion / MusicLM |
| 音響合成 | Python (mido + numpy + scipy) |
6. まとめ(Complete Workflow)
| ステップ | 処理内容 | 使用ツール |
|---|---|---|
| ① | YouTube音源抽出(自作・フリー素材) |
pytube + pydub
|
| ② | MP3 → MIDI変換 | TopMediai / Melobytes |
| ③ | MIDI再生(8-bit合成) | Python + mido + numpy |
| ④ | 編集・解析・AI再利用 | MuseScore / AI作曲モデル |
おまけ-ピアノの音-
#---------------------------------------------
# 必要ライブラリのインポート / Import libraries
#---------------------------------------------
!pip install mido scipy
import mido
import numpy as np
from scipy.io.wavfile import write
from google.colab import files
from IPython.display import Audio
#---------------------------------------------
# ① MIDIファイルをアップロード / Upload MIDI file
#---------------------------------------------
print("🎹 MIDIファイルをアップロードしてください")
uploaded = files.upload()
midi_path = list(uploaded.keys())[0]
print("✅ Uploaded:", midi_path)
#---------------------------------------------
# ② パラメータ設定 / Parameter settings
#---------------------------------------------
sr = 44100 # サンプリング周波数
volume = 0.4 # 音量
output_wav = "/content/piano_output.wav"
#---------------------------------------------
# ③ ピアノ音合成関数 / Piano-like tone synthesis
#---------------------------------------------
def piano_tone(freq, duration):
"""
ピアノ音を模した波形を生成
- 基本波 + 倍音(2,3,4倍)を加算
- 指数的減衰で自然な響きを再現
"""
t = np.linspace(0, duration, int(sr * duration), endpoint=False)
envelope = np.exp(-3 * t) # 減衰包絡
wave = (
np.sin(2 * np.pi * freq * t) +
0.5 * np.sin(2 * np.pi * 2 * freq * t) +
0.3 * np.sin(2 * np.pi * 3 * freq * t) +
0.2 * np.sin(2 * np.pi * 4 * freq * t)
)
return wave * envelope * volume
#---------------------------------------------
# ④ MIDIファイル読み込み / Load MIDI
#---------------------------------------------
mid = mido.MidiFile(midi_path)
print("Loaded:", midi_path, "| Length:", round(mid.length, 2), "sec")
#---------------------------------------------
# ⑤ 音声合成 / Synthesize audio
#---------------------------------------------
audio = np.zeros(int(mid.length * sr), dtype=np.float32)
current_time = 0.0
for msg in mid:
current_time += msg.time
if msg.type == 'note_on' and msg.velocity > 0:
freq = 440.0 * (2.0 ** ((msg.note - 69) / 12.0)) # MIDIノート→周波数
start = int(current_time * sr)
dur = 0.4 # 音の長さ(秒)
end = start + int(dur * sr)
if end < len(audio):
audio[start:end] += piano_tone(freq, dur)
#---------------------------------------------
# ⑥ 正規化と保存 / Normalize and save WAV
#---------------------------------------------
audio = np.clip(audio, -1.0, 1.0)
write(output_wav, sr, (audio * 32767).astype(np.int16))
print("✅ ピアノ風WAVを保存しました:", output_wav)
#---------------------------------------------
# ⑦ 再生 / Playback in Colab
#---------------------------------------------
Audio(output_wav)
🎵 実行手順(Google Colab)
- 上記コードをセルに貼り付けて実行。
- 「ファイルを選択」ボタンが出るので
.midファイルをアップロード。 - 自動でピアノ音に変換 →
piano_output.wav生成。 - ブラウザで再生できます。