Генерация тона DTMF для отправки в RTP-пакете - PullRequest
1 голос
/ 17 октября 2010

У меня есть следующий код для отправки в виде аудио 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, которые затем могут быть закодированы. Частота дискретизации составляет 8 КБ для передачи в виде пакета RTP.

Правильно ли я это сделал?

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

Есть более эффективные способы его программирования, и он действительно не должен быть жестко запрограммирован (громкость, частота, длина и т. Д.), Но это примерно правильно.Я бы использовал M_PI вместо PI.

Примечание: count == j, waves = 0 бесполезен (сначала измените + = на =) и т. Д.

1 голос
/ 25 октября 2010

Немного не по теме, но если вы отправляете данные как RTP, то проверили ли вы, поддерживает ли удаленный узел RFC2833?Если это так, вы можете передавать цифры DTMF, используя RTP-пакеты, совместимые с RFC2833, и избегать большой работы на обоих концах канала.

...