<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://forums.xna.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Audio/XACT</title><link>http://forums.xna.com/forums/33.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 0.0)</generator><item><title>XAudio2: Problem playing a resubmitted buffer on a stopped voice after flushing using xWMA</title><link>http://forums.xna.com/forums/thread/167953.aspx</link><pubDate>Wed, 22 Apr 2009 21:36:08 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:167953</guid><dc:creator>GameDevDude</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/167953.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=33&amp;PostID=167953</wfw:commentRss><description>&lt;p&gt;I have a source voice playing xWMA data, and I do the following:&lt;br /&gt;
1)      Stop the voice&lt;br /&gt;
2)      Flush the buffer&lt;br /&gt;
3)      Wait for the buffer to be flushed&lt;br /&gt;
4)      Submit the same buffer (to restart the file I was playing)&lt;br /&gt;
5)      Start the voice&lt;/p&gt;
&lt;p&gt;The problem is that when the voice is started in step 5, it immediately reaches the end of the buffer without playing any of the supplied audio. In my tests, it always immediately finishes the first buffer when starting over on an xWMA file, but if there are multiple buffers queued, it will happily continue on the second buffer. However, it will always skip the first buffer completely. If I do the exact same thing to a voice playing a WAV file, it functions as expected and restarts the audio file with no problems. I have tried this with the November 2008 and March 2009 versions of the DirectX SDK, and the problem happens in both. Does anyone have any idea why this doesn’t work?&lt;/p&gt;
&lt;p&gt;I’ve uploaded the code, VS2005 project, and audio test files here: &lt;a href="http://www.binarycreativity.com/files/VoiceRestartingProblem.zip"&gt;http://www.binarycreativity.com/files/VoiceRestartingProblem.zip&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The code is pasted below. Thanks for your help!&lt;/p&gt;
&lt;div style="border-bottom:#7f9db9 1px solid;border-left:#7f9db9 1px solid;background-color:white;width:794px;font-family:courier new;height:571px;font-size:11px;overflow:auto;border-top:#7f9db9 1px solid;border-right:#7f9db9 1px solid;"&gt;
&lt;table style="border-bottom:#eee 0px solid;border-right-width:0px;background-color:#fff;margin:2px 0px;width:99%;border-collapse:collapse;border-top-width:0px;border-left-width:0px;" cellspacing="0" cellpadding="0"&gt;
    
    
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="font-size:11px;"&gt;&lt;/span&gt;&lt;span style="color:#808080;"&gt;#define _WIN32_DCOM &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;#define _CRT_SECURE_NO_DEPRECATE &lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#808080;"&gt;#include &amp;lt;windows.h&amp;gt; &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;#include &amp;lt;xaudio2.h&amp;gt; &lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#808080;"&gt;#include &amp;lt;strsafe.h&amp;gt; &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;#include &amp;lt;shellapi.h&amp;gt; &lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#808080;"&gt;#include &amp;lt;mmsystem.h&amp;gt; &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;#include &amp;lt;conio.h&amp;gt; &lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#808080;"&gt;#include &amp;lt;Xact3wb.h&amp;gt; &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;#include &amp;lt;assert.h&amp;gt; &lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#808080;"&gt;#define USE_XWMA_FILE ( 1 ) // If we use the XWMA file, this example code doesn&amp;#39;t function correctly &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#008000;"&gt;// It works just fine with the wave equivalent &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#008000;"&gt;//-------------------------------------------------------------------------------------- &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#008000;"&gt;// Callback structure &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#008000;"&gt;//-------------------------------------------------------------------------------------- &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#0000ff;"&gt;struct&lt;/span&gt;&lt;span style="font-size:11px;"&gt; StreamingVoiceContext : &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="font-size:11px;"&gt; IXAudio2VoiceCallback  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;{  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    STDMETHOD_( &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, OnVoiceProcessingPassStart )( UINT32 )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    STDMETHOD_( &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, OnVoiceProcessingPassEnd )()  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    STDMETHOD_( &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, OnStreamEnd )()  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    STDMETHOD_( &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, OnBufferStart )( &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;* )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    STDMETHOD_( &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, OnBufferEnd )( &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;* )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        wprintf( L&lt;span style="color:#0000ff;"&gt;&amp;quot;Buffer End\n&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt; );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        SetEvent( hBufferEndEvent );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    STDMETHOD_( &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, OnLoopEnd )( &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;* )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    STDMETHOD_( &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, OnVoiceError )( &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="font-size:11px;"&gt;*, HRESULT )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    HANDLE hBufferEndEvent;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    StreamingVoiceContext() : hBufferEndEvent( CreateEvent( NULL, FALSE, FALSE, NULL ) )  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt;&lt;span style="font-size:11px;"&gt; ~StreamingVoiceContext()  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        CloseHandle( hBufferEndEvent );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;};  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#0000ff;"&gt;struct&lt;/span&gt;&lt;span style="font-size:11px;"&gt; xWMAExtraInfo  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;{  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    UINT32 packetCount;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    UINT32 *dpds;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;};  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#0000ff;"&gt;struct&lt;/span&gt;&lt;span style="font-size:11px;"&gt; DataBuffer  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;{  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    UINT32 size;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    BYTE *data;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;};  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;WAVEFORMATEX *ReadWave( DataBuffer *buffer, HMMIO hmmio )  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;{  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    MMCKINFO riff;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Search the input file for for the &amp;#39;fmt &amp;#39; chunk. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    riff.ckid = mmioFOURCC( &amp;#39;f&amp;#39;, &amp;#39;m&amp;#39;, &amp;#39;t&amp;#39;, &amp;#39; &amp;#39; );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( 0 != mmioDescend( hmmio, &amp;amp;riff, NULL, MMIO_FINDCHUNK ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Expect the &amp;#39;fmt&amp;#39; chunk to be at least as large as &amp;lt;PCMWAVEFORMAT&amp;gt;; &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// if there are extra parameters at the end, we&amp;#39;ll ignore them &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( riff.cksize &amp;lt; ( LONG )&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( PCMWAVEFORMAT ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Read the &amp;#39;fmt &amp;#39; chunk into &amp;lt;pcmWaveFormat&amp;gt;. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    PCMWAVEFORMAT pcmWaveFormat;  &lt;span style="color:#008000;"&gt;// Temp PCM structure to load in. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( mmioRead( hmmio, ( HPSTR )&amp;amp;pcmWaveFormat, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( pcmWaveFormat ) ) != &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( pcmWaveFormat ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Allocate the waveformatex, but if its not pcm format, read the next &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// word, and thats how many extra bytes to allocate. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    assert( pcmWaveFormat.wf.wFormatTag == WAVE_FORMAT_PCM );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    WAVEFORMATEX *wfx = (WAVEFORMATEX *)malloc( &lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( WAVEFORMATEX ) );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Copy the bytes from the pcm structure to the waveformatex structure &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    memcpy( wfx, &amp;amp;pcmWaveFormat, &lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( pcmWaveFormat ) );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    wfx-&amp;gt;cbSize = 0;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Ascend the input file out of the &amp;#39;fmt &amp;#39; chunk. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( 0 != mmioAscend( hmmio, &amp;amp;riff, 0 ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    riff.ckid = mmioFOURCC( &amp;#39;d&amp;#39;, &amp;#39;a&amp;#39;, &amp;#39;t&amp;#39;, &amp;#39;a&amp;#39; );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( 0 != mmioDescend( hmmio, &amp;amp;riff, NULL, MMIO_FINDCHUNK ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    buffer-&amp;gt;size = riff.cksize;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    buffer-&amp;gt;data = (BYTE*)malloc( riff.cksize );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( mmioRead( hmmio, ( HPSTR )buffer-&amp;gt;data, riff.cksize ) != riff.cksize )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        free( buffer-&amp;gt;data );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }     &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; wfx;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;}  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;WAVEFORMATEX *ReadXWMA( DataBuffer *buffer, xWMAExtraInfo *extraInfo, HMMIO hmmio )  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;{  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    MMCKINFO riff;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Search the input file for for the &amp;#39;fmt &amp;#39; chunk. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    riff.ckid = mmioFOURCC( &amp;#39;f&amp;#39;, &amp;#39;m&amp;#39;, &amp;#39;t&amp;#39;, &amp;#39; &amp;#39; );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( 0 != mmioDescend( hmmio, &amp;amp;riff, NULL, MMIO_FINDCHUNK ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Expect the &amp;#39;fmt&amp;#39; chunk to be at least as large as &amp;lt;PCMWAVEFORMAT&amp;gt;; &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// if there are extra parameters at the end, we&amp;#39;ll ignore them &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( riff.cksize &amp;lt; ( LONG )&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( PCMWAVEFORMAT ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Read the &amp;#39;fmt &amp;#39; chunk into &amp;lt;pcmWaveFormat&amp;gt;. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    PCMWAVEFORMAT pcmWaveFormat;  &lt;span style="color:#008000;"&gt;// Temp PCM structure to load in. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( mmioRead( hmmio, ( HPSTR )&amp;amp;pcmWaveFormat, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( pcmWaveFormat ) ) != &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( pcmWaveFormat ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Read in length of extra bytes. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    WORD cbExtraBytes = 0L;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( mmioRead( hmmio, ( CHAR* )&amp;amp;cbExtraBytes, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( WORD ) ) != &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( WORD ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="font-size:11px;"&gt; formatSize = &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( WAVEFORMATEX ) + cbExtraBytes;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    WAVEFORMATEX *wfx = ( WAVEFORMATEX* )malloc( formatSize );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( NULL == wfx )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Copy the bytes from the pcm structure to the waveformatex structure &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    memcpy( wfx, &amp;amp;pcmWaveFormat, &lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( pcmWaveFormat ) );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    wfx-&amp;gt;cbSize = cbExtraBytes;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Now, read those extra bytes into the structure, if cbExtraAlloc != 0. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( mmioRead( hmmio, ( CHAR* )( ( ( BYTE* )&amp;amp;( wfx-&amp;gt;cbSize ) ) + &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( WORD ) ),  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        cbExtraBytes ) != cbExtraBytes )  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Ascend the input file out of the &amp;#39;fmt &amp;#39; chunk. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( 0 != mmioAscend( hmmio, &amp;amp;riff, 0 ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Search the input file for for the &amp;#39;dpds&amp;#39; chunk. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    riff.ckid = mmioFOURCC( &amp;#39;d&amp;#39;, &amp;#39;p&amp;#39;, &amp;#39;d&amp;#39;, &amp;#39;s&amp;#39; );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( 0 != mmioDescend( hmmio, &amp;amp;riff, NULL, MMIO_FINDCHUNK ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    extraInfo-&amp;gt;packetCount = riff.cksize / &lt;span style="color:#0000ff;"&gt;sizeof&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( UINT32 );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    extraInfo-&amp;gt;dpds = (UINT32*)malloc( riff.cksize );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( mmioRead( hmmio, ( HPSTR )extraInfo-&amp;gt;dpds, riff.cksize ) != riff.cksize )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        free( extraInfo-&amp;gt;dpds );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }     &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Ascend the input file out of the &amp;#39;fmt &amp;#39; chunk. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( 0 != mmioAscend( hmmio, &amp;amp;riff, 0 ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        free( extraInfo-&amp;gt;dpds );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    riff.ckid = mmioFOURCC( &amp;#39;d&amp;#39;, &amp;#39;a&amp;#39;, &amp;#39;t&amp;#39;, &amp;#39;a&amp;#39; );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( 0 != mmioDescend( hmmio, &amp;amp;riff, NULL, MMIO_FINDCHUNK ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        free( extraInfo-&amp;gt;dpds );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    buffer-&amp;gt;size = riff.cksize;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    buffer-&amp;gt;data = (BYTE*)malloc( riff.cksize );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( mmioRead( hmmio, ( HPSTR )buffer-&amp;gt;data, riff.cksize ) != riff.cksize )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        free( extraInfo-&amp;gt;dpds );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        free( buffer-&amp;gt;data );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; NULL;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }     &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; wfx;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;}  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;WAVEFORMATEX *ReadAudioFile( LPTSTR name, DataBuffer *buffer, xWMAExtraInfo *extraInfo )  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;{  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    HMMIO hmmio = mmioOpen( name, NULL, MMIO_ALLOCBUF | MMIO_READ );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    MMCKINFO riff;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( ( 0 != mmioDescend( hmmio, &amp;amp;riff, NULL, 0 ) ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        mmioClose( hmmio, 0 );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; 0;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Check to make sure this is a valid wave file &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( riff.ckid != FOURCC_RIFF )   &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        mmioClose( hmmio, 0 );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; 0;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    WAVEFORMATEX *wfx = NULL;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( riff.fccType )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt;&lt;span style="font-size:11px;"&gt;  mmioFOURCC( &amp;#39;W&amp;#39;, &amp;#39;A&amp;#39;, &amp;#39;V&amp;#39;, &amp;#39;E&amp;#39; ):  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;            wfx = ReadWave( buffer, hmmio );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;            &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;&lt;span style="font-size:11px;"&gt;;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt;&lt;span style="font-size:11px;"&gt; mmioFOURCC( &amp;#39;X&amp;#39;, &amp;#39;W&amp;#39;, &amp;#39;M&amp;#39;, &amp;#39;A&amp;#39; ):  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;            wfx = ReadXWMA( buffer, extraInfo, hmmio );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;            &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;&lt;span style="font-size:11px;"&gt;;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    mmioClose( hmmio, 0 );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; wfx;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;}  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#008000;"&gt;//-------------------------------------------------------------------------------------- &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#008000;"&gt;// Entry point to the program &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#008000;"&gt;//-------------------------------------------------------------------------------------- &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="font-size:11px;"&gt; main()  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;{  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    HRESULT hr;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Initialize XAudio2 &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    CoInitializeEx( NULL, COINIT_MULTITHREADED );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    IXAudio2* pXAudio2 = NULL;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    UINT32 flags = 0; &lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#808080;"&gt;#ifdef _DEBUG &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    flags |= XAUDIO2_DEBUG_ENGINE; &lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#808080;"&gt;#endif &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( FAILED( hr = XAudio2Create( &amp;amp;pXAudio2, flags ) ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        wprintf( L&lt;span style="color:#0000ff;"&gt;&amp;quot;Failed to init XAudio2 engine: %#X\n&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, hr );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        CoUninitialize();  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; 0;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    IXAudio2MasteringVoice* pMasteringVoice = NULL;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( FAILED( hr = pXAudio2-&amp;gt;CreateMasteringVoice( &amp;amp;pMasteringVoice ) ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        wprintf( L&lt;span style="color:#0000ff;"&gt;&amp;quot;Failed creating mastering voice: %#X\n&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, hr );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        pXAudio2-&amp;gt;Release();  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        CoUninitialize();  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; 0;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    } &lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;&lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#808080;"&gt;#if USE_XWMA_FILE  &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// counting.xwm is generated by the command: &amp;quot;xwmaencode counting.wav&amp;quot; &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// I am using the March 2009 version of the DirectX 9.0c SDK &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt;&lt;span style="font-size:11px;"&gt; LPTSTR name = L&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;counting.xwm&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt;; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#808080;"&gt;#else &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt;&lt;span style="font-size:11px;"&gt; LPTSTR name = L&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;counting.wav&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt;; &lt;/span&gt;&lt;span style="color:#808080;"&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;span style="color:#808080;"&gt;#endif  &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    xWMAExtraInfo extraInfo;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    DataBuffer dataBuffer;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Read in our audio file &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    WAVEFORMATEX *wfx = ReadAudioFile( name, &amp;amp;dataBuffer, &amp;amp;extraInfo );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( wfx == NULL )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        wprintf( L&lt;span style="color:#0000ff;"&gt;&amp;quot;Invalid format\n&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt; );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; 1;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&lt;span style="font-size:11px;"&gt; xwma = wfx-&amp;gt;wFormatTag == WAVE_FORMAT_WMAUDIO2 || wfx-&amp;gt;wFormatTag == WAVE_FORMAT_WMAUDIO3;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    StreamingVoiceContext voiceContext;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    IXAudio2SourceVoice* pSourceVoice;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( FAILED( hr = pXAudio2-&amp;gt;CreateSourceVoice( &amp;amp;pSourceVoice, wfx, 0, 1.0f, &amp;amp;voiceContext ) ) )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        wprintf( L&lt;span style="color:#0000ff;"&gt;&amp;quot;\nError %#X creating source voice\n&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt;, hr );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; hr;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    free( wfx );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;      &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// set up the buffer &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    XAUDIO2_BUFFER buf = {0};  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    buf.AudioBytes = dataBuffer.size;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    buf.pAudioData = dataBuffer.data;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    buf.Flags = XAUDIO2_END_OF_STREAM;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    XAUDIO2_BUFFER_WMA bufferWma;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    XAUDIO2_BUFFER_WMA *wma = NULL;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;      &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( xwma )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        wma = &amp;amp;bufferWma;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        bufferWma.PacketCount = extraInfo.packetCount;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;        bufferWma.pDecodedPacketCumulativeBytes = extraInfo.dpds;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    pSourceVoice-&amp;gt;SubmitSourceBuffer( &amp;amp;buf, wma );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// We&amp;#39;ve submitted one buffer and started the audio stream. Everything is working fine so far. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    pSourceVoice-&amp;gt;Start( 0, 0 );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Wait a second. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    Sleep( 1000 );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// stop the source voice &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    pSourceVoice-&amp;gt;Stop( 0 );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    wprintf( L&lt;span style="color:#0000ff;"&gt;&amp;quot;About to flush buffers\n&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt; );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    pSourceVoice-&amp;gt;FlushSourceBuffers();  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// wait for the buffer to get flushed &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    WaitForSingleObject( voiceContext.hBufferEndEvent, INFINITE );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Start over from the beginning by submitting the exact same buffer with the  &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// exact same parameters. &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    pSourceVoice-&amp;gt;SubmitSourceBuffer( &amp;amp;buf, wma );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    wprintf( L&lt;span style="color:#0000ff;"&gt;&amp;quot;About to start playing again\n&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt; );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    pSourceVoice-&amp;gt;Start( 0 );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// Wait for the voice to reach the end of the resubmitted buffer. With wave files, it starts over  &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// properly and the sound file is played out in its entirety. However, with xWMA files,  &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// it immediately reaches the end of the buffer. In my tests, it always dumps the first  &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// buffer when starting over on an xWMA file, but if there are multiple buffers queued,  &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#008000;"&gt;// it will happily continue on the second buffer. However, it will always skip the first  &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// buffer completely.  &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    WaitForSingleObject( voiceContext.hBufferEndEvent, INFINITE );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    wprintf( L&lt;span style="color:#0000ff;"&gt;&amp;quot;Finished playing the buffer in its entirety (assuming you were using a wave file)\n&amp;quot;&lt;/span&gt;&lt;span style="font-size:11px;"&gt; );  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;      &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#008000;"&gt;// Clean up &lt;/span&gt;&lt;span style="font-size:11px;"&gt; &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    pSourceVoice-&amp;gt;DestroyVoice();  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    pMasteringVoice-&amp;gt;DestroyVoice();  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    pXAudio2-&amp;gt;Release();  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    CoUninitialize();  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    free( dataBuffer.data );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:11px;"&gt;( xwma )  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    {  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;        free( extraInfo.dpds );  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    }  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:11px;"&gt; 0;  &lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="background-color:#f7f7f7;"&gt;}  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt; &lt;/td&gt;
        &lt;/tr&gt;
    
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;</description></item></channel></rss>