1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1150a4d9fd6f704bb113915cb2f773818af5628eeapbos@webrtc.org#ifndef WEBRTC_VOICE_ENGINE_DTMF_INBAND_H_ 1250a4d9fd6f704bb113915cb2f773818af5628eeapbos@webrtc.org#define WEBRTC_VOICE_ENGINE_DTMF_INBAND_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/typedefs.h" 15471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/voice_engine_defines.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CriticalSectionWrapper; 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass DtmfInband 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 23ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org DtmfInband(int32_t id); 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~DtmfInband(); 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void Init(); 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 29ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int SetSampleRate(uint16_t frequency); 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 3154f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int GetSampleRate(uint16_t& frequency); 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 33ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int AddTone(uint8_t eventCode, 3454f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t lengthMs, 3554f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t attenuationDb); 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int ResetTone(); 38ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int StartTone(uint8_t eventCode, int32_t attenuationDb); 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int StopTone(); 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool IsAddingTone(); 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 4454f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int Get10msTone(int16_t output[320], uint16_t& outputSizeInSamples); 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 4654f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org uint32_t DelaySinceLastTone() const; 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void UpdateDelaySinceLastTone(); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void ReInit(); 5254f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int16_t DtmfFix_generate(int16_t* decoded, 53ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int16_t value, 54ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int16_t volume, 55ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int16_t frameLen, 56ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int16_t fs); 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum {kDtmfFrameSizeMs = 10}; 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum {kDtmfAmpHigh = 32768}; 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum {kDtmfAmpLow = 23171}; // 3 dB lower than the high frequency 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 63ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int16_t DtmfFix_generateSignal(int16_t a1_times2, 64ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int16_t a2_times2, 65ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int16_t volume, 6654f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int16_t* signal, 67ca7a9a2696d2f73f543241093c4faeb4c608678cpbos@webrtc.org int16_t length); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionWrapper& _critSect; 7154f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t _id; 7254f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org uint16_t _outputFrequencyHz; // {8000, 16000, 32000} 7354f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int16_t _oldOutputLow[2]; // Data needed for oscillator model 7454f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int16_t _oldOutputHigh[2]; // Data needed for oscillator model 7554f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int16_t _frameLengthSamples; // {80, 160, 320} 7654f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t _remainingSamples; 7754f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int16_t _eventCode; // [0, 15] 7854f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int16_t _attenuationDb; // [0, 36] 7954f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org int32_t _lengthMs; 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _reinit; // 'true' if the oscillator should be reinit for next event 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _playing; 8254f03bc96c30337a3a97af7262cfb5148063b162pbos@webrtc.org uint32_t _delaySinceLastToneMS; // time since last generated tone [ms] 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 853b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 8750a4d9fd6f704bb113915cb2f773818af5628eeapbos@webrtc.org#endif // #ifndef WEBRTC_VOICE_ENGINE_DTMF_INBAND_H_ 88