アプリ内のアクションとボタンにはさまざまなサウンドがあります。サウンドの 1 つが再生されるとすぐに、ユーザーのバックグラウンド ミュージックが停止するという苦情が多数寄せられています。なぜこれが起こっているのかはよくわかりません。サウンドを切り替えるために使用しているコードは次のとおりです。
- (void)playSound:(NSString *)sound {
if ( playSoundPath == nil ) {
playSoundPath = [[NSBundle mainBundle] pathForResource:sound ofType:@"wav"];
playSound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:playSoundPath] error:NULL];
playSound.delegate = self;
}else{
playSoundPath = nil;
[playSound release];
playSoundPath = [[NSBundle mainBundle] pathForResource:sound ofType:@"wav"];
playSound = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:playSoundPath] error:NULL];
playSound.delegate = self;
}
BOOL enabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"sounds_key"];
if ( enabled ){
[playSound stop];
[playSound play];
}
}
更新: 実際には、いくつかのユーザーの提案に従って、上記を次のように変更することになりました。これにより、バックグラウンド サウンドを停止することなく、iPod の音楽またはポッドのキャストを続行し、サウンドを再生できます。これは、サウンドを「アンビエント」サウンドとして設定することで可能になります。これには、「AudioToolBox」フレームワークを追加し、次を使用してこのフレームワークをクラスにインポートする必要があります。
#import <AudioToolbox/AudioToolbox.h>
これが現在使用しているコードです。
BOOL enabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"sounds_key"];
if ( enabled ){
AudioSessionInitialize(NULL, NULL, NULL, self);
UInt32 category = kAudioSessionCategory_AmbientSound;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);
AudioSessionSetActive(YES);
NSString *path = [NSString stringWithFormat:@"%@/%@.wav",[[NSBundle mainBundle] resourcePath], sound];
SystemSoundID soundID;
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
AudioServicesPlaySystemSound(soundID);
}