<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Generating Musical Notes</title>
		<link>http://www.allegro.cc/forums/view/586704</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 28 Jul 2006 17:15:19 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, so my previous post got deleted somehow.</p><p>So,  I took someone&#39;s advice, never got the chance to thank them.  It worked out</p><p>I figured out</p><div class="source-code snippet"><div class="inner"><pre>       wave_length <span class="k3">=</span> sample_rate <span class="k3">/</span> frequency<span class="k2">;</span>
</pre></div></div><p>

That&#39;s pretty streight forward, makes sense to me.</p><p>Now, I&#39;m having a problem with audio streams.</p><p>I create the stream and then here&#39;s how I&#39;m filling it up
</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">#define SAMPLE_RATE  22000</span></td></tr><tr><td class="number">2</td><td>       <span class="p">#define FREQUENCY 440.00</span></td></tr><tr><td class="number">3</td><td>       </td></tr><tr><td class="number">4</td><td>       <span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>       <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>stream<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>       <span class="k1">double</span> saw<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>       <span class="k1">double</span> saw_speed<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>       <span class="k1">double</span> wavelength<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>       <span class="k1">double</span> half_wavelength<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>       <a href="http://www.allegro.cc/manual/AUDIOSTREAM" target="_blank"><span class="a">AUDIOSTREAM</span></a> <span class="k3">*</span>audio_buffer<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>       audio_buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/play_audio_stream" target="_blank"><span class="a">play_audio_stream</span></a><span class="k2">(</span> BUFFER_SIZE, <span class="n">8</span>, FALSE, </td></tr><tr><td class="number">13</td><td>       FREQUENCY, <span class="n">255</span>, <span class="n">128</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  wavelength <span class="k3">=</span> <span class="k2">(</span>SAMPLE_RATE<span class="k3">/</span>FREQUENCY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  half_wavelength <span class="k3">=</span> wavelength<span class="k3">/</span><span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  saw_speed <span class="k3">=</span> <span class="n">255</span>.<span class="n">00</span><span class="k3">/</span>half_wavelength<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>       <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span><span class="k2">;</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">19</td><td>              stream <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_audio_stream_buffer" target="_blank"><span class="a">get_audio_stream_buffer</span></a><span class="k2">(</span> audio_buffer <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>              <span class="k1">if</span> <span class="k2">(</span> stream <span class="k3">!</span><span class="k3">=</span> NULL <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">21</td><td>      <span class="k1">for</span> <span class="k2">(</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> BUFFER_SIZE<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">22</td><td>        saw <span class="k3">+</span><span class="k3">=</span> saw_speed<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>        <span class="k1">if</span> <span class="k2">(</span> saw <span class="k3">&gt;</span> <span class="n">255</span> <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">24</td><td>          saw_speed <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">25</td><td>          saw <span class="k3">=</span> <span class="n">255</span><span class="k3">-</span><span class="k2">(</span>saw-255<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">27</td><td>        <span class="k1">if</span> <span class="k2">(</span> saw <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">28</td><td>          saw_speed <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">29</td><td>          saw <span class="k3">=</span> <span class="n">0</span><span class="k3">-</span>saw<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">31</td><td>        stream<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span>saw<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>                        <a href="http://www.allegro.cc/manual/free_audio_stream_buffer" target="_blank"><span class="a">free_audio_stream_buffer</span></a><span class="k2">(</span> audio_buffer <span class="k2">)</span><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>        <span class="k2">}</span></td></tr></tbody></table></div></div><p>

I&#39;m not sure if the code above compiles and works,  it&#39;s just a demonstration of what I&#39;m doing.  Okay, so...</p><p>It plays an A, but it&#39;s all choppy as if I&#39;m not fully filling up the audio buffer.  But clearly it says &quot;play_audio_stream( BUFFER_SIZE... )&quot; and &quot;for ( i = 0; i &lt; BUFFER_SIZE; i++ )&quot;  note usage of BUFFER_SIZE.</p><p>Thoughts?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Daniel McKinnon)</author>
		<pubDate>Thu, 27 Jul 2006 11:18:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://www.allegro.cc/forums/thread/586679">http://www.allegro.cc/forums/thread/586679</a> <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Thu, 27 Jul 2006 11:24:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm...  Allegro.cc has been acting very strange on me as of late.  Failing to post, hiding threads, etc...</p><p>Anyhow,  it sounds like I&#39;m not filling the buffer up completely.  There&#39;s a little jitter in the note.  The funny thing is,  if I play - I think - a &#39;D&#39;, it sounds smooth, and that&#39;s it.  No idea why.</p><p>Thanks again Miran for your help,  your advice was perfect despite the small calculation error, I figured it out anyhow.   (I seem to remember posting this comment earlier,  but it never got posted).</p><p>Edit:</p><p>I think I may have figured it out.  I was resetting the saw on every &#39;fill&#39;<br />Thanks guys.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Daniel McKinnon)</author>
		<pubDate>Fri, 28 Jul 2006 00:41:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I think I may have figured it out. I was resetting the saw on every &#39;fill&#39;
</p></div></div><p>
Yeah, when you get to the next buffer, you need to continue from whereyou left off the last time.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Fri, 28 Jul 2006 09:39:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Perhaps you clicked &#39;hide thread&#39; by mistake.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Fri, 28 Jul 2006 17:15:19 +0000</pubDate>
	</item>
</rss>
