; airpods host-side processing + voice activity detection graph graphName "AirpodsNoiseSuppression_VoiceActivityDetection-noEC" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; Macros ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [def sampleRateIn 48000] ; overridden by ADM [def numChannelsIn 1] ; overridden by ADM [def vadProcSampleRate 16000] [def vadProcBlockSize 512] [def viDNNSampleRate 24000] [def viDNNBlockSize 480] [def kAUNeuralNetParam_NeuralNetModelPathBaseOverride 40000] ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; I/O ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; in in out out ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; Boxes ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; VAD and LoudnessNormalizer box MicInputGain dbgn 1 1 box VADInputSRC src 1 1 box LoudnessNormalizer (aufx ldnm appl) 1 1 box NNVAD_In_FFT fft 1 1 box NNVAD (aufx nnva appl) 1 1 box OutputDeadEndBox dead 1 0 ; VIDNN box VIMicInputGain dbgn 1 1 box InputSRC src 1 1 box VIDNN (aufx nnet appl) 1 1 box ZeroConstant constant 0 1 box VIRESjoin join 2 1 box VIRESSplit split 1 2 box NoiseExtractDiff adif 2 1 box AmbGain dbgn 1 1 ; for scaling ambience box VoiGain gain 1 1 ; for scaling voice box PostEQ (aufx tmst appl) 1 1 ; for applying eq to Voice and Ambience box VoiAmbMix asum 2 1 box postgain dbgn 1 1 box LDNM (aufx ldnm appl) 1 1 box OutputSRC src 1 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; Wires ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; VAD wire in MicInputGain ([sampleRateIn] 1) wire MicInputGain VADInputSRC ([sampleRateIn] 1) wire VADInputSRC LoudnessNormalizer ([vadProcSampleRate] 1 [vadProcBlockSize]) wire LoudnessNormalizer NNVAD_In_FFT ([vadProcSampleRate] 1 [vadProcBlockSize]) wire NNVAD_In_FFT NNVAD (freq [vadProcSampleRate] 1 [vadProcBlockSize]) wire NNVAD OutputDeadEndBox (freq [vadProcSampleRate] 1 [vadProcBlockSize]) ;;;; VI wire in VIMicInputGain ([sampleRateIn] 1) wire VIMicInputGain InputSRC ([sampleRateIn] 1) wire InputSRC (VIRESjoin 0) ([viDNNSampleRate] 1 [viDNNBlockSize]) wire ZeroConstant (VIRESjoin 1) ([viDNNSampleRate] 1 [viDNNBlockSize]) wire VIRESjoin (VIDNN 0) ([viDNNSampleRate] 2 [viDNNBlockSize]) wire (VIDNN 0) VIRESSplit ([viDNNSampleRate] 2 [viDNNBlockSize]) ; Extract Noise from Voice + Noise => Voice+Noise - Voice wire (VIRESSplit 1) (NoiseExtractDiff 0) ([viDNNSampleRate] 1 [viDNNBlockSize]) wire (VIRESSplit 0) (NoiseExtractDiff 1) ([viDNNSampleRate] 1 [viDNNBlockSize]) ; scales on eqd speech and eqd ambience for mix wire (VIRESSplit 0) VoiGain ([viDNNSampleRate] 1 [viDNNBlockSize]) wire NoiseExtractDiff AmbGain ([viDNNSampleRate] 1 [viDNNBlockSize]) wire VoiGain (VoiAmbMix 0) ([viDNNSampleRate] 1 [viDNNBlockSize]) wire AmbGain (VoiAmbMix 1) ([viDNNSampleRate] 1 [viDNNBlockSize]) wire VoiAmbMix PostEQ ([viDNNSampleRate] 1 [viDNNBlockSize]) wire PostEQ LDNM ([viDNNSampleRate] 1 [viDNNBlockSize]) wire LDNM postgain ([viDNNSampleRate] 1 [viDNNBlockSize]) wire postgain OutputSRC ([viDNNSampleRate] 1 [viDNNBlockSize]) wire OutputSRC out ([sampleRateIn] 1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; Parameters ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; param sppb 0 out ; speech probability as boolean value (e.g. 0 or 1) wireGraphParam sppb (NNVAD 5 global 0) param sppf 0 out ; speech probability as float value (e.g. anything between 0.0 and 1.0) wireGraphParam sppf (NNVAD 6 global 0) param spem 1.00 in ; Default speech mix (should be a constant) wireGraphParam spem (VoiGain 0 0 0) ; VI input scaling for ambience extraction ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; Properties ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; property tudp in ; Tuning Directory Path wireGraphProperty tudp (VIDNN [kAUNeuralNetParam_NeuralNetModelPathBaseOverride])