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?

AIで作曲データ化!YouTube音源をMP3経由でMIDI変換する方法【TopMediai+Python】

Last updated at Posted at 2025-10-13

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)

🌐 無料オンラインツール

🧭 操作手順

  1. 上記サイトを開く
  2. 「クリック/ドロップで追加」から source.mp3 をアップロード
  3. AIが音源を解析(数十秒〜数分)
  4. 「MIDIをダウンロード」をクリック
  5. 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が再生されます。
MuseScoreDAW でもそのまま読み込み可能。


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)

  1. 上記コードをセルに貼り付けて実行。
  2. 「ファイルを選択」ボタンが出るので .mid ファイルをアップロード。
  3. 自動でピアノ音に変換 → piano_output.wav 生成。
  4. ブラウザで再生できます。

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?