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