28

AVAudioPlayer を使用して 10 秒の wav ファイルを再生しましたが、正常に動作しました。では、4 秒で wav を止めて、最初の 1 秒からもう一度再生します。

これが私が試したコードです:

NSString *ahhhPath = [[NSBundle mainBundle] pathForResource:@"Ahhh" ofType:@"wav"];
AVAudioPlayer *ahhhhhSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:ahhhPath] error:NULL];

[ahhhhhSound stop];
[ahhhhhSound play];

wav は 4 秒で停止しますが、もう一度 [XXX 再生] を実行すると、wav は最初から再生されずに 5 秒を再生し続けます。

どうすればこれを行うことができますか? どんな助けでも大歓迎です。

4

3 に答える 3

63

Apple のAVAudioPlayer クラス リファレンスには次のように書かれています。

stop メソッドは currentTime プロパティの値を 0 にリセットしません。つまり、再生中に stop を呼び出してから play を呼び出すと、中断した時点から再生が再開されます。

したがって、次の方法で再起動できるはずです。

[ahhhhhSound stop];
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];
于 2010-10-02T13:48:16.330 に答える
6

したがって、DarkDust の回答に対する私のコメントからわかるように、いくつかの問題がありました。この問題は、iOS 4.3.3/4.3.5、iPhone 4 でのみ発生しました。iOS 5.0.1 ではなく、以前の iOS バージョンでも発生した可能性があります。どういうわけか、AVAudioPlayer 自体を停止すると「壊れた」ように見え、後者の再生は不可解に失敗するだけでした。実際には、「停止」は prepareToPlay にロードされたものをアンロードしますが、プレーヤーを「一時停止」するだけではアンロードされません - 参照によると。したがって、私の解決策は、停止の代わりに一時停止を使用することです-プレーヤーが現在再生中であると見なされます-そうでなければ、何も停止する理由はありません。理論的にも速くなるはずです。私のためにそれを解決しました。

if (ahhhhhSound.playing) {
    [ahhhhhSound pause];
}
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];

今、私は再び人生を歩むことができます。

于 2012-02-23T07:56:05.537 に答える