现在越来越多关于Apple Watch的文档出现了,是否有人找到了访问和使用设备麦克风的方法?
答案 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);
}];
除上述
外,您还可以选择预设在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测试版有好消息:
不幸的是,目前文档中有关于音频的注意事项。
答案 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)
}
})
}
}