<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>How to get raw sample frequencies</title>
		<link>http://www.allegro.cc/forums/view/615596</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 28 Jul 2015 11:42:30 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello all,</p><p>I&#39;m trying to get all frequencies of a sound sample (22 kbps Mono).<br />That is to say, if I break down the sample in pieces of (let&#39;s say) 0.01 secs the sound frequency of each piece.<br />(This has nothing to do with al_get_sample_frequency, which returns 22kbps.)</p><p>So to do this, I was looking at void *al_get_sample_data(const ALLEGRO_SAMPLE *spl)</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE"><span class="a">ALLEGRO_SAMPLE</span></a><span class="k3">*</span> pSample <span class="k3">=</span> <span class="c">/* ...the loaded wav file*/</span> <span class="k2">;</span>
<span class="k1">int</span> nDataLength <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_sample_length"><span class="a">al_get_sample_length</span></a><span class="k2">(</span>pSample<span class="k2">)</span><span class="k2">;</span>
<span class="k1">int16_t</span><span class="k3">*</span> ptr <span class="k3">=</span> <span class="k2">(</span><span class="k1">int16_t</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/al_get_sample_data"><span class="a">al_get_sample_data</span></a><span class="k2">(</span>pSample<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

In my case, nDataLength	returns 47936 (My sample is 1.780 sec long)<br />However if I look precisely at the ptr memory, the int16_t values are as follows</p><pre>
ptr[ 0] =  3
ptr[ 1] =  0
ptr[ 2] = -1
ptr[ 3] =  1
ptr[ 4] =  0
ptr[ 5] =  0
ptr[ 6] =  0
ptr[ 7] =  2
ptr[ 8] =  0
ptr[ 9] =  1
ptr[10] = -1
ptr[11] =  0
ptr[12] =  2
ptr[13] =  2
ptr[14] =  1
ptr[15] =  1
ptr[16] = -1
ptr[17] = -2
ptr[18] =  0
ptr[19] = -1
ptr[20] =  0
 ... ptr[10000] = -201	
 ... ptr[20000]	= -346	
 ... ptr[30000]	= -226	
 ... ptr[40000]	= -91	
 ... ptr[47935] = 34
</pre><p>

...It does not seems to be the raw frequencies of the sample pieces. <br />So what are these values? (especially negative values?)<br />Is there a way to get small parts frequencies?</p><p><span class="source-code"><a href="http://www.allegro.cc/manual/al_get_sample_data"><span class="a">al_get_sample_data</span></a></span> documentation is somewhat cryptic here... It says &quot;Return a pointer to the raw sample data.&quot;</p><p>Thank you
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Mon, 27 Jul 2015 23:44:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I believe you want to use Fast Fourier Transform on the sample data.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 28 Jul 2015 00:02:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for your answer.<br />It seems that fft is the right way to go, but is it possible to do fft with Allegro 5 or C++? </p><p>Another question is: Why nDataLength = 47936 since my sample is 1.780 sec long? 1.780 * 22050 = 39249 (not 47936). What does ptr[] contain?</p><p>Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Tue, 28 Jul 2015 00:10:58 +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/615596/1015442#target">anto80</a> said:</div><div class="quote"><p> Why nDataLength = 47936 since my sample is 1.780 sec long?    </p></div></div><p>I don&#39;t know.</p><p>The ptr[] evidently contains int16_t values, which are signed short ints.</p><p>I was fiddling with a guitar tuner last summer, but I&#39;ve reinstalled the OS to a bigger hard drive and haven&#39;t reinstalled Allegro.  Give me an hour and I&#39;ll see if I can give you an example program that allows you to input sounds through the microphone and see how the &quot;main frequency&quot; and the sample distributions change (also known as timbre).</p><p>[EDIT]  Well, the last announcement for a WIP in Allegro Development tried to give me allegro-5.0.11 something, which I already had from 2014, so I tried allegro-5.1.8.  I can&#39;t get this stuff to compile, haven&#39;t used it so long I&#39;m a n00b again too.</p><p>I think <a href="https://www.allegro.cc/files/attachment/609645">this zip file</a> has the source for some sort of FFT thing, IIRC it tried to print the nearest note of the predominant frequency and how much it was off by.  It uses OpenGL, sorry.  You may be able to get some relevant bits out of it.</p><p>As for how FFT works, I have some totally wild guesses.</p><p>&lt;total n00bishness follows&gt;<br />The FFT thing works by making a sine wave of some given frequency and compares it to the samples to see how well it follows the curve.  A good fit results in a large value, so the &quot;bin&quot; for that frequency gets the high value.  It then tries higher and higher frequencies to see how well they fit in turn and stores those values in their respective bins.  And for low values too, obviously.  However, since the generated sine wave starts from a zero point, and the samples waveforms start from a random point, it would most likely guess wrong unless the sample could be forced to start from the zero point of a waveform.  This is about as difficult in itself, so what the FFT does is make a &quot;window&quot; to copy the sample to, and reduces the frequencies toward both ends so it &quot;looks&quot; like it starts from a zero point.  OTOH, this &quot;window&quot; necessarily averages quite a few sample points to fit one bin, so eventually you have to compromise between accuracy and speed.  Also, I got stuck for awhile on the fact that the display of the &quot;bins&quot; seemed to produce a useless S shaped curve, but what I didn&#39;t realize was that it was symmetrical and I only needed to examine the very first few &quot;bins&quot; at the beginning to get something reasonable. At least, that&#39;s my memory of what I thought last summer.</p><p>Note:  edited the above again
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 28 Jul 2015 00:19:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you for your time and trouble...</p><p>(Well, I can&#39;t compile 5.1 either; I&#39;m sticking to 5.0.10 for now...)</p><p>If I understand your example correctly, it seems that you calculates volume (<br />magnitudes[i] variable) using root mean square (average of sqrt(v[i]*v[i]))<br />It seems to be like in this other thread <a href="https://www.allegro.cc/forums/thread/610890">https://www.allegro.cc/forums/thread/610890</a> (see SiegeLord&#39;s message)</p><p>However I don&#39;t see the relation between the array of instant volumes and an array of frequencies I&#39;m searching...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Tue, 28 Jul 2015 01:41:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><div class="media-player youtube"><div style="margin: 1em 2em; background: url(/images/movie.png); width: 180px; height: 100px; text-align: center;"><a href="http://www.allegro.cc//www.youtube.com/watch?v=H144ipQa22Q" target="_blank"><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/object/0/0/00369810ed82385187f55684df3d4f0b.jpg" border="0" alt="video" title="Click to play video" /></a></div></div></p><p>The vertical bouncing green bars on his graph each represent a small range of frequencies, the &quot;bins&quot; I speak of above.  It&#39;s like the histogram thing you might see on an audio player.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 28 Jul 2015 02:08:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks again.</p><p>Yes I know what FFT is.<br />(Transforming &quot;Time domain&quot; overlapping cosine-like waveforms into a set of &quot;Frequency domain&quot; values.)</p><p>But, to do this, I think I must first know what I get from al_get_sample_data.<br />If I can&#39;t figure what it is (seems that the length of the array does not match...) I won&#39;t be able to perform any math.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Tue, 28 Jul 2015 02:14:38 +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/615596/1015457#target">anto80</a> said:</div><div class="quote"><p>But, to do this, I think I must first know what I get from al_get_sample_data.</p></div></div><p>
Most likely it&#39;s the amplitude. Essentially it relates to the electrical signal being sent to the speaker, but more basically, it determines the physical position the speaker should have at that point in time; 0 is centered (&quot;at rest&quot;), negative values pull in, and positive values push out. By constantly oscillating in and out, the speaker compresses the air and creates sound waves.</p><p>Why the array is longer than the sound length, I can&#39;t say. Are you sure the sample is exactly 1.780 seconds long, and not 1.780 seconds of sound followed by a bit of silence?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Tue, 28 Jul 2015 05:49:59 +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/615596/1015463#target">Kitty Cat</a> said:</div><div class="quote"><p> it determines the physical position the speaker should have at that point in time; 0 is centered (&quot;at rest&quot;), negative values pull in, and positive values push out. By constantly oscillating in and out, the speaker compresses the air and creates sound waves.</p></div></div><p>This ^^</p><p>If you were to grab those signed 16 bit ints and draw the values on the screen in the x direction with increasing index values (scaling appropriately so they&#39;ll fit) then you&#39;d see an oscilloscope-like pattern on the screen.  This would be the time domain mentioned in the video.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 28 Jul 2015 06:52:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you for the further explanation! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Now I still need to figure out how to FFT the small chunks of my waveform into sets of &quot;frequency windows bins&quot;, each chunk giving a set of bins(an amplitude value for each frequency window)</p><p>[Edit]<br />I have solved my problem with the following code, thanks to Arthur&#39;s example.<br />I&#39;m letting all commented code to see the difference with the original code.</p><p>At the end I get frequencies magnitudes in magnitudes[i].<br />The frequencies are output on screen (1024x800)<br />The only thing I don&#39;t know is the frequency scale, that is to say, what is the frequency window of &quot;magnitudes[i]&quot;... but I&#39;ll try to find out<br />Thanks again.</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="p">#include &lt;stdio.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_audio.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_acodec.h&gt;</span>
<span class="number">   6</span><span class="p">#include "kiss_fft.h"</span>
<span class="number">   7</span><span class="p">#include "kiss_fftr.h"</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="p">#define ASSERT(a)          assert(a)</span>
<span class="number">  10</span><span class="p">#define MIN(a,b)          (a&lt;b)?a:b</span>
<span class="number">  11</span><span class="p">#define MAX(a,b)          (a&gt;b)?a:b</span>
<span class="number">  12</span>
<span class="number">  13</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="c">/* Comment out the following line to use 16-bit audio */</span>
<span class="number">  16</span><span class="p">#define WANT_8_BIT_DEPTH</span>
<span class="number">  17</span>
<span class="number">  18</span><span class="p">#define SCRW 1024</span>
<span class="number">  19</span><span class="p">#define SCRH 800</span>
<span class="number">  20</span>
<span class="number">  21</span><span class="p">#define BUFFSIZE (SCRW*8)</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="p">#define CHUNK_SIZE    512</span>
<span class="number">  24</span>
<span class="number">  25</span><span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_AUDIO_DEPTH"><span class="a">ALLEGRO_AUDIO_DEPTH</span></a> audio_depth <span class="k3">=</span> ALLEGRO_AUDIO_DEPTH_UINT8<span class="k2">;</span>
<span class="number">  26</span><span class="c">//typedef uint8_t* audio_buffer_t;</span>
<span class="number">  27</span><span class="c">//const uint8_t sample_center = 128;</span>
<span class="number">  28</span><span class="k1">const</span> <span class="k1">short</span> min_sample_val <span class="k3">=</span> <span class="k3">-</span><span class="n">32768</span><span class="k2">;</span> <span class="c">//const int8_t min_sample_val = 0x80;</span>
<span class="number">  29</span><span class="k1">const</span> <span class="k1">short</span> max_sample_val <span class="k3">=</span> <span class="n">32767</span><span class="k2">;</span><span class="c">//const int8_t max_sample_val = 0x7f;</span>
<span class="number">  30</span><span class="k1">const</span> <span class="k1">int</span> sample_range <span class="k3">=</span> <span class="n">0xFFFF</span><span class="k2">;</span> <span class="c">//const int sample_range = 0xff;</span>
<span class="number">  31</span><span class="c">//const int sample_size = 1;</span>
<span class="number">  32</span>
<span class="number">  33</span><span class="k1">const</span> <span class="k1">unsigned</span> <span class="k1">int</span> samples_per_fragment <span class="k3">=</span> BUFFSIZE<span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span><span class="k1">const</span> <span class="k1">unsigned</span> <span class="k1">int</span> frequency <span class="k3">=</span> <span class="n">44100</span><span class="k2">;</span>
<span class="number">  36</span><span class="k1">const</span> <span class="k1">unsigned</span> <span class="k1">int</span> max_seconds_to_record <span class="k3">=</span> <span class="n">60</span> <span class="k3">*</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="k1">const</span> <span class="k1">unsigned</span> <span class="k1">int</span> playback_fragment_count <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  39</span><span class="k1">const</span> <span class="k1">unsigned</span> <span class="k1">int</span> playback_samples_per_fragment <span class="k3">=</span> <span class="n">4096</span><span class="k2">;</span>
<span class="number">  40</span>
<span class="number">  41</span><span class="k1">double</span> cardfreq <span class="k3">=</span> <span class="n">44100</span><span class="k2">;</span>
<span class="number">  42</span>
<span class="number">  43</span><span class="k1">float</span> unbiased<span class="k2">[</span>BUFFSIZE<span class="k2">]</span><span class="k2">;</span>
<span class="number">  44</span><span class="k1">float</span> array<span class="k2">[</span>BUFFSIZE<span class="k2">]</span><span class="k2">;</span>
<span class="number">  45</span><span class="k1">float</span> magnitudes<span class="k2">[</span>BUFFSIZE<span class="k2">]</span><span class="k2">;</span>
<span class="number">  46</span><span class="c">//float buf[BUFFSIZE];  //used to rebuild time from frequency</span>
<span class="number">  47</span>
<span class="number">  48</span>kiss_fft_cpx<span class="k3">*</span> copycpx<span class="k2">(</span><span class="k1">float</span> <span class="k3">*</span>mat, <span class="k1">int</span> nframe<span class="k2">)</span>
<span class="number">  49</span><span class="k2">{</span>
<span class="number">  50</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  51</span>  kiss_fft_cpx <span class="k3">*</span>mat2<span class="k2">;</span>
<span class="number">  52</span>  mat2<span class="k3">=</span><span class="k2">(</span>kiss_fft_cpx<span class="k3">*</span><span class="k2">)</span>KISS_FFT_MALLOC<span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>kiss_fft_cpx<span class="k2">)</span><span class="k3">*</span>nframe<span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>  kiss_fft_scalar zero<span class="k2">;</span>
<span class="number">  54</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span><span class="k3">&amp;</span>zero,<span class="n">0</span>,<span class="k1">sizeof</span><span class="k2">(</span>zero<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>  <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>nframe <span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  56</span>  <span class="k2">{</span>
<span class="number">  57</span>    mat2<span class="k2">[</span>i<span class="k2">]</span>.r <span class="k3">=</span> mat<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number">  58</span>    mat2<span class="k2">[</span>i<span class="k2">]</span>.i <span class="k3">=</span> zero<span class="k2">;</span>
<span class="number">  59</span>  <span class="k2">}</span>
<span class="number">  60</span>  <span class="k1">return</span> mat2<span class="k2">;</span>
<span class="number">  61</span><span class="k2">}</span>
<span class="number">  62</span>
<span class="number">  63</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span>
<span class="number">  64</span><span class="k2">{</span>
<span class="number">  65</span>  <span class="c">//ALLEGRO_AUDIO_RECORDER *r;</span>
<span class="number">  66</span>  <span class="c">//ALLEGRO_AUDIO_STREAM *s;</span>
<span class="number">  67</span>
<span class="number">  68</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>q<span class="k2">;</span>
<span class="number">  69</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>d<span class="k2">;</span>
<span class="number">  70</span>  <span class="k1">float</span> maxmag<span class="k2">;</span>
<span class="number">  71</span>  <span class="k1">float</span> ultimatemag <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  72</span>  <span class="k1">float</span> sum<span class="k2">;</span>
<span class="number">  73</span>
<span class="number">  74</span>  <span class="k1">int</span> prev <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  75</span>
<span class="number">  76</span>  <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>
<span class="number">  78</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  79</span>  <span class="k2">{</span>
<span class="number">  80</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr,<span class="s">"Unable to initialize primitives addon\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>  <span class="k2">}</span>
<span class="number">  82</span>
<span class="number">  83</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  84</span>  <span class="k2">{</span>
<span class="number">  85</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr,<span class="s">"Unable to install keyboard\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>  <span class="k2">}</span>
<span class="number">  87</span>
<span class="number">  88</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">  89</span>  <span class="k2">{</span>
<span class="number">  90</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr,<span class="s">"Unable to initialize audio addon\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>  <span class="k2">}</span>
<span class="number">  92</span>
<span class="number">  93</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">  94</span>  <span class="k2">{</span>
<span class="number">  95</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr,<span class="s">"Unable to initialize acodec addon\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>  <span class="k2">}</span>
<span class="number">  97</span>
<span class="number">  98</span>  <span class="c">/* Note: increasing the number of channels will break this demo. Other</span>
<span class="number">  99</span><span class="c">  * settings can be changed by modifying the constants at the top of the</span>
<span class="number"> 100</span><span class="c">  * file.</span>
<span class="number"> 101</span><span class="c">  */</span>
<span class="number"> 102</span>  <span class="c">// r = al_create_audio_recorder(1000, samples_per_fragment, frequency,</span>
<span class="number"> 103</span>  <span class="c">//   audio_depth, ALLEGRO_CHANNEL_CONF_1);</span>
<span class="number"> 104</span>  <span class="c">//if (!r)</span>
<span class="number"> 105</span>  <span class="c">//{</span>
<span class="number"> 106</span>  <span class="c">//  fprintf(stderr,"Unable to create audio recorder\n");</span>
<span class="number"> 107</span>  <span class="c">//}</span>
<span class="number"> 108</span>
<span class="number"> 109</span>  <span class="c">// s = al_create_audio_stream(playback_fragment_count,</span>
<span class="number"> 110</span>  <span class="c">//    playback_samples_per_fragment, frequency, audio_depth,</span>
<span class="number"> 111</span>  <span class="c">//    ALLEGRO_CHANNEL_CONF_1);</span>
<span class="number"> 112</span>  <span class="c">//if (!s)</span>
<span class="number"> 113</span>  <span class="c">//{</span>
<span class="number"> 114</span>  <span class="c">//  fprintf(stderr,"Unable to create audio stream\n");</span>
<span class="number"> 115</span>  <span class="c">//}</span>
<span class="number"> 116</span>
<span class="number"> 117</span>  <a href="http://www.allegro.cc/manual/al_reserve_samples"><span class="a">al_reserve_samples</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>  <span class="c">//al_set_audio_stream_playing(s, false);</span>
<span class="number"> 119</span>  <span class="c">//al_attach_audio_stream_to_mixer(s, al_get_default_mixer());</span>
<span class="number"> 120</span>
<span class="number"> 121</span>
<span class="number"> 122</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE"><span class="a">ALLEGRO_SAMPLE</span></a><span class="k3">*</span> 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">"E:\\devt\\mywork\\FFT\\FFT\\test.wav"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>  <span class="k1">int</span> nSampleLength <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_sample_length"><span class="a">al_get_sample_length</span></a><span class="k2">(</span>pSample<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>  <span class="k1">int16_t</span><span class="k3">*</span> ptr <span class="k3">=</span> <span class="k2">(</span><span class="k1">int16_t</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/al_get_sample_data"><span class="a">al_get_sample_data</span></a><span class="k2">(</span>pSample<span class="k2">)</span><span class="k2">;</span>   
<span class="number"> 125</span>  
<span class="number"> 126</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE_INSTANCE"><span class="a">ALLEGRO_SAMPLE_INSTANCE</span></a><span class="k3">*</span> pSampleInstance <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>pSample<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>  <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span>pSampleInstance <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</span>
<span class="number"> 129</span>  <span class="k1">bool</span> bRet <span class="k3">=</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>pSampleInstance, <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 class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>
<span class="number"> 131</span>
<span class="number"> 132</span>
<span class="number"> 133</span>  q <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>
<span class="number"> 135</span>  <span class="c">/* Note: the following two options are referring to pixel samples, and have</span>
<span class="number"> 136</span><span class="c">  * nothing to do with audio samples. */</span>
<span class="number"> 137</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_WINDOWED<span class="k3">|</span>ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>    
<span class="number"> 139</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLE_BUFFERS, <span class="n">1</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLES, <span class="n">8</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>
<span class="number"> 142</span>  d <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>SCRW, SCRH<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>
<span class="number"> 144</span>  <span class="c">//al_register_event_source(q, al_get_audio_recorder_event_source(r));</span>
<span class="number"> 145</span>  <span class="c">//al_register_event_source(q, al_get_audio_stream_event_source(s));</span>
<span class="number"> 146</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>q, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>q, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>
<span class="number"> 149</span>  <span class="c">//create necessary fft buffers</span>
<span class="number"> 150</span>  kiss_fft_cpx out_cpx<span class="k2">[</span>BUFFSIZE<span class="k2">]</span>,<span class="k3">*</span>cpx_buf<span class="k2">;</span>
<span class="number"> 151</span>  kiss_fftr_cfg fft <span class="k3">=</span> kiss_fftr_alloc<span class="k2">(</span>BUFFSIZE<span class="k3">*</span><span class="n">2</span> ,<span class="n">0</span> ,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 152</span>  <span class="c">//kiss_fftr_cfg ifft = kiss_fftr_alloc(BUFFSIZE*2,isinverse,0,0);</span>
<span class="number"> 153</span>
<span class="number"> 154</span>  <span class="c">//al_start_audio_recorder(r);</span>
<span class="number"> 155</span>
<span class="number"> 156</span>  <span class="c">//while (true)</span>
<span class="number"> 157</span>  <span class="c">//{</span>
<span class="number"> 158</span>  <span class="c">//  ALLEGRO_EVENT e;</span>
<span class="number"> 159</span>
<span class="number"> 160</span>  <span class="c">//  al_wait_for_event(q, &amp;e);</span>
<span class="number"> 161</span>
<span class="number"> 162</span>    <span class="c">//if (e.type == ALLEGRO_EVENT_AUDIO_RECORDER_FRAGMENT)</span>
<span class="number"> 163</span>    <span class="c">//{</span>
<span class="number"> 164</span>
<span class="number"> 165</span>  <span class="k1">int</span> nChunkCursor<span class="k2">;</span>
<span class="number"> 166</span>
<span class="number"> 167</span>  <span class="k1">for</span> <span class="k2">(</span>nChunkCursor<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> nChunkCursor <span class="k3">&lt;</span> nSampleLength<span class="k2">;</span> nChunkCursor<span class="k3">+</span><span class="k3">=</span>CHUNK_SIZE<span class="k2">)</span>
<span class="number"> 168</span>  <span class="k2">{</span>
<span class="number"> 169</span>
<span class="number"> 170</span>      <span class="c">//ALLEGRO_AUDIO_RECORDER_EVENT *re = al_get_audio_recorder_event(&amp;e);</span>
<span class="number"> 171</span>      <span class="c">//audio_buffer_t input = (audio_buffer_t) re-&gt;buffer;</span>
<span class="number"> 172</span>      <span class="k1">int</span> sample_count <span class="k3">=</span> MIN<span class="k2">(</span>CHUNK_SIZE, nSampleLength-nChunkCursor<span class="k2">)</span><span class="k2">;</span>  <span class="c">//re-&gt;samples;</span>
<span class="number"> 173</span>      <span class="c">//const int R = sample_count / BUFFSIZE;</span>
<span class="number"> 174</span>      <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 175</span>
<span class="number"> 176</span>
<span class="number"> 177</span>
<span class="number"> 178</span>
<span class="number"> 179</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 180</span>
<span class="number"> 181</span>      <span class="c">//draw the original waveform (time domain)</span>
<span class="number"> 182</span>      <span class="c">//for (i = 1; i &lt; SCRW; ++i)</span>
<span class="number"> 183</span>      <span class="c">//{</span>
<span class="number"> 184</span>      <span class="c">//  int j, c = 0;</span>
<span class="number"> 185</span>
<span class="number"> 186</span>      <span class="c">//  /* Take the average of R samples so it fits on the screen */</span>
<span class="number"> 187</span>      <span class="c">//  for (j = i * R; j &lt; i * R + R &amp;&amp; j &lt; sample_count; ++j)</span>
<span class="number"> 188</span>      <span class="c">//  {</span>
<span class="number"> 189</span>      <span class="c">//    c += ptr[nChunkCursor+j]; // input[j] - sample_center;</span>
<span class="number"> 190</span>      <span class="c">//  }</span>
<span class="number"> 191</span>      <span class="c">//  c /= R;</span>
<span class="number"> 192</span>
<span class="number"> 193</span>      <span class="c">//  /* Draws a line from the previous sample point to the next */</span>
<span class="number"> 194</span>      <span class="c">//  al_draw_line(i - 1,</span>
<span class="number"> 195</span>      <span class="c">//         SCRH/4 + ( ( (prev - min_sample_val) / (float) sample_range) * SCRH/2 - 256),</span>
<span class="number"> 196</span>      <span class="c">//         i,</span>
<span class="number"> 197</span>      <span class="c">//         SCRH/4 + ( ( (c - min_sample_val) / (float) sample_range) * SCRH/2 - 256),</span>
<span class="number"> 198</span>      <span class="c">//         al_map_rgb(255,255,255), 1.2);</span>
<span class="number"> 199</span>
<span class="number"> 200</span>      <span class="c">//  prev = c;</span>
<span class="number"> 201</span>      <span class="c">//}</span>
<span class="number"> 202</span>
<span class="number"> 203</span>      <span class="c">//copy to another buffer and remove any bias</span>
<span class="number"> 204</span>      sum <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 205</span>      <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>BUFFSIZE<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 206</span>      <span class="k2">{</span>
<span class="number"> 207</span>        unbiased<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> ptr<span class="k2">[</span>nChunkCursor<span class="k3">+</span>i<span class="k2">]</span><span class="k2">;</span> <span class="c">// input[i];</span>
<span class="number"> 208</span>        sum <span class="k3">+</span><span class="k3">=</span> unbiased<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 209</span>      <span class="k2">}</span>
<span class="number"> 210</span>
<span class="number"> 211</span>      sum <span class="k3">/</span><span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>BUFFSIZE<span class="k2">;</span>
<span class="number"> 212</span>
<span class="number"> 213</span>      <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>BUFFSIZE<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 214</span>      <span class="k2">{</span>
<span class="number"> 215</span>        unbiased<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">-</span><span class="k3">=</span> sum<span class="k2">;</span>
<span class="number"> 216</span>      <span class="k2">}</span>
<span class="number"> 217</span>
<span class="number"> 218</span>      maxmag <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 219</span>      <span class="c">//filter out "low input" like noise gate</span>
<span class="number"> 220</span>      <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>BUFFSIZE<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 221</span>      <span class="k2">{</span>
<span class="number"> 222</span>        <span class="k1">if</span><span class="k2">(</span>maxmag <span class="k3">&lt;</span> unbiased<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 223</span>          maxmag <span class="k3">=</span> unbiased<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 224</span>      <span class="k2">}</span>
<span class="number"> 225</span>      <span class="k1">if</span><span class="k2">(</span>maxmag <span class="k3">&lt;</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">)</span>
<span class="number"> 226</span>        <span class="k1">goto</span> noise_gate<span class="k2">;</span>
<span class="number"> 227</span>
<span class="number"> 228</span>      <span class="c">//copy to another buffer while clamping to a triangular "window"</span>
<span class="number"> 229</span>      <span class="c">//Wild Ass Guess:  Pinching off the ends to zero simulates having the sinusoids</span>
<span class="number"> 230</span>      <span class="c">//begin and end at the beginning and end of the buffer to avoid distorting the fft</span>
<span class="number"> 231</span>      <span class="c">//while still keeping the buffer size at a power of two.</span>
<span class="number"> 232</span>      <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>BUFFSIZE<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 233</span>      <span class="k2">{</span>
<span class="number"> 234</span>        <span class="k1">float</span> ttmp <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>i<span class="k3">/</span><span class="k2">(</span>BUFFSIZE<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 235</span>        array<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> unbiased<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">*</span> ttmp<span class="k2">;</span>
<span class="number"> 236</span>        array<span class="k2">[</span>BUFFSIZE <span class="k3">-</span> i <span class="k3">-</span> <span class="n">1</span><span class="k2">]</span> <span class="k3">*</span><span class="k3">=</span> ttmp<span class="k2">;</span>  <span class="c">//mirror it on the second half</span>
<span class="number"> 237</span>      <span class="k2">}</span>
<span class="number"> 238</span>
<span class="number"> 239</span>      cpx_buf <span class="k3">=</span> copycpx<span class="k2">(</span>array,BUFFSIZE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 240</span>      kiss_fftr<span class="k2">(</span>fft,<span class="k2">(</span>kiss_fft_scalar<span class="k3">*</span><span class="k2">)</span>cpx_buf, out_cpx<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 241</span>
<span class="number"> 242</span>      <span class="c">//kiss_fftri(ifft,out_cpx,(kiss_fft_scalar*)out );  //the inverse, which we're not using</span>
<span class="number"> 243</span>
<span class="number"> 244</span>      <span class="c">//convert the complex numbers to scalar magnitude via Pythagoras</span>
<span class="number"> 245</span>      maxmag <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 246</span>      <span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">1</span><span class="k2">;</span>i<span class="k3">&lt;</span>BUFFSIZE<span class="k3">/</span><span class="n">4</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 247</span>      <span class="k2">{</span>
<span class="number"> 248</span>        magnitudes<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span>  <span class="n">0</span>.<span class="n">005</span> <span class="k3">*</span> <span class="k2">(</span><span class="k3">-</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span>out_cpx<span class="k2">[</span>i<span class="k2">]</span>.i<span class="k3">*</span>out_cpx<span class="k2">[</span>i<span class="k2">]</span>.i<span class="k2">)</span> <span class="k3">+</span> <span class="k2">(</span>out_cpx<span class="k2">[</span>i<span class="k2">]</span>.r <span class="k3">*</span> out_cpx<span class="k2">[</span>i<span class="k2">]</span>.r<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//*(float)1.0/i );</span>
<span class="number"> 249</span>        <span class="k1">if</span><span class="k2">(</span>magnitudes<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">&lt;</span> maxmag<span class="k2">)</span>
<span class="number"> 250</span>          maxmag <span class="k3">=</span> magnitudes<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 251</span>      <span class="k2">}</span>
<span class="number"> 252</span>
<span class="number"> 253</span>      maxmag <span class="k3">=</span> <span class="k3">-</span><span class="n">200</span>.<span class="n">0</span><span class="k3">/</span>maxmag<span class="k2">;</span>
<span class="number"> 254</span>
<span class="number"> 255</span>      <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>BUFFSIZE<span class="k3">/</span><span class="n">4</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 256</span>      <span class="k2">{</span>
<span class="number"> 257</span>        magnitudes<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">*</span><span class="k3">=</span> maxmag<span class="k2">;</span>
<span class="number"> 258</span>      <span class="k2">}</span>
<span class="number"> 259</span>
<span class="number"> 260</span>      <span class="c">//draw the frequency domain</span>
<span class="number"> 261</span>      <span class="c">/* Changed this to only include the first 1/4 of the bins because of the max expected frequency</span>
<span class="number"> 262</span><span class="c">       * compared to the Nyquist frequency</span>
<span class="number"> 263</span><span class="c">      for(i=1;i&lt;BUFFSIZE/2 - 1;i++)</span>
<span class="number"> 264</span><span class="c">      {</span>
<span class="number"> 265</span><span class="c">        al_draw_line( (i - 1) * 2,</span>
<span class="number"> 266</span><span class="c">                SCRH/2 + magnitudes[i-1],</span>
<span class="number"> 267</span><span class="c">               i * 2,</span>
<span class="number"> 268</span><span class="c">          SCRH/2 + magnitudes[i],</span>
<span class="number"> 269</span><span class="c">          al_map_rgb(255,0,0), 1.2);</span>
<span class="number"> 270</span><span class="c">      }</span>
<span class="number"> 271</span><span class="c">      */</span>
<span class="number"> 272</span>
<span class="number"> 273</span>      <span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">1</span><span class="k2">;</span>i<span class="k3">&lt;</span>SCRW<span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 274</span>      <span class="k2">{</span>
<span class="number"> 275</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span> <span class="k2">(</span>i <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">8</span>,
<span class="number"> 276</span>            SCRH<span class="k3">/</span><span class="n">2</span> <span class="k3">+</span> magnitudes<span class="k2">[</span>i-1<span class="k2">]</span>,
<span class="number"> 277</span>            i <span class="k3">*</span> <span class="n">8</span>,
<span class="number"> 278</span>            SCRH<span class="k3">/</span><span class="n">2</span> <span class="k3">+</span> magnitudes<span class="k2">[</span>i<span class="k2">]</span>,
<span class="number"> 279</span>            <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span>, <span class="n">1</span>.<span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 280</span>      <span class="k2">}</span>
<span class="number"> 281</span>
<span class="number"> 282</span>noise_gate:
<span class="number"> 283</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 284</span>      <span class="c">//printf("%f\n",maxmag);</span>
<span class="number"> 285</span>      <span class="k1">if</span><span class="k2">(</span>ultimatemag <span class="k3">&lt;</span> maxmag<span class="k2">)</span>
<span class="number"> 286</span>        ultimatemag <span class="k3">=</span> maxmag<span class="k2">;</span>
<span class="number"> 287</span>
<span class="number"> 288</span>    <span class="c">//}</span>
<span class="number"> 289</span>
<span class="number"> 290</span>    <span class="c">//else if (e.type == ALLEGRO_EVENT_DISPLAY_CLOSE)</span>
<span class="number"> 291</span>    <span class="c">//{</span>
<span class="number"> 292</span>    <span class="c">//  break;</span>
<span class="number"> 293</span>    <span class="c">//}</span>
<span class="number"> 294</span>    <span class="c">//else if (e.type == ALLEGRO_EVENT_KEY_CHAR)</span>
<span class="number"> 295</span>    <span class="c">//{</span>
<span class="number"> 296</span>    <span class="c">//  if (e.keyboard.unichar == 27)</span>
<span class="number"> 297</span>    <span class="c">//  {</span>
<span class="number"> 298</span>    <span class="c">//    /* pressed ESC */</span>
<span class="number"> 299</span>    <span class="c">//    break;</span>
<span class="number"> 300</span>    <span class="c">//  }</span>
<span class="number"> 301</span>    <span class="c">//}</span>
<span class="number"> 302</span>  <span class="c">//}</span>
<span class="number"> 303</span>
<span class="number"> 304</span>  <span class="k2">}</span>
<span class="number"> 305</span>
<span class="number"> 306</span>  <span class="c">/* clean up */</span>
<span class="number"> 307</span>  <span class="c">// al_destroy_audio_recorder(r);</span>
<span class="number"> 308</span>  <span class="c">// al_destroy_audio_stream(s);</span>
<span class="number"> 309</span>  kiss_fft_cleanup<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 310</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>fft<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 311</span>  
<span class="number"> 312</span>  <a href="http://www.allegro.cc/manual/al_stop_sample_instance"><span class="a">al_stop_sample_instance</span></a><span class="k2">(</span>pSampleInstance<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 313</span>  <a href="http://www.allegro.cc/manual/al_destroy_sample_instance"><span class="a">al_destroy_sample_instance</span></a><span class="k2">(</span>pSampleInstance<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 314</span>  <a href="http://www.allegro.cc/manual/al_destroy_sample"><span class="a">al_destroy_sample</span></a><span class="k2">(</span>pSample<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 315</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"biggest mag was %f\n"</span>,ultimatemag<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 316</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 317</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Tue, 28 Jul 2015 11:42:30 +0000</pubDate>
	</item>
</rss>
