<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Multiple audio stream causes static?</title>
		<link>http://www.allegro.cc/forums/view/607646</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 19 Jun 2011 08:11:54 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For the past few days, I have been working hard on adding an audio system to my game. So far, I have managed to set-up two different audio systems.</p><p>The first is specialized for songs since they can be large. Note: all of my audio files are .ogg files. For the songs, I load them into an ALLEGRO_AUDIO_STREAM.</p><p>The second is designed for sound effects. Note: they are also .ogg files. This time around I use an ALLEGRO_SAMPLE_INSTANCE.</p><p>For some odd reason, when I play a song with multiple sound effects, I get static. I tried on other computers and on my headphones and its the same issue.</p><p>I tried isolating the issue with little luck. All I noticed is that if I play a single sound, be it a song, or a sound effect, it will be clear, and the moment I begin adding other audio, it begins to fill-up with static.</p><p>Note: For each song I am creating a new AUDIO_STREAM, MIXER, and VOICE. For each sound, I am creating a new MIXER, VOICE, SAMPLE, SAMPLE INSTANCE, AUDIO STREAM. I don&#39;t really know if its a bad thing having that many mixers/voices/samples.</p><p>Here is how I create my song class:
</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>CSong::CSong<span class="k2">(</span> <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> filename, uint frequency,
<span class="number">  2</span>           <span class="k1">size_t</span> bufferCount, uint samples <span class="k2">)</span> <span class="k2">:</span>
<span class="number">  3</span>  m_mixer<span class="k2">(</span>NULL<span class="k2">)</span>, m_voice<span class="k2">(</span>NULL<span class="k2">)</span>, m_stream<span class="k2">(</span>NULL<span class="k2">)</span>
<span class="number">  4</span><span class="k2">{</span>
<span class="number">  5</span>  m_voice <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> frequency, ALLEGRO_DEPTH_INT16,
<span class="number">  6</span>                             ALLEGRO_CHANNEL_CONF_2 <span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  m_mixer <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> frequency, ALLEGRO_DEPTH_FLOAT32,
<span class="number">  8</span>                             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_mixer, m_voice <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  m_stream <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_audio_stream"><span class="a">al_load_audio_stream</span></a><span class="k2">(</span> filename, bufferCount, samples <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  <a href="http://www.allegro.cc/manual/al_attach_audio_stream_to_mixer"><span class="a">al_attach_audio_stream_to_mixer</span></a><span class="k2">(</span> m_stream, m_mixer <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <a href="http://www.allegro.cc/manual/al_set_audio_stream_playmode"><span class="a">al_set_audio_stream_playmode</span></a><span class="k2">(</span> m_stream, ALLEGRO_PLAYMODE_LOOP <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>  setPlay<span class="k2">(</span> <span class="k1">false</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span><span class="k2">}</span>
</div></div><p>

And here is how I create my sound class:
</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>CSound::CSound<span class="k2">(</span> <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> filename <span class="k2">)</span> <span class="k2">:</span>
<span class="number">  2</span>  m_mixer<span class="k2">(</span>NULL<span class="k2">)</span>, m_voice<span class="k2">(</span>NULL<span class="k2">)</span>,
<span class="number">  3</span>  m_sample<span class="k2">(</span>NULL<span class="k2">)</span>, m_sampleInstance<span class="k2">(</span>NULL<span class="k2">)</span>,
<span class="number">  4</span>  m_position<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>, m_audioStream<span class="k2">(</span>NULL<span class="k2">)</span>
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>  m_voice <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,   
<span class="number">  7</span>                 ALLEGRO_CHANNEL_CONF_2 <span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>  m_mixer <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_FLOAT32, 
<span class="number">  9</span>                 ALLEGRO_CHANNEL_CONF_2 <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</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_mixer, m_voice <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>  m_sampleInstance <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> NULL <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>  m_sample <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> filename <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>  <a href="http://www.allegro.cc/manual/al_set_sample"><span class="a">al_set_sample</span></a><span class="k2">(</span> m_sampleInstance, m_sample <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_sampleInstance, m_mixer <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <a href="http://www.allegro.cc/manual/al_set_sample_instance_playmode"><span class="a">al_set_sample_instance_playmode</span></a><span class="k2">(</span> m_sampleInstance, ALLEGRO_PLAYMODE_ONCE <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</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_sampleInstance <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span>
</div></div><p>

Additional info, here are my settings:<br />-Frequency: 44100<br />-Buffer Count: 2<br />-Samples: 2048<br />-Reserved Samples: 50</p><p>Why might it be creating static???
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BulletDave4)</author>
		<pubDate>Sat, 18 Jun 2011 19:20:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Generally you only need a single voice and mixer. You definitely should not be creating one per song.</p><p>If you call <span class="source-code"><a href="http://www.allegro.cc/manual/al_reserve_samples"><span class="a">al_reserve_samples</span></a><span class="k2">(</span><span class="k2">)</span></span> that will automatically create a mixer. You can then call <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_default_mixer"><span class="a">al_get_default_mixer</span></a><span class="k2">(</span><span class="k2">)</span></span>. Also, with <span class="source-code"><a href="http://www.allegro.cc/manual/al_reserve_samples"><span class="a">al_reserve_samples</span></a><span class="k2">(</span><span class="k2">)</span></span> you can simply call <span class="source-code"><a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span><span class="k2">)</span></span> without creating your own instances... that&#39;s what it&#39;s for, after all.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 18 Jun 2011 19:52:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I did exactly as you told me and it works great! No more static noise. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>Thanks a bunch <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BulletDave4)</author>
		<pubDate>Sat, 18 Jun 2011 20:32:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Fixed in r14803. This was due to the use of a global mixing buffer which obviously is wrong when two mixers run in parallel (which only happens when there are multiple voices).</p><p>Not that you need multiple voices.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Sun, 19 Jun 2011 08:11:54 +0000</pubDate>
	</item>
</rss>
