即使在静音模式下也能在iPhone上播放声音

时间:2010-09-18 05:38:20

标签: iphone objective-c ipad avaudioplayer

当iPhone处于静音模式时,我想创建一个创建声音,音乐或系统声音的应用程序。当音乐或系统是静音模式时,是否可以播放任何类型的声音?

8 个答案:

答案 0 :(得分:116)

这不可行,但我可以说你不能这样做。你可能有充分的理由去播放声音。

如果您使用的是音频会话,请在文件开头添加<AVFoundation/AVFoundation.h>

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

应该做的伎俩。请注意,如果您播放音乐或声音,则iPod播放将暂停。

完成此操作后,可能在某个播放声音的类的初始化中,您可以实例化这样的声音:

// 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类引用。

答案 1 :(得分:12)

是的,当手机设置为振动时,您可以播放声音。 只需使用AVAudioPlayer类。

  

默认情况下,播放音频会话   声音会〜不尊重设定   iPhone上的静音开关。在   换句话说,如果你打电话给   播放声音和静音(硬件)   iPhone上的开关设置为静音,   你还能听到声音。

这就是你想要的。所以现在你知道,当手机处于静音模式时播放音频会话仍然会播放你需要知道如何创建音频会话来播放声音的声音,如下所示: 取自本网站:http://iosdevelopertips.com/audio/playing-short-sounds-audio-session-services.html

SystemSoundID soundID;
NSString *path = [[NSBundle mainBundle]
   pathForResource:@"RapidFire" ofType:@"wav"];    

AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID);
AudioServicesPlaySystemSound (soundID);

为此,您需要导入头文件,并将AudioToolbox.framework添加到您的项目中。

就是这样。

所以从这个答案你现在知道你可以在手机振动时播放声音。 您不需要额外的或特殊的代码来允许您执行此功能,因为它默认情况下已经这样做了。

<强> PK

答案 2 :(得分:11)

对于Swift 2,3,4.2

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

答案 3 :(得分:9)

适用于iOS 6及以上版本

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

答案 4 :(得分:2)

只需将其放入viewDidLoad

即可
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
                         sizeof(sessionCategory), &sessionCategory);

答案 5 :(得分:1)

要以静音模式播放声音,即使播放到背景音色,请尝试以下操作:

将此代码放入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];

还设置了播放音频/播放的后台模式,并包含AVFoundation标题。

答案 6 :(得分:1)

对于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];

答案 7 :(得分:1)

快速-在手机处于静音状态时,播放音频/视频之前调用此功能以强制播放。这也会使当前正在播放的其他音频静音。

如果您不想使其他音频静音,可以将.duckOthers更改为.mixWithOthers

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