<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Generating Musical Notes</title>
		<link>http://www.allegro.cc/forums/view/586679</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 26 Jul 2006 11:57:16 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,</p><p>I am trying to make a very simple synthesizer program.</p><p>what I have done so far is created a 8-byte saw-wave sample</p><p><span class="source-code">       <span class="k1">char</span> saw<span class="k2">[</span><span class="n">8</span><span class="k2">]</span><span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">64</span>, <span class="n">128</span>, <span class="n">64</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">64</span>, <span class="k3">-</span><span class="n">128</span>, <span class="k3">-</span><span class="n">64</span> <span class="k2">}</span><span class="k2">;</span></span></p><p>Set up the musical scale
</p><div class="source-code snippet"><div class="inner"><pre>       <span class="k1">double</span> scale<span class="k2">[</span><span class="n">13</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">440</span>.<span class="n">00</span>, <span class="n">466</span>.<span class="n">16</span>, <span class="n">493</span>.<span class="n">88</span>, <span class="n">523</span>.<span class="n">25</span>, <span class="n">554</span>.<span class="n">37</span>, <span class="n">587</span>.<span class="n">33</span>, <span class="n">622</span>.<span class="n">25</span>, <span class="n">659</span>.<span class="n">26</span>, <span class="n">698</span>.<span class="n">46</span>, <span class="n">739</span>.<span class="n">99</span>, <span class="n">783</span>.<span class="n">99</span>, <span class="n">830</span>.<span class="n">61</span>, <span class="n">880</span>.<span class="n">00</span> <span class="k2">}</span><span class="k2">;</span>
       <span class="k1">char</span> note <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
</pre></div></div><p>

initialized the sound</p><div class="source-code snippet"><div class="inner"><pre>       <a href="http://www.allegro.cc/manual/reserve_voices" target="_blank"><span class="a">reserve_voices</span></a><span class="k2">(</span> <span class="n">1</span> <span class="k2">)</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_NONE, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Create the sample</p><div class="source-code snippet"><div class="inner"><pre>  s <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_sample" target="_blank"><span class="a">create_sample</span></a><span class="k2">(</span> <span class="n">8</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="n">8</span> <span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span> s-&gt;data, saw, <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">char</span><span class="k2">)</span><span class="k3">*</span><span class="n">8</span> <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>


Setup the voice to play the note on a scale</p><div class="source-code snippet"><div class="inner"><pre>  v <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> s <span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/voice_set_volume" target="_blank"><span class="a">voice_set_volume</span></a><span class="k2">(</span> v, <span class="n">255</span> <span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/voice_set_frequency" target="_blank"><span class="a">voice_set_frequency</span></a><span class="k2">(</span> v, scale<span class="k2">[</span>note<span class="k2">]</span> <span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/voice_set_playmode" target="_blank"><span class="a">voice_set_playmode</span></a><span class="k2">(</span> v, PLAYMODE_LOOP <span class="k2">)</span><span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/voice_set_pan" target="_blank"><span class="a">voice_set_pan</span></a><span class="k2">(</span> v, <span class="n">128</span> <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

And then start up the voice</p><div class="source-code snippet"><div class="inner"><pre>       <a href="http://www.allegro.cc/manual/voice_start" target="_blank"><span class="a">voice_start</span></a><span class="k2">(</span> v <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

This definitely doesn&#39;t provide the results I expected,  and I am now at a loss as to how this is actually done.</p><p>I don&#39;t understand fine control of frequencies either.  I have to change the frequency ( voice_set_frequency( int voice, int frequency ) ) by somewhere around 150 to change the sound,  and that change is very course.</p><p>So I was hoping someone would enlighten me about music generation.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Daniel McKinnon)</author>
		<pubDate>Wed, 26 Jul 2006 06:05:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1. Use AUDIOSTREAMs, not voices.</p><p>2. When you generate samples for the audiostream, the value of each sample is a function of the sample offset in the audiostream and frequency. For example when playing the middle A (440 Hz), every 440th sample will have a value of 0 and the samples will increase linearly from 0 to maximum amplitude for 440 samples. This way you make a simple saw signal.</p><p>3. You can mix several saw signals at slightly different frequencies to get a better sound.</p><p>4. Modulate frequency and amplitude for more variety...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Wed, 26 Jul 2006 10:17:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In your sample, one wave length is only 8 bytes. Wave lengths are generally hundreds of bytes. Try using longer samples and adjust everything to that.</p><p>If your sound generator works with 44 kHz and you want to play a sound of 440 Hz, one wave length would be exactly 100 bytes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Wed, 26 Jul 2006 11:45:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oops yeah, that&#39;s what I meant in my first post under item #2. The wave length depends on the sampling frequency and the note frequency, so at 44 kHz a 440 Hz note is 100 samples...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Wed, 26 Jul 2006 11:57:16 +0000</pubDate>
	</item>
</rss>
