2012-01-02 2 views
2

По какой-то причине у меня возникли проблемы с загрузкой звука с помощью AVAudioPlayer. Я тестирую его на своем устройстве iPad.AVAudioPlayer не загружает звук

Мой код довольно прямолинейный, ничего необычного. Структура импортируется, делегат реализован. В моем методе viewDidLoad:

NSString *path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"mp3"]; 
AVAudioPlayer *theAudio = [[AVAudioPlayer alloc] 
          initWithContentsOfURL:[NSURL fileURLWithPath:path] 
              error:NULL]; 
[theAudio setDelegate:self]; 
[theAudio prepareToPlay]; 
[theAudio play]; 

Это не позволяет воспроизвести звук. Однако по совпадению, когда я сразу показываю UIAlertView, я могу услышать первые 2 секунды воспроизведения аудиоклипа. То есть, мое приложение загружается, я слышу две секунды аудио, затем появляется предупреждение и отключается звук.

Таким образом, похоже, что код AVAudioPlayer несколько работает.

Любая идея о том, что происходит, и как я могу просто получить звук для воспроизведения?

ответ

11

Проблема в том, что вы используете ARC, и поэтому AVAudioPlayer освобождается, когда переменная выходит за пределы области видимости. Вы должны объявить переменную theAudio переменной экземпляра и назначить ее в viewDidLoad. Итак, в вашем файле .h:

@interface MyViewController : UIViewController { 
    AVAudioPlayer *theAudio; 
    ... 
} 
... 
@end 

Тогда, чтобы избавиться от AVAudioPlayer * от линии, где вы назначаете theAudio в viewDidLoad. Это приведет к тому, что ваш контроллер просмотра сохранит аудиоплеер и, таким образом, предотвратит освобождение проигрывателя перед воспроизведением.

Смежные вопросы