在 OSX 上录制音频(AVAudioSession 不可用)
Record Audio on OSX (AVAudioSession not available)
我想在 OSX 上捕捉音频。我 IOS 使用 AVAudioSession,但由于 OSX 不支持它,我很难在 OSX 上找到一个简单的示例来将音频录制到文件以供后续播放。
我在 Whosebug 上找到的所有示例都是 IOS 和/或不在 Swift。
如有任何帮助,我们将不胜感激。基于 link 到 OSX Swift 的简单音频捕获示例代码会很棒。
谢谢汤姆
AVAudioSession
用于管理 iOS 音频约束。这些限制在 macOS 上不存在,因此您不需要 AVAudioSession
。万岁!
您可以使用 AVAudioEngine
和 AVAudioFile
将音频捕获到文件中:
import Cocoa
import AVFoundation
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
let audioEngine = AVAudioEngine()
var outputFile: AVAudioFile? = nil
func applicationDidFinishLaunching(_ aNotification: Notification) {
// If sandboxed, don't forget to turn on Microphone in Capabilities > App Sandbox
let input = audioEngine.inputNode
let bus = 0
let inputFormat = input.inputFormat(forBus: bus)
let outputURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("out.caf")
print("writing to \(outputURL)")
outputFile = try! AVAudioFile(forWriting: outputURL, settings: inputFormat.settings, commonFormat: inputFormat.commonFormat, interleaved: inputFormat.isInterleaved)
input.installTap(onBus: bus, bufferSize: 512, format: inputFormat) { (buffer, time) in
try! self.outputFile?.write(from: buffer)
}
try! audioEngine.start()
DispatchQueue.main.asyncAfter(deadline: .now()+5) {
print("Finish")
self.audioEngine.stop()
self.outputFile = nil
}
}
}
音频队列 API 适用于在 iOS 和 macOS (OSX) 上进行录音。所以寻找一个音频队列示例; github.
上似乎有几个
要使@Rhythmic Fistman 的代码在 macOS 10.15+ 中运行,请确保将 Privacy - Microphone Usage Description
键和值添加到应用程序的 Info.plist
我想在 OSX 上捕捉音频。我 IOS 使用 AVAudioSession,但由于 OSX 不支持它,我很难在 OSX 上找到一个简单的示例来将音频录制到文件以供后续播放。
我在 Whosebug 上找到的所有示例都是 IOS 和/或不在 Swift。
如有任何帮助,我们将不胜感激。基于 link 到 OSX Swift 的简单音频捕获示例代码会很棒。
谢谢汤姆
AVAudioSession
用于管理 iOS 音频约束。这些限制在 macOS 上不存在,因此您不需要 AVAudioSession
。万岁!
您可以使用 AVAudioEngine
和 AVAudioFile
将音频捕获到文件中:
import Cocoa
import AVFoundation
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
let audioEngine = AVAudioEngine()
var outputFile: AVAudioFile? = nil
func applicationDidFinishLaunching(_ aNotification: Notification) {
// If sandboxed, don't forget to turn on Microphone in Capabilities > App Sandbox
let input = audioEngine.inputNode
let bus = 0
let inputFormat = input.inputFormat(forBus: bus)
let outputURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("out.caf")
print("writing to \(outputURL)")
outputFile = try! AVAudioFile(forWriting: outputURL, settings: inputFormat.settings, commonFormat: inputFormat.commonFormat, interleaved: inputFormat.isInterleaved)
input.installTap(onBus: bus, bufferSize: 512, format: inputFormat) { (buffer, time) in
try! self.outputFile?.write(from: buffer)
}
try! audioEngine.start()
DispatchQueue.main.asyncAfter(deadline: .now()+5) {
print("Finish")
self.audioEngine.stop()
self.outputFile = nil
}
}
}
音频队列 API 适用于在 iOS 和 macOS (OSX) 上进行录音。所以寻找一个音频队列示例; github.
上似乎有几个要使@Rhythmic Fistman 的代码在 macOS 10.15+ 中运行,请确保将 Privacy - Microphone Usage Description
键和值添加到应用程序的 Info.plist