Apple Watch可以使用AVFoundation吗?

时间:2015-05-26 03:37:33

标签: avfoundation avaudioplayer watchkit apple-watch avaudiorecorder

Apple Watch可以使用AVFoundation吗?更具体地说,AVAudioPlayerAVAudioRecorder可以工作吗?

我正在尝试创建一个应用程序,让您可以将声音录制到Apple Watch并让它使用audioplayer播放。感谢

4 个答案:

答案 0 :(得分:1)

更新11/28/15

这个答案适用于WatchKit和WatchOS 1.x.虽然我没有测试过自己,但WatchOS 2.x提供了不同的支持,包括硬件。我可以确认,从XCode 7.x开始,编译器行为正常,并且调用AVFoundation的WatchKit 1.x扩展不会构建。

对于WatchOS 1.x和XCode高达6.x

尽管AVAudioRecorder和AVAudioPlayer都在Simulator Apple Watch中运行,但它们实际上并不适用于实际的设备!我在5/5/15开了一个苹果公司的错误(一旦我测试了我在实际手表上写的应用程序。)我的应用程序(记录的手腕音频)确实在模拟器上运行得很好。然而在实际的手表上,它会安装并运行,但AVAudioRecorder"记录"消息根本就不会切换到"录制"。有趣的是,代码不会在任何地方抛出任何异常。它根本就没有记录!

我于2015年5月28日收到了对Apple Bug的回复#34;没有计划解决这个问题"基于"手表不支持AVFoundation。"没有关于是否更新模拟器的说法,以致AVFoundation也无法工作。

所以,目前,Apple Watch仅限于控制录音和电话#34;通过手表扩展到Apple Watch扩展程序支持的手机短信。

答案 1 :(得分:1)

尝试使用WKAudioFilePlayerItem? 要使用此类播放音频,您需要声明3个变量:

var audioFile: WKAudioFileAsset!
var audioItem: WKAudioFilePlayerItem!
var audioPlayer: WKAudioFilePlayer!

他们在程序中扮演着不同的角色。 audioFile用于定义NSURL。例如,如果您有名为" bicycle.mp3"的文件,则可以像这样定义URL路径:

let soundPath = NSBundle.mainBundle().pathForResource("bicycle", ofType: "mp3")
print("load file") 

如果你有一个soundpath,你可以在audioFile中创建一个NSURL:

audioFile = WKAudioFileAsset.init(URL: soundPathURL)

如果您有audioFile,则将其放在audioPlayerItem

audioItem = WKAudioFilePlayerItem.init(asset: audioFile)

如果您有audioItem,则将其放入audioPlayer

    `audioPlayer = WKAudioFilePlayer(playerItem: audioItem)`

最后,您可以将代码audioPlayer.play()放在要播放声音的位置

享受!

答案 2 :(得分:0)

简短回答?没有.WatchKit目前不提供对Watch中任何硬件的访问。

答案 3 :(得分:0)

finally ended up with this:

@IBAction func playButtonTapped() {
        let options = [WKMediaPlayerControllerOptionsAutoplayKey : "true"]
        let filePath = NSBundle.mainBundle().pathForResource("1button", ofType: "wav")!
        let fileUrl = NSURL.fileURLWithPath(filePath)
        presentMediaPlayerControllerWithURL(fileUrl, options: options,
                                            completion: { didPlayToEnd, endTime, error in
                                                if let err = error {
                                                    print(err.description)
            }
        })
}