0

ユーザーが演奏した音高の変化に反応するディスプレイを備えたiOS5/iOS6アプリを作成しました。サンプルのSpeakHereコードのrecord関数を使用しますが、リアルタイムで応答するように設計されているため、実際にはファイルを保存しません。

このアプリを拡張して、ピッチ自体と同じピッチが維持される期間に同時に応答したいと思います(たとえば、同じピッチが最小時間安定して保持されている場合の色の変更)。私は、単純に見えるNSTimer関数とNSDate関数、および明らかにCベースで非常に混乱しているAudioTimeStamp関数について読んでいます。他の投稿に基づくと、NSTimerとNSDateのチェックにより、実際の演奏に対するディスプレイのリアルタイムの応答が遅れる可能性があるようです。dispatchAfterはどうですか?ブロックがスケジュールされた時間に実行されることを期待できますか?

私の質問は、AudioQueueの特定のピッチの持続時間を測定し、リアルタイムで継続的に表示を更新できるという望ましい結果をもたらす可能性が最も高いのはどのアプローチですか?これを機能させるには、ファイルに保存する必要がありますか?

私は独学でプログラミングを始めて数か月しか経っていないので、何をしなくても、新しいAPI/C言語機能について多くのことを学ぶ必要があります。誰かが私を実りある方向に向けてくれることを願っています。ありがとう!

4

1 に答える 1

0

あなたは間違いなくここでかなり高度なものに取り組んでいます。ここにいくつかの考えがあります:

  1. あなたのオーディオ処理は最も集中的な操作のようです。この処理は継続的である必要があるため、おそらく別のスレッドでこの処理を行う必要があります。処理とは、オーディオを調べてピッチを決定することを意味します。

  2. ピッチを特定したら、それが始まった時間を保存する必要があります。

  3. 次に、メインスレッドで、継続的に繰り返すNSTimerを設定し、NSTimerのfireメソッドで、現在の日付からピッチの開始日を減算して、NSTimeIntervalとして経過時間を取得します。

  4. NSTimeIntervalを表示ロジックに送信して、画面の色を更新できるようにします。

チェックアウトするいくつかのこと:

iOSNSTimerでのマルチスレッドと GrandCentralDispatchに関する初心者向けチュートリアル

NSTimersの使用

それがあなたを助けることを願っています!

于 2012-11-04T03:40:31.193 に答える