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

JoJ*_*oJo 11 iphone cocoa-touch objective-c ios

这就是我在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);
Run Code Online (Sandbox Code Playgroud)

当我将设备升级到iOS 5时,它停止工作.我什么都没听到.我注销了所有变量,没有一个是零或0.

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

更新

问题可能是因为我AVCaptureSession在播放声音时跑步了.iOS 5不知何故不允许你这样做.当我从相机录制东西时,我需要发出哔哔声.

jba*_*100 13

如果您正在运行AVCaptureSession,此错误报告可能与您的问题有关.

在iOS 5下,当使用AudioServicesPlaySystemSound调用时,如果有活动的AVCaptureSession且音频设备处于活动状态,它将无法工作.


Gab*_*iel 10

一个问题可能是在ios 5中,当您调用AudioServicesPlaySystemSound时,如果存在活动的AVCaptureSession且音频设备处于活动状态,则它将停止工作.

还要检查文件中的导入名称,确保audiotoolbox导入在所有viewcontroller中.我也去了一个指南并为你得到了:)我将把网站的名字留在底部

步骤1:导入AudioToolbox框架首先将Audio Toolbox框架导入到您的应用程序中,以便为您的代码提供系统声音服务.为此,在Xcode的Project Navigator窗格中选择"PhoneAppSkin"项目,然后在"TARGETS"下选择"PhoneAppSkin",最后选择"Build Phases"选项卡.完成后,您的屏幕应如下所示:

在此输入图像描述

接下来,单击"Link Binary With Libraries"下拉列表,然后单击"+"符号将新框架添加到项目的链接阶段.

在此输入图像描述

最后,在弹出窗口中找到"AudioToolbox"框架,然后单击"添加".

在此输入图像描述

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

#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
Run Code Online (Sandbox Code Playgroud)

音频工具箱功能现在应该可以工作

网站我从以下网站获取图片:http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_playing-systemsoundid/


Car*_*dal 6

我有几乎相同的代码,它适用于iOS5中的视频和音频媒体会话.如果你有一个函数中的所有代码来播放声音,问题可能是SystemSoundID对象在播放声音之前被解除分配,或者问题可能在于URL.但我想这是第一个.

请参阅以下代码:

SystemSoundID声明是在对象的头部和对象住足够长的时间来播放声音.

    SystemSoundID soundID;
Run Code Online (Sandbox Code Playgroud)

AudioServicesCreateSystemSoundID是在对象初始化.

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

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

    AudioServicesPlaySystemSound(soundID);
Run Code Online (Sandbox Code Playgroud)

尝试将这些片段代码放在适当的位置,你应该听到声音.