2

ここから midi ファイルをダウンロードしました: Taylor Swift - You Belong With Me.mid

次に、アコースティック バス ドラム パートのみを抽出します。つまり、この曲の出力アコースティック バス ドラム.mid が必要です。

私は music21 ライブラリを使用して midi ファイルを解析しました。以下は私のコードです。

from music21 import *
import os
fp = os.path.join(common.getSourceFilePath(), 'midi', 'testPrimitive',  'Taylor Swift - You Belong With Me.mid')
mf = midi.MidiFile()
mf.open(fp)
mf.read()
mf.close()
s = midi.translate.midiFileToStream(mf)
partStream = s.parts.stream()
for p in partStream:
    print p.partName

次に、出力は

Saxophone
None
Electric Bass
None
None
Electric Guitar
None
None
None
Banjo
Banjo
Banjo
StringInstrument
Piano

どれがパーカッションなのかわからない… パーカッションのパートがわかったら、そのパートのアコースティックバスドラムを抽出して、アコースティックバスドラム.midファイルとして出力したい。誰かがそれを行う方法を教えてもらえますか? ありがとうございました

[編集] 以下のコードを使用しました。

from music21 import *
import os
fp = os.path.join(common.getSourceFilePath(), 'midi', 'testPrimitive',  'Taylor Swift - You Belong With Me.mid')
mf = midi.MidiFile()
mf.open(fp)
mf.read()
mf.close()
for n in range(len(mf.tracks)):
    for c in mf.tracks[n].getChannels():
        if c == 10:
            print n

出力は 14 です。これは、mf.tracks[14] がパーカッションであることを意味します。次に、ピッチ番号が 35 または 36 の部分を抽出する必要があります。

次に、以下のコードを使用しました:

for n in range(len(mf.tracks[14].events)):
    if mf.tracks[14].events[n].pitch == 35 or mf.tracks[14].events[n].pitch == 36:
        print n

それから多くのアウトプットがあります。次は何をしようか考え中です。

4

1 に答える 1

1

General MIDI では、すべてのパーカッション イベントがチャネル 9 で送信されます。そのため、チャネル 9 でイベントを含むトラックを検索する必要があります (ストリーム オブジェクトはおそらくこれには役に立ちません)。

そのファイルでは、"Drums" という名前のトラックです。(music21が名前を取り上げなかった理由はわかりません。)

アコースティック バス ドラム イベントを抽出するには、ノート番号 35 を使用していないすべてのノートを削除します (ファイル内のすべてのノートで、実際にはノート番号 36 の別のバス ドラムを使用しています)。

于 2016-12-11T11:05:48.930 に答える