<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>is a SAMPLE playing?</title>
		<link>http://www.allegro.cc/forums/view/558913</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 12 Jan 2006 06:18:29 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I like having self-contained code, so I&#39;m trying to figure out a way to <b>prevent</b> a sample from playing if it&#39;s already playing.</p><p>The way the code works, if the player is inside a &quot;hint zone&quot; then the sample plays looped.  I want to avoid triggering the sample once, instead using a function like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> play_sound<span class="k2">(</span><a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a> <span class="k3">*</span>s, <span class="k1">bool</span> looped<span class="k3">=</span><span class="k1">false</span><span class="k2">)</span>
<span class="k2">{</span>
     <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>s<span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
     <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span><span class="k3">*</span><span class="k3">*</span><span class="k3">*</span><span class="k3">*</span>SAMPLE_IS_NOT_PLAYING<span class="k3">*</span><span class="k3">*</span><span class="k3">*</span><span class="k3">*</span><span class="k2">)</span>
     <span class="k2">{</span>
         <a href="http://www.allegro.cc/manual/play_sample" target="_blank"><span class="a">play_sample</span></a><span class="k2">(</span>s, <span class="n">255</span>, <span class="n">128</span>, <span class="n">1000</span>, looped<span class="k2">)</span><span class="k2">;</span>
     <span class="k2">}</span>
     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

