<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[5.0.5] Crash when trying to play the second instance of sound.</title>
		<link>http://www.allegro.cc/forums/view/609430</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 30 Jan 2012 23:43:55 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I must admit I find Allegro 5 sound interface somewhat confusing. Unlike it&#39;s graphic part, it seems somewhat low-level and requires some manual management. And somehow, lacks volume setting for anything, but single sample instance. But maybe I just don&#39;t have enough experience with sound APIs. I never tried incorporate sound in my games before. Anyway, I&#39;m trying to write a wrapper for it for my &quot;engine&quot; (it&#39;s more of a collection of classes than a real game engine) and I ran into some problems.</p><p>Should I be able to attach to one mixer and play two instances of the same ALLEGRO_SAMPLE? When I try to do so, Allegro crashes.</p><p>A flattened code for this case looks like this:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>        <span class="k1">if</span> <span class="k2">(</span> <span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_audio"><span class="a">al_install_audio</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span>
<span class="number">  2</span>                <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span>        <span class="k1">if</span> <span class="k2">(</span> <span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_acodec_addon"><span class="a">al_init_acodec_addon</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span>
<span class="number">  5</span>                <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>        m_pMusicVoice <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_voice"><span class="a">al_create_voice</span></a><span class="k2">(</span> <span class="n">44100</span>, ALLEGRO_AUDIO_DEPTH_INT16, ALLEGRO_CHANNEL_CONF_2 <span class="k2">)</span><span class="k2">;</span>    
<span class="number">  8</span>        m_pMusicMixer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_mixer"><span class="a">al_create_mixer</span></a><span class="k2">(</span> <span class="n">44100</span>, ALLEGRO_AUDIO_DEPTH_INT16, ALLEGRO_CHANNEL_CONF_2 <span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>        <a href="http://www.allegro.cc/manual/al_attach_mixer_to_voice"><span class="a">al_attach_mixer_to_voice</span></a><span class="k2">(</span> m_pMusicMixer, m_pMusicVoice <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE"><span class="a">ALLEGRO_SAMPLE</span></a> <span class="k3">*</span>m_pSample <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_sample"><span class="a">al_load_sample</span></a><span class="k2">(</span> <span class="s">"music.ogg"</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE_INSTANCE"><span class="a">ALLEGRO_SAMPLE_INSTANCE</span></a> <span class="k3">*</span>m_pInstance1 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sample_instance"><span class="a">al_create_sample_instance</span></a><span class="k2">(</span> m_pSample <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE_INSTANCE"><span class="a">ALLEGRO_SAMPLE_INSTANCE</span></a> <span class="k3">*</span>m_pInstance2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sample_instance"><span class="a">al_create_sample_instance</span></a><span class="k2">(</span> m_pSample <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>        <a href="http://www.allegro.cc/manual/al_attach_sample_instance_to_mixer"><span class="a">al_attach_sample_instance_to_mixer</span></a><span class="k2">(</span> m_pInstance1, m_pMusicMixer <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>        <a href="http://www.allegro.cc/manual/al_attach_sample_instance_to_mixer"><span class="a">al_attach_sample_instance_to_mixer</span></a><span class="k2">(</span> m_pInstance2, m_pMusicMixer <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>        <a href="http://www.allegro.cc/manual/al_play_sample_instance"><span class="a">al_play_sample_instance</span></a><span class="k2">(</span> m_pInstance1 <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>        _sleep<span class="k2">(</span> <span class="n">500</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>        <a href="http://www.allegro.cc/manual/al_play_sample_instance"><span class="a">al_play_sample_instance</span></a><span class="k2">(</span> m_pInstance2 <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>        _sleep<span class="k2">(</span> <span class="n">10000</span> <span class="k2">)</span><span class="k2">;</span>
</div></div><p>

I expect this to either play music with a 500ms echo or assert somewhere inside Allegro with the message that I can&#39;t do this. Instead, I get crash at:</p><div class="source-code snippet"><div class="inner"><pre>         <span class="k1">case</span> ALLEGRO_AUDIO_DEPTH_INT16:
            s<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> buf-&gt;s16<span class="k2">[</span><span class="k2">(</span>spl-&gt;pos&gt;&gt;MIXER_FRAC_SHIFT<span class="k2">)</span><span class="k3">*</span>maxc <span class="k3">+</span> i<span class="k2">]</span><span class="k2">;</span>
            <span class="k1">break</span><span class="k2">;</span>
</pre></div></div><p>

I was unable to quickly determine which part of expression causes crash. s[i] seems valid.</p><p>So, the usual question. What am I doing wrong, or is this a bug in Allegro? I&#39;m using monolith build of Allegro 5.0.5 on Windows 7 64-bit.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Max Savenkov)</author>
		<pubDate>Mon, 30 Jan 2012 22:58:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609430/946101#target">Max Savenkov</a> said:</div><div class="quote"><p> Should I be able to attach to one mixer and play two instances of the same ALLEGRO_SAMPLE? 
</p></div></div><p>Yes.</p><p>The simpler API, by the way, looks like:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_install_audio"><span class="a">al_install_audio</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_init_acodec_addon"><span class="a">al_init_acodec_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_reserve_samples"><span class="a">al_reserve_samples</span></a><span class="k2">(</span>n<span class="k2">)</span><span class="k2">;</span>

spl <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_sample"><span class="a">al_load_sample</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span>spl, gain, pan, speed, loop, NULL<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
which is really no more difficult than Allegro 4.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 30 Jan 2012 23:05:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, thanks I misunderstood that part of documentation.</p><p>EDIT: That does not explain crash, though, so I would still like to get some response on that. Was I using API in the wrong way?</p><p>Also, there is a problem with al_play_sample, because you can&#39;t do anything with it after it has been started. It seems strange to me. I have SAMPLE_ID. I can stop it. Shouldn&#39;t I be able to adjust its gain, at least? Or is there any architectural problems which prevent me from doing this?</p><p>EDIT2: OK, I have found what led to crash. I was loading the same file into two different ALLEGRO_SAMPLEs, then creating an INSTANCE of each and trying to play them. While I still don&#39;t understand why should this crash library, now at least I can avoid this crash.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Max Savenkov)</author>
		<pubDate>Mon, 30 Jan 2012 23:43:55 +0000</pubDate>
	</item>
</rss>
