import AVFoundation import SstCore /// Records `seconds` of microphone audio; returns nil if access is denied or recording fails. func recordSamples(seconds: Double, onLevel: ((Float) -> Void)? = nil) async -> [Float]? { guard await AVCaptureDevice.requestAccess(for: .audio) else { print("Microfoon-toegang geweigerd (Systeeminstellingen → Privacy → Microfoon).") return nil } let recorder = AudioRecorder() recorder.onLevel = onLevel do { try recorder.start() } catch { print("start mislukt:", error.localizedDescription) return nil } print("Neem \(Int(seconds)) s op — praat nu") try? await Task.sleep(for: .seconds(seconds)) return recorder.stop() } func runRecordProbe() async { final class Levels: @unchecked Sendable { let lock = NSLock() var values: [Float] = [] func add(_ v: Float) { lock.withLock { values.append(v) } } } let levels = Levels() guard let samples = await recordSamples(seconds: 3, onLevel: { levels.add($0) }) else { return } let peak = samples.map { abs($0) }.max() ?? 0 print("samples: \(samples.count) (verwacht ≈ 48000), piek: \(peak)") let values = levels.lock.withLock { levels.values } if let lo = values.min(), let hi = values.max() { print(String(format: "niveau-meldingen: %d (≈ %.0f per s), bereik %.1f … %.1f dBFS", values.count, Double(values.count) / 3, lo, hi)) } else { print("geen niveau-meldingen ontvangen") } }