Tag: audiosession

在iOS 7中检测(侦听)audio路由更改

刚开始iOS 7的开发,发现AudioSession相关函数和PropertyListeners在iOS 7中已被弃用。 在使用以下方法检测耳机是否插入或拔出设备之前: /* add callback for device route change */ AudioSessionAddPropertyListener ( kAudioSessionProperty_AudioRouteChange, audioRouteChangeListenerCallback, (__bridge void *)(self)); 然后实现监听器callback,对内部algorithm做不同的事情。 现在iOS 7已经被弃用了,没有任何文件可以替代,这里是否有专家的解决scheme? 谢谢!

audio路由不改变时的耳机插件插件事件 – iOS

我正在iPad上工作。 我想检测用户插头耳机时。 首先,我在属性kAudioSessionProperty_AudioRouteChange上使用了一个侦听kAudioSessionProperty_AudioRouteChange 。 所以一切都很好,直到我决定添加一个button来切换到扬声器,当耳机仍然插入。 所以我现在面临一个问题,也许有人会有一个想法来解决这个问题。 这是情景: 我插上一个耳机 – >我的audio路由更改callback被称为 然后我将声音切换到扬声器(不拔下耳机) – >audio路由更改callback被称为 然后我拔掉耳机(当声音仍然输出到扬声器) – >audio路由改变callback不被称为,这似乎是合乎逻辑的。 但是这是我的问题! 所以我的问题是:你看到一种方法来检测这个最后一种情况下,耳机是否拔掉? 谢谢你的帮助 编辑: 好的,我find了一个解决方法: 为了检测是否插入了耳机,我常常执行一个testing函数,我需要知道它(而不是使用布尔值),这可能对性能不太好,但它工作,这是我可能需要的代码它: //set back the default audio route UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None; AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride); //check if this default audio route is Heaphone or Speaker CFStringRef newAudioRoute; UInt32 newAudioRouteSize = sizeof(newAudioRoute); AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &newAudioRouteSize, &newAudioRoute); NSString […]

当应用程序处于后台时,使用AmbientSound会话的AVAudioPlayer不会播放

如果这是在苹果文件,那么我一直无法find它 – 希望有人可以帮助: 我的应用程序偶尔会播放短audio剪辑 – 我希望将audio与其他应用程序中的audio(如iPod应用程序)混合播放,但是我也希望它在应用程序在后台运行时继续播放这些audio剪辑。 我在info.plist所需的背景模式设置中设置了“应用程序播放audio”(该应用程序也使用位置服务,因此也被设置在那里) 我的应用程序在applicationDidFinishLaunching上设置了一个audio会话: AudioSessionInitialize (NULL,NULL,NULL,NULL); UInt32 sessionCategory = kAudioSessionCategory_AmbientSound; AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,sizeof (sessionCategory),&sessionCategory); AudioSessionSetActive(true); 在我的viewWillAppear:方法在活跃的视图中,我有: [super viewWillAppear:animated]; [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; 并在viewWillDisappear相应的事件处理程序和endReceivingRemoteControlEvents代码:正如在iOS 4中讨论:背景audio的远程控制 最后,我有一个以正常方式设置的AVAudioPlayer,可以在某些事件上播放声音 bool successful = [avAudioPlayer play]; if(!successful) NSLog(@"did not play"); 当应用程序在前台应用程序工作正常,并播放audio – 但是当应用程序进入后台,应用程序尝试播放声音时,[avAudioPlayer播放]的返回值是NO,声音不播放 – 切换时回到前台,audio再次开始工作。 如果当我设立会议,我反而使用 UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 然后audio完美地在前景和背景中播放。 但MediaPlayback不是真的这个应用程序的正确模式,因为我只是偶尔播放audio剪辑 – AmbientSound真的是我应该使用的模式。 我错过了什么? 是不是可以使用kAudioSessionCategory_AmbientSound在后台播放audio? 如果是这样,我还没有发现有关的文件中的任何东西。

应用程序与AVPlayer播放mp4中断iPod音乐启动后

我的应用程序使用AVPlayer播放mp4,当我的应用程序完成启动时,它会中断iPod音乐,尽pipe我已经设置了audio会话以允许与其他人混音 – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { AudioSessionInitialize(NULL, NULL, NULL, NULL); AudioSessionSetActive(true); UInt32 sessionCategory = kAudioSessionCategory_AmbientSound; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); UInt32 allowMixWithOthers = true; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixWithOthers), &allowMixWithOthers); 视图控制器确实出现后,我重新启动iPod音乐,它可以正常工作与我的应用程序没有中断,我的应用程序不会中断音乐了。 有谁知道问题是否可以解决? 我也检查了myapp-info.plist ,发现没有属性来防止打断iPod。 所有AudioSession方法都不返回错误。 这里是iPhoneConfigureUtility中的日志: Aug 20 10:55:54 nova-teki-iPhone audiotest[3510] <Warning>: AudioSessionInitialize status = 0 Aug 20 10:55:55 nova-teki-iPhone kernel[0] <Debug>: ALS: kIOHIDDisplayBrightnessSliderPositionKey=69% (0xb226) Aug 20 10:55:55 nova-teki-iPhone […]