複数の楽器で構成されたウェーブ (または他の音楽形式) ファイルで、特定の楽器が提供するメロディ/ビート/リズムを抽出できるプログラムを作成することは可能ですか?
これにはどのアルゴリズムを使用でき、どのプログラミング言語が最も適しているでしょうか?
複数の楽器で構成されたウェーブ (または他の音楽形式) ファイルで、特定の楽器が提供するメロディ/ビート/リズムを抽出できるプログラムを作成することは可能ですか?
これにはどのアルゴリズムを使用でき、どのプログラミング言語が最も適しているでしょうか?
ビートやリズムを抽出するために、対象の楽器を完全に分離する必要はないかもしれません。一般的な解決策は難しいかもしれませんが、特定の部分について解決しようとしている場合は、可能かもしれません. バンドパス フィルターを実装してみて、目的の楽器を選択するように調整できるかどうかを確認してください。
また、PhotoSounderという Mac 製品を見つけました。彼らは、個々の機器を分離する(手動介入による)など、さまざまな使用方法を示すブログを持っています。
楽器は、私たちの声と同じように音の特徴を生み出します。群衆の中から単一の声を選び出し、法医学で使用されるデータベースの署名からその声を識別することができるアルゴリズムがあります。まったく同じ方法で、1 つの楽器のサウンド シグネチャをサウンドスケープ (ミックスされたウェーブなど) から選択し、ビートを選択したり、その楽器のコピーを独自のトラックに作成したりするために使用できます。
明らかに、トラックのコピーを作成することを考えている場合、つまり、ミックスされたウェーブをインストゥルメントごとに 1 つのトラックに分割する場合、多くの作業が必要になります。私の理解では、楽器の周波数がオーバーラップしているため、これは決して簡単なことではありません... ただし、既に説明したように、不可能ではありません.
情報探索の出発点として役立つ可能性がある、Comparisonics によるサウンド マッチング技術に関する非常に興味深いブログ投稿があります: http://www.comparisonics.com/SearchingForSounds.html
原則としては可能ですが、非常に困難です。オープンな研究領域ですらあります。StepManiaのステップ生成プログラムであるDancingMonkeysのプロジェクトペーパーに興味があるかもしれません。かなり洗練されたビート検出と音楽分析を行います。これについては、このペーパー(そのページの下部近くにリンクされています)で詳しく説明されています。
ほとんどの楽器は、特定の周波数範囲内で音を出します。
調整可能なバンドパス フィルター(特定の周波数範囲のみを通過させるフィルター)を作成すると、実際に得られる可能性が最も高くなります。完璧にはほど遠いでしょう。あなたは黒魔術を求めています。トラックから 1 つの楽器を完全に抽出する唯一の方法は、その楽器を含まないトラックのオーディオ サンプルを用意し、2 つの波形の違いを調べることです。
C、C++、Java、C#、Python、Perl はすべて、適切なライブラリを使用してこれらすべてを実行できるはずです。どちらが「最良」であるかは、あなたがすでに知っていることに依存します。
カラオケ マシンのアルゴリズムを調べます。彼らが歌から声を取り除くことができれば、同じ原理を適用して単一の楽器を抽出できると確信しています.