微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 开始录制后Apple Watch录制音频界面崩溃

我正在尝试使用presentAudioRecorderControllerWithOutputURL方法使用Apple Watch录制音频.

我正在使用Xcode 7.0 beta 5,iOS9 beta,WatchOS 2 beta& Swift2.

它在模拟器上运行良好.但是,一旦在实际设备上,它会在调用方法时崩溃.

这是我目前的代码

@IBAction func onClickSpeech() {
    let filePaths = NSSearchPathForDirectoriesInDomains(
        NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask,true)
    let documentDir = filePaths.first!
    let recsoundURL = documentDir + "/record.m4a"
    let nsUrl = NSURL.fileURLWithPath(recsoundURL)

    let audioOptions = [
        WKAudioRecorderControllerOptionsActionTitleKey  : "Recording title",WKAudioRecorderControllerOptionsAlwaysShowActionTitleKey : false,WKAudioRecorderControllerOptionsAutorecordKey: true,WKAudioRecorderControllerOptionsMaximumDurationKey: NSTimeInterval.infinity
    ]

    presentAudioRecorderControllerWithOutputURL(
        nsUrl,preset: WKAudioRecorderPreset.NarrowBandSpeech,options: audioOptions as [NSObject : AnyObject]) { (didSave,error) -> Void in
            print("didSave:\(didSave),error:\(error)")
    }
}

recsoundURL是一个有效的路径.

我在设备日志中遇到的错误

Aug 18 16:42:12 Sennetts-AppleWatch mediaserverd[283] <Error>: 16:42:12.532 EXCEPTION: [0x1f1ac000] >va> 565: kAudioHardwareUnkNownPropertyError: "AudioObjectHasProperty([goin/glob/0]) returned false."
Aug 18 16:42:12 Sennetts-AppleWatch mediaserverd[283] <Error>: 16:42:12.555 ERROR:    [0x1f1ac000] >va> 240: CAException caught by ExceptionBarrier: 2003332927.

任何想法都会非常感激,因为我无法想出这一点.谢谢.

解决方法

请看下面的代码(使用 app group’s共享文件夹)

@IBAction func recordAudio() {

    let fileName = "audioFile.wav"

    let fileManager = NSFileManager.defaultManager()
    let container = fileManager.containerURLForSecurityApplicationGroupIdentifier(Constants.kAppGroupId)
    self.saveUrl = container?.URLByAppendingPathComponent(fileName)


    let duration = NSTimeInterval(120)
    let recordOptions = [WKAudioRecorderControllerOptionsMaximumDurationKey : duration]
    presentAudioRecorderControllerWithOutputURL(self.saveUrl!,preset: .WideBandSpeech,options: recordOptions,completion: { saved,error in

            if let err = error {
                print(err.description)
            }
            if saved {
                // Write code to execute when audio file gets saved.

            }
    })
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