Вопрос

Хорошо, у меня есть две проблемы.Я использую 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]; 
    }

}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top