【问题标题】:Fresh SpeakHere example app has error when recording audio in Simulator/XcodeFresh SpeakHere 示例应用在 Simulator/Xcode 中录制音频时出错
【发布时间】:2012-11-29 13:46:21
【问题描述】:

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

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

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

我使用 Xcode 版本 4.5.2 (4G2008a) 和 2009 年末配备 Mac OS X 10.8 的 MacBook Pro。

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

我现在会尝试较旧的 Xcode 版本,但现在我不喜欢下载几 GB 以在我的连接上进行试错。

感谢任何帮助,包括“适用于我的 Xcode 版本...”之类的报告。谢谢!

【问题讨论】:

  • 我在 6.0 和 5.1 版本中尝试过 iOS-Simulator。在这两个版本中,都会出现同样的问题。

标签: ios xcode audio-recording


【解决方案1】:

出现问题是因为在方法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);

在它的位置。

【讨论】:

  • 这适用于 SpeakHere 版本 2.5,2012-09-10。
【解决方案2】:
url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)recordFile, kCFURLPOSIXPathStyle, false);

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

【讨论】:

  • 嗨约翰逊,你发现的问题是一个重要的话题。为了得到足够的关注,重要的是把它作为一个单独的问题发布在 stackoverflow 上。到目前为止,您将其发布在此处作为已回答问题的答案。这样,可能能够解决您问题的人就不会看到它。
  • @DanielS。这是我在帮助 SO 的新人时见过的最好的评论。太棒了。
猜你喜欢
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多