AVAudioPlayer останавливает звук и воспроизводит его с самого начала
Я использовал AVAudioPlayer для воспроизведения 10-секундного wav файла, и он отлично работает.
Теперь я, что остановить wav на 4-й секунде, а затем снова воспроизвести его из
очень 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 play], wav продолжает играть 5-ю сек вместо того, чтобы играть с самого начала.
Как я могу это сделать? Любая помощь будет оценена.
Ответы
Ответ 1
Apple Ссылка на класс AVAudioPlayer говорит:
Метод stop не имеет значения reset значения текущего свойства Time 0. Другими словами, если вы вызываете стоп во время воспроизведения, а затем вызываете воспроизведение, воспроизведение возобновляется в том месте, где оно остановилось.
Итак, вы должны иметь возможность перезапустить его с помощью
[ahhhhhSound stop];
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];
Ответ 2
Итак, у меня были некоторые проблемы, как вы можете видеть из моего комментария к ответу DarkDust. Проблема появилась только в iOS 4.3.3/4.3.5, iPhone 4. Возможно, раньше были версии iOS, но не iOS 5.0.1. Как-то сам AVAudioPlayer, казалось, "ломал", когда останавливал его, и последняя игра просто провалилась необъяснимо. На самом деле "стоп" выгружает некоторые вещи, загруженные в prepareToPlay, которые не выгружаются, если вы просто "приостанавливаете" игрока - согласно ссылке. Поэтому мое решение будет использовать паузу вместо остановки - считается, что игрок в данный момент играет, иначе не было бы причин останавливать что-либо. Если теоретически будет быстрее. Решил это для меня.
if (ahhhhhSound.playing) {
[ahhhhhSound pause];
}
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];
Теперь я снова смогу жить.
Ответ 3
Swift:
mySound.audioPlayer?.stop()
mySound.audioPlayer?.currentTime = 0
mySound.audioPlayer?.play()