访问Apple Watch的麦克风

时间:2015-03-10 11:52:16

标签: watchkit

现在越来越多关于Apple Watch的文档出现了,是否有人找到了访问和使用设备麦克风的方法?

6 个答案:

答案 0 :(得分:12)

您可以在watchOS 2上访问手表的麦克风。

1)创建用于存储录制输出的文件URL。

NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask,YES);
NSString *path = [[filePaths firstObject] stringByAppendingPathComponent:@"rec.m4a"];
NSURL *fileUrl = [NSURL fileURLWithPath:path];

您可以指定扩展名.wav,.mp4和.m4a。

2)按如下方式调用方法:

[self presentAudioRecordingControllerWithOutputURL:fileUrl
                                            preset:WKAudioRecordingPresetWideBandSpeech
                                   maximumDuration:5.0
                                       actionTitle:@"Some Title"
                                        completion:^(BOOL didSave, NSError * __nullable error) {

                                            NSLog(@"didSave:%d, error:%@", didSave, error);
                                        }];

除上述

外,您还可以选择预设
  • WKAudioRecordingPresetNarrowBandSpeech
  • WKAudioRecordingPresetHighQualityAudio

在Swift中:

self.presentAudioRecordingControllerWithOutputURL(
    self.recFileURL(),
    preset: WKAudioRecordingPreset.WideBandSpeech,
    maximumDuration: 5.0,
    actionTitle: "SomeTitle") { (didSave, error) -> Void in

        print("didSave:\(didSave), error:\(error)")
}

您可以按如下方式播放录制的文件:

self.presentMediaPlayerControllerWithURL(
    fileURL,
    options: nil) { (didPlayToEnd, endTime, error) -> Void in

        print("didPlayToEnd:\(didPlayToEnd), endTime:\(endTime), error:\(error)")
}

您可以查看详细规范here

答案 1 :(得分:1)

我在官方文档中找不到具体的提及,但是来自mod的Developer Forums字是目前无法实现的。

  

WatchKit目前无法访问手表的麦克风。但是,您可以从WatchKit扩展程序访问iPhone的麦克风。

答案 2 :(得分:1)

如果您正在寻找听写,这里有一些关于SDK的早期发现: http://natashatherobot.com/watchkit-text-input-dictation-api/

显然,在硬件出来之前无法测试:D

答案 3 :(得分:0)

我认为WWDC 2015和新的watchOS 2测试版有好消息:

WWDC watchOS

不幸的是,目前文档中有关于音频的注意事项。

答案 4 :(得分:0)

是的,它是在Watch OS 2中引入的。

但正如Apple提到的那样,API的这部分内容正在预览中,并且确实发生了很大的变化。至于Watch OS 2 beta 5,相应的界面(在Swift中)改为:

  

@available(watchOS 2.0,*)

     

public func presentAudioRecorderControllerWithOutputURL(URL:NSURL,预设:   WKAudioRecorderPreset,选项:[NSObject:AnyObject] ?,完成:   (Bool,NSError?) - >空隙)

因此,如果您想尝试使用此新功能,请务必参阅您正在使用的SDK文档。

顺便说一句,这个示例项目将是一个良好的开端:

https://github.com/shu223/watchOS-2-Sampler

尽管如此,样本中使用的一些API已经改变,就像录制一样。

答案 5 :(得分:0)

这是先前在Interface.storyboard中添加的按钮的操作内,也不要忘记在info.plist中添加“隐私-麦克风使用说明”字符串。

@IBAction func btnActionRecord() {
    var filePath: NSURL!
    if let dir: NSString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .allDomainsMask, true).first as NSString? {
        let path = dir.appendingPathComponent("myRecord.wav")
        filePath = NSURL(string: path)
        let audioOptions = [
            WKAudioRecorderControllerOptionsActionTitleKey: "Save",
            WKAudioRecorderControllerOptionsAlwaysShowActionTitleKey: true,
            WKAudioRecorderControllerOptionsAutorecordKey: true,
            WKAudioRecorderControllerOptionsMaximumDurationKey: 5.0] as [String : Any]

        presentAudioRecorderController(withOutputURL: filePath! as URL, preset: .highQualityAudio, options: audioOptions, completion: {
            (didSave, error)  -> Void in
            if didSave {
                print("Audio saved")
                let options = [WKMediaPlayerControllerOptionsAutoplayKey: true]
                self.presentMediaPlayerController(with: self.filePath as URL, options: options) {
                (didPlayToEnd, endTime, error) -> Void in
                    if didPlayToEnd {
                        print("Audio finished")
                    }
                    if error != nil {
                        print(error!.self)
                        }
                }
            }
            if error != nil {
                    print(error!.localizedDescription)
            }
        })
    }

}