回答

0

簡答題? WatchKit目前不提供對手錶中任何硬件的訪問。

+0

我有同樣的問題,misteriously AVFoundation完美的作品在我的第一個項目(WatchOS 2.1的iOS 9.2),但是當我試圖做同樣在第2個項目,我收到錯誤。 – Josh

1

UPDATE 15年11月28日

這個答案適用於WatchKit和WatchOS 1.x的儘管我沒有測試過自己,但WatchOS 2.x提供了不同的支持,包括硬件。我可以確認從XCode 7.x開始,編譯器的行爲是否正確,並且調用AVFoundation的WatchKit 1.x擴展不會生成。

對於WatchOS 1.x和最多的XCode到6.x

儘管AVAudioRecorder和AVAudioPlayer在模擬器Apple關注這兩個工作,他們實際上並沒有在實際設備上工作!在2015年5月5日,我開了一個與蘋果的錯誤(一次我測試了一個我寫在我的實際手錶上的應用程序)。我的應用程序(手腕上的音頻記錄)在模擬器上的確很好地工作。然而,在實際的手錶上,它會安裝並運行,但AVAudioRecorder「記錄」信息根本不會切換到「記錄」。有趣的是,代碼不會在任何地方拋出任何異常。它根本不記錄!

2015年5月28日,我收到了一個針對Apple Bug的回覆,表示「沒有計劃解決這個問題」基於「AVFoundation在手錶上不受支持」。無論是否更新模擬器,AVFoundation也無法正常工作。

因此,目前Apple Watch僅限於通過Apple Watch擴展支持的手機短信功能來控制「在手機上」進行錄製。

1

嘗試使用WKAudioFilePlayerItem? 要使用這個類來播放音頻,你需要聲明3個變量:

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

他們的程序中不同的角色。對於audioFile用於定義NSURL。當你有一個soundpath

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

,你把它裏面的AudioFile一個NSURL:例如,如果你有文件名爲「bicycle.mp3」,你可以這樣定義URL路徑

audioFile = WKAudioFileAsset.init(URL: soundPathURL)

當你有一個audioFile,你把它裏面的audioPlayerItem

audioItem = WKAudioFilePlayerItem.init(asset: audioFile)

當你有audioItem,你把它裏面的audioPlayer

`audioPlayer = WKAudioFilePlayer(playerItem: audioItem)` 

最後,你可以把代碼audioPlayer.play()要播放的聲音

享受!

+0

我有一些遺留代碼,我不得不重構。 '@interface RecordController()'''@property(強,非原子)AVAudioRecorder *記錄器;'。我應該刪除委託,然後用'WKAudioFilePlayer'替換'AVAudioRecorder'?會記錄音頻嗎? – tymac

0

終於結束了這一點:

@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) 
      } 
     }) 
}