<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[WaveIn pegel]]></title><description><![CDATA[<p>Hallo,</p>
<p>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 &quot;Idle&quot;-Daten unterscheiden, oder? Was kann ich machen um diesen &quot;Idle&quot;-Zustand in dem niemand direkt ins Mikro spricht zu erkennen?</p>
<p>Das ist die callbackfunktion in der ich die waveIn buffer verarbeite:</p>
<pre><code class="language-cpp">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(&amp;msg, 0, 0, 0) == 1) {
		switch (msg.message) {
		case MM_WIM_DATA:
			if (((WAVEHDR *)msg.lParam)-&gt;dwBytesRecorded) {
				int bytesRecorded = ((WAVEHDR *)msg.lParam)-&gt;dwBytesRecorded;
				double *fftData = new double[((WAVEHDR *)msg.lParam)-&gt;dwBytesRecorded];
				for(int i=0; i&lt; ((WAVEHDR *)msg.lParam)-&gt;dwBytesRecorded; i++) {
					fftData[i] = ((WAVEHDR *)msg.lParam)-&gt;lpData[i];
				}

				// Weiterverarbeitung der Daten

				// .....

				// .....

				if (reference-&gt;getIsRecording()) {
					waveInAddBuffer(reference-&gt;getWaveInHandle(), (WAVEHDR *)msg.lParam, sizeof(WAVEHDR));
				} else {
				++(*reference-&gt;getDoneAll());
			}
			continue;
		case MM_WIM_OPEN:
			continue;
		case MM_WIM_CLOSE:
			break;
		}
	}

	return(0);
}
</code></pre>
<p>Ich hoffe hier hat jemand eine Idee <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Viele Grüße<br />
Staati</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209154/wavein-pegel</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 13:36:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209154.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Mar 2008 12:15:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to WaveIn pegel on Thu, 27 Mar 2008 12:15:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>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 &quot;Idle&quot;-Daten unterscheiden, oder? Was kann ich machen um diesen &quot;Idle&quot;-Zustand in dem niemand direkt ins Mikro spricht zu erkennen?</p>
<p>Das ist die callbackfunktion in der ich die waveIn buffer verarbeite:</p>
<pre><code class="language-cpp">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(&amp;msg, 0, 0, 0) == 1) {
		switch (msg.message) {
		case MM_WIM_DATA:
			if (((WAVEHDR *)msg.lParam)-&gt;dwBytesRecorded) {
				int bytesRecorded = ((WAVEHDR *)msg.lParam)-&gt;dwBytesRecorded;
				double *fftData = new double[((WAVEHDR *)msg.lParam)-&gt;dwBytesRecorded];
				for(int i=0; i&lt; ((WAVEHDR *)msg.lParam)-&gt;dwBytesRecorded; i++) {
					fftData[i] = ((WAVEHDR *)msg.lParam)-&gt;lpData[i];
				}

				// Weiterverarbeitung der Daten

				// .....

				// .....

				if (reference-&gt;getIsRecording()) {
					waveInAddBuffer(reference-&gt;getWaveInHandle(), (WAVEHDR *)msg.lParam, sizeof(WAVEHDR));
				} else {
				++(*reference-&gt;getDoneAll());
			}
			continue;
		case MM_WIM_OPEN:
			continue;
		case MM_WIM_CLOSE:
			break;
		}
	}

	return(0);
}
</code></pre>
<p>Ich hoffe hier hat jemand eine Idee <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Viele Grüße<br />
Staati</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481306</guid><dc:creator><![CDATA[Staati]]></dc:creator><pubDate>Thu, 27 Mar 2008 12:15:10 GMT</pubDate></item></channel></rss>