试图通过iPhone模拟器播放声音

试图通过iPhone模拟器播放声音,iphone,cocoa-touch,ios-simulator,Iphone,Cocoa Touch,Ios Simulator,我正在尝试播放iPhone程序中的声音文件 代码如下: NSString *path = [[NSBundle mainBundle] pathForResource:@"play" ofType:@"caf"]; NSFileHandle *bodyf = [NSFileHandle fileHandleForReadingAtPath:path]; NSData *body = [bodyf availableData]; NSLog( @"length of play.caf %d",[b

我正在尝试播放iPhone程序中的声音文件

代码如下:

NSString *path = [[NSBundle mainBundle] pathForResource:@"play" ofType:@"caf"];
NSFileHandle *bodyf = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *body = [bodyf availableData];
NSLog( @"length of play.caf %d",[body length] );
NSURL *url = [NSURL fileURLWithPath:path isDirectory:NO];
NSLog( [url description] );
NSLog( @"%d", AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID) );
第一个NSLog是检查我是否有权访问该文件(我有权访问),第二个NSLog是显示文件URL,第三个NSLog返回-1500“发生了未指定的错误”

对于第二个NSLog,我得到以下输出:

file://localhost/Users/alan/Library/Application 敲慬楴敶瑓楲杮支持/iPhone蒠ꁻތĀ⾅獕牥⽳污湡䰯扩慲祲䄯灰楬慣楴湯匠灵潰瑲椯桐湯⁥楓畭慬潴⽲獕牥䄯灰楬慣楴湯⽳䙂㕅㡂㤱䌭䐳ⴸ䐴䙃㠭㍃ⴷ䍁㈶㠵䙁㤴㈰䰯捯瑡䵥⹥灡⽰汰祡挮晡刺激器/用户/应用程序/BFE5B819-C3D8-4DCF-8C37-AC6258AF4902/LocateMe.app/play.caf

这要么是由于我对“描述”方法的误解,要么是这导致了问题


知道出了什么问题吗?

我用我的应用程序尝试了同样的方法,它播放的声音很好。这些声音不会在模拟器中播放,当我尝试
NSLog
URL时,我会得到与您相同的垃圾,并且
EXC\u BAD\u ACCESS
。当我在设备上记录URL时,URL是正常的,但我仍然获得了
EXC\u BAD\u访问权
。当我放下日志记录时,声音就会播放,一切正常。如果有人能解释这种行为,我将不胜感激。至于您的问题,我会删除日志记录并在设备上尝试代码。

NSLog的第一个参数是格式字符串;您正在将
[URL description]
作为格式字符串传递给第二次使用NSLog的用户。这很糟糕,因为如果URL的描述包含任何
%
字符,那么它将从堆栈中打印随机内容

相反,写

NSLog(@"%@", URL);
您甚至不需要在此处使用
-description
;NSLog将自动为您调用它,因为
%@
表示“对象”,而不是“NSString”,并且它足够聪明,可以为您做正确的事情。

此更新

我有钥匙,可以在设备上运行我的应用程序

我发现当应用程序在设备上运行时,我的.caf文件成功播放

然后我尝试了各种选择

60秒长的.wav文件在模拟器和设备上无法工作

5秒长的.wav文件可以在模拟器上工作,但不能在设备上工作

5秒长的.aiff文件在模拟器和设备上工作


当文件被传递到AudioServicesCreateSystemSoundID时,最好明确地知道模拟器和设备正在检查文件的内容。此外,iPhone模拟器似乎不喜欢播放超过5秒的(systemSound)声音。我也遇到了同样的问题,因为我们的应用程序几乎总是播放启动系统声音


我在模拟器上开发的一个应用程序不会播放声音,但设备会播放。后来我发现模拟器和它处理声音的方式有一些奇怪的限制。我向苹果公司提交了一个bug。希望这将在iPhone SDK 3.0发布时得到解决。

使用“AVAudioPlayer”类播放.caf文件

谢谢您的评论。很高兴听到有人有这个问题。我还没有钥匙在真正的设备上试用。谢谢。我必须承认,我正试图以许多人学习JavaScript的方式来学习这一点-例如,hunt和copy/paste!