WaveIn pegel



  • Hallo,

    ich arbeite gerade mit den WaveIn funktionen um Töne über das Mikro einzulesen und asuzuwerten. Ich stoße nun auf das Problem, das ich nicht unterscheiden kann, ob der Benutzer etwas ins Mikro spricht oder ob es sich um Hintergrundrauschen / geräuche handelt, da der Pegel der Daten die ich über die WaveIn Funktion erhalte einen zu kleinen Pegel haben (-127 bis 128). Die WAVEHDR Struktur speichert die eingelesenen Daten als LPSTR wo dann auch der gemessene Wertebereich Sinn macht. Nach meinem Verständnis sollte sich der Pegel der Daten die gemessen werden wenn man direkt ins Mikro spricht stark von den "Idle"-Daten unterscheiden, oder? Was kann ich machen um diesen "Idle"-Zustand in dem niemand direkt ins Mikro spricht zu erkennen?

    Das ist die callbackfunktion in der ich die waveIn buffer verarbeite:

    DWORD WINAPI CRecorder::waveInProc(LPVOID arg) {
    	MSG		msg;
    	CRecorder *reference = (CRecorder *)arg;
    	/* Wait for a message sent to me by the audio driver */
    	while (GetMessage(&msg, 0, 0, 0) == 1) {
    		switch (msg.message) {
    		case MM_WIM_DATA:
    			if (((WAVEHDR *)msg.lParam)->dwBytesRecorded) {
    				int bytesRecorded = ((WAVEHDR *)msg.lParam)->dwBytesRecorded;
    				double *fftData = new double[((WAVEHDR *)msg.lParam)->dwBytesRecorded];
    				for(int i=0; i< ((WAVEHDR *)msg.lParam)->dwBytesRecorded; i++) {
    					fftData[i] = ((WAVEHDR *)msg.lParam)->lpData[i];
    				}
    
    				// Weiterverarbeitung der Daten
    
    				// .....
    
    				// .....
    
    				if (reference->getIsRecording()) {
    					waveInAddBuffer(reference->getWaveInHandle(), (WAVEHDR *)msg.lParam, sizeof(WAVEHDR));
    				} else {
    				++(*reference->getDoneAll());
    			}
    			continue;
    		case MM_WIM_OPEN:
    			continue;
    		case MM_WIM_CLOSE:
    			break;
    		}
    	}
    
    	return(0);
    }
    

    Ich hoffe hier hat jemand eine Idee 🙂
    Viele Grüße
    Staati


Anmelden zum Antworten