Hallo an alle,
ich habe einen VOIP Client entwickelt und tu mich gerade schwer mit der
Implentierung der Sprache.
Ich zeichne die Sprache via Microphone auf und zwar unter DirectSound.
Dann gebe ich die ungefilterten Rohdaten an einen FIR Filter
1 | short* pTmpBuffer = (short*)pBuffer; //pBuffer = unbehandelte Rohdaten
|
2 | short* pTmpBuffer2 = new short[160];
|
3 | for(int i = 0; i < (size - m_nCoeffSize); i++)
|
4 | {
|
5 | pTmpBuffer[i] = 0;
|
6 | for(int y = 0; y < m_nCoeffSize; y++)
|
7 | {
|
8 | pTmpBuffer[i] += (pBuffer[y + i] * fCoeffs[y]);
|
9 | }
|
10 | }
|
Danach sample ich das ganze runter von 16kHz auf 8kHz indem ich jeden
2ten Sample einfach wegwerfe.
1 | pTmpBuffer2[0] = 0;
|
2 | int x = 0;
|
3 | for(int i = 0; i < size; i++)
|
4 | {
|
5 |
|
6 | if((i+1)%2 == 0)
|
7 | {
|
8 | pTmpBuffer2[x] = pTmpBuffer[i];
|
9 | x++;
|
10 | }
|
11 | }
|
Und encodiere das ganze dann noch mal ins uLaw Format
Am anderen Ende bekomme ich dann die Sprache leicht verzerrt mit einem
störendem Knacken im Hintergrund.
Ich weiß gerade gar nicht mehr weiter. Kann mir evtl jemand helfen?
Die Filterkoeffizienten hole ich mir über dieses Programm
http://www.winfilter.20m.com
Gruß
Karsten