<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Sound recording basics</title>
		<link>http://www.allegro.cc/forums/view/588370</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 07 Nov 2006 00:39:18 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey all!</p><p>After reading through documentation and the source for Allegro I have come to the conclusion that I am still a newbie, and I need some help figuring out how I can use Allegro&#39;s sound capabilities. </p><p>I am trying to create a program that can take two sound samples and compare them to determine if they are a close enough match. Now for the most part I have discovered that sample plays a crucial role, but I am not completely sure how it works. I see that the sound data is stored in memory with the help of pointers to direct it, but I was looking at the <a href="http://www.allegro.cc/forums/thread/464312"> example </a> posted by spellcaster and noticed that the pointer is basically incremented by the length of the buffer. Now if that is the case what if part of the buffer is not filled and the pointer is just incremented that full size of the buffer. Won&#39;t it leave some empty space with silence? Furthermore, I see that pointer is assigned to a unsigned char pointer. Does this mean that I can access any byte of the data by just checking the content of that address?</p><p>I am throughly confused as how to work the buffer and/or memory, so that I can take certain parts of it and compare it to another set of data. Can someone enlighten me as to how the raw data is stored in allegro</p><p>Thanks,</p><p>Dan
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (clarkd)</author>
		<pubDate>Sun, 05 Nov 2006 00:21:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>To record sound data you do this:</p><p>1. Create a SAMPLE that will be large enough to hold the amount of sound data you want to record. Do this with create_sample().</p><p>2. Call start_sound_input() to find out how much data is recorded at a time. You won&#39;t get the entire sample filled at once, but instead buffer by buffer, so you have to piece it together yourself.</p><p>3. Make a pointer that points to the sample&#39;s data member.</p><p>4. In a loop repeatedly call read_sound_input() giving it the pointer from #3 as input argument. Each time the call to read_sound_input() was successful, increment the pointer by the amount start_sound_input() returned. Continue this until all the sample data has been filled. Make sure you don&#39;t go past the sample&#39;s data buffer size, otherwise your program will crash.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I am trying to create a program that can take two sound samples and compare them to determine if they are a close enough match.
