/* * Copyright (c) 2011 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 WEBRTC_VOICE_ENGINE_DTMF_INBAND_H_ #define WEBRTC_VOICE_ENGINE_DTMF_INBAND_H_ #include "webrtc/typedefs.h" #include "webrtc/voice_engine/voice_engine_defines.h" namespace webrtc { class CriticalSectionWrapper; class DtmfInband { public: DtmfInband(int32_t id); virtual ~DtmfInband(); void Init(); int SetSampleRate(uint16_t frequency); int GetSampleRate(uint16_t& frequency); int AddTone(uint8_t eventCode, int32_t lengthMs, int32_t attenuationDb); int ResetTone(); int StartTone(uint8_t eventCode, int32_t attenuationDb); int StopTone(); bool IsAddingTone(); int Get10msTone(int16_t output[320], uint16_t& outputSizeInSamples); uint32_t DelaySinceLastTone() const; void UpdateDelaySinceLastTone(); private: void ReInit(); int16_t DtmfFix_generate(int16_t* decoded, int16_t value, int16_t volume, int16_t frameLen, int16_t fs); private: enum {kDtmfFrameSizeMs = 10}; enum {kDtmfAmpHigh = 32768}; enum {kDtmfAmpLow = 23171}; // 3 dB lower than the high frequency int16_t DtmfFix_generateSignal(int16_t a1_times2, int16_t a2_times2, int16_t volume, int16_t* signal, int16_t length); private: CriticalSectionWrapper& _critSect; int32_t _id; uint16_t _outputFrequencyHz; // {8000, 16000, 32000} int16_t _oldOutputLow[2]; // Data needed for oscillator model int16_t _oldOutputHigh[2]; // Data needed for oscillator model int16_t _frameLengthSamples; // {80, 160, 320} int32_t _remainingSamples; int16_t _eventCode; // [0, 15] int16_t _attenuationDb; // [0, 36] int32_t _lengthMs; bool _reinit; // 'true' if the oscillator should be reinit for next event bool _playing; uint32_t _delaySinceLastToneMS; // time since last generated tone [ms] }; } // namespace webrtc #endif // #ifndef WEBRTC_VOICE_ENGINE_DTMF_INBAND_H_