webrtc/modules/audio_processing/legacy_noise_suppression.h
Per Åhgren 87a7b82520 Refactoring of the noise suppressor and adding true multichannel support
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}
2019-10-29 23:23:38 +00:00

57 lines
1.9 KiB
C++

/*
* Copyright (c) 2019 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.
*/
#ifndef MODULES_AUDIO_PROCESSING_LEGACY_NOISE_SUPPRESSION_H_
#define MODULES_AUDIO_PROCESSING_LEGACY_NOISE_SUPPRESSION_H_
#include <memory>
#include <vector>
namespace webrtc {
class AudioBuffer;
// The noise suppression (NS) component attempts to remove noise while
// retaining speech. Recommended to be enabled on the client-side.
class NoiseSuppression {
public:
// Determines the aggressiveness of the suppression. Increasing the level
// will reduce the noise level at the expense of a higher speech distortion.
enum class Level { kLow, kModerate, kHigh, kVeryHigh };
NoiseSuppression(size_t channels, int sample_rate_hz, Level level);
~NoiseSuppression();
NoiseSuppression(NoiseSuppression&) = delete;
NoiseSuppression& operator=(NoiseSuppression&) = delete;
void AnalyzeCaptureAudio(AudioBuffer* audio);
void ProcessCaptureAudio(AudioBuffer* audio);
// LEGACY: Returns the internally computed prior speech probability of current
// frame averaged over output channels. This is not supported in fixed point,
// for which |kUnsupportedFunctionError| is returned.
float speech_probability() const;
// LEGACY: Returns the size of the noise vector returned by NoiseEstimate().
static size_t num_noise_bins();
// LEGACY: Returns the noise estimate per frequency bin averaged over all
// channels.
std::vector<float> NoiseEstimate();
private:
class Suppressor;
std::vector<std::unique_ptr<Suppressor>> suppressors_;
};
} // namespace webrtc
#endif // MODULES_AUDIO_PROCESSING_LEGACY_NOISE_SUPPRESSION_H_