NCKitStreamProcessor
Live / real-time denoise adapter for AVAudioEngine microphone taps. Resamples to 48 kHz mono, accumulates 10 ms hops, and drives NCKitProcessor.processFrame.
Requires NCKit 1.1.1+ for reset().
APIโ
public final class NCKitStreamProcessor {
public let frameLength: Int
public init(processor: NCKitProcessor) throws
public func prepare(inputFormat: AVAudioFormat) throws
public func convertToTargetFormat(_ buffer: AVAudioPCMBuffer) throws -> AVAudioPCMBuffer
public func process(buffer: AVAudioPCMBuffer) throws -> [AVAudioPCMBuffer]
public func processConverted(_ buffer: AVAudioPCMBuffer) throws -> [AVAudioPCMBuffer]
public func flush() throws -> [AVAudioPCMBuffer]
public func reset()
public func setAttenLim(_ db: Float)
public func setPostFilterBeta(_ b: Float)
}
Setupโ
import NCKit
import AVFoundation
let modelURL = try NCKitModelLocator.modelTarGzURL()
let processor = try NCKitProcessor(modelURL: modelURL)
let stream = try NCKitStreamProcessor(processor: processor)
Install microphone tapโ
inputNode.installTap(onBus: 0, bufferSize: 4096, format: tapFormat) { buffer, _ in
try stream.prepare(inputFormat: buffer.format)
let frames = try stream.process(buffer: buffer)
for frame in frames {
// 480 Float samples @ 48 kHz mono
}
}
Dry + denoised (A/B)โ
try stream.prepare(inputFormat: buffer.format)
let dry = try stream.convertToTargetFormat(buffer)
let denoised = try stream.processConverted(dry)
End of sessionโ
let tail = try stream.flush()
stream.reset()
Threadingโ
Not thread-safe โ call prepare, process, processConverted, flush, and reset from one serial queue (typically the audio tap thread).