Audio Decomposition – 音楽を構成する楽器ごとに分離するオープンソース
(matthew-bird.com)-
プロジェクト概要
- このプロジェクトは、音楽を楽譜に変換するプログラムを作ることを目標としている。
- 外部の楽器分離ライブラリを使わずに、音楽を構成する楽器ごとに分離するオープンソースプロジェクトである。
- 個人的な必要性と、シンプルなオープンソースアルゴリズムの不在がプロジェクトの動機だった。
-
準備プロセス
- 楽器データは University of Iowa Electronic Music Studios のデータベースから取得した。
- このデータから、全波形のフーリエ変換と波形のエンベロープを求める。
-
動作原理
- 楽器の音の波形は、主にフーリエ変換とエンベロープによって特徴づけられる。
- これにより、どの楽器がどの音を演奏しているかを把握できる。
-
フーリエ変換
- 音楽ファイルのフーリエ変換を 0.1 秒ごとに実行してスペクトログラムを生成する。
- 各楽器の保存済みフーリエ変換を合算し、0.1 秒ウィンドウのフーリエ変換を再構成する。
- 各楽器の大きさは、MSE コスト関数の周波数に関する偏微分によって求める。
-
エンベロープ
- エンベロープは波形の上限線であり、ノイズや特定タイプの波形に対して頑健な方法が必要となる。
- 波形をチャンクに分け、各チャンクの最大値を取ることでエンベロープを求める。
- エンベロープをアタック、サステイン、リリースに分けて分析する。
- 楽器の波形は静的または動的な減衰を持つ場合があり、これを区別するために減衰係数と変化率を分析する。
-
波形のさまざまな種類
- 音楽ファイルを処理するため、各音の周波数に対してバンドパスフィルタを適用する。
- 各楽器について、アタックとリリースの相互相関によって各音の開始と終了を見つけ、MSE を計算してコストを求める。
- フーリエ変換の段階で見つけた大きさとコストの逆数を掛け合わせて、最終的な大きさを求める。
-
結果と表示
- matplotlib の散布図を使って楽譜を表示する。
- 当初は大きさからオーディオを再構成しようとしたが、多くの問題が発生したため断念した。
- 楽譜の再構成に有用であり、音程やコードの特定に苦労する場合に特に役立つ。
1件のコメント
Hacker Newsのコメント