AudioManager

neiron-watch · voice

AVAudioEngine-based audio recorder with PCM buffer tap, audio session management, interruption handling, and level metering. Lifts out as a standalone audio capture utility.

import Foundation
import AVFoundation
import os.log

// MARK: - AudioManager

class AudioManager: NSObject, ObservableObject {
    @Published var isRecording: Bool = false
    @Published var isPaused: Bool = false
    @Published var currentLevel: Float = -160.0 // dB

    var onAudioBuffer: ((AVAudioPCMBuffer) -> Void)?
    var onError: ((Error) -> Void)?

    private let audioEngine = AVAudioEngine()
    private var audioFile: AVAudioFile?
    private var recordingURL: URL?
    private let bufferSize: AVAudioFrameCount = AVAudioFrameCount(AppConfig.audioBufferSize)
    private let logger = Logger(subsystem: "com.neiron.watch", category: "AudioManager")

    // MARK: - Init / Deinit

    override init() {
        super.init()
        setupInterruptionHandling()
    }

    deinit {
        

... (truncated -- full source via MCP)

See the full source, get the GitHub permalink, and search 40K more like it.

Get a free API key