diff --git a/src/native/portaudio/AudioQualityImprovement.c b/src/native/portaudio/AudioQualityImprovement.c index dfaf55057..f56f0c84f 100644 --- a/src/native/portaudio/AudioQualityImprovement.c +++ b/src/native/portaudio/AudioQualityImprovement.c @@ -13,89 +13,78 @@ #include static void AudioQualityImprovement_cancelEchoFromPlay - (AudioQualityImprovement *audioQualityImprovement, - void *buffer, - unsigned long length); -static void AudioQualityImprovement_free - (AudioQualityImprovement *audioQualityImprovement); + (AudioQualityImprovement *aqi, void *buffer, unsigned long length); +static void AudioQualityImprovement_free(AudioQualityImprovement *aqi); static AudioQualityImprovement *AudioQualityImprovement_new (const char *stringID, jlong longID, AudioQualityImprovement *next); static void AudioQualityImprovement_resampleInPlay - (AudioQualityImprovement *audioQualityImprovement, - double sampleRate, - unsigned long sampleSizeInBits, - int channels, - void *buffer, - unsigned long length); -static void AudioQualityImprovement_retain - (AudioQualityImprovement *audioQualityImprovement); + (AudioQualityImprovement *aqi, + double sampleRate, unsigned long sampleSizeInBits, int channels, + void *buffer, unsigned long length); +static void AudioQualityImprovement_retain(AudioQualityImprovement *aqi); static void AudioQualityImprovement_setFrameSize - (AudioQualityImprovement *audioQualityImprovement, jint frameSize); + (AudioQualityImprovement *aqi, jint frameSize); static void AudioQualityImprovement_updatePreprocess - (AudioQualityImprovement *audioQualityImprovement); + (AudioQualityImprovement *aqi); #ifndef _WIN32 static pthread_mutex_t AudioQualityImprovement_sharedInstancesMutex = PTHREAD_MUTEX_INITIALIZER; -#else /* Windows */ -static CRITICAL_SECTION AudioQualityImprovement_sharedInstancesMutex = {(void*)-1, -1, 0, 0, 0, 0}; -#endif +#else /* #ifndef _WIN32 */ +static CRITICAL_SECTION AudioQualityImprovement_sharedInstancesMutex + = {(void*)-1, -1, 0, 0, 0, 0}; +#endif /* #ifndef _WIN32 */ static AudioQualityImprovement *AudioQualityImprovement_sharedInstances = NULL; static void AudioQualityImprovement_cancelEchoFromPlay - (AudioQualityImprovement *audioQualityImprovement, + (AudioQualityImprovement *aqi, void *buffer, unsigned long length) { - if (!(audioQualityImprovement->out) - || (audioQualityImprovement->outCapacity < length)) + if (!(aqi->out) || (aqi->outCapacity < length)) { - spx_int16_t *newOut = realloc(audioQualityImprovement->out, length); + spx_int16_t *newOut = realloc(aqi->out, length); if (newOut) { - audioQualityImprovement->out = newOut; - audioQualityImprovement->outCapacity = length; + aqi->out = newOut; + aqi->outCapacity = length; } else return; } - speex_echo_cancellation( - audioQualityImprovement->echo, - buffer, - audioQualityImprovement->play, - audioQualityImprovement->out); - audioQualityImprovement->playSize = 0; - memcpy(buffer, audioQualityImprovement->out, length); + speex_echo_cancellation(aqi->echo, buffer, aqi->play, aqi->out); + aqi->playSize = 0; + memcpy(buffer, aqi->out, length); } static void -AudioQualityImprovement_free(AudioQualityImprovement *audioQualityImprovement) +AudioQualityImprovement_free(AudioQualityImprovement *aqi) { /* mutex */ - mutex_destroy(audioQualityImprovement->mutex); - free(audioQualityImprovement->mutex); + mutex_destroy(aqi->mutex); + free(aqi->mutex); /* preprocess */ - if (audioQualityImprovement->preprocess) - speex_preprocess_state_destroy(audioQualityImprovement->preprocess); + if (aqi->preprocess) + speex_preprocess_state_destroy(aqi->preprocess); /* echo */ - if (audioQualityImprovement->echo) - speex_echo_state_destroy(audioQualityImprovement->echo); + if (aqi->echo) + speex_echo_state_destroy(aqi->echo); /* out */ - if (audioQualityImprovement->out) - free(audioQualityImprovement->out); + if (aqi->out) + free(aqi->out); /* play */ - if (audioQualityImprovement->play) - free(audioQualityImprovement->play); + if (aqi->play) + free(aqi->play); /* resampler */ - if (audioQualityImprovement->resampler) - speex_resampler_destroy(audioQualityImprovement->resampler); + if (aqi->resampler) + speex_resampler_destroy(aqi->resampler); /* stringID */ - free(audioQualityImprovement->stringID); + free(aqi->stringID); - free(audioQualityImprovement); + free(aqi); } AudioQualityImprovement * @@ -125,8 +114,7 @@ AudioQualityImprovement_getSharedInstance(const char *stringID, jlong longID) { theSharedInstance = AudioQualityImprovement_new( - stringID, - longID, + stringID, longID, AudioQualityImprovement_sharedInstances); if (theSharedInstance) AudioQualityImprovement_sharedInstances = theSharedInstance; @@ -140,116 +128,98 @@ static AudioQualityImprovement * AudioQualityImprovement_new (const char *stringID, jlong longID, AudioQualityImprovement *next) { - AudioQualityImprovement *audioQualityImprovement - = malloc(sizeof(AudioQualityImprovement)); + AudioQualityImprovement *aqi = malloc(sizeof(AudioQualityImprovement)); - if (audioQualityImprovement) + if (aqi) { - audioQualityImprovement->echo = NULL; - audioQualityImprovement->mutex = NULL; - audioQualityImprovement->out = NULL; - audioQualityImprovement->play = NULL; - audioQualityImprovement->preprocess = NULL; - audioQualityImprovement->resampler = NULL; - /* audioQualityImprovement->stringID = NULL; */ + aqi->echo = NULL; + aqi->mutex = NULL; + aqi->out = NULL; + aqi->play = NULL; + aqi->preprocess = NULL; + aqi->resampler = NULL; + /* aqi->stringID = NULL; */ /* stringID */ - audioQualityImprovement->stringID = strdup(stringID); - if (!(audioQualityImprovement->stringID)) + aqi->stringID = strdup(stringID); + if (!(aqi->stringID)) { - AudioQualityImprovement_free(audioQualityImprovement); + AudioQualityImprovement_free(aqi); return NULL; } /* mutex */ - audioQualityImprovement->mutex = malloc(sizeof(Mutex)); - if (!(audioQualityImprovement->mutex) - || mutex_init(audioQualityImprovement->mutex, NULL)) + aqi->mutex = malloc(sizeof(Mutex)); + if (!(aqi->mutex) || mutex_init(aqi->mutex, NULL)) { - AudioQualityImprovement_free(audioQualityImprovement); + AudioQualityImprovement_free(aqi); return NULL; } - audioQualityImprovement->denoise = JNI_FALSE; - audioQualityImprovement->echoFilterLengthInMillis = 0; - audioQualityImprovement->frameSize = 0; - audioQualityImprovement->longID = longID; - audioQualityImprovement->next = next; - audioQualityImprovement->retainCount = 1; - audioQualityImprovement->sampleRate = 0; + aqi->denoise = JNI_FALSE; + aqi->echoFilterLengthInMillis = 0; + aqi->frameSize = 0; + aqi->longID = longID; + aqi->next = next; + aqi->retainCount = 1; + aqi->sampleRate = 0; } - return audioQualityImprovement; + return aqi; } -void AudioQualityImprovement_process - (AudioQualityImprovement *audioQualityImprovement, +void +AudioQualityImprovement_process + (AudioQualityImprovement *aqi, AudioQualityImprovementSampleOrigin sampleOrigin, - double sampleRate, - unsigned long sampleSizeInBits, - int channels, - void *buffer, - unsigned long length) + double sampleRate, unsigned long sampleSizeInBits, int channels, + void *buffer, unsigned long length) { - if ((sampleSizeInBits == 16) - && (channels == 1) - && !mutex_lock(audioQualityImprovement->mutex)) + if ((sampleSizeInBits == 16) && (channels == 1) && !mutex_lock(aqi->mutex)) { switch (sampleOrigin) { case AUDIO_QUALITY_IMPROVEMENT_SAMPLE_ORIGIN_INPUT: - if (sampleRate == audioQualityImprovement->sampleRate) + if (sampleRate == aqi->sampleRate) { - AudioQualityImprovement_setFrameSize( - audioQualityImprovement, - length); - if (audioQualityImprovement->preprocess) + AudioQualityImprovement_setFrameSize(aqi, length); + if (aqi->preprocess) { - if (audioQualityImprovement->echo - && audioQualityImprovement->play - && (audioQualityImprovement->playSize - == audioQualityImprovement->frameSize)) + if (aqi->echo + && aqi->play + && (aqi->playSize == aqi->frameSize)) { AudioQualityImprovement_cancelEchoFromPlay( - audioQualityImprovement, - buffer, - length); + aqi, + buffer, length); } - speex_preprocess_run( - audioQualityImprovement->preprocess, - buffer); + speex_preprocess_run(aqi->preprocess, buffer); } } break; case AUDIO_QUALITY_IMPROVEMENT_SAMPLE_ORIGIN_OUTPUT: - if (audioQualityImprovement->preprocess - && audioQualityImprovement->echo) + if (aqi->preprocess && aqi->echo) { AudioQualityImprovement_resampleInPlay( - audioQualityImprovement, - sampleRate, - sampleSizeInBits, - channels, - buffer, - length); + aqi, + sampleRate, sampleSizeInBits, channels, + buffer, length); } break; } - mutex_unlock(audioQualityImprovement->mutex); + mutex_unlock(aqi->mutex); } } void -AudioQualityImprovement_release - (AudioQualityImprovement *audioQualityImprovement) +AudioQualityImprovement_release(AudioQualityImprovement *aqi) { if (!mutex_lock(&AudioQualityImprovement_sharedInstancesMutex)) { - if (!mutex_lock(audioQualityImprovement->mutex)) + if (!mutex_lock(aqi->mutex)) { - --(audioQualityImprovement->retainCount); - if (audioQualityImprovement->retainCount < 1) + --(aqi->retainCount); + if (aqi->retainCount < 1) { - if (audioQualityImprovement - == AudioQualityImprovement_sharedInstances) + if (aqi == AudioQualityImprovement_sharedInstances) { AudioQualityImprovement_sharedInstances = AudioQualityImprovement_sharedInstances->next; @@ -264,90 +234,83 @@ AudioQualityImprovement_release AudioQualityImprovement *nextSharedInstance = prevSharedInstance->next; - if (audioQualityImprovement == nextSharedInstance) + if (aqi == nextSharedInstance) { - prevSharedInstance->next - = audioQualityImprovement->next; + prevSharedInstance->next = aqi->next; break; } prevSharedInstance = nextSharedInstance; } } - mutex_unlock(audioQualityImprovement->mutex); - AudioQualityImprovement_free(audioQualityImprovement); + mutex_unlock(aqi->mutex); + AudioQualityImprovement_free(aqi); } else - mutex_unlock(audioQualityImprovement->mutex); + mutex_unlock(aqi->mutex); } mutex_unlock(&AudioQualityImprovement_sharedInstancesMutex); } } + static void AudioQualityImprovement_resampleInPlay - (AudioQualityImprovement *audioQualityImprovement, - double sampleRate, - unsigned long sampleSizeInBits, - int channels, - void *buffer, - unsigned long length) + (AudioQualityImprovement *aqi, + double sampleRate, unsigned long sampleSizeInBits, int channels, + void *buffer, unsigned long length) { spx_uint32_t playSize; - if (sampleRate == audioQualityImprovement->sampleRate) + if (sampleRate == aqi->sampleRate) playSize = length; - else if (length * audioQualityImprovement->sampleRate - == audioQualityImprovement->frameSize * sampleRate) + else if (length * aqi->sampleRate == aqi->frameSize * sampleRate) { - if (audioQualityImprovement->resampler) + if (aqi->resampler) { speex_resampler_set_rate( - audioQualityImprovement->resampler, - (spx_uint32_t) sampleRate, - (spx_uint32_t) (audioQualityImprovement->sampleRate)); - playSize = audioQualityImprovement->frameSize; + aqi->resampler, + (spx_uint32_t) sampleRate, (spx_uint32_t) (aqi->sampleRate)); + playSize = aqi->frameSize; } else { - audioQualityImprovement->resampler + aqi->resampler = speex_resampler_init( channels, - (spx_uint32_t) sampleRate, - (spx_uint32_t) (audioQualityImprovement->sampleRate), + (spx_uint32_t) sampleRate, (spx_uint32_t) (aqi->sampleRate), SPEEX_RESAMPLER_QUALITY_VOIP, NULL); - if (!(audioQualityImprovement->resampler)) + if (!(aqi->resampler)) { - audioQualityImprovement->playSize = 0; + aqi->playSize = 0; return; } } } else { - audioQualityImprovement->playSize = 0; + aqi->playSize = 0; return; } - if (!(audioQualityImprovement->play) - || (audioQualityImprovement->playCapacity < playSize)) + if (!(aqi->play) || (aqi->playCapacity < playSize)) { - spx_int16_t *newPlay = realloc(audioQualityImprovement->play, playSize); + spx_int16_t *newPlay = realloc(aqi->play, playSize); if (newPlay) { - audioQualityImprovement->play = newPlay; - audioQualityImprovement->playCapacity = playSize; + aqi->play = newPlay; + aqi->playCapacity = playSize; } else { - audioQualityImprovement->playSize = 0; + aqi->playSize = 0; return; } } - if (length == audioQualityImprovement->frameSize) + if (length == aqi->frameSize) { - memcpy(audioQualityImprovement->play, buffer, playSize); - audioQualityImprovement->playSize = playSize; + memcpy(aqi->play, buffer, playSize); + aqi->playSize = playSize; } else { @@ -356,207 +319,180 @@ AudioQualityImprovement_resampleInPlay spx_uint32_t playSampleCount = playSize / sampleSizeInBytes; speex_resampler_process_interleaved_int( - audioQualityImprovement->resampler, - buffer, - &bufferSampleCount, - audioQualityImprovement->play, - &playSampleCount); - audioQualityImprovement->playSize = playSampleCount * sampleSizeInBytes; + aqi->resampler, + buffer, &bufferSampleCount, aqi->play, &playSampleCount); + aqi->playSize = playSampleCount * sampleSizeInBytes; } } static void -AudioQualityImprovement_retain - (AudioQualityImprovement *audioQualityImprovement) +AudioQualityImprovement_retain(AudioQualityImprovement *aqi) { - if (!mutex_lock(audioQualityImprovement->mutex)) + if (!mutex_lock(aqi->mutex)) { - ++(audioQualityImprovement->retainCount); - mutex_unlock(audioQualityImprovement->mutex); + ++(aqi->retainCount); + mutex_unlock(aqi->mutex); } } void AudioQualityImprovement_setDenoise - (AudioQualityImprovement *audioQualityImprovement, jboolean denoise) + (AudioQualityImprovement *aqi, jboolean denoise) { - if (!mutex_lock(audioQualityImprovement->mutex)) + if (!mutex_lock(aqi->mutex)) { - if (audioQualityImprovement->denoise != denoise) + if (aqi->denoise != denoise) { - audioQualityImprovement->denoise = denoise; - AudioQualityImprovement_updatePreprocess(audioQualityImprovement); + aqi->denoise = denoise; + AudioQualityImprovement_updatePreprocess(aqi); } - mutex_unlock(audioQualityImprovement->mutex); + mutex_unlock(aqi->mutex); } } void AudioQualityImprovement_setEchoFilterLengthInMillis - (AudioQualityImprovement *audioQualityImprovement, - jlong echoFilterLengthInMillis) + (AudioQualityImprovement *aqi, jlong echoFilterLengthInMillis) { if (echoFilterLengthInMillis < 0) echoFilterLengthInMillis = 0; - if (!mutex_lock(audioQualityImprovement->mutex)) + if (!mutex_lock(aqi->mutex)) { - if (audioQualityImprovement->echoFilterLengthInMillis - != echoFilterLengthInMillis) + if (aqi->echoFilterLengthInMillis != echoFilterLengthInMillis) { - audioQualityImprovement->echoFilterLengthInMillis - = echoFilterLengthInMillis; - AudioQualityImprovement_updatePreprocess(audioQualityImprovement); + aqi->echoFilterLengthInMillis = echoFilterLengthInMillis; + AudioQualityImprovement_updatePreprocess(aqi); } - mutex_unlock(audioQualityImprovement->mutex); + mutex_unlock(aqi->mutex); } } static void AudioQualityImprovement_setFrameSize - (AudioQualityImprovement *audioQualityImprovement, jint frameSize) + (AudioQualityImprovement *aqi, jint frameSize) { - if (audioQualityImprovement->frameSize != frameSize) + if (aqi->frameSize != frameSize) { - audioQualityImprovement->frameSize = frameSize; - AudioQualityImprovement_updatePreprocess(audioQualityImprovement); + aqi->frameSize = frameSize; + AudioQualityImprovement_updatePreprocess(aqi); } } void AudioQualityImprovement_setSampleRate - (AudioQualityImprovement *audioQualityImprovement, int sampleRate) + (AudioQualityImprovement *aqi, int sampleRate) { - if (!mutex_lock(audioQualityImprovement->mutex)) + if (!mutex_lock(aqi->mutex)) { - if (audioQualityImprovement->sampleRate != sampleRate) + if (aqi->sampleRate != sampleRate) { - audioQualityImprovement->sampleRate = sampleRate; - AudioQualityImprovement_updatePreprocess(audioQualityImprovement); + aqi->sampleRate = sampleRate; + AudioQualityImprovement_updatePreprocess(aqi); } - mutex_unlock(audioQualityImprovement->mutex); + mutex_unlock(aqi->mutex); } } static void -AudioQualityImprovement_updatePreprocess - (AudioQualityImprovement *audioQualityImprovement) +AudioQualityImprovement_updatePreprocess(AudioQualityImprovement *aqi) { - if (audioQualityImprovement->echo) + if (aqi->echo) { int frameSize = 0; - if ((audioQualityImprovement->echoFilterLengthInMillis > 0) - && (audioQualityImprovement->sampleRate > 0) + if ((aqi->echoFilterLengthInMillis > 0) + && (aqi->sampleRate > 0) && speex_echo_ctl( - audioQualityImprovement->echo, - SPEEX_ECHO_GET_FRAME_SIZE, - &frameSize)) + aqi->echo, + SPEEX_ECHO_GET_FRAME_SIZE, &frameSize)) frameSize = 0; if (frameSize - && (audioQualityImprovement->frameSize + && (aqi->frameSize == (frameSize * (16 /* sampleSizeInBits */ / 8)))) { int echoFilterLength = (int) - ((audioQualityImprovement->sampleRate - * audioQualityImprovement->echoFilterLengthInMillis) - / 1000); + ((aqi->sampleRate * aqi->echoFilterLengthInMillis) / 1000); - if (audioQualityImprovement->filterLengthOfEcho != echoFilterLength) + if (aqi->filterLengthOfEcho != echoFilterLength) frameSize = 0; } else frameSize = 0; if (frameSize < 1) { - if (audioQualityImprovement->preprocess) + if (aqi->preprocess) { speex_preprocess_ctl( - audioQualityImprovement->preprocess, - SPEEX_PREPROCESS_SET_ECHO_STATE, - NULL); + aqi->preprocess, + SPEEX_PREPROCESS_SET_ECHO_STATE, NULL); } - speex_echo_state_destroy(audioQualityImprovement->echo); - audioQualityImprovement->echo = NULL; + speex_echo_state_destroy(aqi->echo); + aqi->echo = NULL; } } - if (audioQualityImprovement->preprocess - && ((audioQualityImprovement->frameSize - != audioQualityImprovement->frameSizeOfPreprocess) - || (audioQualityImprovement->sampleRate - != audioQualityImprovement->sampleRateOfPreprocess))) + if (aqi->preprocess + && ((aqi->frameSize != aqi->frameSizeOfPreprocess) + || (aqi->sampleRate != aqi->sampleRateOfPreprocess))) { - speex_preprocess_state_destroy(audioQualityImprovement->preprocess); - audioQualityImprovement->preprocess = NULL; + speex_preprocess_state_destroy(aqi->preprocess); + aqi->preprocess = NULL; } - if ((audioQualityImprovement->frameSize > 0) - && (audioQualityImprovement->sampleRate > 0)) + if ((aqi->frameSize > 0) && (aqi->sampleRate > 0)) { - if (audioQualityImprovement->echoFilterLengthInMillis > 0) + if (aqi->echoFilterLengthInMillis > 0) { - if (!(audioQualityImprovement->echo)) + if (!(aqi->echo)) { int echoFilterLength = (int) - ((audioQualityImprovement->sampleRate - * audioQualityImprovement - ->echoFilterLengthInMillis) + ((aqi->sampleRate * aqi->echoFilterLengthInMillis) / 1000); - audioQualityImprovement->echo + aqi->echo = speex_echo_state_init( - audioQualityImprovement->frameSize - / (16 /* sampleSizeInBits */ / 8), + aqi->frameSize / (16 /* sampleSizeInBits */ / 8), echoFilterLength); - audioQualityImprovement->filterLengthOfEcho - = echoFilterLength; + aqi->filterLengthOfEcho = echoFilterLength; } - if (audioQualityImprovement->echo) + if (aqi->echo) { speex_echo_ctl( - audioQualityImprovement->echo, - SPEEX_ECHO_SET_SAMPLING_RATE, - &(audioQualityImprovement->sampleRate)); + aqi->echo, + SPEEX_ECHO_SET_SAMPLING_RATE, &(aqi->sampleRate)); } } - if (audioQualityImprovement->denoise || audioQualityImprovement->echo) + if (aqi->denoise || aqi->echo) { - if (!(audioQualityImprovement->preprocess)) + if (!(aqi->preprocess)) { - audioQualityImprovement->preprocess + aqi->preprocess = speex_preprocess_state_init( - audioQualityImprovement->frameSize - / (16 /* sampleSizeInBits */ / 8), - audioQualityImprovement->sampleRate); - audioQualityImprovement->frameSizeOfPreprocess - = audioQualityImprovement->frameSize; - audioQualityImprovement->sampleRateOfPreprocess - = audioQualityImprovement->sampleRate; - if (audioQualityImprovement->preprocess) + aqi->frameSize / (16 /* sampleSizeInBits */ / 8), + aqi->sampleRate); + aqi->frameSizeOfPreprocess = aqi->frameSize; + aqi->sampleRateOfPreprocess = aqi->sampleRate; + if (aqi->preprocess) { int vad = 1; speex_preprocess_ctl( - audioQualityImprovement->preprocess, - SPEEX_PREPROCESS_SET_VAD, - &vad); + aqi->preprocess, + SPEEX_PREPROCESS_SET_VAD, &vad); } } - if (audioQualityImprovement->preprocess) + if (aqi->preprocess) { - int denoise - = (audioQualityImprovement->denoise == JNI_TRUE) ? 1 : 0; + int denoise = (aqi->denoise == JNI_TRUE) ? 1 : 0; speex_preprocess_ctl( - audioQualityImprovement->preprocess, - SPEEX_PREPROCESS_SET_DENOISE, - &denoise); - if (audioQualityImprovement->echo) + aqi->preprocess, + SPEEX_PREPROCESS_SET_DENOISE, &denoise); + if (aqi->echo) { speex_preprocess_ctl( - audioQualityImprovement->preprocess, - SPEEX_PREPROCESS_SET_ECHO_STATE, - audioQualityImprovement->echo); + aqi->preprocess, + SPEEX_PREPROCESS_SET_ECHO_STATE, aqi->echo); } } } diff --git a/src/native/portaudio/AudioQualityImprovement.h b/src/native/portaudio/AudioQualityImprovement.h index 176d850b3..f7212711c 100644 --- a/src/native/portaudio/AudioQualityImprovement.h +++ b/src/native/portaudio/AudioQualityImprovement.h @@ -45,7 +45,7 @@ static inline int mutex_unlock(Mutex* mutex) return 0; } -#else /* Unix */ +#else /* #ifdef _WIN32 */ #include typedef pthread_mutex_t Mutex; @@ -68,9 +68,8 @@ static inline int mutex_lock(Mutex* mutex) static inline int mutex_unlock(Mutex* mutex) { return pthread_mutex_unlock(mutex); - return 0; } -#endif +#endif /* #ifdef _WIN32 */ #include #include @@ -110,21 +109,16 @@ typedef enum AudioQualityImprovement *AudioQualityImprovement_getSharedInstance (const char *stringID, jlong longID); void AudioQualityImprovement_process - (AudioQualityImprovement *audioQualityImprovement, + (AudioQualityImprovement *aqi, AudioQualityImprovementSampleOrigin sampleOrigin, - double sampleRate, - unsigned long sampleSizeInBits, - int channels, - void *buffer, - unsigned long length); -void AudioQualityImprovement_release - (AudioQualityImprovement *audioQualityImprovement); + double sampleRate, unsigned long sampleSizeInBits, int channels, + void *buffer, unsigned long length); +void AudioQualityImprovement_release(AudioQualityImprovement *aqi); void AudioQualityImprovement_setDenoise - (AudioQualityImprovement *audioQualityImprovement, jboolean denoise); + (AudioQualityImprovement *aqi, jboolean denoise); void AudioQualityImprovement_setEchoFilterLengthInMillis - (AudioQualityImprovement *audioQualityImprovement, - jlong echoFilterLengthInMillis); + (AudioQualityImprovement *aqi, jlong echoFilterLengthInMillis); void AudioQualityImprovement_setSampleRate - (AudioQualityImprovement *audioQualityImprovement, int sampleRate); + (AudioQualityImprovement *aqi, int sampleRate); #endif /* #ifndef _NET_JAVA_SIP_COMMUNICATOR_IMPL_NEOMEDIA_PORTAUDIO_AUDIOQUALITYIMPROVEMENT_H_ */ diff --git a/src/net/java/sip/communicator/impl/neomedia/device/DeviceConfiguration.java b/src/net/java/sip/communicator/impl/neomedia/device/DeviceConfiguration.java index fb50a5383..adb873553 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/DeviceConfiguration.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/DeviceConfiguration.java @@ -26,7 +26,7 @@ * * @author Martin Andre * @author Emil Ivov - * @author Lubomir Marinov + * @author Lyubomir Marinov */ @SuppressWarnings("unchecked") public class DeviceConfiguration @@ -127,7 +127,11 @@ public class DeviceConfiguration /** * The name of the long property which determines the filter length - * in milliseconds to be used by the echo cancellation implementation. + * in milliseconds to be used by the echo cancellation implementation. The + * recommended filter length is approximately the third of the room + * reverberation time. For example, in a small room, reverberation time is + * in the order of 300 ms, so a filter length of 100 ms is a good choice + * (800 samples at 8000 Hz sampling rate). */ static final String PROP_AUDIO_ECHOCANCEL_FILTER_LENGTH_IN_MILLIS = "net.java.sip.communicator.impl.neomedia.echocancel.filterLengthInMillis"; @@ -135,10 +139,13 @@ public class DeviceConfiguration /** * The default value to be used for the * {@link #PROP_AUDIO_ECHOCANCEL_FILTER_LENGTH_IN_MILLIS} property when it - * does not have a value. + * does not have a value. The recommended filter length is approximately the + * third of the room reverberation time. For example, in a small room, + * reverberation time is in the order of 300 ms, so a filter length of 100 + * ms is a good choice (800 samples at 8000 Hz sampling rate). */ private static final long DEFAULT_AUDIO_ECHOCANCEL_FILTER_LENGTH_IN_MILLIS - = 256; + = 200; /** * The name of the boolean property which determines whether noise