フィンチでのコールバックの再生は終了しましたか?-audioPlayerDidFinishに似ていますavaaudioplayerのもので再生しますか?コードを調べても、それを参照しているものは見つかりませんでした。
質問する
436 次
3 に答える
1
OpenALはそれをサポートしていないため、Finchにはそのようなコールバックはありません。(または、少なくとも私が最後に見たときはそれをサポートしていませんでした。)次のように偽造することができます。
- (void) playSoundWithCallback {
[someSound play];
[someDelegate performSelector:@selector(soundDidFinishPlaying:)
withObject:someSound afterDelay:someSound.duration];
}
私はそれを試しませんでしたが、それは単純なコードであり、うまくいくはずです。ええと…少なくともピッチ、つまり音速をいじり始めるまでは:)
于 2010-09-04T17:21:27.637 に答える
0
@zoul:これは非常に遅い返信だと思います。しかし、私は答えが正しくないことに気づきました。音を一時停止したり、システムからの中断があった場合はどうなりますか。このような場合、サウンドがまだ完了していなくても、コールバックを受け取ります。正しい処理については、openAL仕様の「4.3.6。ソース実行の管理」をお読みください。
于 2011-07-17T13:04:24.790 に答える
0
割り込みを気にしない場合は、ピッチを修正したハックを次に示します。
OpenALは、ピッチが1.0でない場合に再生されるサウンドの再生長を変更します。(ALパラメーターは以前と同じ値を返すため、OpenALからこの新しい長さを照会することはできないようです)
ピッチの範囲は0.5〜2.0fです。したがって、0.5のピッチが正確に2倍の長さであり、2.0のピッチが正確に半分の長さであると仮定すると、ピッチを乗数として使用できるはずです。
- (void) playSoundWithCallback {
[someSound play];
[someDelegate performSelector:@selector(soundDidFinishPlaying:)
withObject:someSound afterDelay: someSound.duration * (1.0/someSound.pitch) ];
}
于 2012-02-22T19:33:41.843 に答える