⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtmf_8h-source.html

📁 pwlib开发文档
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>dtmf.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center><hr><h1>dtmf.h</h1><a href="dtmf_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*</span>00002 <span class="comment"> * ----------------------------------------------------------------------------</span>00003 <span class="comment"> * "THE BEER-WARE LICENSE" (Revision 42):</span>00004 <span class="comment"> * &lt;phk@FreeBSD.org&gt; wrote this file.  As long as you retain this notice you</span>00005 <span class="comment"> * can do whatever you want with this stuff. If we meet some day, and you think</span>00006 <span class="comment"> * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp</span>00007 <span class="comment"> * ----------------------------------------------------------------------------</span>00008 <span class="comment"> *</span>00009 <span class="comment"> * Extract DTMF signals from 16 bit PCM audio</span>00010 <span class="comment"> *</span>00011 <span class="comment"> * Originally written by Poul-Henning Kamp &lt;phk@freebsd.org&gt;</span>00012 <span class="comment"> * Made into a C++ class by Roger Hardiman &lt;roger@freebsd.org&gt;, January 2002</span>00013 <span class="comment"> *</span>00014 <span class="comment"> * $Log: dtmf.h,v $</span>00015 <span class="comment"> * Revision 1.5  2004/09/09 23:50:48  csoutheren</span>00016 <span class="comment"> * Fixed problem with duplicate definition of sinetab causing problems</span>00017 <span class="comment"> *</span>00018 <span class="comment"> * Revision 1.4  2004/09/09 05:23:37  dereksmithies</span>00019 <span class="comment"> * Add utility function to report on dtmf characters used.</span>00020 <span class="comment"> *</span>00021 <span class="comment"> * Revision 1.3  2004/09/09 04:00:00  csoutheren</span>00022 <span class="comment"> * Added DTMF encoding functions</span>00023 <span class="comment"> *</span>00024 <span class="comment"> * Revision 1.2  2002/09/16 01:08:59  robertj</span>00025 <span class="comment"> * Added #define so can select if #pragma interface/implementation is used on</span>00026 <span class="comment"> *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.</span>00027 <span class="comment"> *</span>00028 <span class="comment"> * Revision 1.1  2002/01/23 11:43:26  rogerh</span>00029 <span class="comment"> * Add DTMF Decoder class. This can be passed PCM audio data</span>00030 <span class="comment"> * (at 16 bit, 8 KHz) and returns any DTMF codes detected.</span>00031 <span class="comment"> * Tested with NetMeeting sending DTMF over a G.711 stream.</span>00032 <span class="comment"> *</span>00033 <span class="comment"> */</span>00034  00035 <span class="preprocessor">#ifndef _DTMF_H</span>00036 <span class="preprocessor"></span><span class="preprocessor">#define _DTMF_H</span>00037 <span class="preprocessor"></span>00038 <span class="preprocessor">#ifdef P_USE_PRAGMA</span>00039 <span class="preprocessor"></span><span class="preprocessor">#pragma interface</span>00040 <span class="preprocessor"></span><span class="preprocessor">#endif</span>00041 <span class="preprocessor"></span><a name="l00042"></a><a class="code" href="classPDTMFDecoder.html">00042</a> <span class="keyword">class </span><a class="code" href="classPDTMFDecoder.html">PDTMFDecoder</a> : <span class="keyword">public</span> <a class="code" href="classPObject.html">PObject</a>00043 {00044   <a class="code" href="object_8h.html#a27">PCLASSINFO</a>(<a class="code" href="classPDTMFDecoder.html">PDTMFDecoder</a>, <a class="code" href="classPObject.html">PObject</a>)00045 00046   <span class="keyword">public</span>:00047     <a class="code" href="classPDTMFDecoder.html#a0">PDTMFDecoder</a>();00048     <a class="code" href="classPString.html">PString</a> <a class="code" href="classPDTMFDecoder.html#a1">Decode</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *buf, PINDEX bytes);00049 00050   <span class="keyword">protected</span>:00051     <span class="comment">// key lookup table (initialised once)</span><a name="l00052"></a><a class="code" href="classPDTMFDecoder.html#n0">00052</a>     <span class="keywordtype">char</span> <a class="code" href="classPDTMFDecoder.html#n0">key</a>[256];00053 00054     <span class="comment">// frequency table (initialised once)</span><a name="l00055"></a><a class="code" href="classPDTMFDecoder.html#n1">00055</a>     <span class="keywordtype">int</span> <a class="code" href="classPDTMFDecoder.html#n1">p1</a>[8];00056 00057     <span class="comment">// variables to be retained on each cycle of the decode function</span><a name="l00058"></a><a class="code" href="classPDTMFDecoder.html#n4">00058</a>     <span class="keywordtype">int</span> <a class="code" href="classPDTMFDecoder.html#n2">h</a>[8], <a class="code" href="classPDTMFDecoder.html#n3">k</a>[8], <a class="code" href="classPDTMFDecoder.html#n4">y</a>[8];<a name="l00059"></a><a class="code" href="classPDTMFDecoder.html#n6">00059</a>     <span class="keywordtype">int</span> <a class="code" href="classPDTMFDecoder.html#n5">nn</a>, <a class="code" href="classPDTMFDecoder.html#n6">so</a>, <a class="code" href="classPDTMFDecoder.html#n7">ia</a>;00060 };00061 <a name="l00067"></a><a class="code" href="classPDTMFEncoder.html">00067</a> <span class="keyword">class </span><a class="code" href="classPDTMFEncoder.html">PDTMFEncoder</a> : <span class="keyword">public</span> <a class="code" href="classPBYTEArray.html">PBYTEArray</a>00068 {00069   <a class="code" href="object_8h.html#a27">PCLASSINFO</a>(<a class="code" href="classPDTMFEncoder.html">PDTMFEncoder</a>, <a class="code" href="classPBYTEArray.html">PBYTEArray</a>)00070 00071   <span class="keyword">public</span>:00072     <span class="keyword">enum</span> { <a class="code" href="classPDTMFEncoder.html#s1s0">DefaultToneLen</a> = 100 };00073 <a name="l00077"></a><a class="code" href="classPDTMFEncoder.html#a0">00077</a>     <span class="keyword">inline</span> <a class="code" href="classPDTMFEncoder.html#a0">PDTMFEncoder</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * dtmf = NULL, <span class="keywordtype">unsigned</span> len = <a class="code" href="classPDTMFEncoder.html#s1s0">DefaultToneLen</a>)00078     { <span class="keywordflow">if</span> (dtmf != NULL) <a class="code" href="classPDTMFEncoder.html#a1">AddTone</a>(dtmf, len); }00079 00080 00084     <span class="keywordtype">void</span> <a class="code" href="classPDTMFEncoder.html#a1">AddTone</a>(<span class="keywordtype">char</span> ch, <span class="keywordtype">unsigned</span> len = <a class="code" href="classPDTMFEncoder.html#s1s0">DefaultToneLen</a>);00085 00089     <span class="keywordtype">void</span> <a class="code" href="classPDTMFEncoder.html#a1">AddTone</a>(<span class="keyword">const</span> <a class="code" href="classPString.html">PString</a> &amp; str, <span class="keywordtype">unsigned</span> len = <a class="code" href="classPDTMFEncoder.html#s1s0">DefaultToneLen</a>);00090 00095     <span class="keywordtype">void</span> <a class="code" href="classPDTMFEncoder.html#a1">AddTone</a>(<span class="keywordtype">double</span> freq1, <span class="keywordtype">double</span> freq2 = 0, <span class="keywordtype">unsigned</span> len = <a class="code" href="classPDTMFEncoder.html#s1s0">DefaultToneLen</a>);00096 <a name="l00101"></a><a class="code" href="classPDTMFEncoder.html#a4">00101</a>     <span class="keywordtype">void</span> <a class="code" href="classPDTMFEncoder.html#a4">GenerateRingBackTone</a>()00102     {00103       <a class="code" href="classPDTMFEncoder.html#a1">AddTone</a>(440, 480, 2000);00104       <a class="code" href="classPDTMFEncoder.html#a1">AddTone</a>(0,   0,   4000);00105     }00106 <a name="l00111"></a><a class="code" href="classPDTMFEncoder.html#a5">00111</a>     <span class="keywordtype">void</span> <a class="code" href="classPDTMFEncoder.html#a5">GenerateDialTone</a>()00112     {00113       <a class="code" href="classPDTMFEncoder.html#a1">AddTone</a>(350, 440, 1000);00114     }00115 <a name="l00120"></a><a class="code" href="classPDTMFEncoder.html#a6">00120</a>     <span class="keywordtype">void</span> <a class="code" href="classPDTMFEncoder.html#a6">GenerateBusyTone</a>()00121     {00122       <a class="code" href="classPDTMFEncoder.html#a1">AddTone</a>(480, 620, 500);00123       <a class="code" href="classPDTMFEncoder.html#a1">AddTone</a>(0,   0,   500);00124     }00125 00131     <span class="keywordtype">char</span> <a class="code" href="classPDTMFEncoder.html#a7">DtmfChar</a>(PINDEX i);00132 00133   <span class="keyword">protected</span>:00134     <span class="keyword">static</span> <a class="code" href="classPMutex.html">PMutex</a> &amp; <a class="code" href="classPDTMFEncoder.html#e0">GetMutex</a>();<a name="l00135"></a><a class="code" href="classPDTMFEncoder.html#q0">00135</a>     <span class="keyword">static</span> BOOL <a class="code" href="classPDTMFEncoder.html#q0">sineTabInit</a>;00136     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPDTMFEncoder.html#e1">MakeSineTable</a>();<a name="l00137"></a><a class="code" href="classPDTMFEncoder.html#e2">00137</a>     <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> <a class="code" href="classPDTMFEncoder.html#e2">sine</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ptr)00138     { <span class="keywordflow">return</span> <a class="code" href="classPDTMFEncoder.html#q1">sinetab</a>[ptr &gt;&gt; (32-11)]; }<a name="l00139"></a><a class="code" href="classPDTMFEncoder.html#q1">00139</a>     <span class="keyword">static</span> <span class="keywordtype">double</span> <a class="code" href="classPDTMFEncoder.html#q1">sinetab</a>[1 &lt;&lt; 11];00140 };00141 00142 <span class="preprocessor">#endif </span><span class="comment">/* _DTMF_H */</span></pre></div><hr><address style="align: right;"><small>Generated on Wed Sep 29 22:44:10 2004 for PWLib by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.18 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -