AVAudioPlayer остановить звук и воспроизвести его с самого начала - PullRequest
24 голосов
/ 02 октября 2010

Я использовал AVAudioPlayer для воспроизведения 10-секундного файла WAV, и он работает нормально.Теперь я хочу остановить wav на 4-й секунде, а затем воспроизвести его снова с первой секунды.

Вот код, который я попробовал:wav останавливается на 4-й секунде, но когда я снова запускаю [XXX play], wav продолжает играть на 5-й секунде вместо воспроизведения с начала.Любая помощь будет оценена.

Ответы [ 3 ]

60 голосов
/ 02 октября 2010

Apple Ссылка на класс AVAudioPlayer говорит:

Метод stop не сбрасывает значение свойства currentTime в 0. Другими словами, если вы вызываете stop во время воспроизведения изатем вызовите воспроизведение, воспроизведение возобновится с того места, где оно было остановлено.

Таким образом, вы сможете перезапустить его с помощью:

[ahhhhhSound stop];
ahhhhhSound.currentTime = 0;
[ahhhhhSound play];
6 голосов
/ 23 февраля 2012

Итак, у меня были некоторые проблемы, как вы можете видеть из моего комментария к ответу 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];

Теперь я снова могу жить.

0 голосов
/ 27 апреля 2017

Swift:

mySound.audioPlayer?.stop()
mySound.audioPlayer?.currentTime = 0
mySound.audioPlayer?.play()
...