<?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[waveOutReset hängt sich weg.]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>So nun habe ich das mit dem Abspielen aus der Resource am laufen. Arbeite hier mit den waveOut... Methoden aus der Windows Media Lib. Nun möchte ich einen gerade laufenden Sound unterbrechen. Wie gehe ich hier am besten vor?<br />
Ich habe versucht mit waveOutReset doch dann bleibe ich in der Methode hängen.</p>
<p>Hier mal auf die schnelle was ich mache.</p>
<pre><code class="language-cpp">//Laden der Resource 
... 
HINSTANCE hApp = ::GetModuleHandle(0); 
HRSRC hResInfo = FindResource(hApp, MAKEINTRESOURCE(m_nResId), L&quot;WAVE&quot;);   m_hRes = LoadResource(hApp, hResInfo); 
m_lpRes = (LPSTR)LockResource(m_hRes); 
... // klappt wunderbar 

... 
//WaveFormat auslesen 
DWORD* pRes = (DWORD*)m_lpRes; 
    DWORD dwRiff = *pRes++; 
    DWORD dwLength = *pRes++; 
    DWORD dwType = *pRes++; 

    if(dwRiff != mmioFOURCC('R', 'I', 'F', 'F')) 
        return false; 

    if(dwType != mmioFOURCC('W', 'A', 'V', 'E')) 
        return false; 

    DWORD * pResEnd = (DWORD *)((BYTE *)pRes + dwLength-4); 

    while( pRes &lt; pResEnd ) 
    { 
         dwType = *pRes++; 
          dwLength = *pRes++; 
        switch(dwType) 
        { 
            case mmioFOURCC('f', 'm', 't', ' '): 
                if( !m_wfx ) 
                { 
                        if( dwLength &lt; sizeof(WAVEFORMAT) ) 
                            return false;     

                        m_wfx = (WAVEFORMATEX *)pRes; 

                        /*if( m_wfx ) 
                            return true;*/ 
                    } 
            break; 
            case mmioFOURCC('d', 'a', 't', 'a'): 
                m_lpvData = (LPVOID)pRes; 
                m_dwWaveSize = dwLength; 
                if(m_wfx) 
                    return true; 
            break; 
        } 
    } 
    return true; 
... 

// waveOutOpen aufrufen 
... 
waveOutOpen(...) 
... 

... 
//Und dann solange Buffer Inhalt hat abspielen. 
m_dwStart = (dwStart == -1) ? 0 : dwStart * m_wfx-&gt;nBlockAlign; 
    m_dwEnd = (dwEnd == -1) ? m_wfx-&gt;nSamplesPerSec * m_wfx-&gt;nBlockAlign : __min((m_wfx-&gt;nSamplesPerSec * m_wfx-&gt;nBlockAlign), dwEnd) * m_wfx-&gt;nBlockAlign; 
    m_nWaveHdrIndex = 2; 
for(i = 0; i &lt; 2; i++) 
{ 
Play(); 
} 

//Play 
MMRESULT mmr; 
    m_nWaveHdrIndex = (m_nWaveHdrIndex == 2) ? 0 : m_nWaveHdrIndex + 1; 
    m_whdr[m_nWaveHdrIndex].lpData = (LPSTR)m_lpvData + m_dwStart; 
    m_whdr[m_nWaveHdrIndex].dwBufferLength = GetBufferLength(); 
    m_whdr[m_nWaveHdrIndex].dwFlags = 0; 
    m_whdr[m_nWaveHdrIndex].dwUser = (DWORD)(void*)this; 
    if((mmr = waveOutPrepareHeader(hWaveOut, &amp;m_whdr[m_nWaveHdrIndex], sizeof(WAVEHDR))) != MMSYSERR_NOERROR) 
        return false; 
    if((mmr = waveOutWrite(hWaveOut, &amp;m_whdr[m_nWaveHdrIndex], sizeof(WAVEHDR))) != MMSYSERR_NOERROR) 
    { 
        waveOutUnprepareHeader(hWaveOut, &amp;m_whdr[m_nWaveHdrIndex], sizeof(WAVEHDR)); 
        m_whdr[m_nWaveHdrIndex].lpData = NULL; 
        m_whdr[m_nWaveHdrIndex].dwBufferLength = 0; 
        m_whdr[m_nWaveHdrIndex].dwFlags = 0; 
        m_whdr[m_nWaveHdrIndex].dwUser = NULL; 
        m_nWaveHdrIndex--; 
          return false; 
    } 
    m_dwStart += GetBufferLength(); 
    return true; 

//Nun versuche ich mittendrin zu unterbrechen hier die Stop Methode 
    FreeResource(m_hRes); 
    MMRESULT mmr = 0; 
    m_dwStart = m_dwEnd; 
    if(m_hWaveOut != NULL) 
        mmr = waveOutReset(m_hWaveOut); //hier ist dann Feierabend. 
    if(mmr != MMSYSERR_NOERROR) 
        return false; 
    return true;
</code></pre>
<p>Was könnte ich hier noch falsch machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230294/waveoutreset-hängt-sich-weg</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 01:10:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230294.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Dec 2008 15:32:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to waveOutReset hängt sich weg. on Tue, 23 Dec 2008 15:32:15 GMT]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>So nun habe ich das mit dem Abspielen aus der Resource am laufen. Arbeite hier mit den waveOut... Methoden aus der Windows Media Lib. Nun möchte ich einen gerade laufenden Sound unterbrechen. Wie gehe ich hier am besten vor?<br />
Ich habe versucht mit waveOutReset doch dann bleibe ich in der Methode hängen.</p>
<p>Hier mal auf die schnelle was ich mache.</p>
<pre><code class="language-cpp">//Laden der Resource 
... 
HINSTANCE hApp = ::GetModuleHandle(0); 
HRSRC hResInfo = FindResource(hApp, MAKEINTRESOURCE(m_nResId), L&quot;WAVE&quot;);   m_hRes = LoadResource(hApp, hResInfo); 
m_lpRes = (LPSTR)LockResource(m_hRes); 
... // klappt wunderbar 

