0

私はサウンドボード アプリを作成しています。すべて問題なく動作しますが、1 つ問題があります。リンガーがオフの場合、サウンドが再生されません。

私はこれを試しました:

[super viewDidLoad];
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: nil];

AVFoundation フレームワークを使用しています

ボタンを再生するコードは次のとおりです。

- (IBAction)queChin:(id)sender {
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef soundFileURLRef;
soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"chin", CFSTR ("m4a"), NULL);
UInt32 soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesPlaySystemSound(soundID);
}

このトピックを検索しましたが、うまくいく答えが見つかりませんでした。多分私は何かを逃していますか?

別の方法として、「ねえ、リンガーをオンにしてください」というアラートをユーザーに送信することもできますが、電話がミュートされているかどうかを検出する方法がわかりません。

ヒントはありますか?

ありがとうございました。

4

1 に答える 1

1

さて、これを使用してオーディオ セッションを初期化しても、AudioServicesPlaySystemSound でシステム サウンドを再生できないことがわかりました。

[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: nil];

ユーザーがデバイスをミュートした場合、システム サウンドは無音のままになります。

AVAudioPlayer を使用することになり、問題は解決しました。

システム サウンドを使用する古いコード:

- (IBAction)queChin:(id)sender {
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef soundFileURLRef;
soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"chin", CFSTR ("m4a"), NULL);
UInt32 soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
CFRelease(soundFileURLRef);//prevents memory leak
AudioServicesPlaySystemSound(soundID);
}

AVAudioPlayer を使用した新しいコード:

- (IBAction)queChin:(id)sender {

NSURL *url = [[NSBundle mainBundle] URLForResource:@"chin" withExtension:@"wav"];
_chingosound = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
_chingosound.delegate = self;
[_chingosound prepareToPlay];
[_chingosound play];
} 

呼び出し音をオフにしてサウンドを再生するには、オーディオ セッションを初期化する必要があります。

于 2012-12-06T23:06:48.940 に答える