日本語版
最新ニュース
科学&テクノロジー

マシュー・バード – オーディオ分解

デモ動画: https://youtu.be/-i0PSxcoDH0、 https://youtu.be/mzPUfs9sYQE、 https://youtu.be/Z7D6obv12zk、 https://youtu.be/LkDJ9XT-klU Github リポジトリ: https://github.com/mbird1258/Audio-Decomposition 前提 このプロジェクトの私の計画は、音楽を楽譜に変換するプログラムを作成することでした。それは主に、音楽を楽譜にしたいという私自身の願望と、(私が知る限りでは)音源分離を実行するためのオープンソースで単純なアルゴリズムが不足していたことによって動機付けられました。 準備 楽器データ 機器データはすべて アイオワ大学電子音楽スタジオの楽器データベース。これらのファイルを使用して、以下に記載されているのと同じ方法を使用して、波全体のフーリエ変換と波のエンベロープを見つけます。 仕組み 楽器の音波は主にそのフーリエ変換とエンベロープによって特徴付けられます。したがって、これらの両方を使用して、どの楽器がどの音を演奏しているかを適切に把握することができます。 フーリエ変換 音楽を構成音符と楽器に分割するプログラムの最初の方法は、0.1 秒ごとに音楽ファイルのフーリエ変換 (スペクトログラム) を取得し、保存されている各楽器のフーリエ変換を加算して 0.1 秒ウィンドウのフーリエ変換を再作成することです。フーリエ変換は再生される音楽を比較的よく表現するはずなので、できれば設定した時間に音楽を完璧に再現するという考えでした。 元のフーリエ変換 構成楽器 フーリエ変換を再作成 各機器の大きさは、次の行列を解くことで得られます。マトリックスは、各機器に関して周波数別の MSE コスト関数の偏導関数 (例: 5 Hz での FT 値) から導出されます。行列の各行は異なる偏導関数です。 (1 番目はチェロ、2…

マシュー・バード – オーディオ分解

1731254943
2024-11-10 03:57:00




デモ動画: https://youtu.be/-i0PSxcoDH0https://youtu.be/mzPUfs9sYQEhttps://youtu.be/Z7D6obv12zkhttps://youtu.be/LkDJ9XT-klU

Github リポジトリ: https://github.com/mbird1258/Audio-Decomposition

前提

このプロジェクトの私の計画は、音楽を楽譜に変換するプログラムを作成することでした。それは主に、音楽を楽譜にしたいという私自身の願望と、(私が知る限りでは)音源分離を実行するためのオープンソースで単純なアルゴリズムが不足していたことによって動機付けられました。

準備

楽器データ

機器データはすべて アイオワ大学電子音楽スタジオの楽器データベース。これらのファイルを使用して、以下に記載されているのと同じ方法を使用して、波全体のフーリエ変換と波のエンベロープを見つけます。

仕組み

楽器の音波は主にそのフーリエ変換とエンベロープによって特徴付けられます。したがって、これらの両方を使用して、どの楽器がどの音を演奏しているかを適切に把握することができます。

フーリエ変換

音楽を構成音符と楽器に分割するプログラムの最初の方法は、0.1 秒ごとに音楽ファイルのフーリエ変換 (スペクトログラム) を取得し、保存されている各楽器のフーリエ変換を加算して 0.1 秒ウィンドウのフーリエ変換を再作成することです。フーリエ変換は再生される音楽を比較的よく表現するはずなので、できれば設定した時間に音楽を完璧に再現するという考えでした。

元のフーリエ変換

構成楽器

フーリエ変換を再作成

各機器の大きさは、次の行列を解くことで得られます。マトリックスは、各機器に関して周波数別の MSE コスト関数の偏導関数 (例: 5 Hz での FT 値) から導出されます。行列の各行は異なる偏導関数です。 (1 番目はチェロ、2 番目はピアノなど)

封筒

楽器のエンベロープを音波に一致させるための最初のステップは、エンベロープ自体を取得することです。エンベロープは波の上限であり、これを行う関数はありますが、ノイズや特定の種類の音波に苦戦しているようです。したがって、さまざまな周波数で多くのさまざまな機器を処理する必要があるため、より堅牢なソリューションが必要です。

エンベロープを取得するために、この関数は音波を複数のチャンクに分割してから、各チャンクの最大値を取得します。結果をさらに絞り込むために、関数はエンベロープが元の音波より下にあるポイントを見つけて、エンベロープを定義する新しいポイントを追加します。




次のステップは、波のエンベロープをアタック、サステイン、リリースに分割することです。アタックはノートの最初のノイズ、サステインはノートが保持されている間、リリースはノートが停止するときです。インストゥルメントサンプルの場合、波形の最初のゼロ以外の値を取得して、アタックの開始を取得できます。アタックとサステインの間のポイントを取得するには、関数が下に凹んでいるか減少しているときに最初のポイントを取得します。サステインとリリースの間のポイントを取得するには、関数が増加または下に凹んでいる端から最初のポイントを取得します。リリースの終わりを取得するには、関数がゼロ以外である終わりから最初の点を見つけます。

波をさらに分類するには、波が取り得る主な形式を考慮する必要があります。ピアノなどの一部の楽器には静的な減衰があり、ほとんどが指数関数的な減衰形状に従います。一方、バイオリンなどの一部の楽器は、音が持続するにつれて音量が増減することがあります。これに加えて、インストゥルメント ファイル内の一部のオーディオ サンプルはサウンドの有効期限が切れるまで保持されますが、その他のオーディオ サンプルは早期にリリースされます。減衰が静的か動的かを区別するには、減衰係数が 1 より大きい場合、または減衰曲線からの逸脱が大きすぎる場合、それは動的です。エンベロープにリリースがあるかどうか(AS または ASR)を区別するには、サステインとリリースの平均変化率を調べます。リリースの変化率が低い場合は、リリースはありません。

さまざまな種類の波

音楽ファイルを処理するには、まず各ノート周波数の信号のバンドパス フィルターを取得します。フィルターされた波形を使用して、各楽器を繰り返し処理します。各楽器について、楽器のアタック(正規化)とリリース(正規化)の相互相関を取得して各ノートの開始と終了を見つけ、次に楽器の波形とフィルターされたオーディオの MSE を取得して、そのコストを取得します。当時の楽器。この後、フーリエ変換ステップで求めた大きさと 1/(このステップで求めたコスト) を乗算して、最終的な大きさを求めます。

画面

ファイルを表示するには、matplotlib の – 形の点を含む散布図を使用して楽譜を表示します。当初はオーディオを大きさから再現したかったのですが、多くの問題が発生し、時間がかかり、トラブルシューティングが非常に困難になりました。 matplotlib の imshow プロットも使用してみましたが、この場合、ほとんどの値が 0 であるため非常に非効率であり、画面をパンまたはズームするたびに、画面上にあるかどうかに関係なく、matplotlib はすべてのポイントを再描画する必要があります。

結果

全体的に見て、かなりうまく機能していると思います。これを使用すると、楽譜の再作成がより良くなります(私がやったように) ここ から このビデオ)、特に正しいピッチやコードを見つけるのに苦労している場合に最適で、実行にもそれほど時間はかかりません。

#マシューバード #オーディオ分解

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。