<?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=380653&amp;view=findpost&amp;p=3682014</guid>
        <pubDate>Fri, 19 Aug 2016 10:05:56 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3682014</link>
        <description><![CDATA[Alexei: Не надо ее осиливать, это какие-то проблемы с 64.<br>А у меня проблема я не знаю как сравнить :<br>lParam с &amp;whdr(структура WAVEHDR)<br>Ругается, что я сравниваю не то не с тем. :)]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3681960</guid>
        <pubDate>Thu, 18 Aug 2016 19:22:15 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3681960</link>
        <description><![CDATA[Prince: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>младшие 64р-да совпадают, но у lParam старшие 64 равны 0, а у адреса отправленной структуры в младшем -1.</div></div><br>
Осталось эту странную лексическую конструкцию осилить.]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3681949</guid>
        <pubDate>Thu, 18 Aug 2016 17:58:39 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3681949</link>
        <description><![CDATA[Alexei: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=380653&view=findpost&p=3681942'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Prince &#064; <time class="tag-quote__quoted-time" datetime="2016-08-18T15:08:21+00:00">18.08.16, 15:08</time></span><div class='quote '>В винмобайл?</div></div><br>
Нет. 8.1 (64)]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3681942</guid>
        <pubDate>Thu, 18 Aug 2016 15:08:21 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3681942</link>
        <description><![CDATA[Prince: В винмобайл? Вот прям 64 бита? Да ещё и старшие/младшие?<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>младшие 64р-да совпадают, но у lParam старшие 64 равны 0, а у адреса отправленной структуры в младшем -1. </div></div><br>
Ничего непонятно.]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3681914</guid>
        <pubDate>Thu, 18 Aug 2016 09:54:52 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3681914</link>
        <description><![CDATA[Alexei: Снова реанимировался вопрос про то , как узнать какой буфер только что отыграл.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Параметр lParam содержит адрес структуры WAVEHDR, соответствующей проигранному блоку.</div></div>Это из интернета.<br>
Действительно содержит, только есть небольшое отличие с тем что я отправляю.<br>
Вскрытие показало, что у обоих младшие 64р-да совпадают, но у lParam старшие 64 равны 0, а у адреса отправленной структуры в младшем -1. Можно ее , конечно, придушить, но...]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355773</guid>
        <pubDate>Fri, 13 Sep 2013 07:31:58 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355773</link>
        <description><![CDATA[Prince: И предварительно заправлять несколько буферов в очередь. И позаботиться о том, чтобы после отыгрывания буфера, он был возвращен в очередь до того, как отыграет следующий за ним. Этот пункт накладывает ограничения на минимальный размер буфера. <br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>я нашел здесь ,неподалеку , программку на ВБ . Она прекрасно играет без разрывов. У нее два буфера по 44100(1 сек) . Я помучил ее , она не трещит, если уменьшать до 1800 байт. Кстати, это ~40мС</div></div><br>
Постепенно уменьшая размер буфера, всё больше и больше нагружаем проц и систему, сообщения MM_WOM_DONE сыпятся всё чаще и чаще. Уменьшаем, уменьшаем дальше, и опа, в какой-то момент, приложение не успевает обработать очередной MM_WOM_DONE, и добавить новый буфер в очередь до окончания воспроизведения текущего. Звук рвётся. Этот момент(и минимальный размер буфера, при котором разрывов не будет) зависит от кванта времени, выделяемого приложению виндой, производительности системы и загруженности её работающими параллельно другими процессами. <br>
Почему я говорил про 100 мс. С буфером такой длительности приложение в штатной ситуации никогда не порвёт звук и не сильно нагружает систему. На &quot;больших&quot; компах.]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355616</guid>
        <pubDate>Thu, 12 Sep 2013 16:49:01 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355616</link>
        <description><![CDATA[Alexei: &quot;Семен Семеныч&quot;(с) . Это я тормозил, надо заправлять тот же буфер который только что отыграл... <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">&nbsp;&nbsp; case MM_WOM_DONE: </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;waveOutWrite(hWaveOut,(PWAVEHDR) lParam, sizeof(WAVEHDR));</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355600</guid>
        <pubDate>Thu, 12 Sep 2013 15:49:05 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355600</link>
        <description><![CDATA[Prince: static INT_PTR CALLBACK MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM <strong class='tag-b'>lParam</strong>)<br>
Как оно там в си может выглядеть, я не в курсе.<br>
А вообще, вытягиваение координат из lparam и доступ к элементам буфера(семплам) выглядит(может выглядеть) так:<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">var pb:pbyte:// указатель на байт, который будем использовать для доступа к содержимому буфера;</div><div class="code_line">//устанавливаем указатель на начало буфера(допустим, буфер 8 битный, один канал):</div><div class="code_line">pb:=pbyte(pwavehdr(lparam).lpdata); // приведение типов, сначала lparam к wavehdr, затем lpdata к pbyte;</div><div class="code_line">// дальше чё-то делаем с ним:</div><div class="code_line">for i:=0 to pwavehdr(lparam).dwBufferLength-1 do</div><div class="code_line">Begin</div><div class="code_line">pb:=128;// заполняем текущий семпл &quot;тишиной&quot;</div><div class="code_line">inc(pb)// переходим к следующему семплу</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355584</guid>
        <pubDate>Thu, 12 Sep 2013 14:48:08 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355584</link>
        <description><![CDATA[Alexei: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Точные &quot;координаты&quot; буфера в lparam обрабатываемого месседжа MM_WOM_DONE.</div></div><br>
А доставать lparam как-то заморочисто надо? Что то у меня не получается.]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355564</guid>
        <pubDate>Thu, 12 Sep 2013 13:37:04 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355564</link>
        <description><![CDATA[Alexei: Спасибо&#33; <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">&nbsp;waveOutWrite(hWaveOut, &amp;whdr1, sizeof(whdr1));</div><div class="code_line">//сюда добавить WaveOutWrite(hWaveOut, &amp;whdr2, sizeof(whdr2));</div></ol></div></div></div></div><br>
Это сильно помогло&#33; :)<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Очередь буферов устроена по принципу FIFO.<br>
....<br>
WaveOutWrite не &quot;начинает играть такой-то буфер&quot;, а ставит буфер в конец очереди </div></div><br>
А это очень интересно.]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355526</guid>
        <pubDate>Thu, 12 Sep 2013 12:19:24 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355526</link>
        <description><![CDATA[Prince: Очередь буферов устроена по принципу FIFO.<br>
Сначала нужно поставить в очередь все(несколько) буферы, при помощи wavoutwrite. Когда первый в очереди буфер воспроизведен, он выталкивается из очереди; начинает воспроизводиться следующий за ним, без задержки(теперь этот буфер становится первым в очереди). <br>
Когда буфер вытолкнут из очереди, приложению посылается месседж MM_WOM_DONE, поле lparam которого содержит адрес заголовка буфера. А заголовок, в свою очередь, хранит адрес буфера в lpdata. Его(буфер) можно заполнить новой порцией данных и снова поставить в очередь(в конец очереди) при помощи wavoutwrite.<br>
<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">case IDSTART:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutOpen(&amp;hWaveOut, WAVE_MAPPER, &amp;wfx, (UINT)hwndDlg, 0L, CALLBACK_WINDOW);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//...</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutPrepareHeader(hWaveOut, &amp;whdr1, sizeof(WAVEHDR));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutPrepareHeader(hWaveOut, &amp;whdr2, sizeof(WAVEHDR));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutWrite(hWaveOut, &amp;whdr1, sizeof(whdr1));</div><div class="code_line">//сюда добавить WaveOutWrite(hWaveOut, &amp;whdr2, sizeof(whdr2)); </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return TRUE;</div></ol></div></div></div></div><br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Это для того чтобы решить , какой буфер играть.</div></div><br>
См. выше. Какая-то специальная нумерация буферов не нужна(когда-то я тоже такие костыли изобретал). Точные &quot;координаты&quot; буфера   в lparam обрабатываемого месседжа MM_WOM_DONE.<br>
MM_WOM_DONE не указывает &quot;какой буфер играть&quot;, а сообщает о том, что &quot;такой-то буфер уже отыграл, дальше делайте с ним, что хотите&quot;.<br>
WaveOutWrite не &quot;начинает играть такой-то буфер&quot;, а ставит буфер в конец очереди [буферов]. Поставленный в очередь буфер начинает воспроизводиться сразу только в том случае, если очередь была пуста, и воспроизведение не остановлено при помощи WaveOutPause.]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355312</guid>
        <pubDate>Thu, 12 Sep 2013 07:38:02 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355312</link>
        <description><![CDATA[Alexei: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Выкладывайте весь кусок </div></div><br>
Все целиком.<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 WIN32_LEAN_AND_MEAN</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">#include &#60;windows.h&#62;</div><div class="code_line">#include &#60;windowsx.h&#62;</div><div class="code_line">#include &#60;commctrl.h&#62;</div><div class="code_line">#include &#60;tchar.h&#62;</div><div class="code_line">#include &#60;mmsystem.h&#62;</div><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#include &quot;main.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">#pragma comment(lib, &quot;winmm.lib&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line">#define UNICODE</div><div class="code_line">#define NELEMS(a) &nbsp;(sizeof(a) / sizeof((a)[0]))</div><div class="code_line">#define nRate &nbsp; 44100</div><div class="code_line">#define nBits &nbsp; 8</div><div class="code_line">#define nBytesPerSample &nbsp; &nbsp; &nbsp;nBits / 8</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">#define nBytes &nbsp; &nbsp; 10000 //</div><div class="code_line">&nbsp;</div><div class="code_line">/** Prototypes **************************************************************/</div><div class="code_line">&nbsp;</div><div class="code_line">static INT_PTR CALLBACK MainDlgProc(HWND, UINT, WPARAM, LPARAM);</div><div class="code_line">&nbsp;</div><div class="code_line">/** Global variables ********************************************************/</div><div class="code_line">&nbsp;</div><div class="code_line">static HANDLE ghInstance;</div><div class="code_line">HWAVEOUT hWaveOut;</div><div class="code_line">&nbsp;</div><div class="code_line">WAVEFORMATEX wfx; // для получения описателя звукового устройства:</div><div class="code_line">WAVEHDR &nbsp;whdr1;</div><div class="code_line">WAVEHDR &nbsp;whdr2;</div><div class="code_line">static UCHAR &nbsp; &nbsp;Buffer1[nBytes];</div><div class="code_line">static UCHAR &nbsp; &nbsp;Buffer2[nBytes];</div><div class="code_line">UCHAR &nbsp; numBuff ;</div><div class="code_line">/****************************************************************************</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* Function: WinMain &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* Purpose : Initialize the application. &nbsp;Register a window class, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; create and display the main window and enter the &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; message loop. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* History : Date &nbsp; &nbsp; &nbsp;Reason &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 00/00/00 &nbsp;Created &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;****************************************************************************/</div><div class="code_line">&nbsp;</div><div class="code_line">int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;INITCOMMONCONTROLSEX icc;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WNDCLASSEX wcx;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ghInstance = hInstance;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;icc.dwSize = sizeof(icc);</div><div class="code_line">&nbsp;&nbsp; &nbsp;icc.dwICC = ICC_WIN95_CLASSES /*|ICC_COOL_CLASSES|ICC_DATE_CLASSES|ICC_PAGESCROLLER_CLASS|ICC_USEREX_CLASSES|... */;</div><div class="code_line">&nbsp;&nbsp; &nbsp;InitCommonControlsEx(&amp;icc);</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wcx.cbSize = sizeof(wcx);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (!GetClassInfoEx(NULL, MAKEINTRESOURCE(32770), &amp;wcx))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;wcx.hInstance = hInstance;</div><div class="code_line">&nbsp;&nbsp; &nbsp;wcx.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDR_ICO_MAIN));</div><div class="code_line">&nbsp;&nbsp; &nbsp;wcx.lpszClassName = _T(&quot;ppmClass&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (!RegisterClassEx(&amp;wcx))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* The user interface is a modal dialog box */</div><div class="code_line">&nbsp;&nbsp; &nbsp;return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)MainDlgProc);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">/****************************************************************************</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* Function: MainDlgProc &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* Purpose : Process messages for the Main dialog. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* History : Date &nbsp; &nbsp; &nbsp;Reason &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 00/00/00 &nbsp;Created &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*</div><div class="code_line">&nbsp;****************************************************************************/</div><div class="code_line">&nbsp;</div><div class="code_line">static INT_PTR CALLBACK MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;switch (uMsg)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_INITDIALOG:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * TODO: Add code to initialize the dialog.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (UINT i = 0; i &#60; nBytes; i++) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if((i/100)%2)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buffer1[i] = 255;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buffer1[i] = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (UINT i = 0; i &#60; nBytes; i++) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if((i/10)%2)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buffer2[i] = 255;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buffer2[i] = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;wfx.wFormatTag = WAVE_FORMAT_PCM; &nbsp; // wav-формат</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;wfx.nChannels = 1; // моно - звук</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;wfx.nSamplesPerSec = nRate; // 44100 Гц</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;wfx.nAvgBytesPerSec = nBytesPerSample * nRate; // байт в секунду</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;wfx.nBlockAlign = nBytesPerSample;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;wfx.wBitsPerSample = nBits; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;wfx.cbSize = 0; // For only WAVE_FORMAT_PCM formats, this member is ignored</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;numBuff=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return TRUE;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_SIZE:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * TODO: Add code to process resizing, when needed.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return TRUE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;case MM_WOM_DONE: </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (numBuff==0) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutWrite(hWaveOut, &amp;whdr1, sizeof(whdr1));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;numBuff=1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;numBuff=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutWrite(hWaveOut, &amp;whdr2, sizeof(whdr2));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return TRUE;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_COMMAND:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;switch (GET_WM_COMMAND_ID(wParam, lParam))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * TODO: Add more control ID&#39;s, when needed.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case IDSTART:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutOpen(&amp;hWaveOut, WAVE_MAPPER, &amp;wfx, (UINT)hwndDlg, 0L, CALLBACK_WINDOW);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;whdr1.lpData = (LPSTR)Buffer1; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;whdr1.dwBufferLength = nBytes; // размер буфера в байтах.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;whdr1.dwFlags = 0; // Буфер подготовлен (зафиксирован в памяти)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;whdr1.dwLoops = 0; // &nbsp;без циклов, поле должно быть нулевым.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;whdr2.lpData = (LPSTR)Buffer2; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;whdr2.dwBufferLength = nBytes; // размер буфера в байтах.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;whdr2.dwFlags = 0; // Буфер подготовлен (зафиксирован в памяти)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;whdr2.dwLoops = 0; // &nbsp;без циклов, поле должно быть нулевым.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutPrepareHeader(hWaveOut, &amp;whdr1, sizeof(WAVEHDR));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutPrepareHeader(hWaveOut, &amp;whdr2, sizeof(WAVEHDR));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutWrite(hWaveOut, &amp;whdr1, sizeof(whdr1));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return TRUE;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case IDOK:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;EndDialog(hwndDlg, TRUE);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutUnprepareHeader (hWaveOut, &amp;whdr1, sizeof(WAVEHDR));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutUnprepareHeader (hWaveOut, &amp;whdr2, sizeof(WAVEHDR));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutReset (hWaveOut);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutClose (hWaveOut);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return TRUE;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case WM_CLOSE:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;EndDialog(hwndDlg, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return TRUE;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;/*</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; * TODO: Add more messages, when needed.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; */</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return FALSE;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>numBuff не нужен, и такой способ идентификации ненадёжен.</div></div><br>
Это для того чтобы решить , какой буфер играть.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>В смысле, пауза в 40 мс между окончанием одного буфера и началом следущего?</div></div><br>
Да.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Создайте 5 буферов по 0.5 с</div></div><br>
Не думаю, что в этом есть смысл , я нашел здесь ,неподалеку , программку на ВБ . Она прекрасно играет без разрывов. У нее два буфера по 44100(1 сек) . Я помучил ее , она не трещит, если уменьшать до 1800 байт. Кстати, это ~40мС. :)]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355161</guid>
        <pubDate>Wed, 11 Sep 2013 17:37:20 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3355161</link>
        <description><![CDATA[Prince: Имхо, что-то не то или не так делаете. Выкладывайте весь кусок от waveinopen с обработкой сообщений. Код, заполняющий буфер, не нужен. Просто камент поставьте &quot;тут записываем в такой-то буфер такие-то данные&quot;.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> if (numBuff==0) <br>
            {<br>
                waveOutWrite(hWaveOut, &amp;whdr1, sizeof(whdr1));<br>
                numBuff=1;<br>
            }</div></div></div></div><br>
lParam = (LONG) lpwvhdr. Т.е., адрес заголовка и буфера у вас и так есть. numBuff не нужен, и такой способ идентификации ненадёжен. <br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Посмотрел осциллом- теже 40мс между переключениями.</div></div><br>
В смысле, пауза в 40 мс между окончанием одного буфера и началом следущего?<br>
Создайте 5 буферов по 0.5 с, заполните их значениями непрерывной синусоиды, и поставьте в очередь.<br>
Если разрывов не будет, значит вы накосячили, если разрывы останутся, значит, девайс косячит, но я в этом сомневаюсь.]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3354925</guid>
        <pubDate>Wed, 11 Sep 2013 07:45:17 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3354925</link>
        <description><![CDATA[Alexei: Попробовал играть меандр на Си , получилось чуть лучше, но тоже щелкает.Два буфера по 5000 байт,пробовал увеличить в двое -без изменений.Сделал через CALLBACK_WINDOW<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">case MM_WOM_DONE: </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (numBuff==0) </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutWrite(hWaveOut, &amp;whdr1, sizeof(whdr1));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;numBuff=1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;numBuff=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waveOutWrite(hWaveOut, &amp;whdr2, sizeof(whdr2));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return TRUE;</div></ol></div></div></div></div><br>
Может можно что-то получше?<br>
И что быстрее через окно или функцию?<br>
<br>
В структуре WAVEHDR есть зарезервированное lpNext , наверно указатель на структуру следуущего буфера.Думаю, это то что мне подошло БЫ. :yes-sad:<br>
<br>
Посмотрел осциллом- теже 40мс между переключениями.  :wall:  :no-sad:]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353750</guid>
        <pubDate>Fri, 06 Sep 2013 12:58:02 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353750</link>
        <description><![CDATA[Alexei: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>лучше взял 3 буфера по 4096.</div></div><br>
3 буфера будут сильно замедлять реакцию на органы управления.А щелчки , я же не слушать их буду, главное чтобы они не мешали находить среди них правльные импульсы.]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353736</guid>
        <pubDate>Fri, 06 Sep 2013 12:23:54 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353736</link>
        <description><![CDATA[Pavia: В виндоуме работа со зауком это шаманство. Так как не отгадаешь что и как будет работать. Вот второй вариант с 2 буферами возможен. Но я бы лучше взял 3 буфера по 4096. Пока первый ишрается, третий заполняем. Второй должен быть отдаем на исполнение, до того как 1 начнёт играть. Тройной буфер нуден для того чтобы небыло барьера. Т.е. щелчков.<br>А размер должен быть кратен странице иначе поведение плохо предсказуемо. Про размер буфера насколько помню это оговарено в документации.]]></description>
        <author>Pavia</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353729</guid>
        <pubDate>Fri, 06 Sep 2013 12:00:09 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353729</link>
        <description><![CDATA[Alexei: Как оказалось дело не в &quot;бабине&quot;, то есть не совсем в ней. Я сначала сделал буфер в 5000байт , и теже ~40мС остались. После чего я посмотрел работу программы этого пограмиста , там щелкают  теже 40мс.<br>Так что , возможно , шансы есть.<br>Я хотел сделать так: создать 2-3 десятка 100 байтных буферов, занести в них образы импульсов разной скважности(больше- меньше разных градаций и нейтраль) , и каждый раз подсовывать нужный буфер соответствующий значению   команды текущего канала.<br>Второй вариант : сделать два буфера длиною в полную посылку~20мС ,заранее заполненых нейтральными значениями, и пока один &quot;играет&quot; второй дописывать нужным колвом &quot;0&quot; или &quot;1&quot; в нужных местах .]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353553</guid>
        <pubDate>Fri, 06 Sep 2013 06:25:19 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353553</link>
        <description><![CDATA[Prince: В идеале, картина должна бы выглядеть так:<br>в очереди крутятся 2 буфера, длительностью 20 мс каждый, равной длине посылки.<br>когда буфер освобождается, происходит опрос органов управления, заполнение пустого буфера новой посылкой и постановка его в очередь.<br><br>Тогда время реакции на действия пилота было бы в районе 40 мс. А опрос органов управления и формирование посылки были бы синхронизированы.<br>Но такой короткий буфер, девайс, вероятно, не потянет(но всё же попробуйте). <br><br>А если длительность буфера больше длительности посылки, пусть даже кратной 20 мс, придётся разделить опрос органов управления и процесс заполнения буфера и озадачиться синхронизацией очереди буферов и очереди управляющих команд. Как такой вариант реализовать, в деталях пока без понятия. Возможно, есть вариант более красивый, но с ходу его не вижу.]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353466</guid>
        <pubDate>Thu, 05 Sep 2013 18:02:24 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353466</link>
        <description><![CDATA[Prince: А, да, 2мс.  :) Это даже не ничто, а ничего от ничто.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Это невыносимо долго.  </div></div><br>
Невыносимо долго ЧТО? Невыносимо долго для чего? <br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Есть мысль удлинить до 20мС -заполнять буфер сразу всей посылкой.</div></div><br>
Интуитивно догадываюсь, что вам нужно поработать над алгоримтом формирования сигнала, он не должен в идеале зависеть от длительности буфера.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Через сообщение главному окну, кажется, я не сильно вникал. В оригинале эта программка делала синус и потрескивала. Думаю, из-за незаконченности синуса в буфере.</div></div><br>
Не, так вы вникните, механизм подсовывания важен вообще, его реализация т.е., а не способ(окно, поток, функция) уведомления только. <br>
Сколько в очереди буферов крутится вообще? Сколько в очереди находятся одновременно? Как происходит заполнение буфера, кто является инициатором процесса?]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353456</guid>
        <pubDate>Thu, 05 Sep 2013 17:50:58 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353456</link>
        <description><![CDATA[Alexei: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=380653&view=findpost&p=3353440'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Prince &#064; <time class="tag-quote__quoted-time" datetime="2013-09-05T17:05:45+00:00">05.09.13, 17:05</time></span><div class='quote '> 100 байт выплюнутся за 22 мс</div></div><br>
Я вообще то расчитывал на 2,2мС :), и осцил показывает , что так и есть.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Хотя бы 100 мс</div></div><br>
Это невыносимо долго.  :no-sad: Есть мысль удлинить до 20мС -заполнять буфер сразу всей посылкой.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Механизм подсовывания очень важен.</div></div><br>
Через сообщение главному окну, кажется, я не сильно вникал. В оригинале эта программка делала синус и потрескивала. Думаю, из-за незаконченности синуса в буфере.]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353440</guid>
        <pubDate>Thu, 05 Sep 2013 17:05:45 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353440</link>
        <description><![CDATA[Prince: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Делал я так: Создал несколько 100 байтовых массивов , забил в них 0 и 255, в нужном кол-ве и поочередно их подсовывал. Частота 44100.</div></div><br>
Механизм подсовывания очень важен.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Делал я так: Создал несколько 100 байтовых массивов , забил в них 0 и 255, в нужном кол-ве и поочередно их подсовывал. Частота 44100.</div></div><br>
Хотя бы 100 мс(а не байт). Тем паче, что девайс маломощный. 100 байт - это ну совсем ничего.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> виндоуз с такими маленькими буферами не работает?</div></div><br>
Винда мноозадачная, 100 байт выплюнутся за 22 мс, нужен следующий буфер, а ваше приложение в отключке, потому что процессорное время уже отдано другому процессу. <br>
100 мс буфер(или больше) и правильный механизм подсовывания - ключ к успеху.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Чего тут не понять?   Стандартный модельный протокол PPM.</div></div><br>
Даже если б я его знал назубок, пот такому описаниюи вряд ли бы догадался.  :-?]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353413</guid>
        <pubDate>Thu, 05 Sep 2013 14:07:01 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353413</link>
        <description><![CDATA[Pavia: Скорее всего железка требует буфер кратный 4096 отсюда 4096/(2*44100)~46 мс. Можно в таймере попробовать писать изменения в буфере после того как отдали его на обработку, но не факт что взлетит(заработае ).]]></description>
        <author>Pavia</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353350</guid>
        <pubDate>Thu, 05 Sep 2013 11:56:48 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3353350</link>
        <description><![CDATA[Alexei: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=380653&view=findpost&p=3346385'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Prince &#064; <time class="tag-quote__quoted-time" datetime="2013-08-14T20:13:04+00:00">14.08.13, 20:13</time></span><div class='quote '>Ничего непонятно, но не суть. Протокол обмена можно потом додумать.</div></div><br>
Чего тут не понять?  :blink:  :o Стандартный модельный протокол PPM.<br>
Каждые 20мС передается посылка , состоящая из длинного импульса 3-4мс (маркер начала)и канальных импульсов . Длительночть последних определяет положение рулей , скорость вращения моторов...<br>
1,5мс -нейтраль , +- до 0,5 от нее -отклонение рулей в ту или другую сторону. как-то так.<br>
Я по эксперементировал тут (нашел исходник на басике  c WaveOut, подрихтовал ) Результат плачевный. :&#39;( <br>
Сами импульсы разной скважности получаются хорошо, но растояние между ними 40мС. :&#39;( <br>
Делал я так: Создал несколько 100 байтовых массивов , забил в них 0 и 255, в нужном кол-ве и поочередно их подсовывал. Частота 44100.<br>
Это я чего-то не так делаю,бэйсик тормозит или виндоуз с такими маленькими буферами не работает?]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3346385</guid>
        <pubDate>Wed, 14 Aug 2013 20:13:04 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3346385</link>
        <description><![CDATA[Prince: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Надо получить циклическую последовательность импульсов 1-3мС с дискретностью 0.1мС</div></div><br>
Ничего непонятно, но не суть. Протокол обмена можно потом додумать.<br>
А вывод звука под винмобайл возможен при помощи всё тех же <a class='tag-url' href='http://msdn.microsoft.com/en-us/library/aa909811.aspx' target='_blank'>Waveform Audio Functions</a> Во всяком случае, попробуйте. Начните с waveOutGetNumDevs и waveOutGetDevCaps.<br>
Или при помощи PlaySound попробуйте &quot;побибикать&quot; под винмобайл. <br>
Если фунции отработают, то и прочими из списка можно воспользоваться.]]></description>
        <author>Prince</author>
        <category>Программирование звука</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3346090</guid>
        <pubDate>Wed, 14 Aug 2013 09:28:51 +0000</pubDate>
        <title>Создание прямоугольных импульсов разной длительности</title>
        <link>https://forum.sources.ru/index.php?showtopic=380653&amp;view=findpost&amp;p=3346090</link>
        <description><![CDATA[Alexei: Хочу сделать <a class='tag-url' href='http://www.kickstarter.com/projects/peterseid/romo-the-smartphone-robot' target='_blank'>подобное</a>, только на морально устаревающем смартфоне с винмобаил 6.1.<br>
Надо получить циклическую последовательность импульсов 1-3мС с дискретностью 0.1мС и, с возможностью независимого их изменения.<br>
Возможно,надо заранее создать 10 байтовых массивов и подключать нужный.Может кто подскажет, как подобное реализовать с минимальной загрузкой цпу.<br>
Надеюсь,сама идея кого-нибудь заинтересует, т.к. телефоны имеют камеры ,вай-фай,жпс,акселерометр, и совсей этой :) можно попытаться взлететь , ну или хотябы поползти...<br>
<br>
ПС В &quot;железе&quot; я разбираюсь чуть лучше и возможна кооперация.]]></description>
        <author>Alexei</author>
        <category>Программирование звука</category>
      </item>
	
      </channel>
      </rss>
	