1
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?

mp3からmidi変換

Last updated at Posted at 2025-11-16

この記事について

持っているmp3でgarage bandから音楽の楽譜を作ってみたいと思ったので、まずはmp3からmidiにしてみました。

使用したツール

basic-pitchについて

Spotify社が作った自動で音楽を変換するライブラリ
簡単かつマルチな変換を目的としたツールとの記載

環境条件

投稿者はmacbook(m1)でやっているが、windowsとかubuntuでも動くみたい。
ただ、m1 macOSはpython 3.10しかサポートしていないみたいなので注意

やり方

環境準備

% brew -v
Homebrew 4.5.9

# python 3.10のダウンロード
% brew install python@3.10

# uvによる仮想環境作成のためuvをダウンロード
% curl -LsSf https://astral.sh/uv/install.sh | sh

% cd /path/to/projcet

% uv init --python 3.10 python_work

% cd python_work

% uv add basic-pitch

# tensorflow-macos の依存処理かわからないけど、結構時間かかったので
% UV_HTTP_TIMEOUT=300 uv add 'basic-pitch[tf]' 

ツール実施

# 音楽ファイルはicloudに保存しているから、そこから持ってくる
% mkdir output sample
% cp -p ~/Library/Mobile\ Documents/com~apple~CloudDocs/music/sample.mp3 ./sample

# geminiに聞いてみた、いい感じのオプション値を試してみている
% uv run basic-pitch output sample/sample.mp3 --onset-threshold 0.50 --frame-threshold 0.35 --minimum-note-length 60

# 色々出力されて✨ Done ✨が出たら完了

結果

無事garagebandから見ることができた。
精度としては...なんとなく掴めるので、個人利用ではとりあえずいいと思っている。

2025/11/30 追記

google colabで動かしてみたので、共有
google driveにディレクトリを切って、定数部分を書き換えて使ってください

処理の概要

  1. demucsによる音声分離(メロディ部分がほしい)
  2. basic-pitchによる音声変換(mid)
  3. midを4トラックに集約
  4. 指定した秒数間連続するノートは統合

私がやりたかった音源はdemucsによる音声分離でother.mp3に分類されるので、google colabでも同様のファイルを音声変換しています
demucsの音声分離はCPUだけだとわりかし重いので、可能ならGPUを使えるようにしたほうがいいです。

実際basic-pitchだけでは、同じ音のノートが連続します。
修正するのが面倒なので、MERGE_THRESHOLD_SECONDS秒連続する同じ音のノートは結合させるようにしました。

変換前の音声と変換後で比較(2025/11/18)

変換前(.mp3)

変換後

BGMerの旧未来空間をお試しとして使いました。
精度的にはまぁ...うん

2025/11/30 ↑よりは多少良くなっている気がする

1
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
1
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?