想像以上に複雑なプロセスです。
この研究課題は、音楽のトランスクリプションと呼ばれることが多く、音楽の低レベルの表現 (波形など) を MIDI や楽譜などの高レベルの表現に変換する行為です。
ソリューションの洗練度は、入力データの複雑さに依存します。大量の研究論文が、モノフォニック ピアノやドラムのみでの音楽の採譜に取り組んでいます。それらは簡単に採譜できるからです。(比較的)ヴァイオリンの方が難しいです。声はさらに難しい。ヴァイオリン+声楽+ピアノはもっと難しい。交響曲はほとんど不可能です。あなたは絵を手に入れます。
音楽のトランスクリプションの基本要素には、次の重複領域のいずれかが含まれます。
- (マルチ)ピッチ推定
- 楽器認識、音色モデリング
- リズム検出
- ノートオンセット/オフセット検出
- 形状・構造モデリング
Google Scholar または ISMIR プロシーディングス ( http://www.ismir.net ) で「音楽の編曲」に関する論文を検索してください。上記のサブトピックのいずれかに興味がある場合は、さらに詳しく説明できます。幸運を。
編集: そうは言っても、私たち全員がウェブ上で見つけることができる既存のソリューションがあります. お気軽にお試しください。しかし、そうするときは、批判的な目と耳でそれらを評価してください。文字起こしが失敗する原因となる音声信号の種類は何ですか?
編集 2: ああ、あなたはピアノのためにこれをやっているだけです。わかりました、これは実行可能です。音楽のトランスクリプションは、モノフォニック ピアノをかなりうまくトランスクリプションできるところまで進歩しました。ラフマニノフの協奏曲はまだ問題を引き起こします。
私たちの推奨事項は、最終目標によって異なります。「実行する必要がある... Javaで」と述べています。そのため、どうやってそこにたどり着くかに関係なく、何かを機能させたいだけのように思えます。その場合、私は他の人に100%同意します:存在するものを使用してください。
これは実に興味深い質問です。私が知っているすべての MIR ライブラリは通常、C/C++/Python/Matlab です。しかし、ジャバではありません。EchoNest には Java API がありますが、音符レベルの書き起こしはしていないと思います。http://developer.ehonest.com。(編集:音符レベルのトランスクリプションを行います。返されるデータには、ピッチ、音色、ビート、テイタムなどが含まれます。しかし、ポリフォニーにはまだ問題があることがわかりました。)
ああ、Marsyas は Java ベースです。涼しい。私はそれがただのC ++だと思っていました。http://marsyas.info/おすすめです。MIR の教授である George Tzanetakis によって開発されました。信号レベルの分析を行うため、適切なオプションになるはずです。
これが楽しい学習体験である場合は、Java のサウンド操作ユーティリティを使用して WAV 信号を実験し、何が出力されるかを確認できると思います。
編集: このページでは、MIR ソフトウェアについて私ができるよりも詳しく説明しています: The Tools We Use
Matlab の場合、MIR ツールボックスに興味があるかもしれません
これは一般的なデータセットの素晴らしいページです: MIR データセット