</p></div></div><p>
You will want to do this in the frequency domain. The sample&#39;s data is stored in the time domain. You will transform it to frequency domain with Fourier transform. You will probably want to use an algorithm such as Fast Fourier Transform (FFT) for this. Once you&#39;ve done that for both samples, you can compare them by a number of means. You can calculate the euclidian distance, or you can search for the location of peaks or something like that. If the difference between two frequency footprints is small enough, then you can say the samples match.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Sun, 05 Nov 2006 14:05:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Depends on what it is you need to compare. If you&#39;re interested in the samples&#39; pitch, then auto-correlating each one and comparing the fundamental pitches may be a better method. For speech recognition, multiple band-pass filters (the analyzer part of a vocoder) may give good results. Otherwise, I&#39;d suggest FFT (with a proper window function).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sun, 05 Nov 2006 23:32:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok, so now I am wondering, because I have a snippet of code that displays the contents of the memory, how do the values correlate to the sounds. Anyway, look at the code and see if I am correct in my method on checking the data</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">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;stdio.h&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;string.h&gt;</span></td></tr><tr><td class="number">4</td><td><span class="p">#include &lt;iostream.h&gt;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td><span class="k1">int</span> main<span class="k2">(</span><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>    <span class="k1">int</span> audio, working_format, bitcap,stereocap,ratecap<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  <span class="k1">int</span> ofs <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    <span class="k1">int</span> len<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    <span class="k1">int</span> interval<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  <a href="http://www.allegro.cc/manual/SAMPLE" target="_blank"><span class="a">SAMPLE</span></a> <span class="k3">*</span>sample<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <span class="k1">int</span> foo<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    <span class="k1">int</span> size <span class="k3">=</span> <span class="n">1024</span><span class="k3">*</span><span class="n">1024</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>buf, <span class="k3">*</span>tempbuf, <span class="k3">*</span>start<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>    </td></tr><tr><td class="number">21</td><td>    <span class="c">//Let's find out what we are capable of</span></td></tr><tr><td class="number">22</td><td>  bitcap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_sound_input_cap_bits" target="_blank"><span class="a">get_sound_input_cap_bits</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    <span class="k1">if</span> <span class="k2">(</span>bitcap <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">24</td><td>        <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"No Audio input capabilty?"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    stereocap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_sound_input_cap_stereo" target="_blank"><span class="a">get_sound_input_cap_stereo</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  <span class="k1">if</span> <span class="k2">(</span>stereocap <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">27</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"No Stereo recording"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    ratecap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_sound_input_cap_rate" target="_blank"><span class="a">get_sound_input_cap_rate</span></a><span class="k2">(</span>bitcap, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    working_format <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_sound_input_cap_parm" target="_blank"><span class="a">get_sound_input_cap_parm</span></a><span class="k2">(</span>ratecap, bitcap, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>    <span class="k1">if</span> <span class="k2">(</span>working_format <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">31</td><td>        <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"We Are not a go!"</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//</span></td></tr><tr><td class="number">32</td><td>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>working_format <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> </td></tr><tr><td class="number">33</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"We Are a go but can't record and playback at the same time!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>working_format <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span> </td></tr><tr><td class="number">35</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"We Are a go!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>    </td></tr><tr><td class="number">37</td><td>    <span class="c">//Setting up the sample and the pointers</span></td></tr><tr><td class="number">38</td><td>    sample <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>bitcap, <span class="n">0</span>, ratecap, size<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>    buf<span class="k3">=</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span>sample-&gt;data<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    start <span class="k3">=</span> buf<span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    </td></tr><tr><td class="number">42</td><td>    <span class="c">//Let's start recording</span></td></tr><tr><td class="number">43</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Start Recording"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>    len <span class="k3">=</span> <a href="http://www.allegro.cc/manual/start_sound_input" target="_blank"><span class="a">start_sound_input</span></a><span class="k2">(</span>ratecap, <span class="n">16</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>    </td></tr><tr><td class="number">46</td><td>    <span class="c">//Find the interval to loop according to Spellcaster</span></td></tr><tr><td class="number">47</td><td>    interval <span class="k3">=</span> <span class="n">1000</span> <span class="k3">/</span> <span class="k2">(</span><span class="k2">(</span>len <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span> <span class="k3">/</span> ratecap<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>    <span class="c">/* use 9/10 of the max intervall */</span></td></tr><tr><td class="number">49</td><td>    interval <span class="k3">*</span><span class="k3">=</span> <span class="n">9</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>    interval <span class="k3">/</span><span class="k3">=</span> <span class="n">10</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"length of buffer in bytes = %i, max interval = %i\n"</span>, len, interval<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>    </td></tr><tr><td class="number">53</td><td>    <span class="c">//Start the looping to transfer the data into the sample...again this is taken from spellcaster</span></td></tr><tr><td class="number">54</td><td>    <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> ofs <span class="k3">&lt;</span> size<span class="k2">)</span> </td></tr><tr><td class="number">55</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">56</td><td>        foo <span class="k3">=</span> <a href="http://www.allegro.cc/manual/read_sound_input" target="_blank"><span class="a">read_sound_input</span></a><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>        </td></tr><tr><td class="number">57</td><td>        <span class="k1">if</span> <span class="k2">(</span>foo <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">58</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">59</td><td>            ofs <span class="k3">+</span><span class="k3">=</span> len<span class="k2">;</span></td></tr><tr><td class="number">60</td><td>            buf <span class="k3">+</span><span class="k3">=</span> len<span class="k2">;</span></td></tr><tr><td class="number">61</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">62</td><td>        <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span>interval<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">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><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>        foo <span class="k3">=</span> <a href="http://www.allegro.cc/manual/read_sound_input" target="_blank"><span class="a">read_sound_input</span></a><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>        </td></tr><tr><td class="number">67</td><td>        <span class="k1">if</span> <span class="k2">(</span>foo <span class="k3">&gt;</span> <span class="n">0</span><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>            ofs <span class="k3">+</span><span class="k3">=</span> len<span class="k2">;</span></td></tr><tr><td class="number">70</td><td>            buf <span class="k3">+</span><span class="k3">=</span> len<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="k2">}</span></td></tr><tr><td class="number">73</td><td>    </td></tr><tr><td class="number">74</td><td>    <span class="c">//Stop the sound recording</span></td></tr><tr><td class="number">75</td><td>    <a href="http://www.allegro.cc/manual/stop_sound_input" target="_blank"><span class="a">stop_sound_input</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>    </td></tr><tr><td class="number">77</td><td>    <span class="c">//lets put a pointer to the first memory location and output the contents</span></td></tr><tr><td class="number">78</td><td>    tempbuf <span class="k3">=</span> start<span class="k2">;</span></td></tr><tr><td class="number">79</td><td>    <span class="k1">while</span><span class="k2">(</span>tempbuf <span class="k3">&lt;</span> start <span class="k3">+</span> <span class="n">100</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>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"in %p is %u\n"</span>, tempbuf,<span class="k3">*</span>tempbuf<span class="k2">)</span><span class="k2">;</span>   <span class="c">//changed to %p and %u from %i</span></td></tr><tr><td class="number">82</td><td>        tempbuf<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">84</td><td>    </td></tr><tr><td class="number">85</td><td>    <span class="c">//Finally lets play it</span></td></tr><tr><td class="number">86</td><td>    <a href="http://www.allegro.cc/manual/play_sample" target="_blank"><span class="a">play_sample</span></a><span class="k2">(</span>sample, <span class="n">255</span>, <span class="n">128</span>, <span class="n">1000</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>&#160;</td></tr><tr><td class="number">88</td><td>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">89</td><td>    <span class="c">/* put your code here */</span></td></tr><tr><td class="number">90</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">91</td><td>&#160;</td></tr><tr><td class="number">92</td><td>  deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">93</td><td>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">94</td><td><span class="k2">}</span></td></tr><tr><td class="number">95</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">96</td><td>&#160;</td></tr><tr><td class="number">97</td><td><span class="k1">void</span> init<span class="k2">(</span><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>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">100</td><td>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td>  <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_AUTODETECT, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">102</td><td>  <a href="http://www.allegro.cc/manual/install_sound_input" target="_blank"><span class="a">install_sound_input</span></a><span class="k2">(</span>DIGI_AUTODETECT,MIDI_NONE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td><span class="k2">}</span></td></tr><tr><td class="number">104</td><td>&#160;</td></tr><tr><td class="number">105</td><td><span class="k1">void</span> deinit<span class="k2">(</span><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>  <a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Just to explain what I think I am looking at, the read_sound_input(buf) takes the buffer, all 88200 bytes in this case, and puts each byte into a memory location. Therefore, each piece of sound data is represented by numerical value from 0 to 255 since that is the range of a value that can be stored in a byte. Also it appears to be a linked list, so that data is stored in a linear progression.</p><p>Now I am curious as to how to interpret this because it looks like the interval is allowing for the buffer to be emptied into the sample every 900ms. Which means that we are storing roughly 98,000 bytes each second, but if I look at the data that streams out of the memory it looks random and doesn&#39;t seem to correlate to the sound. For example, if I take out the microphone I get data like the following
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>length of buffer in bytes <span class="k3">=</span> <span class="n">88200</span>, max interval <span class="k3">=</span> <span class="n">900</span></td></tr><tr><td class="number">2</td><td>in <span class="n">022A0020</span> is <span class="n">0</span></td></tr><tr><td class="number">3</td><td>in <span class="n">022A0021</span> is <span class="n">128</span></td></tr><tr><td class="number">4</td><td>in <span class="n">022A0022</span> is <span class="n">0</span></td></tr><tr><td class="number">5</td><td>in <span class="n">022A0023</span> is <span class="n">128</span></td></tr><tr><td class="number">6</td><td>in <span class="n">022A0024</span> is <span class="n">0</span></td></tr><tr><td class="number">7</td><td>in <span class="n">022A0025</span> is <span class="n">128</span></td></tr><tr><td class="number">8</td><td>in <span class="n">022A0026</span> is <span class="n">0</span></td></tr><tr><td class="number">9</td><td>in <span class="n">022A0027</span> is <span class="n">128</span></td></tr><tr><td class="number">10</td><td>in <span class="n">022A0028</span> is <span class="n">0</span></td></tr><tr><td class="number">11</td><td>in <span class="n">022A0029</span> is <span class="n">128</span></td></tr><tr><td class="number">12</td><td>in <span class="n">022A002A</span> is <span class="n">0</span></td></tr><tr><td class="number">13</td><td>in <span class="n">022A002B</span> is <span class="n">128</span></td></tr><tr><td class="number">14</td><td>in <span class="n">022A002C</span> is <span class="n">0</span></td></tr><tr><td class="number">15</td><td>in <span class="n">022A002D</span> is <span class="n">128</span></td></tr><tr><td class="number">16</td><td>in <span class="n">022A002E</span> is <span class="n">255</span></td></tr><tr><td class="number">17</td><td>in <span class="n">022A002F</span> is <span class="n">127</span></td></tr><tr><td class="number">18</td><td>in <span class="n">022A0030</span> is <span class="n">0</span></td></tr><tr><td class="number">19</td><td>in <span class="n">022A0031</span> is <span class="n">128</span></td></tr><tr><td class="number">20</td><td>in <span class="n">022A0032</span> is <span class="n">255</span></td></tr><tr><td class="number">21</td><td>in <span class="n">022A0033</span> is <span class="n">127</span></td></tr><tr><td class="number">22</td><td>in <span class="n">022A0034</span> is <span class="n">0</span></td></tr><tr><td class="number">23</td><td>in <span class="n">022A0035</span> is <span class="n">128</span></td></tr><tr><td class="number">24</td><td>in <span class="n">022A0036</span> is <span class="n">255</span></td></tr><tr><td class="number">25</td><td>in <span class="n">022A0037</span> is <span class="n">127</span></td></tr><tr><td class="number">26</td><td>in <span class="n">022A0038</span> is <span class="n">0</span></td></tr><tr><td class="number">27</td><td>in <span class="n">022A0039</span> is <span class="n">128</span></td></tr><tr><td class="number">28</td><td>in <span class="n">022A003A</span> is <span class="n">255</span></td></tr><tr><td class="number">29</td><td>in <span class="n">022A003B</span> is <span class="n">127</span></td></tr><tr><td class="number">30</td><td>in <span class="n">022A003C</span> is <span class="n">0</span></td></tr><tr><td class="number">31</td><td>in <span class="n">022A003D</span> is <span class="n">128</span></td></tr><tr><td class="number">32</td><td>in <span class="n">022A003E</span> is <span class="n">255</span></td></tr><tr><td class="number">33</td><td>in <span class="n">022A003F</span> is <span class="n">127</span></td></tr><tr><td class="number">34</td><td>in <span class="n">022A0040</span> is <span class="n">0</span></td></tr><tr><td class="number">35</td><td>in <span class="n">022A0041</span> is <span class="n">128</span></td></tr><tr><td class="number">36</td><td>in <span class="n">022A0042</span> is <span class="n">255</span></td></tr><tr><td class="number">37</td><td>in <span class="n">022A0043</span> is <span class="n">127</span></td></tr><tr><td class="number">38</td><td>in <span class="n">022A0044</span> is <span class="n">0</span></td></tr><tr><td class="number">39</td><td>in <span class="n">022A0045</span> is <span class="n">128</span></td></tr><tr><td class="number">40</td><td>in <span class="n">022A0046</span> is <span class="n">255</span></td></tr><tr><td class="number">41</td><td>in <span class="n">022A0047</span> is <span class="n">127</span></td></tr><tr><td class="number">42</td><td>in <span class="n">022A0048</span> is <span class="n">0</span></td></tr><tr><td class="number">43</td><td>in <span class="n">022A0049</span> is <span class="n">128</span></td></tr><tr><td class="number">44</td><td>in <span class="n">022A004A</span> is <span class="n">255</span></td></tr><tr><td class="number">45</td><td>in <span class="n">022A004B</span> is <span class="n">127</span></td></tr><tr><td class="number">46</td><td>in <span class="n">022A004C</span> is <span class="n">0</span></td></tr><tr><td class="number">47</td><td>in <span class="n">022A004D</span> is <span class="n">128</span></td></tr><tr><td class="number">48</td><td>in <span class="n">022A004E</span> is <span class="n">255</span></td></tr><tr><td class="number">49</td><td>in <span class="n">022A004F</span> is <span class="n">127</span></td></tr><tr><td class="number">50</td><td>in <span class="n">022A0050</span> is <span class="n">0</span></td></tr><tr><td class="number">51</td><td>in <span class="n">022A0051</span> is <span class="n">128</span></td></tr><tr><td class="number">52</td><td>in <span class="n">022A0052</span> is <span class="n">255</span></td></tr><tr><td class="number">53</td><td>in <span class="n">022A0053</span> is <span class="n">127</span></td></tr><tr><td class="number">54</td><td>in <span class="n">022A0054</span> is <span class="n">0</span></td></tr><tr><td class="number">55</td><td>in <span class="n">022A0055</span> is <span class="n">128</span></td></tr><tr><td class="number">56</td><td>in <span class="n">022A0056</span> is <span class="n">255</span></td></tr><tr><td class="number">57</td><td>in <span class="n">022A0057</span> is <span class="n">127</span></td></tr><tr><td class="number">58</td><td>in <span class="n">022A0058</span> is <span class="n">0</span></td></tr><tr><td class="number">59</td><td>in <span class="n">022A0059</span> is <span class="n">128</span></td></tr><tr><td class="number">60</td><td>in <span class="n">022A005A</span> is <span class="n">255</span></td></tr><tr><td class="number">61</td><td>in <span class="n">022A005B</span> is <span class="n">127</span></td></tr><tr><td class="number">62</td><td>in <span class="n">022A005C</span> is <span class="n">0</span></td></tr><tr><td class="number">63</td><td>in <span class="n">022A005D</span> is <span class="n">128</span></td></tr><tr><td class="number">64</td><td>in <span class="n">022A005E</span> is <span class="n">14</span></td></tr><tr><td class="number">65</td><td>in <span class="n">022A005F</span> is <span class="n">128</span></td></tr><tr><td class="number">66</td><td>in <span class="n">022A0060</span> is <span class="n">24</span></td></tr><tr><td class="number">67</td><td>in <span class="n">022A0061</span> is <span class="n">128</span></td></tr><tr><td class="number">68</td><td>in <span class="n">022A0062</span> is <span class="n">30</span></td></tr><tr><td class="number">69</td><td>in <span class="n">022A0063</span> is <span class="n">128</span></td></tr><tr><td class="number">70</td><td>in <span class="n">022A0064</span> is <span class="n">18</span></td></tr><tr><td class="number">71</td><td>in <span class="n">022A0065</span> is <span class="n">128</span></td></tr><tr><td class="number">72</td><td>in <span class="n">022A0066</span> is <span class="n">10</span></td></tr><tr><td class="number">73</td><td>in <span class="n">022A0067</span> is <span class="n">128</span></td></tr><tr><td class="number">74</td><td>in <span class="n">022A0068</span> is <span class="n">35</span></td></tr><tr><td class="number">75</td><td>in <span class="n">022A0069</span> is <span class="n">128</span></td></tr><tr><td class="number">76</td><td>in <span class="n">022A006A</span> is <span class="n">31</span></td></tr><tr><td class="number">77</td><td>in <span class="n">022A006B</span> is <span class="n">128</span></td></tr></tbody></table></div></div><p>

