IPhoneがサイレントモードのときにサウンド、音楽、またはシステムサウンドを作成するアプリケーションを作成したい。サイレントモードの場合、音楽でもシステムトーンでも、どのような種類のサウンドでも再生できますか?
賢明ではありませんが、それができないと私は誰に言いますか。サウンドを再生する正当な理由があるかもしれません。
オーディオセッションを使用している場合は、<AVFoundation/AVFoundation.h>
ファイルの先頭で
[[AVAudioSession sharedInstance]
setCategory: AVAudioSessionCategoryPlayback
error: nil];
トリックを行う必要があります。音楽やサウンドを再生すると、iPodの再生が一時停止します。
これが完了すると、おそらくサウンドを再生するクラスの1つの初期化のどこかで、次のようにサウンドをインスタンス化できます。
// probably an instance variable: AVAudioPlayer *player;
NSString *path = [[NSBundle mainBundle] pathForResource...];
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url];
それが終わったら、いつでも好きなときにプレイできます:
[player play]; // Play the sound
[player pause]; // Pause the sound halfway through playing
player.currentTime += 10 // skip forward 10 seconds
player.duration // Get the duration
そして他の素敵なもの。 AVAudioPlayer クラス参照を検索します。
また、Swift 2、3、4.2
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}
IOS 6以降で動作します
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
これをviewDidLoad
に入れるだけです:
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
sizeof(sessionCategory), &sessionCategory);
Swift-電話がサイレントになっているときに強制的に再生するには、オーディオ/ビデオを再生する前にこの関数を呼び出します。これにより、現在再生中の他のオーディオも無音になります。
あなたは変えられる .duckOthers
から.mixWithOthers
他の音声を消音したくない場合。
func setupAudio() {
let audioSession = AVAudioSession.sharedInstance()
_ = try? audioSession.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
_ = try? audioSession.setActive(true)
}
objective Cでは、次のコードでシステムサウンドを再生できます。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
*The system path could be modified.*
NSString *path = @"/System/Library/Audio/UISounds/begin_record.caf";
NSURL *url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[player play];
サイレントモードでサウンドを再生し、バックグラウンドに移行する場合でも、これを試してください。
Application:didFinishLaunchingWithOpitonsにこのコードを配置します。
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
applicationDidEnterBackgroundの次のコード:
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
また、Playing Audio/Air Playのバックグラウンドモードを設定し、AVFoundationヘッダーを含めます。