2010-10-16 19 views
1

Je le code ci-dessous pour envoyer en tant que paquet RTP audio certains chiffres DTMF:Génération DTMF à envoyer dans le paquet RTP

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; 
    } 

Je générer les chiffres programatically. Ce code ajoute essentiellement 2 sinus et applique la mise à l'échelle. Cela produira des données PCM 16 bits qui pourront ensuite être codées. La fréquence d'échantillonnage est de 8K à transmettre en tant que paquet RTP.

Est-ce que j'ai fait cela correctement?

Répondre

2

Il existe des moyens plus efficaces de le programmer, et il ne devrait pas être codé en dur (volume, fréquences, longueur, etc.), mais c'est à peu près correct. J'utiliserais M_PI au lieu de PI.

Note: nombre == j, vagues = 0 est inutile (+ = changer d'abord à =), etc.

1

légèrement hors-sujet, mais si vous envoyez les données comme RTP, ont alors vous vérifié si l'homologue distant prend en charge RFC2833? Si c'est le cas, vous pouvez transmettre les chiffres DTMF en utilisant des paquets RTP conformes à la RFC2833 et éviter beaucoup de travail aux deux extrémités du lien.

Mike