この記事について
持っているmp3でgarage bandから音楽の楽譜を作ってみたいと思ったので、まずはmp3からmidiにしてみました。
使用したツール
- basic-pitch
- python 3.10(m1 macOSの制約のため)
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にディレクトリを切って、定数部分を書き換えて使ってください
処理の概要
- demucsによる音声分離(メロディ部分がほしい)
- basic-pitchによる音声変換(mid)
- midを4トラックに集約
- 指定した秒数間連続するノートは統合
私がやりたかった音源はdemucsによる音声分離でother.mp3に分類されるので、google colabでも同様のファイルを音声変換しています
demucsの音声分離はCPUだけだとわりかし重いので、可能ならGPUを使えるようにしたほうがいいです。
実際basic-pitchだけでは、同じ音のノートが連続します。
修正するのが面倒なので、MERGE_THRESHOLD_SECONDS秒連続する同じ音のノートは結合させるようにしました。
変換前の音声と変換後で比較(2025/11/18)
変換前(.mp3)
変換後
BGMerの旧未来空間をお試しとして使いました。
精度的にはまぁ...うん
2025/11/30 ↑よりは多少良くなっている気がする