iOSのCoreMIDI接続は、単純なオブジェクト作成とNSLog
を実行している場合は、それに当たる何かを処理するのに十分なほど高速です。 UIの中には、入ってくるすべてのものを処理する時間がありません。UIが爆発したり、処理が遅すぎたりします。Objective-CでCoreMIDIを調整する方法
しかし、私はCoreMIDI入力に応じて実際の処理とUI表示を行う必要があります。私が望むのは、最新ののメッセージをすべて、例えば1msまたは2msのように処理することです。私は1ミリ秒ごとにタイマ起動メソッドによって空になるコレクションでこれを行ってきました(processFromServerAsync
)。
NSDictionary *queueCopy = [self.queue copy];
// here the dictionary could get messages not in the queue copy!
self.queue = [NSMutableDictionary dictionary];
私は台無しにするのは簡単ですロック、と同期することで、これを扱うことができることを実現:一つの問題は、私はつかむと代替ならば、私が思うに、いくつかのメッセージが割れて落ちるかもしれないということです
-(NSMutableDictionary *)messageQueue {
@synchronized(self) {
if (!messageQueue_)
self.messageQueue = [NSMutableDictionary dictionary];
return messageQueue_;
}
}
-(NSDictionary*)clearMessageQueueAndReturnCopy {
@synchronized(self) {
if (!messageQueue_)
return [NSDictionary dictionary];
NSDictionary *retVal = [messageQueue_ copy];
self.messageQueue = [NSMutableDictionary dictionary];
return retVal;
}
}
しかし、私はこれを正しい方法で処理しているとは確信していません。 (Obj-Cの外でも)調整はどのように一般的に行われますか? UIやプログラムでこれらのメッセージをすべて処理することはできません。
なぜこれほど多くのメッセージ?クロック?あなたはできるだけ早くあなたが外部MIDIハードウェア上でできるように4つのスライダをスライドさせた場合 –
@TimKempは、それはCoreMIDIのためにあまりにも多くはないが、それは、任意の論理処理を行うにはLOTです。すごく準備ができています。 –
私はあなたを得ました、それは多くのデータです。 –