1/* 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#include "webrtc/common_audio/vad/include/vad.h" 12 13#include "webrtc/base/checks.h" 14 15namespace webrtc { 16 17namespace { 18 19class VadImpl final : public Vad { 20 public: 21 explicit VadImpl(Aggressiveness aggressiveness) 22 : handle_(nullptr), aggressiveness_(aggressiveness) { 23 Reset(); 24 } 25 26 ~VadImpl() override { WebRtcVad_Free(handle_); } 27 28 Activity VoiceActivity(const int16_t* audio, 29 size_t num_samples, 30 int sample_rate_hz) override { 31 int ret = WebRtcVad_Process(handle_, sample_rate_hz, audio, num_samples); 32 switch (ret) { 33 case 0: 34 return kPassive; 35 case 1: 36 return kActive; 37 default: 38 RTC_DCHECK(false) << "WebRtcVad_Process returned an error."; 39 return kError; 40 } 41 } 42 43 void Reset() override { 44 if (handle_) 45 WebRtcVad_Free(handle_); 46 handle_ = WebRtcVad_Create(); 47 RTC_CHECK(handle_); 48 RTC_CHECK_EQ(WebRtcVad_Init(handle_), 0); 49 RTC_CHECK_EQ(WebRtcVad_set_mode(handle_, aggressiveness_), 0); 50 } 51 52 private: 53 VadInst* handle_; 54 Aggressiveness aggressiveness_; 55}; 56 57} // namespace 58 59rtc::scoped_ptr<Vad> CreateVad(Vad::Aggressiveness aggressiveness) { 60 return rtc::scoped_ptr<Vad>(new VadImpl(aggressiveness)); 61} 62 63} // namespace webrtc 64