//edit: I noticed that I get the same values when I run it multiple times. I wonder if this means anything?</p><p>This makes me wonder if each byte of the sample memory is actually a member of a group of bytes that form a piece of sound data instead of just one byte forming a piece of sound data. Additionally, I know my sound card is probably junk, but I would think that the values that were to be stored would be closer to 0 since the microphone was unplugged.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (clarkd)</author>
		<pubDate>Mon, 06 Nov 2006 08:46:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
how do the values correlate to the sounds
</p></div></div><p>
Depends on whether you record in 8 or 16 bits and stereo or mono. Your code snippet wrong. You should read the manual to find the meaning of the values returned by the get_sound_input_cap_xxx() functions. When you call create sample, you should pass it parameters that you want to and at the same time know your hardware supports (by looking at the previously mentioned values). Then pass the same parameters to start_sound_input().</p><p>For example if you want to record 4 seconds of sound in 8bit mono at 22kHz, you use the get_sound_input_cap_xxx() functions to see if that is supported on your hardware and if it is, pass 8, 0, 22050 and 4*22050 to the create_sample() function. Then pass 22050, 8 and 0 to start_sound_input(). Then when you read sound input, you will get 22050 8bit values (bytes) for each second of recorded sound. I&#39;m not sure whether allegro uses signed or unsigned format, you should check with the documentation or source, it has to be documented somewhere. If you record in 16bit, then you will get 44100 bytes for each second, that is 22050 16bit values. And if you record in stereo, you will get twice as many values. Again I&#39;m not sure, but I think in stereo Allegro uses the scheme that interlaces left and right channels. That is one value for left, one for right, one for left, one for right and so on.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Mon, 06 Nov 2006 14:43:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
You should read the manual to find the meaning of the values returned by the get_sound_input_cap_xxx() functions.
</p></div></div><p>

