<?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[schließen audio device]]></title><description><![CDATA[<p>hallo, habe eine mfc anwendung geschrieben, die gleichzeitig von line-in sound liest und diesen dann auf line-out ausgibt. (bisher ohne threads)</p>
<p>nach drücken des ersten buttons mache ich folgendes:</p>
<pre><code>pWaveHdr1=(WAVEHDR*) malloc(sizeof(WAVEHDR));
pWaveHdr2=(WAVEHDR*) malloc(sizeof(WAVEHDR));
pWaveHdr3=(WAVEHDR*) malloc(sizeof(WAVEHDR));

//Allocate memory for the 3 transfer buffers
pBuffer1 = (short *) malloc(INP_BUFFER_SIZE*sizeof(short));
pBuffer2 = (short *) malloc(INP_BUFFER_SIZE*sizeof(short));
pBuffer3 = (short *) malloc(INP_BUFFER_SIZE*sizeof(short));

waveform.wFormatTag = WAVE_FORMAT_PCM;
waveform.nChannels  = 1;
waveform.nSamplesPerSec = SAMPLE_RATE;
waveform.wBitsPerSample = 16;
waveform.cbSize = 0;
waveform.nBlockAlign = (waveform.wBitsPerSample &gt;&gt; 3) * waveform.nChannels;
waveform.nAvgBytesPerSec = waveform.nBlockAlign * waveform.nSamplesPerSec;

waveInOpen(&amp;hWaveIn,0,&amp;waveform,(DWORD)waveInProc,(DWORD) this,CALLBACK_FUNCTION);

waveInPrepareHeader(hWaveIn,pWaveHdr1,sizeof(WAVEHDR));
waveInPrepareHeader(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
waveInPrepareHeader(hWaveIn,pWaveHdr3,sizeof(WAVEHDR));

waveInAddBuffer(hWaveIn,pWaveHdr1,sizeof(WAVEHDR));
waveInAddBuffer(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
waveInAddBuffer(hWaveIn,pWaveHdr3,sizeof(WAVEHDR));

waveInStart(hWaveIn);

waveOutOpen(&amp;hWaveOut,1,&amp;waveform, (DWORD)waveOutProc,0,CALLBACK_FUNCTION);
</code></pre>
<p>In der callback funktion</p>
<pre><code>void CALLBACK waveInProc(HWAVEIN hwi,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2)
{
    switch(uMsg)
    {
    case WIM_CLOSE:
    waveInUnprepareHeader(hWaveIn,pWaveHdr1,sizeof(WAVEHDR));
    waveInUnprepareHeader(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
    waveInUnprepareHeader(hWaveIn,pWaveHdr3,sizeof(WAVEHDR));

    free(pBuffer1);
    free(pBuffer2);
    free(pBuffer3);
    free(pWaveHdr1);
    free(pWaveHdr2);
    free(pWaveHdr3);
    break;
    case WIM_DATA:		

	if(bEnding)
	{
	erg_in=waveInClose(hWaveIn);		
	}

	else
	{
	waveInUnprepareHeader(hWaveIn,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));

        //do something with samples

	waveOutPrepareHeader(hWaveOut,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
	waveOutWrite(hWaveOut,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
	}

	break;
    case WIM_OPEN:

	pWaveHdr1-&gt;lpData		= (LPSTR) pBuffer1;
	pWaveHdr1-&gt;dwBufferLength	= 1024*sizeof(short);
	pWaveHdr1-&gt;dwBytesRecorded	= 0;
	pWaveHdr1-&gt;dwUser		= 0;
	pWaveHdr1-&gt;dwFlags		= 0;
	pWaveHdr1-&gt;dwLoops		= 1;
	pWaveHdr1-&gt;lpNext		= NULL;
	pWaveHdr1-&gt;reserved	= 0;

	pWaveHdr2-&gt;lpData		= (LPSTR) pBuffer2;
	pWaveHdr2-&gt;dwBufferLength	= 1024*sizeof(short);
	pWaveHdr2-&gt;dwBytesRecorded	= 0;
	pWaveHdr2-&gt;dwUser		= 0;
	pWaveHdr2-&gt;dwFlags		= 0;
	pWaveHdr2-&gt;dwLoops		= 1;
	pWaveHdr2-&gt;lpNext		= NULL;
	pWaveHdr2-&gt;reserved	=0;

	pWaveHdr3-&gt;lpData		= (LPSTR) pBuffer3;
	pWaveHdr3-&gt;dwBufferLength	= 1024*sizeof(short);
	pWaveHdr3-&gt;dwBytesRecorded	= 0;
	pWaveHdr3-&gt;dwUser		= 0;
	pWaveHdr3-&gt;dwFlags		= 0;
	pWaveHdr3-&gt;dwLoops		= 1;
	pWaveHdr3-&gt;lpNext		= NULL;
	pWaveHdr3-&gt;reserved	=0;
         break;
	}

}
</code></pre>
<p>In der callback funktion</p>
<pre><code>void CALLBACK waveOutProc(HWAVEOUT hwo,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2)
{
    switch(uMsg)		
    {
    case WOM_CLOSE:
    waveOutUnprepareHeader(hWaveOut,pWaveHdr1,sizeof(WAVEHDR));
    waveOutUnprepareHeader(hWaveOut,pWaveHdr2,sizeof(WAVEHDR));
    waveOutUnprepareHeader(hWaveOut,pWaveHdr3,sizeof(WAVEHDR));
    break;
    case WOM_DONE:
    if(bEnding)
    {
    waveOutClose(hWaveOut);
    }
    else
    {
    waveOutUnprepareHeader(hWaveOut,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
    waveInPrepareHeader(hWaveIn,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
    waveInAddBuffer(hWaveIn,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
    }
    break;
    case WOM_OPEN:

    break;
    }
}
</code></pre>
<p>beim drücken des zweiten buttons sollen beide devices ordentlich geschlossen werden</p>
<p>ich mache folgendes</p>
<p>in der onbutton2</p>
<pre><code>bEnding=true;
waveInReset(hWaveIn);
waveOutReset(hWaveOut);
</code></pre>
<p>das einlesen und ausgeben funzt ohne probleme, aber wenn ich auf button zwei gehe schließt er mir die devices nicht richtig, wie kann ich in/out richtig schließen ohne mit den interrupts von WIM_DATA bzw WOM_DONE in Bedrängnis zu kommen?</p>
<p>wäre für jeden vorschlag dankbar</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192333/schließen-audio-device</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 22:10:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192333.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Sep 2007 07:32:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to schließen audio device on Thu, 13 Sep 2007 07:32:58 GMT]]></title><description><![CDATA[<p>hallo, habe eine mfc anwendung geschrieben, die gleichzeitig von line-in sound liest und diesen dann auf line-out ausgibt. (bisher ohne threads)</p>
<p>nach drücken des ersten buttons mache ich folgendes:</p>
<pre><code>pWaveHdr1=(WAVEHDR*) malloc(sizeof(WAVEHDR));
pWaveHdr2=(WAVEHDR*) malloc(sizeof(WAVEHDR));
pWaveHdr3=(WAVEHDR*) malloc(sizeof(WAVEHDR));

//Allocate memory for the 3 transfer buffers
pBuffer1 = (short *) malloc(INP_BUFFER_SIZE*sizeof(short));
pBuffer2 = (short *) malloc(INP_BUFFER_SIZE*sizeof(short));
pBuffer3 = (short *) malloc(INP_BUFFER_SIZE*sizeof(short));

waveform.wFormatTag = WAVE_FORMAT_PCM;
waveform.nChannels  = 1;
waveform.nSamplesPerSec = SAMPLE_RATE;
waveform.wBitsPerSample = 16;
waveform.cbSize = 0;
waveform.nBlockAlign = (waveform.wBitsPerSample &gt;&gt; 3) * waveform.nChannels;
waveform.nAvgBytesPerSec = waveform.nBlockAlign * waveform.nSamplesPerSec;

waveInOpen(&amp;hWaveIn,0,&amp;waveform,(DWORD)waveInProc,(DWORD) this,CALLBACK_FUNCTION);

waveInPrepareHeader(hWaveIn,pWaveHdr1,sizeof(WAVEHDR));
waveInPrepareHeader(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
waveInPrepareHeader(hWaveIn,pWaveHdr3,sizeof(WAVEHDR));

waveInAddBuffer(hWaveIn,pWaveHdr1,sizeof(WAVEHDR));
waveInAddBuffer(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
waveInAddBuffer(hWaveIn,pWaveHdr3,sizeof(WAVEHDR));

waveInStart(hWaveIn);

waveOutOpen(&amp;hWaveOut,1,&amp;waveform, (DWORD)waveOutProc,0,CALLBACK_FUNCTION);
</code></pre>
<p>In der callback funktion</p>
<pre><code>void CALLBACK waveInProc(HWAVEIN hwi,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2)
{
    switch(uMsg)
    {
    case WIM_CLOSE:
    waveInUnprepareHeader(hWaveIn,pWaveHdr1,sizeof(WAVEHDR));
    waveInUnprepareHeader(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
    waveInUnprepareHeader(hWaveIn,pWaveHdr3,sizeof(WAVEHDR));

    free(pBuffer1);
    free(pBuffer2);
    free(pBuffer3);
    free(pWaveHdr1);
    free(pWaveHdr2);
    free(pWaveHdr3);
    break;
    case WIM_DATA:		

	if(bEnding)
	{
	erg_in=waveInClose(hWaveIn);		
	}

	else
	{
	waveInUnprepareHeader(hWaveIn,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));

        //do something with samples

	waveOutPrepareHeader(hWaveOut,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
	waveOutWrite(hWaveOut,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
	}

	break;
    case WIM_OPEN:

	pWaveHdr1-&gt;lpData		= (LPSTR) pBuffer1;
	pWaveHdr1-&gt;dwBufferLength	= 1024*sizeof(short);
	pWaveHdr1-&gt;dwBytesRecorded	= 0;
	pWaveHdr1-&gt;dwUser		= 0;
	pWaveHdr1-&gt;dwFlags		= 0;
	pWaveHdr1-&gt;dwLoops		= 1;
	pWaveHdr1-&gt;lpNext		= NULL;
	pWaveHdr1-&gt;reserved	= 0;

	pWaveHdr2-&gt;lpData		= (LPSTR) pBuffer2;
	pWaveHdr2-&gt;dwBufferLength	= 1024*sizeof(short);
	pWaveHdr2-&gt;dwBytesRecorded	= 0;
	pWaveHdr2-&gt;dwUser		= 0;
	pWaveHdr2-&gt;dwFlags		= 0;
	pWaveHdr2-&gt;dwLoops		= 1;
	pWaveHdr2-&gt;lpNext		= NULL;
	pWaveHdr2-&gt;reserved	=0;

	pWaveHdr3-&gt;lpData		= (LPSTR) pBuffer3;
	pWaveHdr3-&gt;dwBufferLength	= 1024*sizeof(short);
	pWaveHdr3-&gt;dwBytesRecorded	= 0;
	pWaveHdr3-&gt;dwUser		= 0;
	pWaveHdr3-&gt;dwFlags		= 0;
	pWaveHdr3-&gt;dwLoops		= 1;
	pWaveHdr3-&gt;lpNext		= NULL;
	pWaveHdr3-&gt;reserved	=0;
         break;
	}

}
</code></pre>
<p>In der callback funktion</p>
<pre><code>void CALLBACK waveOutProc(HWAVEOUT hwo,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2)
{
    switch(uMsg)		
    {
    case WOM_CLOSE:
    waveOutUnprepareHeader(hWaveOut,pWaveHdr1,sizeof(WAVEHDR));
    waveOutUnprepareHeader(hWaveOut,pWaveHdr2,sizeof(WAVEHDR));
    waveOutUnprepareHeader(hWaveOut,pWaveHdr3,sizeof(WAVEHDR));
    break;
    case WOM_DONE:
    if(bEnding)
    {
    waveOutClose(hWaveOut);
    }
    else
    {
    waveOutUnprepareHeader(hWaveOut,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
    waveInPrepareHeader(hWaveIn,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
    waveInAddBuffer(hWaveIn,((WAVEHDR*) dwParam1),sizeof(WAVEHDR));
    }
    break;
    case WOM_OPEN:

    break;
    }
}
</code></pre>
<p>beim drücken des zweiten buttons sollen beide devices ordentlich geschlossen werden</p>
<p>ich mache folgendes</p>
<p>in der onbutton2</p>
<pre><code>bEnding=true;
waveInReset(hWaveIn);
waveOutReset(hWaveOut);
</code></pre>
<p>das einlesen und ausgeben funzt ohne probleme, aber wenn ich auf button zwei gehe schließt er mir die devices nicht richtig, wie kann ich in/out richtig schließen ohne mit den interrupts von WIM_DATA bzw WOM_DONE in Bedrängnis zu kommen?</p>
<p>wäre für jeden vorschlag dankbar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364431</guid><dc:creator><![CDATA[arkantos]]></dc:creator><pubDate>Thu, 13 Sep 2007 07:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to schließen audio device on Thu, 13 Sep 2007 09:19:15 GMT]]></title><description><![CDATA[<p>weiß keiner einen rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364513</guid><dc:creator><![CDATA[arkantos]]></dc:creator><pubDate>Thu, 13 Sep 2007 09:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to schließen audio device on Thu, 13 Sep 2007 14:57:28 GMT]]></title><description><![CDATA[<p>kein kleiner tipp? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364726</guid><dc:creator><![CDATA[arkantos]]></dc:creator><pubDate>Thu, 13 Sep 2007 14:57:28 GMT</pubDate></item></channel></rss>