MIDIシーケンサー誰か作れる?
■ このスレッドは過去ログ倉庫に格納されています
03011
NGNG>メソッドの希望は
ちょっと待ってください。
基本的に必要なメソッドは、再生時のシーケンシャルアクセスと
ピアノロールでの編集時のMIDIイベントの挿入削除(MIDIファイル読み込み等)、
トラック単位の移動、削除。
シーケンシャルアクセスではイテレーターを介してやるのが
いいと思います。
Iteratorのメンバ関数として、
セットスタートタイム(絶対時間)
セットエンドタイム(絶対時間)
準備()//スタートタイムに、カーソルを合わせる
hasNext()とnext()があればいいですよね?
これで繰り返し再生も簡単ですね。
多分、番兵としてループイベントなりのダミーのイベントを入れると思います。
ピアノロールの編集では、
クリックされたポイントとノートの高さ、編集中のチャンネルナンバーがきますね。
よって
insert(new NoteEvent(absoluteTime,noteNumber,channelNumber))
となりますね。
だから、こうなりますよね?
insert(MidiEvent* evt)
delete(MidiEvent* evt)
インサートに関してはMIDIイベントオブジェクトへのポインタで行うのがいいと思い
ます。
各イベントは、MidiEventクラスを継承しているという事です。
MidiEventクラスが持つ物は、AbsoluteTimeとChannelですね。
MidiEventの時間を変更するには
一度deleteしてからinsertを行う事で問題ないでしょうか?
ちなみに、TrackはMidiEventへのポインタを線形リストで保持します。
(ソートはしません/してもいいですが)
トラックに対する編集時は、それらのポインタに対して変更をかけます。
編集ポイントなりは、insert時にやってもらえればいいのかな?
オブジェクト指向さえしっかりやってもらえれば、
PascalからC++にトランスレートしてもいいのですが
んー。
>複数のスレッドで呼び出される事は無いとします
OKです。
再生しながら、編曲するという事も実はやりたかったのですが
今回は置いておきます。
とりあえず、再生エンジンとCUIのインターフェースを作っておきます。
>>292
なるほど
スピーカーは電磁波でまくりですからね。
■ このスレッドは過去ログ倉庫に格納されています