2012-01-03 10 views
0

リアルタイムサウンドの振幅をグラフでUIViewに表示したいと考えています。1ミリ秒ごとにperformSelectorOnMainThreadを使用する際の問題

サウンドサンプルレートを1000秒に設定しました。

グラフを更新するには、このようにしました。これはミリ秒ごとに呼び出されます。

[Audio performSelectorOnMainThread:@selector(updateGraph) withObject:nil waitUntilDone:NO]; 

とupdateGraphの内部はこのようです。

- (void) updateGraph{ 
    [graphview setNeedsDisplay]; 
} 

しかし、グラフは角度を描く。

http://achievstar.tistory.com/234 (私は写真をアップロードできなかったので、私はこのサイトでは新たなんだ)

(私は推測)、それが原因で「waitUntilDone:NO」です。

iphone 4SともiPad2のは、私はまた、「YES」「waitUntilDone」のためにしようとした1000

の割合を追いつくことができませんでした。それは

http://achievstar.tistory.com/234

はので、この方法では、グラフの速度が遅かった

だけでなく、デバイスが1000の速度に追いつくことができませんでしたが、(下図参照)、正しく描画します。

グラフを改善する方法はありますか?

私はもう良い解決策を見つけることさえできなかったのです。

答えて

0

私はちょうど私自身の答えを得ました!

私は、ミリ秒ごとに音声入力を取得

、それは私があまりにもミリ秒ごとにグラフを更新の範囲内でした。

これは、480ピクセルのすべてのフィクセルを1ミリ秒で更新したことを意味します。

私は私が音声入力を得るとき、私はスムーズにグ​​ラフを表示するには、すぐに

をグラフを更新する必要がありますと思いました。

しかし、私は間違っていました。すべてのfixelを更新する必要はありませんでした。

本当に多くの処理が必要です。

私は毎ミリ秒ではなくUIを更新するようにコードを変更しました。それは本当にうまくいく。

+0

より良い答え私は、 'performSelectorOnMainThread'のような他のクラスなしでOpenGLだけを使用していると思います。 –

0

performSelectorOnMainThreadバックグラウンドスレッドを使用していて、メインスレッドに戻ったり、メインスレッドで機能を実行したい場合に、この機能が主に使用されます。

スレッドまたはバックグラウンドスレッドを使用していない場合は、performSelectorOnMainThread関数を使用する必要はありません。その関数を直接呼び出すことができます。

シンプルな自己を使用してupdateGraphに電話してみてください。

[self updateGraph];結果を確認してください。

+0

は実際performSelectorOnMainThreadのコードは、私がUI –

+0

performSelectorOnMainThreadがである関数を更新するためにperformSelectorOnMainThreadを使用するように、バックグラウンドスレッドである「静的OSStatus playbackCallback」機能(「RemoteIO」/ AudioUnitsフレームワークを使用して) –

関連する問題