[英]macOS: Correct way of exposing Swift properties to Cocoa Bindings
[英]What is correct usage of AVAudioRecorder in Cocoa (macOS)?
我有一個簡單的應用程序,我嘗試使用 Swift 和 Cocoa 在 macOS 上進行錄音。 我得到了一個音頻文件,但里面沒有任何內容。 整個應用程序基本上都在一個NSWindowController
。 它有這個相關的代碼。
// member variable for recorder
var recorder : AVAudioRecorder?
// function called indirectly from UI to begin recording
func startRecording() throws {
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
let rec = try AVAudioRecorder(url: filename, settings: settings)
rec.delegate = self
rec.prepareToRecord()
rec.isMeteringEnabled = true
rec.record()
self.recorder = rec
}
// Callback I use to stop recording
@IBAction func stop(sender: AnyObject) {
self.recorder?.stop()
self.recorder = nil
}
對於簽名和功能,我檢查了以下內容。 我不確定我的代碼是否有問題,或者我的能力是否有問題。
奇怪的是,我在 Playgrounds 中得到了這種風格的代碼。 此代碼將在 Playgrounds 中工作,但它看起來與我的 GUI 應用程序代碼沒有根本的不同:
import Speech
let paths = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask)
let docsDir = paths[0]
let filename = docsDir.appendingPathComponent("voiceRec.m4a")
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
let rec = try AVAudioRecorder(
url: filename,
settings: settings)
var ok = rec.prepareToRecord()
ok = rec.record()
// Evaluate this in playground when you are done recording
rec.stop()
您需要將NSMicrophoneUsageDescription
鍵添加到您的Info.plist
文件中。 這是允許訪問麥克風所必需的。 請記住,iOS 和 macOS 都在沙箱中運行,並且不會允許應用程序執行任何未獲得明確許可的操作。 NSMicrophoneUsageDescription
必須描述麥克風的用途,以便應用程序的用戶可以閱讀給出的原因並判斷它是否有效,或者該特定功能是否是他們想要使用的東西。
您只需粘貼密鑰,如圖所示。 您需要通過單擊上方一行的加號 (+) 按鈕來添加另一個條目。
還要確保在以下功能下啟用麥克風輸入:
您可以看到 Info.plist 的外觀示例
<key>NSMicrophoneUsageDescription</key>
<string>Record audio to file to later transcribe</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>For transcribing recorded audio</string>
感謝 @jnpdx 在評論中澄清這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.