AVAudioPlayer, No Sound
Я импортировал аудио-инструментарий и avfoundation в свой класс и добавил фреймворки в свой проект, и я использую этот код для воспроизведения звука:
- (void)playSound:(NSString *)name withExtension:(NSString *)extension
{
NSURL* soundUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:name ofType:extension]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
audioPlayer.delegate = self;
audioPlayer.volume = 1.0;
[audioPlayer play];
}
Я называю это следующим образом:
[self playSound:@"wrong" withExtension:@"wav"];
Нулевой звук. Любая помощь очень ценится, спасибо.
Ответы
Ответ 1
Обновленный ответ:
У меня проблема. Это с ARC и не имеет ничего общего с prepareForPlay. Просто сделайте для него сильную ссылку, и он будет работать.
как указано ниже пользователем: Kinderchocolate
:)
В коде:
.h
~
@property (nonatomic, strong) AVAudioPlayer *player;
.m
~
@implementation
@synthesize _player = player;
Ответ 2
Да, ARC была для меня проблемой.
Я решил просто добавить:
В .h
@property (strong, nonatomic) AVAudioPlayer *player;
В .m
@synthesize player;
-(void)startMusic{
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Riddls" ofType:@"m4a"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1; //infinite
[player play];
}
Ответ 3
У меня проблема. Это с ARC и не имеет никакого отношения к prepareForPlay. Просто сделайте ссылку на нее, и она будет работать.
Ответ 4
Если вы объявите свой AVAudioPlayer в методе класса, таком как -viewDidLoad, и ARC включен, плеер будет выпущен сразу после -viewDidLoad и станет нулевым (метод -(BOOL)play
не будет блокировать поток), это произойдет в миллисекунды, очевидный "ноль" не может ничего воспроизвести, поэтому вы даже не услышите звук.
Лучше объявить игрока в качестве ViewController @property
или сделать его глобальным синглом, все может длиться дольше.