切换到iOS 5后无法播放系统声音

这是我如何在iOS 4中发挥嘟嘟声的效果:

SystemSoundId beepOnSoundId; CFURLRef soundUrl = CFBundleCopyResourceURL( CFBundleGetMainBundle(), CFSTR("beep"), CFSTR("wav"), NULL ); // soundUrl logged: // file://localhost/var/mobile/Applications/ ... beep.wav AudioServicesCreateSystemSoundID(soundUrl, &beepOnSoundId); // beepOnSoundId logged: 4097 AudioServicesPlaySystemSound(beepOnSoundId); 

当我将设备升级到iOS 5时,它停止工作。 我什么也没听到。 我注销了所有的variables,没有零或0。

iOS 5中如何改变API,打破了我的声音播放代码?

更新

这个问题可能是因为我在播放声音的时候运行了AVCaptureSession 。 不知何故,iOS 5不会让你这样做了。 当我从相机录制某些东西时,我需要发出哔哔声。

如果你有一个AVCaptureSession运行,这个错误报告可能与你的问题有关。

在iOS 5下,当使用AudioServicesPlaySystemSound调用时,当audio设备处于活动状态的AVCaptureSession处于活动状态时,它将不起作用。

一个问题可能是,在调用AudioServicesPlaySystemSound时,如果在audio设备处于活动状态时存在活动的AVCaptureSession,则它将停止工作。

同时检查文件中的导入名称,确保audiotoolbox导入在您的所有视图控制器中。 我也去了一个指导,并得到了你:)我将离开网站的名字在底部

第1步:导入AudioToolbox框架首先将Audio Toolbox框架导入到应用程序中,以使System Sound Services可用于您的代码。 为此,请在Xcode的Project Navigator窗格中select“PhoneAppSkin”项目,然后在“TARGETS”下select“PhoneAppSkin”,最后select“Build Phases”选项卡。 这样做后,你的屏幕应该是这样的:

在这里输入图像说明

接下来,点击“Link Binary With Libraries”下拉菜单,然后点击“+”符号为项目的链接阶段添加一个新的框架。

在这里输入图像说明

最后,在popup窗口中find“AudioToolbox”框架,然后单击“添加”。

在这里输入图像说明

接下来,打开PhoneViewController.h文件并添加实际将Audio Toolbox框架导入到您的类中所需的行:

 #import <UIKit/UIKit.h> #import <AudioToolbox/AudioToolbox.h> 

audio工具箱function现在应该工作

网站我从图片中获得了: http : //mobile.tutsplus.com/tutorials/iphone/ios-sdk_playing-systemsoundid/

我有几乎相同的代码,它适用于我在iOS5与video和audio媒体会话。 如果你有一个函数中的所有代码来播放声音,问题可能是在播放声音之前SystemSoundID对象被释放,或者问题可能出在URL上。 但我想这是第一个。

请参阅以下代码:

SystemSoundID声明位于对象的标题中,对象的生命期足以播放声音。

  SystemSoundID soundID; 

AudioServicesCreateSystemSoundID在对象初始化中。

  AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource: @"sound" ofType:@"wav"]], &soundID); 

然后,您可以在对象内部的任何位置使用AudioServicesPlaySystemSound

  AudioServicesPlaySystemSound(soundID); 

尝试把这些代码放在适当的地方,你应该听到声音。

在我的构造函数中:

 [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil]; UInt32 doSetProperty = 1; AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty); [[AVAudioSession sharedInstance] setActive: YES error: nil]; NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"video-sent" ofType:@"caf"]]; self.sentSound = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil]; [self.sentSound prepareToPlay]; 

函数playSentSound

 - (void)playSentSound { DLog(@"PLay Sound %@", self.sentSound); [self.sentSound play]; } 

然后在代码中,我只是叫它

 [self playSentSound]; 

这里的关键是前4行… 😉