Hi an alle,
ich zeichne Sprache vom Mikrofon auf.
Diese wird in einem Ringbuffer festgehalten.
Ab einer bestimmten Größe wird ein Teilbuffer an
eine Methode weitergeleitet.
Dort wird da ganze runtergesampelt von 16000 auf 8000hz.
Vorher läuft ein FIR Filter darüber.
Das ganze wird dann uLaw encodiert und via
RTP an ein IP Telephone gesendet.
Die Ausgabe am Telefon beinhaltet aber ein sehr störendes Knistern.
Der FIR Filter scheint in Ordnung zu sein.
Könnte es am Buffer oder am Offset liegen?
Hier mal der Code, der das ganze an die o.g. Methode weiterleitet.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
void CDX9Capture::on_Notification()
{
DWORD capturePos, readPos;
m_captureBuffer->GetCurrentPosition(&capturePos, &readPos);
DWORD diff;
readPos >= m_NextOffset ?
diff = readPos - m_NextOffset :
diff = readPos + m_BufferSize - m_NextOffset;
if(diff < m_NotifySize) return;
//Lock the capture Buffer
VOID* lockedBufferPointer = NULL;
DWORD lockedBufferSize;
m_captureBuffer->Lock(m_NextOffset, m_NotifySize, &lockedBufferPointer, &lockedBufferSize, NULL, NULL, 0L);
//Put data to Output Sink
const int SIZE = lockedBufferSize/2;
//Hier wird der Teilbuffer zur Weiterbearbeitung bereitgemacht.
pSink->on_NewAudioDataCaptured((short*)lockedBufferPointer, lockedBufferSize);
//Unlock the capture Buffer
m_captureBuffer->Unlock(lockedBufferPointer, lockedBufferSize, NULL, 0);
//Move the capture offset along
m_NextOffset += lockedBufferSize;
m_NextOffset %= m_BufferSize;
}
|
Ich weiß ansonsten nicht mehr woher das Knistern kommt. [/cpp]