「楽器の音を読み取って、それを楽譜に変える」みたいなアプリケーションを作りたいのですが、何から手をつけて良いのかわかりません。
・言語
・フレームワーク
・勉強すべきこと
・どういう手順で達成できるか
・参考になる記事
等
教えていただけたら幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
- 入力: オーディオデータ
- 変換: 楽器の音の解析 (audio/music analysis)
- 出力: 楽譜 (MusicXML等)
勉強することは、他にも多数ありますが、取り掛かりについては
処理内容を大まかに分類し、それぞれの内容に個別に取り組んでいくと良いです。
入力に関して、
- オーディオインターフェース経由でリアルタイムに読み取る場合は、
デバイスにアクセスできる環境・ライブラリ。
(WebAudio, PortAudio)
- 録音されたファイルを対象とする場合は、ファイルフォーマット、エンコード方式
- チャンネル数・サンプリング数・ビット深度に関しては基礎知識として必須。
変換部分に関して
入力・出力に依存しない形で実装すると良いです。
どのような楽曲を元に、どんな楽譜を生成したいか
自前で実装するか、ライブラリや外部サービスを利用するのか
によって、様々な方法があります。
ここは、自分ではやったことがないので、大雑把な紹介になりますが、
オーディオ解析(audio analysis)や信号処理(signal processing)
リード譜であれば 「Transcription」 で検索。
和音が絡む場合は polyphonic 等。
目的の用途に沿うか解りませんが、
例えば Songle のようなサービスの解析結果を利用するなら、
Web API の知識も必要になってきます。
出力に関して、
出力が MusicXML であれば、テキストが出力できれば何でも構いません。
まずは、「MusicXML ファイルを出力して、外部の楽譜ソフトで開く」
というのを目指してみると良いと思います。
(楽譜ソフトで開けば、プレイバック用のmidi 出力も省ける)
楽譜を扱えるライブラリ
- music21 (Python)
- lilypond (Python + Scheme)
- VexFlow (JavaScript/Web)
他の言語でも同様のライブラリはあるかもしれませんが、
Pythonであれば、楽譜関連はたくさんあります。
https://wiki.python.org/moin/PythonInMusic
試しやすいという点に於いては、
ブラウザ上で扱えるVexFlow が手軽です。
他のアプローチ
- コンソールアプリ
(例: コマンドラインで、オーディオファイルから楽譜ファイルを生成)
- Web アプリ (オーディオ入力WebAudio, 楽譜生成VexFlow)
- Desktop アプリ
GUI ライブラリ Qt, Wx 等
- または両方に対応した Mobile アプリ
の他に、
- VST 等のプラグイン (JUCE等)
- 楽譜ソフトのプラグイン
といった方法もあります。
最初の一歩として、
もし手頃なサイズで参考になりそうなコードがあるなら、
それを読み解いていくのも良いと思いますが、
- 無圧縮の wav ファイル を読み込み、MusicXML ファイルを出力。
の実装を目指してしてみてはどうでしょう。
この時点では特定のフレームワークに依存しない形が望ましいです。
まずは、テストデータとするファイルをいくつか用意し
入力 → 変換 → 出力の流れを処理する枠組みを用意する事です。
後々に、入力を対応ファイルフォーマットを増やしたり、
ファイル以外にもデバイスからリアルタイムに読み込んだり、
出力も MusicXML 以外に、リアルタイムに楽譜に反映等、拡張していきます。
投稿2020/11/15 08:28
編集2020/11/15 10:53総合スコア8760
0
音声・映像といったアナログメディアの分析は、機械学習によって比較的開拓されています。「楽器の音を読み取って、それを楽譜に変える」というご質問文章をそのままグーグルで検索しても、たくさん出てきます。
そこで、質問者様が、以下のどちらの目的なのか、によって、回答は変わってきます。
(1) 実用目的:音を読み取って楽譜またはタブ譜を作るアプリを利用したい場合
(2) 学習目的:プログラミングを学習してみたいので自分で関心がある音を読み取って楽譜またはタブ譜を作るアプリを「作ること」を目的にしたい場合
(1)の場合は、最初の検索で得られたアプリをいろいろ試してみるとよいでしょう。(2)であってもまずは既成のアプリを試してみて、それでも自分で新たに作る意欲や意味を見出せるかを確認しましょう。(確認しておかないと途中で意欲が「折れ」ます)
(2)の場合は、最初の検索に、Pythonとか機械学習とか、プログラミング用語っぽいものを重ねてみましょう。こんどは最初とは異なる、自分で作ることに適合したような検索結果が少し表示されるはずです。これらを手掛かりに進めていきましょう。
なお、質問者様の目的が(2)だとすると、あまり多くの先例が無い(検索でヒットする内容はあまり多くない)領域であると思います。また、完成までには壮大な手番を必要とします。初心者が毎週がんばって1年ではできないレベルのように、個人的には思います。それを上回る意欲があるのでしたらとてもよいことです。一歩ずつ、実際にコードを動かして、学んでみてください。
投稿2020/11/15 08:16
総合スコア3266
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/15 11:10