I searched the forums and found info about voice allocation.  it seemed complicated and required external variables.  Is there a simple way to do this?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Wed, 11 Jan 2006 07:21:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There&#39;s a way to do it, but from my research you&#39;re going to need that external variable.<br />It might be best to wrap SAMPLE into a class CSample or something.</p><p>Anyway you need to store the voice returned by play_sample. Then run voice_check on that value and see if it == the SAMPLE. If it does, the sample is playing.</p><p>EDIT: I can&#39;t find a place where SAMPLE::param is used. Does Allegro ever use it? If not you can store the voice in there, that way you won&#39;t have to make a CSample or something to contain it.<br />sample-&gt;param = (void *)the_voice;</p><p>will only work if sizeof(void *) == sizeof(int)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Wed, 11 Jan 2006 07:45:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>or instead of wrapping SAMPLE, just wrap a voice.. thats all play_sample does. This way you get greater controll over your sounds.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Wed, 11 Jan 2006 07:49:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It works, but it&#39;s ghetto:
</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="k1">class</span> sample_wrap_class</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>private:</td></tr><tr><td class="number">4</td><td>     vector<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a> <span class="k3">*</span><span class="k3">&gt;</span> sample<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>     vector<span class="k3">&lt;</span>int&gt; voice<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>public:</td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>     <span class="k1">void</span> add_pair<span class="k2">(</span><a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a> <span class="k3">*</span>s, <span class="k1">int</span> v<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>          sample.push_back<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>          voice.push_back<span class="k2">(</span>v<span class="k2">)</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>     </td></tr><tr><td class="number">15</td><td>     <span class="k1">bool</span> is_playing<span class="k2">(</span><a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a> <span class="k3">*</span>s<span class="k2">)</span></td></tr><tr><td class="number">16</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">17</td><td>         <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>voice.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</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>sample<span class="k3">&lt;</span>i&gt; <span class="k3">=</span><span class="k3">=</span> s<span class="k2">)</span> <span class="k1">return</span> <a href="http://www.allegro.cc/manual/voice_check" target="_blank"><span class="a">voice_check</span></a><span class="k2">(</span>voice<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">21</td><td>         <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">23</td><td>     </td></tr><tr><td class="number">24</td><td>     <span class="k1">void</span> remove_reference<span class="k2">(</span><a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a> <span class="k3">*</span>s<span class="k2">)</span></td></tr><tr><td class="number">25</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>         <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>voice.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">27</td><td>         <span class="k2">{</span></td></tr><tr><td class="number">28</td><td>             <span class="k1">if</span> <span class="k2">(</span>sample<span class="k3">&lt;</span>i&gt; <span class="k3">=</span><span class="k3">=</span> s<span class="k2">)</span></td></tr><tr><td class="number">29</td><td>             <span class="k2">{</span></td></tr><tr><td class="number">30</td><td>                 sample.erase<span class="k2">(</span>sample.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>                 voice.erase<span class="k2">(</span>voice.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>             <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>     <span class="k2">}</span></td></tr><tr><td class="number">35</td><td>     </td></tr><tr><td class="number">36</td><td>     <span class="k1">void</span> update<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">37</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">38</td><td>         <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>voice.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><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="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/voice_check" target="_blank"><span class="a">voice_check</span></a><span class="k2">(</span>voice<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">41</td><td>             <span class="k2">{</span></td></tr><tr><td class="number">42</td><td>                 sample.erase<span class="k2">(</span>sample.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>                 voice.erase<span class="k2">(</span>voice.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>             <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="k2">}</span></td></tr><tr><td class="number">47</td><td>&#160;</td></tr><tr><td class="number">48</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>&#160;</td></tr><tr><td class="number">50</td><td>sample_wrap_class sample_wrap<span class="k2">;</span></td></tr><tr><td class="number">51</td><td>&#160;</td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td><span class="k1">int</span> play_sound<span class="k2">(</span><a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a> <span class="k3">*</span>s, <span class="k1">bool</span> looped<span class="k3">=</span><span class="k1">false</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>     <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>s<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>          <span class="c">//allegro_message("error");   </span></td></tr><tr><td class="number">58</td><td>          <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">60</td><td>     <span class="k1">else</span></td></tr><tr><td class="number">61</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">62</td><td>         <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>sample_wrap.is_playing<span class="k2">(</span>s<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">63</td><td>         <span class="k2">{</span></td></tr><tr><td class="number">64</td><td>            <span class="k1">int</span> v <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>s, <span class="n">255</span>, <span class="n">128</span>, <span class="n">1000</span>, looped<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td>            sample_wrap.add_pair<span class="k2">(</span>s, v<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">67</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">68</td><td><span class="k2">}</span></td></tr><tr><td class="number">69</td><td>&#160;</td></tr><tr><td class="number">70</td><td><span class="k1">int</span> stop_sound<span class="k2">(</span><a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a> <span class="k3">*</span>s<span class="k2">)</span></td></tr><tr><td class="number">71</td><td><span class="k2">{</span></td></tr><tr><td class="number">72</td><td>     <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>s<span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">73</td><td>     <span class="k1">else</span> <a href="http://www.allegro.cc/manual/stop_sample" target="_blank"><span class="a">stop_sample</span></a><span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">74</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

[edit]reply for cookies
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Wed, 11 Jan 2006 09:25:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Better than nothin&#39;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Wed, 11 Jan 2006 10:55:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>[edit]Ignore this, I spewed out a whole set of code for using the voice functions and managing them via timers, etc without realising that wasn&#39;t the question. So I&#39;ve deleted it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Wed, 11 Jan 2006 18:40:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Neil: What was the code all about?  I&#39;m interested. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Wed, 11 Jan 2006 23:22:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;ll have to fill in the gaps yourself and ignore the class prefix, but...<br />you&#39;ll need these and set your own nice values<br />#define TIMER_DIGIPURGETIME 5000<br />#define MAXSOUNDS 32<br />int VoiceArray[MAXSOUNDS];		//maximum allowed voices</p><p>and maybe this somewhere:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/install_int" target="_blank"><span class="a">install_int</span></a><span class="k2">(</span>TimerDigiPurgeNow,TIMER_DIGIPURGETIME<span class="k2">)</span><span class="k2">;</span>
<span class="k1">void</span> TimerDigiPurgeNow<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
  <span class="c">//music handler for purging stuff</span>
  <span class="c">//automatically deallocates sounds that have stopped playing</span>
  <span class="c">//called every 5 seconds, which seems reasonable to me</span>
  TimerDigiPurge<span class="k3">=</span><span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span>
<a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>TimerDigiPurgeNow<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Then in your timer looper say,<br />if(TimerDigiPurge) { SoundPurgeDigi(false); TimerDigiPurge=false;}</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="k1">int</span> Framework::SoundPlayDigi<span class="k2">(</span><a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a><span class="k3">*</span> df, <span class="k1">int</span> samplenum,<span class="k1">int</span> loopflag,<span class="k1">int</span> vol<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">if</span><span class="k2">(</span>vol<span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span> <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">else</span></td></tr><tr><td class="number">5</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">return</span> SoundPlayDigi<span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a><span class="k3">*</span><span class="k2">)</span>df<span class="k2">[</span>samplenum<span class="k2">]</span>.dat,vol,loopflag<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">8</td><td><span class="k2">}</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="k1">int</span> Framework::SoundPlayDigi<span class="k2">(</span><a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a><span class="k3">*</span> samp, <span class="k1">int</span> vol, <span class="k1">int</span> loopflag<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>  <span class="k1">int</span> ret<span class="k3">=</span><span class="k3">-</span><span class="n">1</span><span class="k2">;</span> <span class="c">//default which is could not play</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>  <span class="k1">if</span><span class="k2">(</span>vol<span class="k3">=</span><span class="k3">=</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span> vol<span class="k3">=</span>GameConfiguration-&gt;CapsSound.SampleVolume<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">if</span><span class="k2">(</span>vol&gt;255 <span class="k3">|</span><span class="k3">|</span> vol<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> vol<span class="k3">=</span><span class="n">255</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  </td></tr><tr><td class="number">17</td><td>  <span class="k1">if</span><span class="k2">(</span>GameConfiguration-&gt;CapsActualSystem.UseSound <span class="k3">&amp;</span><span class="k3">&amp;</span> vol<span class="k3">!</span><span class="k3">=</span><span class="n">0</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>&#160;</td></tr><tr><td class="number">20</td><td>    <span class="c">//allocate a voice if possible</span></td></tr><tr><td class="number">21</td><td>    ret<span class="k3">=</span><a href="http://www.allegro.cc/manual/allocate_voice" target="_blank"><span class="a">allocate_voice</span></a><span class="k2">(</span>samp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>    <span class="k1">if</span><span class="k2">(</span>ret<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">23</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">24</td><td>      <span class="c">//if available add to list and play - see purgedigi/stopdigi</span></td></tr><tr><td class="number">25</td><td>      <span class="c">//may fail to add if system removes a lower priority voice</span></td></tr><tr><td class="number">26</td><td>      <span class="c">//until the purgedigi is called</span></td></tr><tr><td class="number">27</td><td>      <span class="c">//hopefully</span></td></tr><tr><td class="number">28</td><td>      <span class="c">//set sample priority</span></td></tr><tr><td class="number">29</td><td>      <a href="http://www.allegro.cc/manual/voice_set_playmode" target="_blank"><span class="a">voice_set_playmode</span></a><span class="k2">(</span>ret,loopflag<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>      <a href="http://www.allegro.cc/manual/voice_set_volume" target="_blank"><span class="a">voice_set_volume</span></a><span class="k2">(</span>ret, vol<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>      <a href="http://www.allegro.cc/manual/voice_start" target="_blank"><span class="a">voice_start</span></a><span class="k2">(</span>ret<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td>      <span class="c">//go through the voice array and deallocate voice if being stored</span></td></tr><tr><td class="number">34</td><td>      <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span>GameConfiguration-&gt;CapsSound.MaxSounds<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> </td></tr><tr><td class="number">35</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">36</td><td>        <span class="k1">if</span><span class="k2">(</span>VoiceArray<span class="k3">&lt;</span>i&gt;<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">37</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">38</td><td>          VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k3">=</span>ret<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>          <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">41</td><td>      <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>  <span class="k2">}</span></td></tr><tr><td class="number">44</td><td>  <span class="k1">return</span> ret<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>&#160;</td></tr><tr><td class="number">47</td><td><span class="k1">void</span> Framework::SoundStopDigi<span class="k2">(</span><span class="k1">int</span> voice,<span class="k1">bool</span> force<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>  <span class="c">//stop a digi playing, for example if in a loop</span></td></tr><tr><td class="number">50</td><td>  <span class="k1">if</span><span class="k2">(</span>voice<span class="k3">&lt;</span><span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> GameConfiguration-&gt;CapsActualSystem.UseSound<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>    <span class="k1">if</span><span class="k2">(</span>force<span class="k3">=</span><span class="k3">=</span><span class="k1">true</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/deallocate_voice" target="_blank"><span class="a">deallocate_voice</span></a><span class="k2">(</span>voice<span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">53</td><td>    <span class="k1">else</span> <a href="http://www.allegro.cc/manual/release_voice" target="_blank"><span class="a">release_voice</span></a><span class="k2">(</span>voice<span class="k2">)</span><span class="k2">;</span> <span class="c">//allow it to finish first</span></td></tr><tr><td class="number">54</td><td>&#160;</td></tr><tr><td class="number">55</td><td>    <span class="c">//go through the voice array and deallocate voice if being stored</span></td></tr><tr><td class="number">56</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span>GameConfiguration-&gt;CapsSound.MaxSounds<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> </td></tr><tr><td class="number">57</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">58</td><td>      <span class="k1">if</span><span class="k2">(</span>VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k3">=</span><span class="k3">=</span>voice<span class="k2">)</span> </td></tr><tr><td class="number">59</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">60</td><td>        VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k3">=</span><span class="k3">-</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td>        <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">63</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">64</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">65</td><td><span class="k2">}</span></td></tr><tr><td class="number">66</td><td>&#160;</td></tr><tr><td class="number">67</td><td><span class="k1">void</span> Framework::SoundPurgeDigi<span class="k2">(</span><span class="k1">bool</span> killit<span class="k2">)</span></td></tr><tr><td class="number">68</td><td><span class="k2">{</span></td></tr><tr><td class="number">69</td><td>  <span class="c">//go through the voice array and deallocate voices</span></td></tr><tr><td class="number">70</td><td>  <span class="c">//this is used to stop the user from having to do stopdigi</span></td></tr><tr><td class="number">71</td><td>  <span class="c">// to speed up call it on a timer rather than, say, every frame</span></td></tr><tr><td class="number">72</td><td>  <span class="c">// the game loop will do this for us automatically</span></td></tr><tr><td class="number">73</td><td>  <span class="k1">int</span> pos<span class="k2">;</span></td></tr><tr><td class="number">74</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>GameConfiguration-&gt;CapsSound.MaxSounds<span class="k3">&lt;</span><span class="n">255</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">75</td><td>&#160;</td></tr><tr><td class="number">76</td><td>  <span class="k1">if</span><span class="k2">(</span>GameConfiguration-&gt;CapsActualSystem.UseSound<span class="k2">)</span> </td></tr><tr><td class="number">77</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">78</td><td>    <span class="c">//loop through array</span></td></tr><tr><td class="number">79</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span>GameConfiguration-&gt;CapsSound.MaxSounds<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> </td></tr><tr><td class="number">80</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">81</td><td>      <span class="c">//if it contains a voice get its position</span></td></tr><tr><td class="number">82</td><td>      <span class="k1">if</span><span class="k2">(</span>VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k3">!</span><span class="k3">=</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span> pos<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>VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">;</span> <span class="k1">else</span> pos<span class="k3">=</span><span class="k3">-</span><span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td>&#160;</td></tr><tr><td class="number">84</td><td>      <span class="c">//if it is at the end then release it</span></td></tr><tr><td class="number">85</td><td>      <span class="k1">if</span><span class="k2">(</span>pos<span class="k3">=</span><span class="k3">=</span><span class="k3">-</span><span class="n">1</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>killit<span class="k3">=</span><span class="k3">=</span><span class="k1">true</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> pos<span class="k3">!</span><span class="k3">=</span><span class="k3">-</span><span class="n">2</span><span class="k2">)</span><span class="k2">)</span> </td></tr><tr><td class="number">86</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">87</td><td>        <a href="http://www.allegro.cc/manual/deallocate_voice" target="_blank"><span class="a">deallocate_voice</span></a><span class="k2">(</span>VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>        VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k3">=</span><span class="k3">-</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">89</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">90</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">91</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">92</td><td><span class="k2">}</span></td></tr><tr><td class="number">93</td><td>&#160;</td></tr><tr><td class="number">94</td><td><span class="k1">void</span> Framework::SoundKillDigi<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">95</td><td><span class="k2">{</span></td></tr><tr><td class="number">96</td><td>  <span class="c">//stop all samples in their tracks and clear the play buffer</span></td></tr><tr><td class="number">97</td><td>  <span class="k1">if</span><span class="k2">(</span>GameConfiguration-&gt;CapsActualSystem.UseSound<span class="k2">)</span> </td></tr><tr><td class="number">98</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">99</td><td>    <span class="c">//loop through array</span></td></tr><tr><td class="number">100</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span>GameConfiguration-&gt;CapsSound.MaxSounds<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> </td></tr><tr><td class="number">101</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">102</td><td>      <span class="c">//if it contains a voice get its position</span></td></tr><tr><td class="number">103</td><td>      <span class="k1">if</span><span class="k2">(</span>VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k3">!</span><span class="k3">=</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/deallocate_voice" target="_blank"><span class="a">deallocate_voice</span></a><span class="k2">(</span>VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>      VoiceArray<span class="k3">&lt;</span>i&gt;<span class="k3">=</span><span class="k3">-</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">106</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">107</td><td><span class="k2">}</span></td></tr><tr><td class="number">108</td><td>&#160;</td></tr><tr><td class="number">109</td><td><span class="k1">int</span> Framework::SoundDigiPos<span class="k2">(</span><span class="k1">int</span> voice<span class="k2">)</span></td></tr><tr><td class="number">110</td><td><span class="k2">{</span></td></tr><tr><td class="number">111</td><td>  <span class="k1">if</span><span class="k2">(</span>GameConfiguration-&gt;CapsActualSystem.UseSound <span class="k3">&amp;</span><span class="k3">&amp;</span> voice&gt;<span class="k3">=</span><span class="n">0</span><span class="k2">)</span> <span class="k1">return</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>voice<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">112</td><td>  <span class="k1">else</span> <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">113</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Thu, 12 Jan 2006 06:18:29 +0000</pubDate>
	</item>
</rss>
