问题描述
我有一个 simple app,我尝试在 macOS 上使用 Swift 和 Cocoa 进行录音。我制作了一个音频文件,但其中什么都没有。整个应用程序基本上都在一个 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 }
@H_502_9@对于签名和功能,我检查了以下内容。我不确定我的代码是否有问题,或者我的功能是否有问题。
奇怪的是,我在 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),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()
@H_502_9@解决方法
您需要将
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 在评论中澄清这一点。