在Simulator / Xcode中录制音频时,Fresh SpeakHere示例应用程序出错

时间:2012-11-29 13:46:21

标签: ios xcode audio-recording

我无法使用Apple的SpeakHere示例应用录制音频。当我在Xcode中从Simulator中运行应用程序时,它会正常启动,但是当我按下记录按钮时,出现错误“Thread 1:EXC_BREAKPOINT(code = EXC_I386_BPT,subcode = 0x0)”:screenshot after problem occurred

在发生上述错误之前,有关应用启动时缺少的根视图控制器的日志消息已存在,并且可能与我的问题无关。

我已经从链接网站下载了SpeakHere示例项目(请参阅此问题的顶部),在Xcode中打开了新的下载并直接启动了应用程序。我没有修改任何设置,也没有任何代码行。我也在google和stackoverflow上搜索了这个问题并没有找到解决方案,虽然这个问题必须非常一般。

我使用Xcode版本4.5.2(4G2008a)和MacBook Pro从2009年底开始使用Mac OS X 10.8。

我也有一个朋友在他的电脑上尝试这个,他有同样的问题。他有相同的操作系统,他的XCode版本也是4.5.2。

我现在尝试使用较旧的Xcode版本,但是现在我不想在我的连接上下载几千兆字节的试用版。

任何帮助表示赞赏,包括“适用于我的Xcode版本......”等报告。谢谢!

2 个答案:

答案 0 :(得分:17)

问题出现是因为在方法AQRecorder::StartRecord(CFStringRef inRecordFile)中,函数CFURLCreateWithString()失败并返回指向nil的指针。这个nil指针上的代码调用CFRelease()未检测到,导致EXC_BREAKPOINT。

方法CFURLCreateWithString()的目的主要是将url字符串作为输入,并返回指向CFURL对象的指针作为输出。这里的问题是输入不是url字符串。相反,它只是本地文件系统上没有file:/或类似前缀的路径。因此,此方法失败。

解决方案是删除对方法CFURLCreateWithString()的无效调用,而是调用相关方法,即CFURLCreateWithFileSystemPath(),它准备采用本地文件系统路径并将其转换为CFURL:

在方法AQRecorder::StartRecord(CFStringRef inRecordFile)中,替换或注释掉

url = CFURLCreateWithString(kCFAllocatorDefault, (CFStringRef)recordFile, NULL);

并插入

url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)recordFile, kCFURLPOSIXPathStyle, false);

在它的位置。

答案 1 :(得分:0)

url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)recordFile, kCFURLPOSIXPathStyle, false);

上面的代码让我的xcoce 4.6在模拟器中编译并运行,但它不会从我的usb麦克风录制我的声音,我在garash乐队应用程序中测试我的麦克风并成功录制和播放我的声音,并且dbmeter不移动无论如何,当我将它移植到它工作的真实设备时,它只是无法在我的模拟器中录制和播放声音。