<?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[Resourcen abspielen nicht gut unter Vista]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>ich habe folgendes Problem.<br />
Ich habe Wave Dateien als Ressourcen gespeichert und diese möchte ich abspielen.<br />
So wie ich es momentan habe funktioniert es unter XP super allerdings stottert die Ausgabe unter Vista.</p>
<p>Hier mal der Code wie ich den Sound abspiele.</p>
<pre><code class="language-cpp">bool CWaveOut::Open()
{
    if(waveOutOpen(&amp;m_hWaveOut, WAVE_MAPPER, m_wfx, (DWORD)waveOutProc, NULL, CALLBACK_FUNCTION) != MMSYSERR_NOERROR)
        return false;
    return true;
}

bool CWaveOut::PrepareWaveHdr()
{
    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;
}
bool CWaveOut::Play(DWORD dwStart, DWORD dwEnd)
{
    if(IsPlaying())
    {
        Stop();
        return false;
    }

    //Load();
    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(int i = 0; i &lt; 3; i++)
    {
        if(!AddNewHdr(m_hWaveOut))
            return false;
    }

    return true;
}

bool CWaveOut::AddNewHdr(HWAVEOUT hWaveOut)
{
    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;

}
</code></pre>
<p>Warum läuft das so unter XP unter Vista aber nicht?<br />
Wird die Windows media Lib unter Vista anders behandelt als unter XP?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231735/resourcen-abspielen-nicht-gut-unter-vista</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Apr 2026 14:46:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231735.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Jan 2009 14:37:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Resourcen abspielen nicht gut unter Vista on Wed, 14 Jan 2009 14:37:56 GMT]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>ich habe folgendes Problem.<br />
Ich habe Wave Dateien als Ressourcen gespeichert und diese möchte ich abspielen.<br />
So wie ich es momentan habe funktioniert es unter XP super allerdings stottert die Ausgabe unter Vista.</p>
<p>Hier mal der Code wie ich den Sound abspiele.</p>
<pre><code class="language-cpp">bool CWaveOut::Open()
{
    if(waveOutOpen(&amp;m_hWaveOut, WAVE_MAPPER, m_wfx, (DWORD)waveOutProc, NULL, CALLBACK_FUNCTION) != MMSYSERR_NOERROR)
        return false;
    return true;
}

bool CWaveOut::PrepareWaveHdr()
{
    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;
}
bool CWaveOut::Play(DWORD dwStart, DWORD dwEnd)
{
    if(IsPlaying())
    {
        Stop();
        return false;
    }

    //Load();
    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(int i = 0; i &lt; 3; i++)
    {
        if(!AddNewHdr(m_hWaveOut))
            return false;
    }

    return true;
}

bool CWaveOut::AddNewHdr(HWAVEOUT hWaveOut)
{
    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;

}
</code></pre>
<p>Warum läuft das so unter XP unter Vista aber nicht?<br />
Wird die Windows media Lib unter Vista anders behandelt als unter XP?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645412</guid><dc:creator><![CDATA[mr. main]]></dc:creator><pubDate>Wed, 14 Jan 2009 14:37:56 GMT</pubDate></item></channel></rss>