... 
//WaveFormat auslesen 
DWORD* pRes = (DWORD*)m_lpRes; 
    DWORD dwRiff = *pRes++; 
    DWORD dwLength = *pRes++; 
    DWORD dwType = *pRes++; 

    if(dwRiff != mmioFOURCC('R', 'I', 'F', 'F')) 
        return false; 

    if(dwType != mmioFOURCC('W', 'A', 'V', 'E')) 
        return false; 

    DWORD * pResEnd = (DWORD *)((BYTE *)pRes + dwLength-4); 

    while( pRes &lt; pResEnd ) 
    { 
         dwType = *pRes++; 
          dwLength = *pRes++; 
        switch(dwType) 
        { 
            case mmioFOURCC('f', 'm', 't', ' '): 
                if( !m_wfx ) 
                { 
                        if( dwLength &lt; sizeof(WAVEFORMAT) ) 
                            return false;     

                        m_wfx = (WAVEFORMATEX *)pRes; 

                        /*if( m_wfx ) 
                            return true;*/ 
                    } 
            break; 
            case mmioFOURCC('d', 'a', 't', 'a'): 
                m_lpvData = (LPVOID)pRes; 
                m_dwWaveSize = dwLength; 
                if(m_wfx) 
                    return true; 
            break; 
        } 
    } 
    return true; 
... 

// waveOutOpen aufrufen 
... 
waveOutOpen(...) 
... 

... 
//Und dann solange Buffer Inhalt hat abspielen. 
m_dwStart = (dwStart == -1) ? 0 : dwStart * m_wfx-&gt;nBlockAlign; 
    m_dwEnd = (dwEnd == -1) ? m_wfx-&gt;nSamplesPerSec * m_wfx-&gt;nBlockAlign : __min((m_wfx-&gt;nSamplesPerSec * m_wfx-&gt;nBlockAlign), dwEnd) * m_wfx-&gt;nBlockAlign; 
    m_nWaveHdrIndex = 2; 
for(i = 0; i &lt; 2; i++) 
{ 
Play(); 
} 

//Play 
MMRESULT mmr; 
    m_nWaveHdrIndex = (m_nWaveHdrIndex == 2) ? 0 : m_nWaveHdrIndex + 1; 
    m_whdr[m_nWaveHdrIndex].lpData = (LPSTR)m_lpvData + m_dwStart; 
    m_whdr[m_nWaveHdrIndex].dwBufferLength = GetBufferLength(); 
    m_whdr[m_nWaveHdrIndex].dwFlags = 0; 
    m_whdr[m_nWaveHdrIndex].dwUser = (DWORD)(void*)this; 
    if((mmr = waveOutPrepareHeader(hWaveOut, &amp;m_whdr[m_nWaveHdrIndex], sizeof(WAVEHDR))) != MMSYSERR_NOERROR) 
        return false; 
    if((mmr = waveOutWrite(hWaveOut, &amp;m_whdr[m_nWaveHdrIndex], sizeof(WAVEHDR))) != MMSYSERR_NOERROR) 
    { 
        waveOutUnprepareHeader(hWaveOut, &amp;m_whdr[m_nWaveHdrIndex], sizeof(WAVEHDR)); 
        m_whdr[m_nWaveHdrIndex].lpData = NULL; 
        m_whdr[m_nWaveHdrIndex].dwBufferLength = 0; 
        m_whdr[m_nWaveHdrIndex].dwFlags = 0; 
        m_whdr[m_nWaveHdrIndex].dwUser = NULL; 
        m_nWaveHdrIndex--; 
          return false; 
    } 
    m_dwStart += GetBufferLength(); 
    return true; 

//Nun versuche ich mittendrin zu unterbrechen hier die Stop Methode 
    FreeResource(m_hRes); 
    MMRESULT mmr = 0; 
    m_dwStart = m_dwEnd; 
    if(m_hWaveOut != NULL) 
        mmr = waveOutReset(m_hWaveOut); //hier ist dann Feierabend. 
    if(mmr != MMSYSERR_NOERROR) 
        return false; 
    return true;
</code></pre>
<p>Was könnte ich hier noch falsch machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634707</guid><dc:creator><![CDATA[CrazyPlaya]]></dc:creator><pubDate>Tue, 23 Dec 2008 15:32:15 GMT</pubDate></item><item><title><![CDATA[Reply to waveOutReset hängt sich weg. on Tue, 23 Dec 2008 19:12:17 GMT]]></title><description><![CDATA[<p>Weil ich grade im Petzold den 22. Kapitel &quot;Sound&quot; lese, wollte ich mal helfen. Nun gebe ich verzweifelt auf und behaupte, kein Mensch kann den Codeausschnitt debuggen. Das solltest Du zuerst mal durchlesen: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-229653.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-229653.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634813</guid><dc:creator><![CDATA[abc.w]]></dc:creator><pubDate>Tue, 23 Dec 2008 19:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to waveOutReset hängt sich weg. on Tue, 23 Dec 2008 20:31:24 GMT]]></title><description><![CDATA[<p>Ev. &quot;FreeResource(m_hRes);&quot; an der falschen Stelle aufgerufen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634848</guid><dc:creator><![CDATA[ratemal]]></dc:creator><pubDate>Tue, 23 Dec 2008 20:31:24 GMT</pubDate></item></channel></rss>