2

iOSでMIDIを使用する方法を学ぶためにドラムマシンを構築しています。なんとか一点まで動作させることができましたが、次の問題があります。ユーザーが特定のボタンをタップすると、MIDI プレーヤーの再生中に MIDI ループにサウンドを追加する必要がありますが、残念ながら単純にはできません。

MusicTrackNewMIDINoteEvent(track, 0, &message);

ただし、トラックはループしていて長さが決まっているため、理論的にはある時点で 0 に戻るはずです。私もこれを試しました:

MusicTrackNewMIDINoteEvent(track, noteTimestamp, &message);

noteTimestampプレーヤーから受け取ったタイムスタンプはどこにありますか。最後に、次のようなもので動作させることができました:

MusicTrackNewMIDINoteEvent(track, noteTimestamp+.5, &message);

しかし言うまでもなく、.5遅延は私のドラムマシンに必要なものではなく、可能な限り応答性が高い必要があります。

では、この問題にどのように取り組むのでしょうか。どうすれば遅れることなく、できるだけ早くトラックにノートをプッシュできますか?

4

1 に答える 1

1

トラック上にイベントを配置していますが、イベントを配置するまでに、「再生ヘッド」は、それで何でもできるポイントをすでに過ぎています。

そのため、次にループが「発生」したときのためにイベントを「記録」する手段として、現在行っていることを (時間をずらさずに) 続行しますが、手動で MIDI メッセージを送信する必要があります。トラックから:

(int) note = 60;
(int) velocuty = 127;
(int) offset = 0;
MusicDeviceMIDIEvent(_yourSamplerUnit, kMIDIMessage_NoteOn << 4 | 0, note, velocity, offset);

繰り返しになりますが、手動の midi イベントを発生させると、リスナーはサウンドを聞くことができ、イベントをトラックに配置すると、トラックは次回のラウンドのためにそれを「録音」できます。

于 2013-11-04T20:16:29.413 に答える