0

UIView にリアルタイム音の振幅をグラフで表示したい。

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

そして、グラフを更新するには、私はこれが好きでした。これはミリ秒ごとに呼び出されます。

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

updateGraph の中はこんな感じです。

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

しかし、グラフは斜めに描画されます。

http://achievstar.tistory.com/234 (私はこのサイトを初めて使用したため、写真をアップロードできませんでした)

(私は推測します) 「waitUntilDone:NO」が原因です。

iphone 4S も iPad2 も 1000 の速度に追いつけませんでした。

「waitUntilDone」も「YES」にしてみました。それは正しく描き、

http://achievstar.tistory.com/234 (下図参照)

また、1000台のレートにデバイスが追いつかず、

このように、グラフ化速度は遅かったです。

グラフをより良く修正する方法はありますか?

私は本当に良い解決策を見つけることさえできなかったので、ここに在庫があります。

4

2 に答える 2

0

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

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

updateGraphシンプルな self を使用して を呼び出してみてください。

すなわち [self updateGraph]; そして、結果を見てください..

于 2012-01-03T13:43:06.633 に答える
0

私は自分で答えを得ました!

ミリ秒ごとに音声入力を取得していましたが、

その中で、グラフもミリ秒ごとに更新しました。

つまり、480 のすべてのフィクセルを 1 ミリ秒で更新したということです。

音声入力が入ったらすぐにグラフを更新しようと思っていたのですが、

グラフを滑らかに表示します。

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

それは本当に多くのプロセスを必要とするからです。

そこで、ミリ秒ごとではなく UI を更新するようにコードを変更しました。そしてそれは本当にうまくいきます。

于 2012-01-04T06:53:15.417 に答える