Skip to content
This repository was archived by the owner on Oct 25, 2024. It is now read-only.

Commit fb4d9fc

Browse files
daijhDuan, Xiande
authored andcommitted
Add multiple VAD methods:
_VAD_METHOD_ENERGY_ _VAD_METHOD_VOICE_DETECTION_ (default) _VAD_METHOD_JOINT_ENERGY_VOICE_DETECTION_ Signed-off-by: Dai, Jianhui <[email protected]> Change-Id: I2709324989624fa6aa1c069f153e10e7077c1035 Reviewed-on: https://git-ccr-1.devtools.intel.com/gerrit/86078 Reviewed-by: Duan, Xiande <[email protected]> Tested-by: Duan, Xiande <[email protected]>
1 parent efa2192 commit fb4d9fc

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
#include "webrtc/modules/audio_processing/include/audio_processing.h"
1616
#include "webrtc/system_wrappers/include/trace.h"
1717

18+
//#define _VAD_METHOD_ENERGY_
19+
#define _VAD_METHOD_VOICE_DETECTION_
20+
//#define _VAD_METHOD_JOINT_ENERGY_VOICE_DETECTION_
21+
1822
namespace webrtc {
1923
namespace {
2024

@@ -496,6 +500,9 @@ int32_t AudioConferenceMixerImpl::SetMixabilityStatus(
496500
// Note: The scratch buffer may only be updated in Process().
497501
rtc::CritScope cs(&_crit);
498502
_numMixedParticipants = numMixedParticipants;
503+
504+
if (!mixable) _apms.clear();
505+
499506
return 0;
500507
}
501508

@@ -1074,15 +1081,44 @@ void AudioConferenceMixerImpl::UpdateVadStatistics(AudioFrameList* mixList) {
10741081
iter != mixList->end();
10751082
++iter) {
10761083
if((*iter).frame->vad_activity_ == AudioFrame::kVadActive) {
1077-
if (_vadParticipantEnergyList.find((*iter).frame->id_) == _vadParticipantEnergyList.end()) {
1078-
_vadParticipantEnergyList[(*iter).frame->id_] = 0;
1084+
int32_t id = (*iter).frame->id_;
1085+
uint32_t energy = 0;
1086+
1087+
if (_vadParticipantEnergyList.find(id) == _vadParticipantEnergyList.end()) {
1088+
_vadParticipantEnergyList[id] = 0;
10791089
}
1080-
uint32_t energy = CalculateEnergy(*(*iter).frame);
1081-
_vadParticipantEnergyList[(*iter).frame->id_] += energy;
1090+
1091+
#if defined (_VAD_METHOD_ENERGY_)
1092+
energy = CalculateEnergy(*(*iter).frame);
1093+
#elif defined (_VAD_METHOD_VOICE_DETECTION_)
1094+
if (_apms.find(id) == _apms.end()) {
1095+
_apms[id].reset(AudioProcessing::Create());
1096+
_apms[id]->voice_detection()->Enable(true);
1097+
_apms[id]->voice_detection()->set_likelihood (VoiceDetection::kLowLikelihood);
1098+
}
1099+
_apms[id]->ProcessStream((*iter).frame);
1100+
1101+
bool hasVoice = _apms[id]->voice_detection ()->stream_has_voice();
1102+
energy = hasVoice * 100;
1103+
#elif defined (_VAD_METHOD_JOINT_ENERGY_VOICE_DETECTION_)
1104+
if (_apms.find(id) == _apms.end()) {
1105+
_apms[id].reset(AudioProcessing::Create());
1106+
_apms[id]->voice_detection()->Enable(true);
1107+
_apms[id]->voice_detection()->set_likelihood (VoiceDetection::kLowLikelihood);
1108+
}
1109+
_apms[id]->ProcessStream((*iter).frame);
1110+
1111+
bool hasVoice = _apms[id]->voice_detection ()->stream_has_voice();
1112+
energy = hasVoice ? CalculateEnergy(*(*iter).frame) : 0;
1113+
#else
1114+
#error "Invalid VAD method!"
1115+
#endif
1116+
1117+
_vadParticipantEnergyList[id] += energy;
10821118

10831119
WEBRTC_TRACE(kTraceStream, kTraceAudioMixerServer, _id,
10841120
"###VadStatistics id(%d), energy(%12u), allEnergy(%12ld)",
1085-
(*iter).frame->id_, energy, _vadParticipantEnergyList[(*iter).frame->id_]);
1121+
id, energy, _vadParticipantEnergyList[id]);
10861122
}
10871123
}
10881124
}

webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@ class AudioConferenceMixerImpl : public AudioConferenceMixer
205205
uint32_t _amountOf10MsRemainder;
206206
std::map<int32_t, int64_t> _vadParticipantEnergyList;
207207

208+
std::map<int32_t, std::unique_ptr<AudioProcessing>> _apms;
209+
208210
std::vector<ParticipantVadStatistics> _vadStatistics;
209211
};
210212
} // namespace webrtc

0 commit comments

Comments
 (0)