<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564646</guid>
        <pubDate>Sun, 18 Jan 2015 23:32:06 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564646</link>
        <description><![CDATA[Суровый: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=398430&view=findpost&p=3564642'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Prince &#064; <time class="tag-quote__quoted-time" datetime="2015-01-19T02:10:56+03:00">18.01.15, 23:10</time></span><div class='quote '> И да, на каждый будет сгенерировано DONE.</div></div><br>
Ну похоже именно в этом дело.<br>
На скорую руку переделал код. Ошибка перестала появлятся при перемещении движка :rolleyes: <br>
Только теперь воспроизведени не запускается программно, а исключительно с толкача (надо подвигать движок позиции мышкой) :wall:  :wall:  :wall: <br>
Ну нафиг, лучше не буду ничего трогать :blush:]]></description>
        <author>Суровый</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564642</guid>
        <pubDate>Sun, 18 Jan 2015 23:10:56 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564642</link>
        <description><![CDATA[Prince: Да, все будут удалены. И да, на каждый будет сгенерировано DONE.<br>
<br>
И ещё в другой теме я писал, по поводу waveinreset, на всякий пожарный:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Кстати, столкнулся с непонятным явлением. Waveinreset выбросит из очереди все буферы и процесс записи будет остановлен. При этом поле dwBytesRecorded будет содержать фактическое количество записанной информации до того момента когда запись была прервана, или ноль, для тех буферов, которые ожидали своей очереди. <br>
 Так вот. Если в консольном приложении вызвать Waveinreset, то в кэлбэке при попытке расфиксировать такой буфер(wavinunprepareheader) возникает исключение. В то же время, если приложение не консольное, ничего подобного не происходит. В чем причина, пока не понял, возможно, я где-то ошибся или что-то недопонял.</div></div>]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564630</guid>
        <pubDate>Sun, 18 Jan 2015 21:08:32 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564630</link>
        <description><![CDATA[Суровый: Тогда такой вопрос. Если у устройства один буфер воспроизводится, а второй находится в очереди на воспроизвидения, при сбросе устройства (<strong class='tag-b'>waveOutReset(WO)</strong>) оба буфера будут удалены из очереди? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-01-18T21:45:54+00:00">18.01.15, 21:45</time></span></span><br>
В спавке пишут что все буфера из очереди высвобождаются и помечаются как выполненые.  а вот генерируется ли сообщение DONE не написано. Я исходил из того что оно при Reset не генерируется.]]></description>
        <author>Суровый</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564560</guid>
        <pubDate>Sun, 18 Jan 2015 18:25:02 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564560</link>
        <description><![CDATA[Prince: В общем, что я выяснил. 33 вылезает, если попытаться впихнуть через waveoutwrite в очередь заголовок, который уже и так в очереди. Кроме того, если попытаться выполнить unprepare такого заголовка. Как бы 33 так и говорит: The data block pointed to by the pwh parameter is still in the queue(&quot;оно уже/ещё играется, чё ты хочешь?&quot;).  Так что это всё-таки ошибка(в программе), а где именно,  не скажу, так как в сишной программе не ориентируюсь.]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564473</guid>
        <pubDate>Sun, 18 Jan 2015 12:14:40 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564473</link>
        <description><![CDATA[Суровый: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=398430&view=findpost&p=3564471'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Prince &#064; <time class="tag-quote__quoted-time" datetime="2015-01-18T12:03:16+00:00">18.01.15, 12:03</time></span><div class='quote '>В любом случае, имхо, стоит разобраться, что оно означает, это сообщение, и почему вылазит.<br>
Может, покажете послеовательность действий?</div></div><br>
Мне не принципиально. Но если интересно то вот:<br>
AudioUnit.h<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">//---------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">#ifndef AudioUnitH</div><div class="code_line">#define AudioUnitH</div><div class="code_line">//</div><div class="code_line">#include &quot;UtilUnit.h&quot;</div><div class="code_line">#include &quot;mmsystem.hpp&quot;</div><div class="code_line">#include &quot;DataUnit.h&quot;</div><div class="code_line">#include &#60;Classes.hpp&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">//</div><div class="code_line">class CPlayer;</div><div class="code_line">&nbsp;</div><div class="code_line">class CBuffer {</div><div class="code_line">&nbsp;&nbsp; &nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;AudioFmt Fmt;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int Size;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int Rate;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void *WO;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;char *Buf;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WAVEHDR WH[2];</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CBuffer(AudioFmt aFmt, int aSize, int aRate);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;~CBuffer();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Play(int n);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Pause();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Restart();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Reset();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void SetVol(int aVol);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CPlayer *pPlayer;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int GetBufNum(void *P);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void *GetBufPtr(int N);</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class CPlayTh: public TThread {</div><div class="code_line">&nbsp;&nbsp; &nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CPlayer *Player;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;HANDLE SignalDone;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;CPlayTh(CPlayer *aPlayer);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void __fastcall Execute();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;void Done();</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">enum TPlayMsg {PM_DONE_BUF,PM_DONE_FILE};</div><div class="code_line">&nbsp;</div><div class="code_line">class CPlayer {</div><div class="code_line">&nbsp;&nbsp; &nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CBuffer *Buf;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CWAVE *Wav;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CPlayTh *Th;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;int nBuf;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bool Paused;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bool Played;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;TRTLCriticalSection CS;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;HWND Wnd;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;void LoadNextFrame(int nBuf);</div><div class="code_line">&nbsp;&nbsp; &nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CPlayer(CWAVE *aWav, HWND W=0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;~CPlayer();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;void DoneBuf(int n);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;void __fastcall LoadTh();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;void SetPos(int nPos);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;void SetVol(int aVol);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;void Play();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;void Pause();</div><div class="code_line">};</div><div class="code_line">//---------------------------------------------------------------------------</div><div class="code_line">#endif</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
AudioUnit.cpp<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">//---------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">#pragma hdrstop</div><div class="code_line">&nbsp;</div><div class="code_line">#include &quot;AudioUnit.h&quot;</div><div class="code_line">#include &#60;mmsystem.hpp&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">//---------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">#pragma package(smart_init)</div><div class="code_line">&nbsp;</div><div class="code_line">void CALLBACK waveOutCallBack(int WO, UINT Msg, CBuffer *P, void *a1, int a2)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Msg==WOM_DONE)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (P-&#62;pPlayer!=NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;P-&#62;pPlayer-&#62;DoneBuf( P-&#62;GetBufNum(a1) );</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">CBuffer::CBuffer(AudioFmt aFmt, int aSize, int aRate) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;Fmt = aFmt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Size = aSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Rate = aRate;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WAVEFORMATEX WF;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WF.wFormatTag = WAVE_FORMAT_PCM;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WF.nChannels = CannalsFmt(Fmt);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WF.nSamplesPerSec = Rate;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WF.nAvgBytesPerSec = BytesFmt(Fmt)*Rate;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WF.nBlockAlign = BytesFmt(Fmt);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WF.wBitsPerSample = BitsFmt(Fmt);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WF.cbSize = sizeof(WF);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int R = waveOutOpen(&amp;WO,0,&amp;WF,(UINT)&amp;waveOutCallBack,(UINT)this,CALLBACK_FUNCTION);</div><div class="code_line">&nbsp;&nbsp; &nbsp;assert(R==0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int BufSize = BytesFmt(Fmt)*Size;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Buf = new char [2*BufSize];</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = 0; i &#60; BufSize; i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Buf[i] = random(16000);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = BufSize; i &#60; 2*BufSize; i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Buf[i] = random(100);</div><div class="code_line">&nbsp;&nbsp; &nbsp;} </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = 0; i &#60; 2; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ZeroMemory(&amp;WH[i],sizeof(WAVEHDR));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WH[i].lpData = Buf + i*BufSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WH[i].dwBufferLength = BufSize;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;R = waveOutPrepareHeader(WO,&amp;WH[i],sizeof(WAVEHDR));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;assert(R==0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">CBuffer::~CBuffer()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;waveOutPause(WO);</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = 0; i&#60;2; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;waveOutUnprepareHeader(WO,&amp;WH[i],sizeof(WAVEHDR));</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;waveOutClose(WO);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CBuffer::Play(int n)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int R = waveOutWrite(WO, &amp;WH[n], sizeof(WAVEHDR));</div><div class="code_line">&nbsp;&nbsp; &nbsp;//if (R!=0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;assert((R==0)|(R==33));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CBuffer::Pause()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int R = waveOutPause(WO);</div><div class="code_line">&nbsp;&nbsp; &nbsp;assert(R==0);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CBuffer::Restart()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int R = waveOutRestart(WO);</div><div class="code_line">&nbsp;&nbsp; &nbsp;assert(R==0);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CBuffer::Reset()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;int R = waveOutReset(WO);</div><div class="code_line">&nbsp;&nbsp; &nbsp;assert(R==0);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CBuffer::SetVol(int aVol)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned int V = aVol*256*256+aVol;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int R = waveOutSetVolume(WO,V);</div><div class="code_line">&nbsp;&nbsp; &nbsp;assert(R==0);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int CBuffer::GetBufNum(void *P)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (P==&amp;WH[0]) return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (P==&amp;WH[1]) return 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;assert(false);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return -1;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void *CBuffer::GetBufPtr(int N)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return WH[N].lpData;</div><div class="code_line">&nbsp;&nbsp; &nbsp;//return Buf+N*BufSize;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">CPlayTh::CPlayTh(CPlayer *aPlayer):TThread(true)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Player = aPlayer;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Priority = tpTimeCritical;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SignalDone = CreateEvent(NULL,true,false,NULL);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Resume();</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void __fastcall CPlayTh::Execute()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;do{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;WaitForSingleObject(SignalDone,INFINITE);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ResetEvent(SignalDone);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!Terminated)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Player-&#62;LoadTh();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}while (!Terminated);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CPlayTh::Done()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetEvent(SignalDone);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">void CPlayer::LoadNextFrame(int nBuf)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Wav-&#62;Read( Buf-&#62;GetBufPtr(nBuf) );</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CPlayer::DoneBuf(int n)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;//if (n==0) {n = 1;} else n = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;nBuf = n;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;bool DoneFile = Wav-&#62;GetPos() &#62;= Wav-&#62;GetBufCount();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (!DoneFile)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Th-&#62;Done();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Wnd!=0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PostMessage(Wnd,WM_USER,PM_DONE_BUF,n);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (DoneFile)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PostMessage(Wnd,WM_USER,PM_DONE_FILE,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void __fastcall CPlayer::LoadTh()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;EnterCriticalSection(&amp;CS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int Temp = nBuf;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;LoadNextFrame(Temp);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (Played)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buf-&#62;Play(Temp);</div><div class="code_line">&nbsp;&nbsp; &nbsp;LeaveCriticalSection(&amp;CS);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">CPlayer::CPlayer(CWAVE *aWav, HWND W)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Wav = aWav;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Buf = new CBuffer(Wav-&#62;GetFmt(), Wav-&#62;GetSize(), Wav-&#62;GetRate());</div><div class="code_line">&nbsp;&nbsp; &nbsp;Buf-&#62;pPlayer = this;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;InitializeCriticalSection(&amp;CS);</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetPos(0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Th = new CPlayTh(this);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Paused = false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Played = false;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Wnd = W;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">CPlayer::~CPlayer()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Th-&#62;Terminate();</div><div class="code_line">&nbsp;&nbsp; &nbsp;Th-&#62;Done();</div><div class="code_line">&nbsp;&nbsp; &nbsp;Th-&#62;WaitFor();</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete Th;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;delete Buf;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CPlayer::SetPos(int nPos)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;bool Pl = (Played)&amp;&amp;(!Paused);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Played = false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Paused = false;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;EnterCriticalSection(&amp;CS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Buf-&#62;Reset();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Wav-&#62;SetPos(nPos);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;LoadNextFrame(0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;LoadNextFrame(1);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (Pl)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Play();</div><div class="code_line">&nbsp;&nbsp; &nbsp;LeaveCriticalSection(&amp;CS);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CPlayer::SetVol(int aVol)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Buf-&#62;SetVol(aVol);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CPlayer::Play()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (!Paused)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Buf-&#62;Play(0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Buf-&#62;Play(1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Buf-&#62;Restart();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Paused = false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Played = true;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void CPlayer::Pause()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;Buf-&#62;Pause();</div><div class="code_line">&nbsp;&nbsp; &nbsp;Paused = true;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Ошибка 33 возникает при попытке сменить позицию воспроизведения у плейера, когда он воспроизодит файл.]]></description>
        <author>Суровый</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564471</guid>
        <pubDate>Sun, 18 Jan 2015 12:03:16 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564471</link>
        <description><![CDATA[Prince: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> это по сути не ошибка</div></div><br>
Точно-точно?<br>
Майкрософт говорит, что waveoutwrite вообще такое не умеет возвращать в качестве результата, хотя может у меня sdk устаревший.  :-? <br>
В любом случае, имхо, стоит разобраться, что оно означает, это сообщение, и почему вылазит.<br>
Может, покажете послеовательность действий?]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564470</guid>
        <pubDate>Sun, 18 Jan 2015 12:01:56 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564470</link>
        <description><![CDATA[Славян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=398430&view=findpost&p=3564466'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Prince &#064; <time class="tag-quote__quoted-time" datetime="2015-01-18T11:55:34+00:00">18.01.15, 11:55</time></span><div class='quote '><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Постовил я 33-ю ошибку на игнор, и всё заработало как надо.</div></div><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Вопросы решены.</div></div> :scratch:</div></div> :lool: А вы думали&#33; Силён наш <strong class='tag-b'>Суровый</strong>, силён&#33; :)]]></description>
        <author>Славян</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564469</guid>
        <pubDate>Sun, 18 Jan 2015 11:58:21 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564469</link>
        <description><![CDATA[Суровый: <strong class='tag-b'>Prince</strong>, 33 это по сути не ошибка, а сообщение, что что-то уже(еще) игрет <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-01-18T11:59:27+00:00">18.01.15, 11:59</time></span></span><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#define WAVERR_STILLPLAYING &nbsp; (WAVERR_BASE + 1) &nbsp; &nbsp;/* still something playing */</div></ol></div></div></div></div>]]></description>
        <author>Суровый</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564468</guid>
        <pubDate>Sun, 18 Jan 2015 11:57:33 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564468</link>
        <description><![CDATA[Славян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=398430&view=findpost&p=3564464'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Суровый &#064; <time class="tag-quote__quoted-time" datetime="2015-01-18T11:48:52+00:00">18.01.15, 11:48</time></span><div class='quote '><span class="tag-color tag-color-named" data-value="gray" style="color: gray">Плюсик я тебе завтра поставлю.</span></div></div><div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Э-э-э</div><div class="body">Забейте. Зачтём сегодняшний, политический, как два по поллитра: 1=2*0,5 ;) </div></div>]]></description>
        <author>Славян</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564466</guid>
        <pubDate>Sun, 18 Jan 2015 11:55:34 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564466</link>
        <description><![CDATA[Prince: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Постовил я 33-ю ошибку на игнор, и всё заработало как надо.</div></div><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Вопросы решены.</div></div><br>
 :scratch:]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564464</guid>
        <pubDate>Sun, 18 Jan 2015 11:48:52 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564464</link>
        <description><![CDATA[Суровый: Вопросы решены.<br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray">Славян, вытекает 1 (усройство остается на паузе). Плюсик я тебе завтра поставлю.</span>]]></description>
        <author>Суровый</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564462</guid>
        <pubDate>Sun, 18 Jan 2015 11:45:47 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564462</link>
        <description><![CDATA[Славян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=398430&view=findpost&p=3564461'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Суровый &#064; <time class="tag-quote__quoted-time" datetime="2015-01-18T11:42:48+00:00">18.01.15, 11:42</time></span><div class='quote '>Собственно что из этого:<br>
...<br>
вытекает 1 или 2?</div></div>Увы, я не понял вопроса. :(]]></description>
        <author>Славян</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564461</guid>
        <pubDate>Sun, 18 Jan 2015 11:42:48 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564461</link>
        <description><![CDATA[Суровый: Постовил я 33-ю ошибку на игнор, и всё заработало как надо.<br>
Тут <strong class='tag-b'>Славян</strong> подсказал что надо смотреть WAVERR_ а не MMSYSERR_. И действительно оказалось, что это &quot;Сейчас что-то уже играет&quot;.<br>
<br>
Собственно что из этого:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=398430&view=findpost&p=3564453'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2015-01-18T11:06:11+00:00">18.01.15, 11:06</time></span><div class='quote '>&quot;Хотя устройство и находится на паузе, в ожидании завершения выхода из функции waveOutWrite, воспроизведение начнётся как токмо первые данные придут в него, в устройство.&quot;</div></div><br>
вытекает 1 или 2? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-01-18T11:45:04+00:00">18.01.15, 11:45</time></span></span><br>
<strong class='tag-b'>Prince</strong>, ясно спасибо.]]></description>
        <author>Суровый</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564460</guid>
        <pubDate>Sun, 18 Jan 2015 11:41:58 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564460</link>
        <description><![CDATA[Prince: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Подскажите что там написано.</div></div><br>
Что если устройство не &quot;поставлено на паузу&quot; вызовом соотвествующей функции, то воспроизведение начинается сразу после того, как устроству передан блок данных.]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564453</guid>
        <pubDate>Sun, 18 Jan 2015 11:06:11 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564453</link>
        <description><![CDATA[Славян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=398430&view=findpost&p=3564451'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Суровый &#064; <time class="tag-quote__quoted-time" datetime="2015-01-18T10:26:59+00:00">18.01.15, 10:26</time></span><div class='quote '>Подскажите что там написано.</div></div>&quot;Хотя устройство и находится на паузе, в ожидании завершения выхода из функции <strong class='tag-b'>waveOutWrite</strong>, воспроизведение начнётся как токмо первые данные придут в него, в устройство.&quot; <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-01-18T11:12:29+00:00">18.01.15, 11:12</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=398430&view=findpost&p=3564451'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Суровый &#064; <time class="tag-quote__quoted-time" datetime="2015-01-18T10:26:59+00:00">18.01.15, 10:26</time></span><div class='quote '><strong class='tag-b'>waveOutWrite</strong> возвращает десятичное значение 33. Я нашел описание ошибок только до 21. Как мне узнать описание этой ошибки?</div></div>Наверное, там якобы-битовые разделы:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#define MMSYSERR_BASE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0</div><div class="code_line">#define WAVERR_BASE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;32</div><div class="code_line">#define MIDIERR_BASE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 64</div><div class="code_line">#define TIMERR_BASE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;96</div><div class="code_line">#define JOYERR_BASE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;160</div><div class="code_line">#define MCIERR_BASE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;256</div><div class="code_line">#define MIXERR_BASE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1024</div></ol></div></div></div></div>А потому ваша ошибка 33 означает, что проблема с WAVE-форматом, №1, т.е.<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#define MMSYSERR_ERROR &nbsp; &nbsp; &nbsp; &nbsp;(MMSYSERR_BASE + 1) &nbsp;/* unspecified error */</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2015-01-18T11:20:38+00:00">18.01.15, 11:20</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=398430&view=findpost&p=3564453'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2015-01-18T11:06:11+00:00">18.01.15, 11:06</time></span><div class='quote '>там якобы-битовые разделы</div></div>Тьфу, виноват, слово &#39;якобы&#39; надо зачеркнуть. :blush: Как-то мой мозг быстро не смог поделить 160 на 32, а оказывается делится&#33; Всё нормально: первые 5 бит - на детали ошибки, старшие - на раздел/суть оной. :yes:]]></description>
        <author>Славян</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564451</guid>
        <pubDate>Sun, 18 Jan 2015 10:26:59 +0000</pubDate>
        <title>waveOutWrite и пауза (+вопрос про ошибку)</title>
        <link>https://forum.sources.ru/index.php?showtopic=398430&amp;view=findpost&amp;p=3564451</link>
        <description><![CDATA[Суровый: <a class='tag-url' href='http://msdn.microsoft.com/en-us/library/windows/desktop/dd743876(v=vs.85).aspx' target='_blank'>http://msdn.microsoft.com/en-us/library/wi...6(v=vs.85).aspx</a><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Unless the device is paused by calling the <strong class='tag-b'>waveOutPause</strong> function, playback begins when the first data block is sent to the device.</div></div><br>
Подскажите что там написано.<br>
1 Когда устройство стоит на паузе, вызов <strong class='tag-b'>waveOutWrite</strong> записывает буфер в очередь не запуская воспроизведение (устройство остается на паузе)<br>
2 Когда устройство стоит на паузе, вызов <strong class='tag-b'>waveOutWrite</strong> запускает воспроизведение буфера.<br>
<br>
<br>
<br>
И у меня еще один вопрос про ошибку:<br>
<strong class='tag-b'><br>
waveOutWrite</strong> возвращает десятичное значение 33. Я нашел описание ошибок только до 21. Как мне узнать описание этой ошибки?]]></description>
        <author>Суровый</author>
        <category>Программирование звука</category>
      </item>
	
      </channel>
      </rss>
	