1

我有以下代码作为音频 RTP 数据包发送一些 DTMF 数字:

 int count=0
 for(int j = 0; j < samples; j++) 
  {
      waves = 0;
      // dtmf tone 1

      waves += sin( ((PI * 2.0f / 8000) * 697.0f) * count );
      waves += sin( ((PI * 2.0f / 8000) * 1209.0f) * count);
      waves *= 8191.0f;   //amplitude   
      ++count;
      values[j] = (SInt16)waves;  
  }

我正在以编程方式生成数字。这段代码基本上加了 2 个正弦波并应用缩放。这将产生 16 位 PCM 数据,然后可以对其进行编码。采样率为 8K 以作为 RTP 数据包传输。

我做对了吗?

4

2 回答 2

2

有更有效的编程方法,它真的不应该被硬编码(音量、频率、长度等),但这是大致正确的。我会使用 M_PI 而不是 PI。

注意:count == j,waves = 0 没用(先改+= 为=),等等。

于 2010-10-22T23:32:46.880 回答
1

有点跑题了,但是如果您将数据作为 RTP 发送出去,那么您是否检查过远程对等方是否支持 RFC2833?如果是这样,您可以使用符合 RFC2833 的 RTP 数据包传递 DTMF 数字,并避免链路两端的大量工作。

麦克风

于 2010-10-25T13:29:22.277 回答