Well I went through that part of the code and cleaned it up so that it should be correct, but I know that the setup shouldn&#39;t have been a problem because it was playing the samples back just fine. However, I discovered that I cannot record at 8 bits. When I tried <span class="source-code"> <a href="http://www.allegro.cc/manual/get_sound_input_cap_rate" target="_blank"><span class="a">get_sound_input_cap_rate</span></a><span class="k2">(</span><span class="n">8</span>, stereocap<span class="k2">)</span><span class="k2">;</span></span> it was returning a zero, so I am assuming my sound card on my laptop is crap. </p><p>Regardless, this is the updated part of the code that checks my hardware, but I am absolutely sure that it is correct. Then on top of this I am using the ratecap, bitcap, and stereocap as parameters in create_sample</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="c">//Let's find out what we are capable of</span></td></tr><tr><td class="number">2</td><td>bitcap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_sound_input_cap_bits" target="_blank"><span class="a">get_sound_input_cap_bits</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td><span class="k1">if</span> <span class="k2">(</span>bitcap <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">4</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"No Audio input capabilty?"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>stereocap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_sound_input_cap_stereo" target="_blank"><span class="a">get_sound_input_cap_stereo</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td><span class="k1">if</span> <span class="k2">(</span>stereocap <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">7</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"No Stereo recording"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>ratecap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_sound_input_cap_rate" target="_blank"><span class="a">get_sound_input_cap_rate</span></a><span class="k2">(</span>bitcap, stereocap<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>working_format <span class="k3">=</span> <a href="http://www.allegro.cc/manual/get_sound_input_cap_parm" target="_blank"><span class="a">get_sound_input_cap_parm</span></a><span class="k2">(</span>ratecap, bitcap, stereocap<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td><span class="k1">if</span> <span class="k2">(</span>working_format <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">11</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"We Are not a go!"</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//</span></td></tr><tr><td class="number">12</td><td><span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>working_format <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> </td></tr><tr><td class="number">13</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"We Are a go but can't record and playback at the same time!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>working_format <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span> </td></tr><tr><td class="number">15</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"We Are a go!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    </td></tr><tr><td class="number">17</td><td><a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"We are capable of recording at %i bits, with %i stereo, at a rate of %i \n"</span> , bitcap, stereocap, ratecap<span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

