12

オーディオツールボックスと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

4 に答える 4

27

更新された回答:

問題が発生しました。これはARCと関係があり、prepareForPlayとは関係ありません。単にそれを強く参照すれば、それは機能します。

ユーザーが以下に述べるように: Kinderchocolate:)

コード内:

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


.m
~
@implementation
@synthesize _player = player;
于 2012-06-01T20:27:13.700 に答える
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];
}
于 2012-12-04T14:58:58.597 に答える
9

問題が発生しました。これはARCと関係があり、prepareForPlayとは関係ありません。単にそれを強く参照すれば、それは機能します。

于 2012-08-03T06:31:01.593 に答える
1

-viewDidLoadなどのクラスメソッドでAVAudioPlayerを宣言し、ARCがオンの場合、プレーヤーは-viewDidLoadの直後に解放され、nilになります(-(BOOL)playメソッドはスレッドをブロックしません)。これはミリ秒単位で発生します。明らかに「nil」です。何も再生できないので、音も聞こえません。

プレーヤーをViewControllerとして宣言する@propertyか、グローバルシングルトンとして作成することをお勧めします。何でも長持ちします。

于 2012-12-23T17:00:09.147 に答える