web-dev-qa-db-ja.com

サイレントモードでもiPhoneでサウンドを再生する

IPhoneがサイレントモードのときにサウンド、音楽、またはシステムサウンドを作成するアプリケーションを作成したい。サイレントモードの場合、音楽でもシステムトーンでも、どのような種類のサウンドでも再生できますか?

53
Pankaj Kainthla

賢明ではありませんが、それができないと私は誰に言いますか。サウンドを再生する正当な理由があるかもしれません。

オーディオセッションを使用している場合は、<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 クラス参照を検索します。

119
Stone Mason

また、Swift 2、3、4.2

    do {
      try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
      try AVAudioSession.sharedInstance().setActive(true)
    } catch {
      print(error)
    }
14
Tom

IOS 6以降で動作します

NSError *setCategoryErr = nil;
NSError *activationErr  = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
9
hfossli

これをviewDidLoadに入れるだけです:

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
                         sizeof(sessionCategory), &sessionCategory);
2
Dex

Swift-電話がサイレントになっているときに強制的に再生するには、オーディオ/ビデオを再生する前にこの関数を呼び出します。これにより、現在再生中の他のオーディオも無音になります。

あなたは変えられる .duckOthersから.mixWithOthers他の音声を消音したくない場合。

func setupAudio() {
  let audioSession = AVAudioSession.sharedInstance()
  _ = try? audioSession.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
  _ = try? audioSession.setActive(true)
}
1
budidino

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];
1
Dennis Lan

サイレントモードでサウンドを再生し、バックグラウンドに移行する場合でも、これを試してください。

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ヘッダーを含めます。

1
Jeet