From b33a19603aa2522243b613c328da08becd423538 Mon Sep 17 00:00:00 2001 From: Jaechul Lee Date: Thu, 9 Feb 2023 15:16:18 +0900 Subject: [PATCH] Add noise suppression functionality [Version] 0.5.54 [Issue Type] New feature Change-Id: I635096c4e1d7bc573008dafbf2dcd074351bc09b Signed-off-by: Jaechul Lee --- include/CAudioInfo.h | 3 +++ packaging/capi-media-audio-io.spec | 2 +- src/cpp/CAudioIO.cpp | 8 ++++++++ src/cpp/CAudioInfo.cpp | 14 ++++++++++++-- src/cpp/CPulseAudioClient.cpp | 13 +++++++++---- 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/include/CAudioInfo.h b/include/CAudioInfo.h index c0215ab..4800cad 100644 --- a/include/CAudioInfo.h +++ b/include/CAudioInfo.h @@ -141,6 +141,8 @@ namespace tizen_media_audio { int getSampleSize() noexcept; void bindEchoCancelReferenceDeviceId(int id) noexcept; int getEchoCancelReferenceDeviceId() noexcept; + void setNoiseSuppression(bool enable) noexcept; + bool getNoiseSuppression() noexcept; /* Setter & Getter Utilities */ const char* getConvertedStreamType(); @@ -197,6 +199,7 @@ namespace tizen_media_audio { EAudioType __mAudioType; int __mAudioIndex; int __mReferenceDeviceId; + bool __mNoiseSuppression; }; diff --git a/packaging/capi-media-audio-io.spec b/packaging/capi-media-audio-io.spec index 9e5fb3f..42ed89c 100644 --- a/packaging/capi-media-audio-io.spec +++ b/packaging/capi-media-audio-io.spec @@ -1,6 +1,6 @@ Name: capi-media-audio-io Summary: An Audio Input & Audio Output library in Tizen Native API -Version: 0.5.53 +Version: 0.5.54 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/cpp/CAudioIO.cpp b/src/cpp/CAudioIO.cpp index 0907dcf..0131b4e 100644 --- a/src/cpp/CAudioIO.cpp +++ b/src/cpp/CAudioIO.cpp @@ -226,11 +226,19 @@ void CAudioIO::setStreamInfo(sound_stream_info_h stream_info) { if (mDirection == CAudioInfo::EAudioDirection::AUDIO_DIRECTION_IN) { int device_id; + bool enabled; if ((errorCode = sound_manager_get_echo_cancel_reference_device(stream_info, &device_id)) != SOUND_MANAGER_ERROR_NONE) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Can't get reference device [ret:%d]", errorCode); //LCOV_EXCL_LINE if (device_id != SOUND_MANAGER_STREAM_NO_REFERENCE_DEVICE) getAudioInfo().bindEchoCancelReferenceDeviceId(device_id); + + if ((errorCode = sound_manager_get_noise_suppression(stream_info, &enabled)) != SOUND_MANAGER_ERROR_NONE) + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Can't get noise suppression status [ret:%d]", errorCode); //LCOV_EXCL_LINE + + if (enabled) + getAudioInfo().setNoiseSuppression(enabled); + } } diff --git a/src/cpp/CAudioInfo.cpp b/src/cpp/CAudioInfo.cpp index 3c0e19b..1fb506b 100644 --- a/src/cpp/CAudioInfo.cpp +++ b/src/cpp/CAudioInfo.cpp @@ -33,7 +33,8 @@ CAudioInfo::CAudioInfo() : __mSampleType(ESampleType::SAMPLE_TYPE_U8), __mAudioType(EAudioType::AUDIO_IN_TYPE_MEDIA), __mAudioIndex(-1), - __mReferenceDeviceId(0) { + __mReferenceDeviceId(0), + __mNoiseSuppression(false) { } CAudioInfo::CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sampleType, EAudioType audioType, int audioIndex) : @@ -42,7 +43,8 @@ CAudioInfo::CAudioInfo(unsigned int sampleRate, EChannel channel, ESampleType sa __mSampleType(sampleType), __mAudioType(audioType), __mAudioIndex(audioIndex), - __mReferenceDeviceId(0) { + __mReferenceDeviceId(0), + __mNoiseSuppression(false) { // Check to invalid AudioInfo if (sampleRate < CAudioInfo::MIN_SYSTEM_SAMPLERATE || sampleRate > CAudioInfo::MAX_SYSTEM_SAMPLERATE) @@ -131,6 +133,14 @@ int CAudioInfo::getEchoCancelReferenceDeviceId() noexcept { return __mReferenceDeviceId; } +void CAudioInfo::setNoiseSuppression(bool enable) noexcept { + __mNoiseSuppression = enable; +} + +bool CAudioInfo::getNoiseSuppression() noexcept { + return __mNoiseSuppression; +} + const char* CAudioInfo::getConvertedStreamType() { if (__mAudioType < CAudioInfo::EAudioType::AUDIO_IN_TYPE_MEDIA || __mAudioType >= CAudioInfo::EAudioType::AUDIO_TYPE_MAX) diff --git a/src/cpp/CPulseAudioClient.cpp b/src/cpp/CPulseAudioClient.cpp index f57c592..e222b64 100644 --- a/src/cpp/CPulseAudioClient.cpp +++ b/src/cpp/CPulseAudioClient.cpp @@ -402,10 +402,15 @@ void CPulseAudioClient::initialize() { if (index >= 0) pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_PARENT_ID, "%u", (unsigned int) index); - int reference_id = __mSpec.getAudioInfo().getEchoCancelReferenceDeviceId(); - if (reference_id > 0) { - pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_ECHO_CANCEL_METHOD, "%s", ec_method); - pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_ECHO_CANCEL_REFERENCE_DEVICE, "%d", reference_id); + if (__mDirection == EStreamDirection::STREAM_DIRECTION_RECORD) { + int reference_id = __mSpec.getAudioInfo().getEchoCancelReferenceDeviceId(); + if (reference_id > 0) { + pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_ECHO_CANCEL_METHOD, "%s", ec_method); + pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_ECHO_CANCEL_REFERENCE_DEVICE, "%d", reference_id); + } + + if (__mSpec.getAudioInfo().getNoiseSuppression()) + pa_proplist_setf(__mpPropList, PA_PROP_MEDIA_NOISE_SUPPRESSION_ENABLE, "%d", true); } // Adds latency on proplist for delivery to PULSEAUDIO -- 2.7.4