<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Stopping sounds when switching out of my app.</title>
		<link>http://www.allegro.cc/forums/view/594264</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 12 Dec 2007 01:50:36 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,</p><p>Whenever I switch out of my program (Allegro 4.2.2, Windows 2000) using ALT-TAB the sound-buffer is looped continuously so the currently playing collection of samples stutters until I switch back to the program. This happens in both windowed and fullscreen modes. This also happens when I focus another window. As well as my app, it happens in the Allegro demo-game too. Midis however do manage to silence themselves when switched out - it&#39;s just the samples that keep looping.</p><p>I tried writing a switch-out callback that loops through all my samples and stop_sample()&#39;s them, but this does not work when switching out. However, when I call the function for doing so from within the main context of the program it successfully stops all sounds. I also placed a TRACE-message in my switch-out handler, and the message is printed in the debug-window before the app is switched out. This means that both the code for stopping the samples and the switch-out callback appear to be working.</p><p>Here&#39;s the code I use for stopping the sound
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span>
chStopAllSounds<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">int</span> nI<span class="k2">;</span>
  <span class="k1">int</span> nNumSounds <span class="k3">=</span> _chGetNumSamples<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  
  <span class="k1">for</span><span class="k2">(</span>nI<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>nI<span class="k3">&lt;</span>nNumSounds<span class="k2">;</span>nI<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
  <span class="k2">{</span>
    ChSFXDatum <span class="k3">*</span>sfxdp <span class="k3">=</span> <span class="k3">&amp;</span><span class="k2">(</span>g_sfxdaTheSoundEffects<span class="k2">[</span>nI<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/stop_sample" target="_blank"><span class="a">stop_sample</span></a><span class="k2">(</span>sfxdp-&gt;splTheSample<span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>

Here&#39;s the switch-out callback:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> 
aeSwitchOutCallback<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="k2">{</span>
  <span class="c">/* Stop all sounds */</span>
  chStopAllSounds<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

  <a href="http://www.allegro.cc/manual/TRACE" target="_blank"><span class="a">TRACE</span></a><span class="k2">(</span>TPREFIX_I <span class="s">"A display switch-out message was recieved.\n"</span><span class="k2">)</span><span class="k2">;</span>

<span class="k2">}</span>
</pre></div></div><p>

And finally, the code for setting up the switch-out callback
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>AERETVAL</td></tr><tr><td class="number">2</td><td>aeSetDisplaySwitchCallbacksIfNeeded<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">3</td><td><span class="k2">{</span></td></tr><tr><td class="number">4</td><td>  <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span><span class="k3">!</span>g_bRemoveSwitchInCallback<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span><span class="k3">!</span>g_bRemoveSwitchOutCallback<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>  <span class="c">/* Set up a callback for when the app is switched back in. */</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/set_display_switch_callback" target="_blank"><span class="a">set_display_switch_callback</span></a><span class="k2">(</span>SWITCH_IN, aeSwitchInCallback<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">10</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>    <a href="http://www.allegro.cc/manual/TRACE" target="_blank"><span class="a">TRACE</span></a><span class="k2">(</span>TPREFIX_E <span class="s">"No SWITCH_IN callback was set.\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    <span class="k1">return</span> AERVAL_AIEEE<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>  g_bRemoveSwitchInCallback <span class="k3">=</span> TRUE<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>  <span class="c">/* Set up a callback for when the app is switched out. */</span></td></tr><tr><td class="number">20</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/set_display_switch_callback" target="_blank"><span class="a">set_display_switch_callback</span></a><span class="k2">(</span>SWITCH_OUT, aeSwitchOutCallback<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">21</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>    <a href="http://www.allegro.cc/manual/TRACE" target="_blank"><span class="a">TRACE</span></a><span class="k2">(</span>TPREFIX_E <span class="s">"No SWITCH_OUT callback was set.\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    <span class="k1">return</span> AERVAL_AIEEE<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td>  g_bRemoveSwitchOutCallback <span class="k3">=</span> TRUE<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>&#160;</td></tr><tr><td class="number">30</td><td>  <span class="k1">return</span> AERVAL_YOOPY<span class="k2">;</span></td></tr><tr><td class="number">31</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

And finally, the code for initialising the Allegro sound-engine
</p><div class="source-code snippet"><div class="inner"><pre>  <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_AUTODETECT, NULL<span class="k2">)</span><span class="k2">)</span>
  <span class="k2">{</span>
    <a href="http://www.allegro.cc/manual/TRACE" target="_blank"><span class="a">TRACE</span></a><span class="k2">(</span>TPREFIX_E <span class="s">"Error Initialising Sound: %s\n"</span>, <a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span>
    <span class="k1">return</span> AERVAL_AIEEE<span class="k2">;</span>  <span class="c">// Sound-related error-message instead?</span>
  <span class="k2">}</span>
</pre></div></div><p>


The Allegro sound-driver used is <tt>AXA</tt> and the MIDI driver is <tt>W32M</tt></p><p>Anyone know how to make the sound stop playing when I switch out?</p><p>AE.</p><p>[EDIT: PS. My soundcard is a &quot;SB Live! Value&quot;]
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Tue, 04 Dec 2007 22:41:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is there any reason you can&#39;t use set_display_switch_mode(SWITCH_BACKGROUND)? Then you wouldn&#39;t have to worry about stopping the sounds.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Tue, 04 Dec 2007 23:08:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The sound shouldn&#39;t necessarily stop playing when you switch out. I know that Counter-Strike: Source&#39;s sounds continue even after you switch out. However, if the sounds are looping erroneously or something that would be a problem.</p><p>Otherwise, I wouldn&#39;t worry about silencing the game when you switch. Games are generally not intended to be running unless the user is playing them. If they are playing them they probably want the sound (unless they don&#39;t in which case they can either mute the system or mute your game (if that functionality exists).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Tue, 04 Dec 2007 23:56:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What you experience is not the normal behavior.<br />I tested with the Allegro demo (which doesn&#39;t call any specific set_display_switch_callback() nor set_display_switch_mode()), and Allegro suspends MIDI, and cuts all sounds short. Sounds do not resume on return.<br />Win98, though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Wed, 05 Dec 2007 01:36:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Elverion said:</div><div class="quote"><p>

Is there any reason you can&#39;t use set_display_switch_mode(SWITCH_BACKGROUND)? Then you wouldn&#39;t have to worry about stopping the sounds.
</p></div></div><p>
What if I&#39;m running fullscreen and I don&#39;t want the action to continue while my game is minimised? I could of course set a flag in my switch out callback that pauses the game and resumes it on switch-in, but would prefer just to make the sounds stop.</p><div class="quote_container"><div class="title">bamccaig said:</div><div class="quote"><p>

However, if the sounds are looping erroneously or something that would be a problem.
</p></div></div><p>
That&#39;s what they&#39;re doing. The sound-buffer just keeps looping continuously until I return to my game.</p><div class="quote_container"><div class="title">bamccaig said:</div><div class="quote"><p>

Otherwise, I wouldn&#39;t worry about silencing the game when you switch. Games are generally not intended to be running unless the user is playing them.
</p></div></div><p>
But the point is that the stuttering sound-buffer is annoying and should be silenced automatically.</p><div class="quote_container"><div class="title">Audric said:</div><div class="quote"><p>

Win98, though.
</p></div></div><p>
I&#39;ll try it the next time I boot up in Win98. Only tried Win2K so far.</p><p>AE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Wed, 05 Dec 2007 03:03:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
I&#39;ve had this myself. I can&#39;t remember of the top of my head how I solved it, but I think the switch out callback gets called twice, so I ended up making that function only set a variable and then dealt with that variable to stop/restart sound in the main loop.</p><p>Does that help?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Wed, 05 Dec 2007 03:14:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok i checked on the laptop (win 2000) : sound is &quot;stuck&quot; when window loses focus / minimize etc.<br />The Allegro DLL I have there is 4.2.1<br />(edit found a 4.2.2 dll and re-tested: same thing)<br />The problem is even more visible if you use wave-based music, such as DUMB playing a module.<br />FMOD music doesn&#39;t show the problem as far as I know, because it uses its own thread and it continues playing even if the Allegro thread is paused.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Wed, 05 Dec 2007 03:33:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah! I found this old Neon Wars (OpenLayer version) code. Hope it helps:
</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="c">// This function is called with out switch in callback so this is executed when the user</span></td></tr><tr><td class="number">2</td><td><span class="c">// alt-tabs back into our program. It just sets a flag.</span></td></tr><tr><td class="number">3</td><td><span class="k1">void</span> switch_in<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td> game.switch_in <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>     </td></tr><tr><td class="number">6</td><td><span class="k2">}</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="c">// This function is called with out switch out callback so this is executed when the user</span></td></tr><tr><td class="number">9</td><td><span class="c">// alt-tabs out of our program. It just sets a flag.</span></td></tr><tr><td class="number">10</td><td><span class="k1">void</span> switch_out<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">11</td><td><span class="k2">{</span></td></tr><tr><td class="number">12</td><td> game.switch_out <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>  </td></tr><tr><td class="number">13</td><td><span class="k2">}</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td><span class="c">// This code is executed from the main loop when the switch in variable has been set.</span></td></tr><tr><td class="number">16</td><td><span class="c">// It is done this way so the function is not called from the callback itself.</span></td></tr><tr><td class="number">17</td><td><span class="k1">void</span> switch_in_code<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">18</td><td><span class="k2">{</span>  </td></tr><tr><td class="number">19</td><td> <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>game.switched_out<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td> <span class="k1">if</span> <span class="k2">(</span>option<span class="k2">[</span>OPTION_SCREEN<span class="k2">]</span>.choice <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> game.minimized<span class="k2">)</span> game.switched_out <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td> game.switch_in <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td> game.minimized <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td> </td></tr><tr><td class="number">24</td><td> write_to_log<span class="k2">(</span><span class="s">"Switching back in"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td> </td></tr><tr><td class="number">26</td><td> <span class="c">// If we have a fullscreen screenmode then, restore screen.    </span></td></tr><tr><td class="number">27</td><td> <span class="k1">if</span> <span class="k2">(</span>option<span class="k2">[</span>OPTION_SCREEN<span class="k2">]</span>.choice <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> change_screen_type<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td> </td></tr><tr><td class="number">29</td><td> <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/set_display_switch_mode" target="_blank"><span class="a">set_display_switch_mode</span></a><span class="k2">(</span>SWITCH_BACKGROUND<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">30</td><td> <a href="http://www.allegro.cc/manual/set_display_switch_mode" target="_blank"><span class="a">set_display_switch_mode</span></a><span class="k2">(</span>SWITCH_BACKAMNESIA<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td> </td></tr><tr><td class="number">32</td><td> <span class="c">// Restore callbacks as set_display_switch_mode removes them..</span></td></tr><tr><td class="number">33</td><td> <a href="http://www.allegro.cc/manual/set_display_switch_callback" target="_blank"><span class="a">set_display_switch_callback</span></a><span class="k2">(</span>SWITCH_OUT, switch_out<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td> game.pause_alpha.target <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td> game.paused <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td> </td></tr><tr><td class="number">37</td><td> <span class="c">// Restore looping shield sound if necessary.</span></td></tr><tr><td class="number">38</td><td> <span class="k1">if</span> <span class="k2">(</span>ply<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.special <span class="k3">=</span><span class="k3">=</span> SPECIAL_SHIELD<span class="k2">)</span> </td></tr><tr><td class="number">39</td><td> <span class="k2">{</span></td></tr><tr><td class="number">40</td><td>  <span class="c">// Play shield sound in a loop.</span></td></tr><tr><td class="number">41</td><td>  play_sound<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a><span class="k2">[</span>SND_SPECIAL_SHIELD<span class="k2">]</span>.snd, ply<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x, ply<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y, <span class="n">1000</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td> <span class="k2">}</span></td></tr><tr><td class="number">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td> <span class="k1">if</span> <span class="k2">(</span>ply<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.special <span class="k3">=</span><span class="k3">=</span> SPECIAL_ORBIT<span class="k2">)</span> </td></tr><tr><td class="number">45</td><td> <span class="k2">{</span></td></tr><tr><td class="number">46</td><td>  <span class="c">// Play orbit sound in a loop.  </span></td></tr><tr><td class="number">47</td><td>  play_sound<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a><span class="k2">[</span>SND_SPECIAL_ORBIT<span class="k2">]</span>.snd, ply<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x, ply<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y, <span class="n">1000</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> </td></tr><tr><td class="number">48</td><td> <span class="k2">}</span></td></tr><tr><td class="number">49</td><td> </td></tr><tr><td class="number">50</td><td> reset_timer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td><span class="k2">}</span></td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td><span class="c">// This code is executed from the main loop when the switch out variable has been set.</span></td></tr><tr><td class="number">54</td><td><span class="c">// It is done this way so the function is not called from the callback itself.</span></td></tr><tr><td class="number">55</td><td><span class="k1">void</span> switch_out_code<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">56</td><td><span class="k2">{</span></td></tr><tr><td class="number">57</td><td> game.switch_out <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td> write_to_log<span class="k2">(</span><span class="s">"Switching out"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td> </td></tr><tr><td class="number">60</td><td> <span class="c">// Lower music volume and pause before switching out..  </span></td></tr><tr><td class="number">61</td><td> al_duh_set_volume<span class="k2">(</span>sound_system.dp, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td> al_pause_duh<span class="k2">(</span>sound_system.dp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td> </td></tr><tr><td class="number">64</td><td> <span class="k1">if</span> <span class="k2">(</span>ply<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.special <span class="k3">=</span><span class="k3">=</span> SPECIAL_SHIELD<span class="k2">)</span> <a href="http://www.allegro.cc/manual/stop_sample" target="_blank"><span class="a">stop_sample</span></a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a><span class="k2">[</span>SND_SPECIAL_SHIELD<span class="k2">]</span>.snd<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td> <span class="k1">if</span> <span class="k2">(</span>ply<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.special <span class="k3">=</span><span class="k3">=</span> SPECIAL_ORBIT<span class="k2">)</span> <a href="http://www.allegro.cc/manual/stop_sample" target="_blank"><span class="a">stop_sample</span></a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_735.html" target="_blank">sound</a><span class="k2">[</span>SND_SPECIAL_ORBIT<span class="k2">]</span>.snd<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>  </td></tr><tr><td class="number">67</td><td> game.switched_out <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td> </td></tr><tr><td class="number">69</td><td> <span class="k1">if</span> <span class="k2">(</span>option<span class="k2">[</span>OPTION_SCREEN<span class="k2">]</span>.choice <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">70</td><td> <span class="k2">{</span></td></tr><tr><td class="number">71</td><td>  <span class="c">// Windowed.</span></td></tr><tr><td class="number">72</td><td>  <a href="http://www.allegro.cc/manual/set_display_switch_mode" target="_blank"><span class="a">set_display_switch_mode</span></a><span class="k2">(</span>SWITCH_BACKGROUND<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">73</td><td>  <a href="http://www.allegro.cc/manual/set_display_switch_callback" target="_blank"><span class="a">set_display_switch_callback</span></a><span class="k2">(</span>SWITCH_IN, switch_in<span class="k2">)</span><span class="k2">;</span> </td></tr><tr><td class="number">74</td><td> <span class="k2">}</span></td></tr><tr><td class="number">75</td><td> <span class="k1">else</span></td></tr><tr><td class="number">76</td><td> <span class="k2">{</span></td></tr><tr><td class="number">77</td><td>  <span class="c">// Fullscreen.</span></td></tr><tr><td class="number">78</td><td>  <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// Remove our screenmode and restore desktop.</span></td></tr><tr><td class="number">79</td><td>  <a href="http://www.allegro.cc/manual/set_display_switch_mode" target="_blank"><span class="a">set_display_switch_mode</span></a><span class="k2">(</span>SWITCH_BACKAMNESIA<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">80</td><td>  <a href="http://www.allegro.cc/manual/set_display_switch_callback" target="_blank"><span class="a">set_display_switch_callback</span></a><span class="k2">(</span>SWITCH_IN, switch_in<span class="k2">)</span><span class="k2">;</span> </td></tr><tr><td class="number">81</td><td> <span class="k2">}</span></td></tr><tr><td class="number">82</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Wed, 05 Dec 2007 03:42:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I just tried this on Win98SE (Allegro 4.2.2) and the same problem occurs (even with the Allegro demo game). However, if I minimise, I briefly get a stutter, the sound then plays normally for about 1 second and then starts stuttering again.</p><p>This happens in both fullscreen and windowed modes, and in windowed modes, happens regardless of whether I use the DXWN or GDIB graphics drivers. I think this may be a bug in Allegro.</p><div class="quote_container"><div class="title">Richard Phipps said:</div><div class="quote"><p>

SWITCH_BACKGROUND
</p></div></div><p>
I was hoping to be able to use SWITCH_PAUSE instead as then my game does not take up any CPU time when switched out. Although I suppose your method can be used as a workaround if I place a &quot;rest(1000)&quot; or something in my main loop (plus it has the advantage that I could make my game chartacters have falling-asleep animations when the game is switched out).</p><p>Incidentally, does Allegro have the ability to tell the difference between a minimised window and a window switched to the background?</p><p>AE.</p><p>[EDIT: PS. My soundcard is a &quot;SB Live! Value&quot;]</p><p>[EDIT2:]
</p><div class="quote_container"><div class="title">Audric said:</div><div class="quote"><p>

Allegro suspends MIDI, and cuts all sounds short. Sounds do not resume on return.<br />Win98, though.
</p></div></div><p>
Is that Win98SE or the first Win98 edition?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Thu, 06 Dec 2007 16:36:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Win98SE, Sound Blaster Live 1024.<br />I have to say there can be a very brief stutter (or silence) while the focus switches to an other window, but then the sound stabilizes to silence. I have never considered it as abnormal for any game, seeing how the OS might do some swapping at the time.</p><p>Now on the Windows 2000 laptop it&#39;s a whole different matter, the sound buffer instantly enters an endless loop - very easy to reproduce.</p><p>On both platforms, I made almost all my tests in windowed mode (click on other window to switch focus), as in fullscreen Alt-tabbing is slow to register.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Thu, 06 Dec 2007 17:06:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Phipps said:</div><div class="quote"><p>
but I think the switch out callback gets called twice
</p></div></div><p>

Has been fixed in 4.2.2.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Milan Mimica)</author>
		<pubDate>Thu, 06 Dec 2007 18:27:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can&#39;t believe people are still using Windows 98... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 06 Dec 2007 19:52:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm.. no idea then!</p><p>IMHO there are major issues with sound and window control in Allegro.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Fri, 07 Dec 2007 01:20:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Looks like it&#39;s a bug in Allegro then. I&#39;ve notified the devs.</p><p>Cookie time.</p><p>AE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Tue, 11 Dec 2007 22:28:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I made some more serious tests in the default windows background mode :<br />Allegro 4.2.1 and 4.2.2 give good results under Win98SE.<br />Allegro 4.2.1 and 4.2.2 give bad results under Win2000.</p><p>On either OS and Allegro version, DUMB playback stutters when the window doesn&#39;t have the focus - I guess I&#39;ll have to call al_pause_duh() and al_resume_duh() when switched out and in.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Wed, 12 Dec 2007 01:50:36 +0000</pubDate>
	</item>
</rss>
