Cocoa (macOS) 中 AVAudioRecorder 的正确用法是什么?
What is correct usage of AVAudioRecorder in Cocoa (macOS)?
我有一个 simple app,我尝试使用 Swift 和 Cocoa 在 macOS 上进行录音。我生成了一个音频文件,但其中没有 。整个app基本上在一个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 在评论中澄清了这一点。
我有一个 simple app,我尝试使用 Swift 和 Cocoa 在 macOS 上进行录音。我生成了一个音频文件,但其中没有 。整个app基本上在一个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 在评论中澄清了这一点。