mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-19 08:37:54 +01:00

This CL adds proper multichannel support to the noise suppressor. To accomplish that in a safe way, a full refactoring of the noise suppressor code has been done. Due to floating point precision, the changes made are not entirely bitexact. They are, however, very close to being bitexact. As a safety measure, the former noise suppressor code is preserved and a kill-switch is added to allow revering to the legacy noise suppressor in case issues arise. Bug: webrtc:10895, b/143344262 Change-Id: I0b071011b23265ac12e6d4b3956499d122286657 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/158407 Commit-Queue: Per Åhgren <peah@webrtc.org> Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29646}
71 lines
2.1 KiB
C
71 lines
2.1 KiB
C
/*
|
|
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "modules/audio_processing/legacy_ns/noise_suppression.h"
|
|
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "common_audio/signal_processing/include/signal_processing_library.h"
|
|
#include "modules/audio_processing/legacy_ns/defines.h"
|
|
#include "modules/audio_processing/legacy_ns/ns_core.h"
|
|
|
|
NsHandle* WebRtcNs_Create() {
|
|
NoiseSuppressionC* self = malloc(sizeof(NoiseSuppressionC));
|
|
self->initFlag = 0;
|
|
return (NsHandle*)self;
|
|
}
|
|
|
|
void WebRtcNs_Free(NsHandle* NS_inst) {
|
|
free(NS_inst);
|
|
}
|
|
|
|
int WebRtcNs_Init(NsHandle* NS_inst, uint32_t fs) {
|
|
return WebRtcNs_InitCore((NoiseSuppressionC*)NS_inst, fs);
|
|
}
|
|
|
|
int WebRtcNs_set_policy(NsHandle* NS_inst, int mode) {
|
|
return WebRtcNs_set_policy_core((NoiseSuppressionC*)NS_inst, mode);
|
|
}
|
|
|
|
void WebRtcNs_Analyze(NsHandle* NS_inst, const float* spframe) {
|
|
WebRtcNs_AnalyzeCore((NoiseSuppressionC*)NS_inst, spframe);
|
|
}
|
|
|
|
void WebRtcNs_Process(NsHandle* NS_inst,
|
|
const float* const* spframe,
|
|
size_t num_bands,
|
|
float* const* outframe) {
|
|
WebRtcNs_ProcessCore((NoiseSuppressionC*)NS_inst, spframe, num_bands,
|
|
outframe);
|
|
}
|
|
|
|
float WebRtcNs_prior_speech_probability(NsHandle* handle) {
|
|
NoiseSuppressionC* self = (NoiseSuppressionC*)handle;
|
|
if (handle == NULL) {
|
|
return -1;
|
|
}
|
|
if (self->initFlag == 0) {
|
|
return -1;
|
|
}
|
|
return self->priorSpeechProb;
|
|
}
|
|
|
|
const float* WebRtcNs_noise_estimate(const NsHandle* handle) {
|
|
const NoiseSuppressionC* self = (const NoiseSuppressionC*)handle;
|
|
if (handle == NULL || self->initFlag == 0) {
|
|
return NULL;
|
|
}
|
|
return self->noise;
|
|
}
|
|
|
|
size_t WebRtcNs_num_freq() {
|
|
return HALF_ANAL_BLOCKL;
|
|
}
|