Подтвердить что ты не робот

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"];

Нулевой звук. Любая помощь очень ценится, спасибо.

4b9b3361

Ответ 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 или сделать его глобальным синглом, все может длиться дольше.