4
-(IBAction)playSound{ AVAudioPlayer *myExampleSound;

NSString *myExamplePath = [[NSBundle mainBundle] pathForResource:@"myaudiofile" ofType:@"caf"];

myExampleSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:myExamplePath] error:NULL];

myExampleSound.delegate = self;

[myExampleSound play];

}

ボタンをクリックしたときにビープ音を鳴らしたい。私は上記のコードを使用していました。ただし、サウンドの再生には多少の遅延があります。

誰でも助けてください。

4

2 に答える 2

9

遅延の原因は2つあります。prepareToPlay最初のものはより大きく、の方法を使用して削除できますAVAudioPlayer。これはmyExampleSound、クラス変数として宣言し、必要になる前に初期化する必要があることを意味します(もちろん、prepareToPlay初期化後に呼び出します)。

- (void) viewDidLoadOrSomethingLikeThat
{
    NSString *myExamplePath = [[NSBundle mainBundle]
        pathForResource:@"myaudiofile" ofType:@"caf"];
    myExampleSound =[[AVAudioPlayer alloc] initWithContentsOfURL:
        [NSURL fileURLWithPath:myExamplePath] error:NULL];
    myExampleSound.delegate = self;
    [myExampleSound prepareToPlay];
}

- (IBAction) playSound {
    [myExampleSound play];
}

これにより、ラグが約20ミリ秒に短縮されます。これは、おそらくニーズに適しています。そうでない場合は、放棄AVAudioPlayerして、サウンドを再生する他の方法(Finchサウンドエンジンなど)に切り替える必要があります。

AVAudioPlayerのラグに関する私自身の質問も参照してください。

于 2010-03-31T06:27:03.517 に答える
1

AudioServicesPlaySystemSoundオプションです。チュートリアルはこちら、サンプルコードはこちら

于 2010-03-31T06:34:17.213 に答える