【问题标题】:Record Audio on OSX (AVAudioSession not available)在 OSX 上录制音频(AVAudioSession 不可用)
【发布时间】:2019-05-28 01:12:51
【问题描述】:

我希望在 OSX 上捕获音频。我有 IOS 使用 AVAudioSession,但由于 OSX 不支持它,我很难在 OSX 上找到一个简单的示例来将音频录制到文件中以供后续播放。

我在 stackoverflow 上找到的所有示例都是 IOS 或不是 Swift。

我们将不胜感激。一个指向基于 OSX Swift 的简单音频捕获示例代码的链接会很棒。

谢谢汤姆

【问题讨论】:

    标签: swift macos core-audio avaudiosession


    【解决方案1】:

    AVAudioSession 用于管理 iOS 音频约束。这些约束在 macOS 上不存在,因此您不需要 AVAudioSession。万岁!

    您可以使用AVAudioEngineAVAudioFile 将音频捕获到文件中:

    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
            }
        }
    }
    

    【讨论】:

    • 在 MAC 上就像一个魅力。谢谢你,让我开心。
    【解决方案2】:

    音频队列 API 适用于 iOS 和 macOS (OSX) 上的录制。所以找一个音频队列的例子; github上好像有好几个。

    【讨论】:

      【解决方案3】:

      要让@Rhythmic Fistman 的代码在 macOS 10.15+ 中运行,请确保将 Privacy - Microphone Usage Description 键和值添加到应用的 Info.plist 中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-09
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        相关资源
        最近更新 更多