【发布时间】:2021-06-25 18:11:26
【问题描述】:
我有一个simple app,我尝试在 macOS 上使用 Swift 和 Cocoa 进行录音。我得到了一个音频文件,但里面没有 nothing。整个应用程序基本上都在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()
【问题讨论】:
-
您的
Info.plist设置是否正确并请求记录权限? developer.apple.com/documentation/avfoundation/… -
您的 info.plist 中有麦克风使用隐私吗?
-
@ElTomato 哦,不要读得太字面意思。这只是一种说法,我将所有代码放在 NSWindowController 子类中,而不是将其分解到模型对象和其他控制器中。
-
@jnpdx 谢谢!这解决了问题。
标签: swift cocoa avaudiorecorder