簡體   English   中英

Cocoa (macOS) 中 AVAudioRecorder 的正確用法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM