diff options
-rw-r--r-- | src/MKAudioInput.m | 18 | ||||
-rw-r--r-- | src/MumbleKit/MKAudio.h | 8 |
2 files changed, 19 insertions, 7 deletions
diff --git a/src/MKAudioInput.m b/src/MKAudioInput.m index 2ee8f4d..875d9c0 100644 --- a/src/MKAudioInput.m +++ b/src/MKAudioInput.m @@ -695,14 +695,18 @@ static OSStatus inputCallback(void *udata, AudioUnitRenderActionFlags *flags, co _peakCleanMic = -96.0f; } - // Crude probability-based VAD if (_settings.transmitType == MKTransmitTypeVAD) { - spx_int32_t prob = 0; - speex_preprocess_ctl(_private->preprocessorState, SPEEX_PREPROCESS_GET_PROB, &prob); - if (!_lastTransmit) { - _doTransmit = prob > 75; - } else { - _doTransmit = prob > 55; + float level = _speechProbability; + if (_settings.vadKind == MKVADKindAmplitude) { + level = ((_peakCleanMic)/96.0f) + 1.0; + } + _doTransmit = NO; + if (_settings.vadMax == 0 && _settings.vadMin == 0) { + _doTransmit = NO; + } else if (level > _settings.vadMax) { + _doTransmit = YES; + } else if (level > _settings.vadMin && _lastTransmit) { + _doTransmit = YES; } } else if (_settings.transmitType == MKTransmitTypeContinuous) { _doTransmit = YES; diff --git a/src/MumbleKit/MKAudio.h b/src/MumbleKit/MKAudio.h index e14438b..0c64a8f 100644 --- a/src/MumbleKit/MKAudio.h +++ b/src/MumbleKit/MKAudio.h @@ -47,9 +47,17 @@ typedef enum _MKTransmitType { MKTransmitTypeContinuous, } MKTransmitType; +typedef enum _MKVADKind { + MKVADKindSignalToNoise, + MKVADKindAmplitude, +} MKVADKind; + typedef struct _MKAudioSettings { MKCodecFormat codec; MKTransmitType transmitType; + MKVADKind vadKind; + float vadMax; + float vadMin; int quality; int audioPerPacket; int noiseSuppression; |