Помогите остановить звук с помощью AVAudioPlayer.
-
19-09-2019 - |
Вопрос
Хорошо, у меня есть две проблемы.Я использую AVAudioPlayer для воспроизведения простого аудиофайла в формате .caf.Я пытаюсь сделать кнопку воспроизведения и паузы.Вот пример простого IBAction для воспроизведения звука с кнопки.
- (IBAction) clear {
NSString *path = [[NSBundle mainBundle] pathForResource:@"clear" ofType:@"caf"];
AVAudioPlayer* myAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
myAudio.delegate = self;
myAudio.volume = 1.0;
myAudio.numberOfLoops = 0;
[myAudio play];
}
Поэтому, когда я создам еще один IBAction с помощью этого метода...
- (IBAction) stopaudio {
[myAudio stop];
audioPlayer.currentTime = 0;
}
Я компилирую, и xcode сообщает мне, что myAudio в IBAction stopaudio не определен.Как это исправить, чтобы я мог получить доступ к myAudio в другом IBAction?
Мой второй вопрос заключается в том, что я использую NavigationController для настройки TableView, когда я делаю выбор, он переводит меня в UIView с кнопкой «Назад», чтобы вернуться к TableView.Я пытаюсь уничтожить любой звук, который воспроизводится в UIView, когда я возвращаюсь в TableView.Приведенный выше код является частью кода, который я буду использовать в UIView.
И ещё один быстрый вопрос.Допустим, у меня есть аудиофайл длительностью 1 минуту.Повторное нажатие кнопки «Воспроизвести» приведет к перекрытию нового экземпляра этого аудио до того, как старый экземпляр завершится.Как я могу проверить, воспроизводится ли myAudio, и не разрешить его повторное воспроизведение, пока myAudio не завершит воспроизведение?
Спасибо!
Решение
Прежде всего, следует прочитать документацию.Это снимет почти все ваши вопросы.Тем не менее, чтобы иметь доступ к вашему экземпляру AVAudioPlayer из всех методов вашего класса, вам следует определить его в вашем .h-файле.Чтобы остановить возврат вашего плеера к предыдущему экрану, позвоните [myAudio stop]
в вашей viewWillDisappear:(BOOL)animated
метод.По поводу вашего последнего вопроса.Если вы определите myAudio
в вашем файле .h вы сможете проверить, воспроизводится ли он сейчас.что-то вроде
- (IBAction) clear { if(![myAudio isPlaying]){ [myAudio play]; }
}