0

フィンチでのコールバックの再生は終了しましたか?-audioPlayerDidFinishに似ていますavaaudioplayerのもので再生しますか?コードを調べても、それを参照しているものは見つかりませんでした。

4

3 に答える 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 に答える