4

簡単に言えば、私はiPhoneのマイク入力ストリームからのデシベル読み取りに基づいて何かをリップシンクしようとしていますが、取得した値は私が求めているものとはまったく異なります。AVAudioRecorderのpeakPowerForChannelとaveragePowerForChannelを使用しています。(これはかなり単純なリップシンク手法であることを認識していますが、品質は大きな問題ではありません)。

デシベルの数が増えると、メーターは希望どおりに反応します(大きいほど値が大きいので、これを口の開きにマッピングできます)が、音がすぐに止まると、値はゆっくりと減少します。音は途切れていましたが(つまり、1、2秒で無音になりました)-私が望むものではありませんでした。

この「フェード」効果がないようにAVAudioRecorderを構成する方法はありますか、または目的の出力を取得するために提供される値を使用して何かを行うことはできますか?または、使用できる別のツールはありますか?

ありがとう!

4

2 に答える 2

3

次のように、meteringEnabledプロパティをにリセットできます。YES

yourRecorderName.meteringEnabled = YES

レベルを周囲レベルにリセットするたびに、これを呼び出します。これには約0.02秒かかり、その間にレベルは一時的に0、つまり-120 dBに低下してから、周囲にリセットされます。

または、次を使用することもできます。

[yourRecorderName stop]
[yourRecorderName record]

これには約0.05秒かかりますが、待機時間内にレベルが0に下がることはありません。実際、この場合、レコーダーオブジェクトが停止して再び記録を開始するのに0.05秒かかるため、何も起こりません。

于 2013-06-27T20:19:05.460 に答える
2

AVAudioPlayerのメーターの弾道は、従来のオーディオメーターを表示するために期待するものです。振幅が増加する場合は瞬時に、減少する場合は低域になります。

録音されたオーディオに基づいてキャラクターをアニメートするトーキングカールタイプのものの場合、生のオーディオを取得し、必要に応じて独自のメータリング応答を微調整する必要があります。キャラクターをライブでアニメートしている場合(つまり、ユーザーがデバイスのマイクで話している間)、AudioQueueまたはRemoteIOを使用してオーディオデータを取得することをお勧めします。それ以外の場合、録音後にオーディオファイルを処理しているだけの場合は、ExtAudioFileを使用して必要なデータを取得できます。

于 2011-04-16T22:04:54.987 に答える