Подтвердить что ты не робот

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-ю сек вместо того, чтобы играть с самого начала.

Как я могу это сделать? Любая помощь будет оценена.

4b9b3361

Ответ 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()