最終更新日:2022/2/13
- Python で学ぶ音楽信号分析と音楽アプリ開発 目次
Python で学ぶ音楽信号分析と音楽アプリ開発 目次
1. まえがき
2. 準備
2.1 オーディオファイル操作
- 全オーディオファイルとオーディオファイルを含む全ディレクトリを取得 - Wizard Notes
- librosaにおける16-bitでのWAV書き出し - Wizard Notes
- Windowsで特定の拡張子以外のファイルをまとめてコピー - Wizard Notes
- Python: waveモジュールを使ったWAVファイル読み込みとNumPy化 (8-bit, 16-bit, 24-bit, 32-bit int) - Wizard Notes
- Python: waveモジュールをハックしてfloat形式のwavファイルを読み込みnumpy配列に変換する - Wizard Notes
2.2 オーディオファイルの読み込み/書き込み
- LibROSA: ステレオ信号のWAV書き出し(write_wav)におけるstruct.errorの解決方法 - Wizard Notes
- librosa.core.load() のバックエンドが audioread から PySoundFile に代わった件 - Wizard Notes
- Python:soundfile を使ったオーディオファイル (.wav, .flac, .aiff, .raw, etc.) の読み書き - Wizard Notes
- Python:様々な拡張子&複数の楽曲ファイルを読み込んでNumPy配列として格納(wav, flac, mp3, aac, m4a, alac, etc.) - Wizard Notes
- Python:audioread で mp3, aac, m4a 形式のオーディオファイルをNumPy配列として読み込む - Wizard Notes
- Python-sounddevice で音声や歌声をリアルタイム収音・再生・録音 - Wizard Notes
2.3 音楽分析分析・アプリ開発向けのPython ライブラリ
- PyAudio でリアルタイム再生録音・音加工(モノラル録音⇒ステレオ再生)の実装テンプレート - Wizard Notes
- Windows+Python 3.7, 3.8, 3.9, 3.10 でのPyAudioのインストール方法・エラー対処 - Wizard Notes
3. 音楽信号分析のための基本処理
3.1 信号処理
3.1.1 フィルタリングの基礎
- 線形畳み込みのforループでのナイーブな実装 (Python) - Wizard Notes
- 双2次フィルタ (Biquad Filter) の周波数特性(振幅・位相)の一覧 - Wizard Notes
- SciPyを使ったデジタルフィルタの周波数応答プロット - Wizard Notes
- Python:matplotlibで双2次フィルタの極・零点をプロット - Wizard Notes
- Pythonでゼロ位相フィルタリング (scipy.filter.filtfilt) - Wizard Notes
- Python:FIR/IIRフィルタの直列/並列接続の周波数応答(伝達関数)プロット (scipy.signal.freqz) - Wizard Notes
3.1.2 マルチバンド処理用フィルタバンク
- マルチバンド(オーディオクロスオーバー)処理を実現するフィルタ(Butterworth, Linkwitz-Riley)のPython実装(2バンド) - Wizard Notes
- 複数の2帯域分割(補完)フィルタを使ったマルチバンド処理のPython実装(3バンド以上) - Wizard Notes
- オーディオクロスオーバー向け補完フィルタ(バターワース)でのオールパスフィルタのフィルタ係数算出と検証 - Wizard Notes
- Python:マルチバンド処理用フィルタバンクのクラス設計・実装・動作検証 - Wizard Notes
3.2 周波数分析
- np.fft.fftとnp.fft.rfftの処理速度の比較 - Wizard Notes
- librosa.core.magphaseで振幅スペクトルと位相スペクトルを複素信号から抽出 - Wizard Notes
- Python PyFilterBankで環境音をオクターブバンド分析 - Wizard Notes
- 様々なサンプリング周波数に対応した K-weighting フィルタの設計 - Wizard Notes
- PythonのMDCT(修正離散コサイン変換)ライブラリ: mdct - Wizard Notes
- Python: A特性や他の特性を使った周波数重み付けの実装 (聴感補正,騒音測定) - Wizard Notes
3.3 音高分析(定Q変換)
- Python:信号長に近い2の累乗(2**n)のFFTフレームサイズを求める - Wizard Notes
- 定Q変換 (CQT: Constant-Q Transform) の 解説(音高・コード・メロディの分析向け) - Wizard Notes
- 定Q変換のリアルタイム向けPython実装の解説(音高・コード・メロディの分析向け) - Wizard Notes
- LibROSA:音高分析のための定Q変換(CQT)と、逆定Q変換の性能評価 - Wizard Notes
- 再帰的ダウンサンプリング法による定Q変換 (CQT) のPython 実装とアルゴリズム解説 - Wizard Notes
- 定Q変換のPython 実装のアルゴリズム/実装方法による計算速度の比較 - Wizard Notes
- 定Q変換のPython 実装:バッチ処理向けの実装方法の紹介と計算速度の比較 - Wizard Notes
- Python:半音ごとに音高を抽出するIIRフィルタバンクの作成と使い方 (librosa.filters.semitone_filterbank) - Wizard Notes
3.5 時間的な処理
3.4 空間的な処理
- MS処理のためのMid/Side変換の実装解説(Pythonスクリプト付き) - Wizard Notes
- ステレオ楽曲の位相差を確認できるフェーズメーターの作り方(極座標ベース) - Wizard Notes
3.5 音の分離
3.6 リサンプリング
- Pythonとresample_polyでオーバーサンプリング - Wizard Notes
- Python resampyで音声・音楽ファイルをリサンプリング(アップ/ダウンサンプリング) - Wizard Notes
3.7 ピッチシフト/タイムストレッチ
- Python:LibROSA のフェーズボコーダで時間伸縮・ピッチシフト librosa.phase_vocoder - Wizard Notes
- Python LibROSA で音楽・歌声(ボーカル)をピッチシフト librosa.effects.pitch_shift() - Wizard Notes
- Python LibROSA で音楽・歌声をタイムストレッチ(時間伸縮) librosa.effects.time_stretch() - Wizard Notes
- Python: 高品質フェーズボコーダ pyrubberband でタイムストレッチ・ピッチシフト - Wizard Notes
3.8 波形生成
3.9 ラウドネス正規化
- Audacity でラウドネスノーマライゼーション - Wizard Notes
- pyloudnormで平均ラウドネス値 (LUFS) 算出/ラウドネス正規化 - Wizard Notes
- pyloudnormで学ぶ平均ラウドネス値 (LKFS/LUFS) の算出・実装方法 - Wizard Notes
3.10 教材
4. 音楽の構成要素の分析
4.1 テンポ・BPM
- Pythonで楽曲のリズム・テンポ分析: Novelty Curve (楽曲変化検知曲線) - Wizard Notes
- LibROSA:音楽のBPM・テンポ分析に便利なテンポグラムを数行で実装 - Wizard Notes
- Pythonで楽曲のリズム・テンポ分析: テンポグラム (Tempogram) - Wizard Notes
- 楽曲のBPMを自動算出するプログラムの作り方(Pythonサンプルコード付き) - Wizard Notes
- Python: LibROSAによるBPM自動算出の詳細 - Wizard Notes
4.2 コード(和音)
- Python (LibROSA) で音高 ・クロマ特徴を算出する方法 - Wizard Notes
- ロバスト主成分分析(Robust PCA)によるメロディ・歌声抽出(Python実装) - Wizard Notes
- Python + LibROSAでクロマ特徴(クロマグラム)を使って和音推定:(1) テンプレートマッチング - Wizard Notes
- Python: PyTagLibで音楽ファイル (wav, flac, mp3, m4a, aac) のタグ情報抽出 - Wizard Notes
4.3 メロディ
- LibROSA ver. 0.8.0 で基本周波数推定(YIN, pYIN) - Wizard Notes
- LibROSAにおける Salience (顕著性)スペクトログラムの算出方法の解説 - Wizard Notes
- メロディ分析/抽出のための、librosa.salience() によるSalience (顕著性) スペクトログラムの算出 - Wizard Notes
4.4 歌声・音色
- フォルマント強調フィルタの設計に関する備忘録 - Wizard Notes
- ボイスチェンジャー向けフィルタ設計:周波数ワープによるフィルタ係数の修正と実装方法 - Wizard Notes
- チェビシェフ多項式のナイーブな実装 - Wizard Notes
- LibROSA で MFCC(メル周波数ケプストラム係数)を算出して楽器の音色を分析 - Wizard Notes
- Python:LibROSAのLPC (線形予測分析)を使って音声・歌声分析 - Wizard Notes
4.5 音響特徴量
- Pythonの心理音響評価モジュール/開発フレームワーク"MoSQITo"の紹介 - Wizard Notes
- Pythonの心理音響評価モジュール"MoSQITo"でオーディオデータからラウドネスを算出 - Wizard Notes
- PythonとMoSQIToで学ぶ、ラウドネス (sone) の算出および実装方法 (Zwicker method) - Wizard Notes
4.6 楽曲構成・区間
5. 音楽信号分析に基づく要素技術
5.1 クロスフェード処理
- Pythonによる音響音楽信号処理:クロスフェード自動生成 (1)アルゴリズムの概要 - Wizard Notes
- Pythonによる音響音楽信号処理:クロスフェード自動生成 (2)フェードイン・フェードアウト関数 - Wizard Notes
5.2 自動作曲
6 メタデータ収集・処理
6.1 テキスト処理
6.2 データ利用・著作権関連
6.3 Web 上でのメタデータ収集
- Pythonで邦楽アーティスト名一覧をスクレイピング - Wizard Notes
- YouTubeの音楽をPythonで解析:youtube-dlによる動画メタデータ収集 - Wizard Notes
6.4 音楽配信サービスの API 利用
- Spotify Web API で取得できる音響・楽曲特徴量の一覧 - Wizard Notes
- Python用 Spotify Web API "spotipy" の楽曲・アーティストを検索(インストール方法,サンプルコード,API仕様) - Wizard Notes
- Python で iTunes Search API を叩いて iTunes Storeの音楽を検索する - Wizard Notes
- YouTube Data API を使って複数の音楽動画のコンテンツID・メタ情報をまとめて収集 - Wizard Notes
6.5 メタデータ処理ライブラリ (Mutagen, PyTagLib)
- Python: Mutagenで複数のAAC (.m4a) 音源からタグ・メタ情報を抽出 - Wizard Notes
- Mutagenチートシート: MP3, AAC (.m4a), FLACのタグ・メタデータ抽出 - Wizard Notes
- Python+Mutagenで、複数の楽曲から情報(楽曲の長さなど)を高速に抽出 - Wizard Notes
- Python: PyTagLibで音楽ファイル (wav, flac, mp3, m4a, aac) のタグ情報抽出 - Wizard Notes
7 楽曲分析向けデータセット
- 歌声/楽曲分析・音源分離に使えるデータセット DSD100 について - Wizard Notes
- 歌声/楽曲分析・音源分離に使えるデータセット MUSDB18 - Wizard Notes
- 音声・オーディオ版MNIST "FSDD (Free Spoken Digit Dataset)" の紹介と,メルスペクトログラム算出 - Wizard Notes
8 音楽信号分析の利用例
8.1 市販楽曲・アーティストのテンポ分析
8.1.1 東方プロジェクト
- 東方プロジェクト原曲(紅魔郷~輝針城)のBPM分析 - Wizard Notes
- 東方プロジェクト原曲の、BPM/テンポの似た曲データベースを作ってみた - Wizard Notes
- 東方プロジェクトの音楽をデータ分析:テンポ特徴+主成分分析+類似度行列で楽曲推薦 - Wizard Notes
8.1.2 Perfume
- Perfume The Best "P Cubed" の全52曲をテンポ特徴でクラスタ分析 - Wizard Notes
- Perfume The Best "P Cubed"で、BPM/テンポの似た曲を探せるデータベースの作成[2021年7月更新] - Wizard Notes
- Perfume The Best "P Cubed" の全52曲をデータ分析:テンポ特徴+主成分分析+類似度行列で楽曲推薦 - Wizard Notes
8.1.3 L'Arc-en-Ciel
8.1.4 米津玄師
- 米津玄師のアルバム収録曲の BPM 一覧(diorama, YANKEE, Bremen, BOOTLEG, STRAY SHEEP) - Wizard Notes
- BPM・テンポ分析に基づく米津玄師の似た曲データベース(diorama, YANKEE, Bremen, BOOTLEG, STRAY SHEEP) - Wizard Notes
- 「米津玄師の似た曲データベース」作成のための類似曲検索システム設計 - Wizard Notes
9 Pythonでの音楽ソフトウェア開発
9.1 PyQt / PyQtGraph を使ったアプリ開発
- Python + PyAudio で作る、リアルタイムスペクトルアナライザ(ループバック録音対応) - Wizard Notes
- Python+PyAudioで作るリアルタイム音高アナライザ - Wizard Notes
- Python: PyQt5のQPushButtonで作る簡易ピアノ鍵盤 - Wizard Notes
- https://www.wizard-notes.com/entry/dev/pyqt5-pyaudio-simple-synthesizer
- Python: PyQt5とPyAudioで作るBPM計測アプリ - Wizard Notes
- Pythonで作る、信号処理開発プラットフォーム用の音楽プレイヤー - Wizard Notes
- Pythonで作る音楽プレイヤー:PyQt5 で簡易GUI作成 - Wizard Notes
- PyQtで作るdB単位の音量フェーダー - Wizard Notes
- 双2次フィルタのPythonライブラリ"PyQuadFilter"を作ってみました - Wizard Notes
- 双2次フィルタの自作Pythonライブラリ PyQuadFilter 更新 - フレームベース処理対応 - Wizard Notes
- Python matplotlibでスペクトログラムのリアルタイムでのプロット実装 - Wizard Notes
- 2021.4.11 制作音源分析ソフト"Sophiear"開発記録(wxPython, Numpy, PyInstaller) - Wizard Notes
- matplotlibを使ってリアルタイムで折れ線グラフをプロット - Wizard Notes
- matplotlib: 折れ線グラフのリアルタイムプロットでラベルやカラーなどの属性を変える(音声信号でのデモ付き) - Wizard Notes
- Python: PyQtGraphでリアルタイムプロット/アニメーション(サンプルコード・実装デモ付き) - Wizard Notes
- Python:PyQtGraphで散布図グラフをリアルタイムプロット - Wizard Notes
- Python:PyQtGraphで2次元波動方程式の数値シミュレーションをリアルタイムプロット(有限差分法) - Wizard Notes
- 音の広がりや位相差を可視化するリサージュメーター(ゴニオメーター)のPython実装 - Wizard Notes
- Python:音の広がりや位相を見るフェーズスコープをPyQtGraphとPyAudioで実装 - Wizard Notes
- Python:PyQtGraphでメルスペクトログラムをリアルタイム描画 - Wizard Notes
- Pythonで12音平均律の各音高をカラフルにライブプロット - Wizard Notes
9.2 Flaskを使ったサーバサイドでの処理系構築
- Flask+Flask-Dropzone+LibROSAで作るオーディオ信号処理基盤 - Wizard Notes
- Flask:Webアプリでサーバ上のオーディオファイルを再生・ダウンロード - Wizard Notes
- Flask:Webアプリでサーバ上のオーディオファイルを再生・ダウンロード(Blueprint版、デモ付き) - Wizard Notes
- Flask:オーディオファイルをjQuery.ajaxでアップロードしながら、クライアント側でローカルのファイルを再生 - Wizard Notes
- Flask:オーディオファイルをjQuery.ajaxでアップロードしながら、クライアント側でローカルのファイルを再生 - Wizard Notes
- 音楽系Webサービスのインフラ構築:DockerでNginx+uWSGI+Flask+ffmpeg+LibROSA - Wizard Notes
- 楽曲クロスフェード作成支援サービスの試作開発まとめ - Wizard Notes