質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2720閲覧

音を読み取って楽譜またはタブ譜を作るアプリを作りたい

jin_707502345

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/15 07:01

「楽器の音を読み取って、それを楽譜に変える」みたいなアプリケーションを作りたいのですが、何から手をつけて良いのかわかりません。

・言語
・フレームワーク
・勉強すべきこと
・どういう手順で達成できるか
・参考になる記事

教えていただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jin_707502345

2020/11/15 11:10

ありがとうございます。参考になりました。
guest

0

音声・映像といったアナログメディアの分析は、機械学習によって比較的開拓されています。「楽器の音を読み取って、それを楽譜に変える」というご質問文章をそのままグーグルで検索しても、たくさん出てきます。

そこで、質問者様が、以下のどちらの目的なのか、によって、回答は変わってきます。

(1) 実用目的:音を読み取って楽譜またはタブ譜を作るアプリを利用したい場合
(2) 学習目的:プログラミングを学習してみたいので自分で関心がある音を読み取って楽譜またはタブ譜を作るアプリを「作ること」を目的にしたい場合

(1)の場合は、最初の検索で得られたアプリをいろいろ試してみるとよいでしょう。(2)であってもまずは既成のアプリを試してみて、それでも自分で新たに作る意欲や意味を見出せるかを確認しましょう。(確認しておかないと途中で意欲が「折れ」ます)

(2)の場合は、最初の検索に、Pythonとか機械学習とか、プログラミング用語っぽいものを重ねてみましょう。こんどは最初とは異なる、自分で作ることに適合したような検索結果が少し表示されるはずです。これらを手掛かりに進めていきましょう。

なお、質問者様の目的が(2)だとすると、あまり多くの先例が無い(検索でヒットする内容はあまり多くない)領域であると思います。また、完成までには壮大な手番を必要とします。初心者が毎週がんばって1年ではできないレベルのように、個人的には思います。それを上回る意欲があるのでしたらとてもよいことです。一歩ずつ、実際にコードを動かして、学んでみてください。

投稿2020/11/15 08:16

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jin_707502345

2020/11/15 11:10

ありがとうございます。参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問