So I don&#39;t see how this can be wrong, however, I think I am going to put zero back in to simplify the data.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (clarkd)</author>
		<pubDate>Mon, 06 Nov 2006 20:21:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Then on top of this I am using the ratecap, bitcap, and stereocap as parameters in create_sample
</p></div></div><p>
According to the manual if your hardware supports both 8bit and 16bit, bitcap will be 24 (that is 8 &amp; 16). Don&#39;t use the value of bitcap, use either 8 or 16, depending on what you&#39;re interested in.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Mon, 06 Nov 2006 20:38:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />GOT IT!!!...sorta</p><p>I should have realized this. A char is only a byte long so it doesn&#39;t fit the data correctly for 16-bit sound which I am using. Therefore, I used unsigned short as the variable that I am using to store and and output the sound data, but I was getting around 32768 as the output. Now 2^15 equals 32768, so this means that the 16th bit is the sign bit. </p><p>Nice theory right? When I tried to use signed short I got numbers around -32768, so it sounds like it is including the 16th bit in the value of the number. However, I have to go to work, so I&#39;ll post my results later, but I think I am on the right path to understanding how the data is stored. Thanks miran for pounding the simple concepts into my head. </p><p>Now I just need to find a way to compare the data. Oh and the best part is when I increment the pointed it automatically skips the next byte.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (clarkd)</author>
		<pubDate>Tue, 07 Nov 2006 00:39:18 +0000</pubDate>
	</item>
</rss>
