Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.11.2008, 14:04

Knistern nach Aufzeichnung von Mikrofon

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]
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

Anonymous

unregistriert

2

21.11.2008, 20:18

hmm..ob es am Buffer liegt könnte ich dir sagen wenn du mir etwas aufzeichnest. Es gibt da Mittel und Wege. Was denn Rest angeht muss ich passen. Frag auch mal hier nach. (eng)

http://www.kvraudio.com/forum/viewforum.php?f=33

cu

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

3

21.11.2008, 22:01

Hm, hast du dir das Resultat mal vor dem Übertragen angehört? Eventuell sinds Störungen im Kanal mit schlechter Fehlererkennung/korrektur.

Werbeanzeige