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データが生成され、エンコードすることができます。RTPパケットとして送信するサンプルレートは8Kです。

私はこれを正しく行いましたか?

4

2 に答える 2

2

それをプログラムするためのより効率的な方法があり、それは実際にはハードコーディングされるべきではありません(音量、周波数、長さなど)が、それは大まかに正しいです。PIの代わりにM_PIを使用します。

注:count == j、waves = 0は役に立ちません(最初に+ =を=に変更)など。

于 2010-10-22T23:32:46.880 に答える
1

少し本題から外れますが、データを RTP として送信している場合、リモート ピアが RFC2833 をサポートしているかどうかを確認しましたか? その場合、RFC2833 準拠の RTP パケットを使用して DTMF ディジットを渡し、リンクの両端で多くの作業を回避できます。

マイク

于 2010-10-25T13:29:22.277 に答える