私はマルチトラックのMIDIファイルを各トラックごとのノートと継続時間の配列に変換するためにmusic21を使用しようとしています。その中の16台のトラックとMIDIファイルtest.mid所与例えばmusic21:トラックごとのノートと継続時間の解析
、私は(音符のピッチ、継続時間(プラス多分位置))からなる、タプル16個の配列を取得したいと思い
。 music21ため
ドキュメントが従うことはかなり困難である、と私は本当にこの上の任意の助けをいただければ幸いです。..
私はマルチトラックのMIDIファイルを各トラックごとのノートと継続時間の配列に変換するためにmusic21を使用しようとしています。その中の16台のトラックとMIDIファイルtest.mid所与例えばmusic21:トラックごとのノートと継続時間の解析
、私は(音符のピッチ、継続時間(プラス多分位置))からなる、タプル16個の配列を取得したいと思い
。 music21ため
ドキュメントが従うことはかなり困難である、と私は本当にこの上の任意の助けをいただければ幸いです。..
ありmusic21でこれを行うために複数の方法があるので、これはただ一つの簡単な方法です。 .:
import music21
from music21 import *
piece = converter.parse("full_path_to_piece.midi")
all_parts = []
for part in piece.parts:
part_tuples = []
for event in part:
for y, in event.contextSites():
if y[0] is part:
offset = y[1]
if getattr(event, 'isNote', None) and event.isNote:
part_tuples.append((event.nameWithOctave, event.quarterLength, offset))
if getattr(event, 'isRest', None) and event.isRest:
part_tuples.append(('Rest', event.quarterLength, offset))
all_parts.append(part_tuples)
代替ソリューションは、音楽にアクセスVIS-フレームワークを使用することであろう等、半分ノートは2.0に等しく、四分音符が1.0に等しくなるように、durational値をfloatとして表現されることに注意してくださいmusic21経由でシンボリック表記のファイルを開き、その情報をpandasデータフレームに格納します。これを行うことができます:
pip install vis-framework
もう1つの解決策は、music21の代わりにHumdrumを使用することです。
ありがとうございます! 「ノートの位置」では、ノートのタイムスタンプを意味していたので、配列を操作した後にMIDIファイルを再構築することができます。それもイベントフィールドの一部ですか?また、「休憩の検出を含む」とはどういう意味ですか? – ytrewq
タイムスタンプでは、作品の先頭からの時間的位置を意味しますか?音楽21の言い分(およびVIS用語)では、これはしばしばイベントの「オフセット」と呼ばれます。それが私に知らせることを意味するのであれば、私は "オフセット"属性があるので私の答えを編集しますが、それはあなたが期待するほど単純ではありません。私が休憩を含むことを意味したことは、私の答えのコードが現在休憩をスキップしていることです。あなたはまた、休憩に出くわすときも知りたいですか? – Alex
また、music21には、ソフトウェアに関する非常に良い情報源であるGoogleグループがありますが、私はmusic21の質問にも適していると考えています。 https://groups.google.com/forum/?hl=en#!forum/music21list – Alex