AVAudioPlayer,没有声音

时间:2012-06-01 19:37:14

标签: iphone objective-c audio

我已将音频工具箱和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"];

零声音。非常感谢任何帮助,谢谢。

4 个答案:

答案 0 :(得分:25)

更新回答:

  

我遇到了这个问题。它与ARC有关并且与之无关   prepareForPlay。只需为它做一个强有力的参考就可以了。

用户如下所述

Kinderchocolate:)

在代码中:

.h
~
@property (nonatomic, strong) AVAudioPlayer *player;


.m
~
@implementation
@synthesize _player = player;

答案 1 :(得分:18)

是的,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];
}

答案 2 :(得分:9)

我遇到了这个问题。它与ARC有关,与prepareForPlay无关。只需强烈引用它就可以了。

答案 3 :(得分:1)

如果你用-viewDidLoad这样的类方法声明你的AVAudioPlayer,并且ARC打开,播放器将在-viewDidLoad之后立即释放并变为nil,(-(BOOL)play方法不会阻塞一个线程)这将发生在几毫秒内,明显的“零”不能播放任何东西,所以你甚至都听不到声音。

最好将播放器声明为ViewController的@property或将其设为全局单例,任何事情都可以持续更长时间。