Skip to main content
Code samples

NCKitAudioNormalizer

Optional post-denoise loudness normalization on a mono Float32 buffer.

APIโ€‹

public enum NCKitAudioNormalizer {
public static func applySpeechGatedMakeupGain(
_ samples: inout [Float],
sampleRate: Int,
targetRmsDbfs: Float = -18,
maxGainDb: Float = 15,
peakCeilingDbfs: Float = -1
)

public static func softLimitInPlace(
_ samples: inout [Float],
peakCeilingDbfs: Float = -1
)
}

Speech-gated makeup gainโ€‹

import NCKit

var samples: [Float] = loadFloatSamples(from: denoisedWavURL) // your reader

NCKitAudioNormalizer.applySpeechGatedMakeupGain(
&samples,
sampleRate: 48_000,
targetRmsDbfs: -18,
maxGainDb: 15,
peakCeilingDbfs: -1
)

Peak limit only (no gain)โ€‹

NCKitAudioNormalizer.softLimitInPlace(&samples, peakCeilingDbfs: -1)

After file denoiseโ€‹

try NCKitFileProcessor.processFile(
inputURL: inputURL,
outputURL: tempWavURL,
processor: processor
)

var samples = try loadFloat32Wav(url: tempWavURL)
NCKitAudioNormalizer.applySpeechGatedMakeupGain(&samples, sampleRate: 48_000)
try writeFloat32Wav(samples: samples, sampleRate: 48_000, to: finalWavURL)

Parametersโ€‹

ParameterDefaultMeaning
targetRmsDbfs-18Target speech RMS
maxGainDb15Max boost cap
peakCeilingDbfs-1Tanh limiter ceiling

No-op when the clip is too short or has too few speech windows.