<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>DIGI fails after MIDI under DOS</title>
		<link>http://www.allegro.cc/forums/view/587678</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 23 Sep 2006 18:42:18 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have run various test programs, following the examples, to play a wav file, then a MIDI (with or without loading of patches), then play a wav file again. The first wav play is fine. MIDI is fine. The final wav always fails. I have used remove_sound, and remove_keyboard, remove_timer (after destroy_midi) in the MIDI function, followed by the install counterparts in the wav routine, tried MIDI independently as a child process, tried repeating Allegro initialization, even having a test program shut down with an atexit routine to call a batch to restart. </p><p>The only thing that works is letting the program exit and manually calling it again, whereupon it plays the first wav, then the MIDI, then fails with the second call to play a wav. I&#39;ve tried even combining them in turn in main, leaving keyboard and timer installed. I&#39;ve tried double installation and the appropriate _NONE calls. </p><p>I normally have MIDI as a child process and DIGI as a function in my program. It took a while to notice that the normal sounds weren&#39;t working after MIDI play, since MIDI is used by the alarm clock, and I or a user wouldn&#39;t normally touch the computer for a while after shutting off the alarm. Actually, the MP3 and voice alarm options get more usage than MIDI. No problem with them. </p><p>At first I thought it was a bug in my program. Then I made various tests, mentioned above. I thought remove_sound, if the MIDI routine were in the main program, or return 0 from main if a child process, would be enough to put MIDI to bed when finished. One thing I just thought of to try is exit(0) instead of return 0 in the child version. </p><p>I checked the old threads back to 1999 for this question. Didn&#39;t see it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bill Morris)</author>
		<pubDate>Fri, 22 Sep 2006 12:20:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you have some code we could look at?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Sirocco)</author>
		<pubDate>Fri, 22 Sep 2006 16:42:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s a test. It plays the first wav then the MIDI but fails on the second wav. It displays all three messages to show it has bypassed the places where the usual error messages would be for an install_sound() or other such failure. It gets caught and needs a keypress while attemting play_sample() for the second wav. If I rem out the MIDI call in main(), it plays the two wavs and exits normally. </p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;stdlib.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include "allegro.h"</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">int</span> PlayWav<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span>filespec<span class="k2">)</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span></td></tr><tr><td class="number">6</td><td>  <a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a> <span class="k3">*</span>the_sample<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  <span class="k1">int</span> pan<span class="k3">=</span><span class="n">128</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  <span class="k1">int</span> pitch<span class="k3">=</span><span class="n">1000</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">int</span> progress<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  <a href="http://www.allegro.cc/manual/set_volume" target="_blank"><span class="a">set_volume</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/install_sound" target="_blank"><span class="a">install_sound</span></a><span class="k2">(</span>DIGI_AUTODETECT, MIDI_NONE, NULL<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  the_sample<span class="k3">=</span><a href="http://www.allegro.cc/manual/load_sample" target="_blank"><span class="a">load_sample</span></a><span class="k2">(</span>filespec<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>the_sample<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Attempting to play %s\n"</span>, filespec<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <a href="http://www.allegro.cc/manual/play_sample" target="_blank"><span class="a">play_sample</span></a><span class="k2">(</span>the_sample, <span class="n">255</span>, pan, pitch, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  <span class="k1">do</span> <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>    progress<span class="k3">=</span><a href="http://www.allegro.cc/manual/voice_get_position" target="_blank"><span class="a">voice_get_position</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>    <span class="k1">if</span><span class="k2">(</span> progress <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span> <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>    <a href="http://www.allegro.cc/manual/poll_keyboard" target="_blank"><span class="a">poll_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>  <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_SPACE<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td>  <a href="http://www.allegro.cc/manual/destroy_sample" target="_blank"><span class="a">destroy_sample</span></a><span class="k2">(</span>the_sample<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>  <a href="http://www.allegro.cc/manual/remove_sound" target="_blank"><span class="a">remove_sound</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  <a href="http://www.allegro.cc/manual/remove_timer" target="_blank"><span class="a">remove_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>  <a href="http://www.allegro.cc/manual/remove_keyboard" target="_blank"><span class="a">remove_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>  <span class="k1">return</span><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td><span class="k2">}</span></td></tr><tr><td class="number">32</td><td><span class="k1">int</span> PlayMidi<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span>filespec<span class="k2">)</span></td></tr><tr><td class="number">33</td><td><span class="k2">{</span></td></tr><tr><td class="number">34</td><td>  <a href="http://www.allegro.cc/manual/MIDI" target="_blank"><span class="a">MIDI</span></a> <span class="k3">*</span>the_music<span class="k2">;</span></td></tr><tr><td class="number">35</td><td>&#160;</td></tr><tr><td class="number">36</td><td>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>  <a href="http://www.allegro.cc/manual/set_volume_per_voice" target="_blank"><span class="a">set_volume_per_voice</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/install_sound" target="_blank"><span class="a">install_sound</span></a><span class="k2">(</span>DIGI_NONE, MIDI_AUTODETECT, NULL<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>  <a href="http://www.allegro.cc/manual/set_volume" target="_blank"><span class="a">set_volume</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>  the_music<span class="k3">=</span><a href="http://www.allegro.cc/manual/load_midi" target="_blank"><span class="a">load_midi</span></a><span class="k2">(</span>filespec<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>the_music<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Attempting to play %s\n"</span>, filespec<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>  <a href="http://www.allegro.cc/manual/play_midi" target="_blank"><span class="a">play_midi</span></a><span class="k2">(</span>the_music, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>  <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>  <a href="http://www.allegro.cc/manual/destroy_midi" target="_blank"><span class="a">destroy_midi</span></a><span class="k2">(</span>the_music<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>  <a href="http://www.allegro.cc/manual/remove_sound" target="_blank"><span class="a">remove_sound</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>  <a href="http://www.allegro.cc/manual/remove_timer" target="_blank"><span class="a">remove_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>  <a href="http://www.allegro.cc/manual/remove_keyboard" target="_blank"><span class="a">remove_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>  <span class="k1">return</span><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td><span class="k2">}</span></td></tr><tr><td class="number">53</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">54</td><td><span class="k2">{</span></td></tr><tr><td class="number">55</td><td>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>  PlayWav<span class="k2">(</span><span class="s">"McCoy.wav"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>  PlayMidi<span class="k2">(</span><span class="s">"Mydir.mid"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>  PlayWav<span class="k2">(</span><span class="s">"standing.wav"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td><span class="k2">}</span></td></tr><tr><td class="number">61</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bill Morris)</author>
		<pubDate>Sat, 23 Sep 2006 02:38:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code">progress<span class="k3">=</span><a href="http://www.allegro.cc/manual/voice_get_position" target="_blank"><span class="a">voice_get_position</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></span><br />That&#39;s wrong, as you&#39;re not always gauranteed to get the 1st (0th?) voice, and play_sample automatically deallocates the voice when it&#39;s done playing.<br />Instead, what you should do is:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> voice_num <span class="k3">=</span> <a href="http://www.allegro.cc/manual/play_sample" target="_blank"><span class="a">play_sample</span></a><span class="k2">(</span>the_sample, <span class="n">255</span>, pan, pitch, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">while</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/voice_check" target="_blank"><span class="a">voice_check</span></a><span class="k2">(</span>voice_num<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> NULL <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
   <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Sat, 23 Sep 2006 05:55:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank, Kitty Cat. </p><p>I added that to the test program and will check voice_num in the real program. </p><p>But I still need better cleanup at the end of that MIDI routine. </p><p>I found a dirty solution. In the test program above I followed PlayMidi() with a spawnl() to MpxPlay, after which the PlayWav() above was back in business. Otherwise it still hangs after MIDI, and I&#39;ve got it displaying voice_num.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bill Morris)</author>
		<pubDate>Sat, 23 Sep 2006 13:27:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Why on earth are deinitialising everything at the end of one of those functions?<br />Initialise everything at the beginning of the program and deinitialise it at the end (or let allegro_exit() do that).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Sat, 23 Sep 2006 13:30:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have been using the MIDI program as a child process. The above is just one test program I&#39;m using to look for a solution. Somewhere in the MIDI portion above, something is wrong.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bill Morris)</author>
		<pubDate>Sat, 23 Sep 2006 18:42:18 +0000</pubDate>
	</item>
</rss>
