hordia audio related posts http://h.ordia.com.ar en hordia audio related posts - http://h.ordia.com.ar High abstraction level audio plugins specification (and code generation) http://audiores.uint8.com.ar/blog/2010/05/17/high-abstraction-level-audio-plugins-specification-and-code-generation/ http://audiores.uint8.com.ar/blog/2010/05/17/high-abstraction-level-audio-plugins-specification-and-code-generation/ <p>If you ever wrote at least <b>2</b> audio plugins in your life, for sure you have noticed you had to write a lot of duplicated code. In other words, most of the times, writing a plugin there is very little entropy from your code.</p> <p>My first approach to this problem was some years ago when i did a simple code generator of the base code of a clam plugin (see these <b>clam-devel</b> threads for more info &#8216;<a href="http://www.mail-archive.com/clam-devel@llistes.projectes.lafarga.org/msg01345.html">Commit #11195: templated plugins generator</a>&#8216; and &#8216;<a href="http://www.mail-archive.com/clam-devel@llistes.projectes.lafarga.org/msg02257.html">Frontend for automatic generation of plugin code</a>&#8216;)</p> <p>Now i&#8217;m with a simple but i think powerful project (derived from the needs i noticed at <a href="http://groups.google.com/group/club_de_audio_fiuba">club de audio de la fiuba</a>) to have an application to generate code of different standards using XML based specifications. Then, as before, you nearly only need to write the signal processing code of the plugin (and can forget about the mechanical work).</p> <p>The idea is to get VST, LADSPA, lv2, CLAM, Audio Units and possibly others standards base code ready to compile for different operating systems and using different build systems. Indeed, once finished, will be easy to implement new modules for others plugins specifications since will consist only into implement an interface.</p> <p>My proposed xml specification (comments and suggestions are welcome!), showed as a clam plugin definition example is here. Basically contains metadata, input and output ports and controls and other build definitions:<br /> <span></span></p> <div class="codecolorer-container xml geshi"><div class="xml codecolorer"><span>&lt; ?xml <span>version</span>=<span>&quot;1.0&quot;</span> <span>encoding</span>=<span>&quot;UTF-8&quot;</span><span>?&gt;</span></span><br /> <span>&lt; !DOCTYPE AudioPlugin SYSTEM <span>&quot;AudioPluginDef.dtd&quot;</span><span>&gt;</span></span><br /> <span><span>&lt;audioplugin</span> <span>Version</span>=<span>&quot;0.1&quot;</span><span>&gt;</span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;metadata<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;name<span>&gt;</span></span></span>TestRtPlugin<span><span>&lt;/name<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;description<span>&gt;</span></span></span>This is a test realtime audio plugin<span><span>&lt;/description<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;authors<span>&gt;</span></span></span>Fulano, Sultano, Mengano<span><span>&lt;/authors<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;copyright</span> <span>Year</span>=<span>&quot;2010&quot;</span><span>&gt;</span></span>Club de Audio FIUBA<span><span>&lt;/copyright<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;license<span>&gt;</span></span></span>GPL<span><span>&lt;/license<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;category<span>&gt;</span></span></span>Plugins<span><span>&lt;/category<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;/metadata<span>&gt;</span></span></span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;inputs<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;port</span> <span>Name</span>=<span>&quot;L Input&quot;</span><span>&gt;</span></span>AudioInPort<span><span>&lt;/port<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;port</span> <span>Name</span>=<span>&quot;R Input&quot;</span><span>&gt;</span></span>AudioInPort<span><span>&lt;/port<span>&gt;</span></span></span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;control</span> <span>Name</span>=<span>&quot;Gain&quot;</span> <span>Min</span>=<span>&quot;0.&quot;</span> <span>Max</span>=<span>&quot;1.0&quot;</span> <span>DefaultValue</span>=<span>&quot;.5&quot;</span><span>&gt;</span></span>InControlFloat<span><span>&lt;/control<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;/inputs<span>&gt;</span></span></span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;outputs<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;port</span> <span>Name</span>=<span>&quot;L Output&quot;</span><span>&gt;</span></span>AudioOutPort<span><span>&lt;/port<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;port</span> <span>Name</span>=<span>&quot;R Output&quot;</span><span>&gt;</span></span>AudioOutPort<span><span>&lt;/port<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;/outputs<span>&gt;</span></span></span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;outputplugin</span> <span>Standard</span>=<span>&quot;CLAM&quot;</span> <span>BuildSystem</span>=<span>&quot;Scons&quot;</span> <span>OS</span>=<span>&quot;Linux&quot;</span><span>&gt;</span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;basetemplatename<span>&gt;</span></span></span>Default<span><span>&lt;/basetemplatename<span>&gt;</span></span></span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;clam_defaultconfig<span>&gt;</span></span></span> <span>&lt;!-- &nbsp;CLAM plugin specific configuration --&gt;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;baseclass<span>&gt;</span></span></span>Processing<span><span>&lt;/baseclass<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;withconfig<span>&gt;</span></span></span>True<span><span>&lt;/withconfig<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;/clam_defaultconfig<span>&gt;</span></span></span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span><span>&lt;/outputplugin<span>&gt;</span></span></span><br /> <span><span>&lt;/audioplugin<span>&gt;</span></span></span></div></div> <p></p> <p>I also thought about an UID (Uniqued ID) field at metadata, there is not showed in the example since is not needed to clam plugins.</p> <p>There is also a <a href="http://en.wikipedia.org/wiki/Document_Type_Definition">.dtd</a> file to check the correctness of the plugin spec.</p> Mon, 17 May 2010 03:08:00 +0000 Some experience with CLAM inside an audio club at FIUBA, Argentina http://audiores.uint8.com.ar/blog/2010/03/11/some-experience-with-clam-inside-an-audio-club-at-fiuba-argentina/ http://audiores.uint8.com.ar/blog/2010/03/11/some-experience-with-clam-inside-an-audio-club-at-fiuba-argentina/ <p>(Note: I wrote this as something to tell to the clam-devel mailing list about some of my source-code commits)</p> <p>About eight months ago, there was a foundation of something like an &#8220;audio club&#8221; in my university [<a href="http://code.google.com/p/club-audio-fiuba">1</a>]. As soon i learned about that, i quickly got in touch with them and noticed that there was a major interest in analog issues (the only audio area with at least elective, courses in the university). So i told them about all the cool things that are available and ready to do with digital audio, mostly signal processing related. I talked in general, but of course i also talked about <a href="http://clam-project.org/">clam</a>, with all its prototyping, real-time and easy development of plugins features. Even many of them ended installing and using it, and some even developing with more or less help. One thing to notice is that most of them are students from first years and most (but not all) are students with a basic programming level (because they are from electronics) but strong dsp knowledge (behind this is an university with more emphasis in theory than practice)<br /> We started specifying plugins from a more abstract level (inputs/outputs/controls) and generating the source code base using<br /> <strong>CLAM&#8217;s Templated Plugins Code Generator </strong>[<a href="http://audiores.uint8.com.ar/blog/2009/08/17/showing-a-little-about-clam-as-a-prototyping-tool-at-the-audio-club-of-fiuba/">2</a>] and prototyping some simple applications. But one of the things we ended up doing was to take advantage of clam as platform to prototype medic related applications like filter <a href="http://en.wikipedia.org/wiki/Electrocardiography">ECG</a> signal from noise in realtime, and some like _vice-versa_, i mean applying some processing knowledge from that area to audio.</p> <p>Some of that work (one hour per week average) it&#8217;s now in the <a href="http://groups.google.com/group/club_de_audio_fiuba">repo</a>, most remarkable i think are filters work, by above the adaptative notch one (which even was used as a demo of a <a href="http://comelec.googlegroups.com/web/Analisis2_SteepestDescent.pdf?hl=es&gda=-kJWU08AAAAt5-J96t0XnyxHkmJ7hfv0lkXF42FhAhzvNCGsvr91nr7XnfnP6pqsbzqK09OP4zsx49I1D3wZsUnK-MhAJdbCnHMhSp_qzSgvndaTPyHVdA">talk of one of the members about the steepest descent algorithm and its application to filter ECG signals</a>)</p> <p>Some development screenshots:<br /> <a href="http://clam-project.org/wiki/Image:FilterByCoefExample.jpg">http://clam-project.org/wiki/Image:FilterByCoefExample.jpg</a><br /> <a href="http://clam-project.org/wiki/Image:FilterExample-LP-HP.jpg">http://clam-project.org/wiki/Image:FilterExample-LP-HP.jpg</a><br /> <a href="http://clam-project.org/wiki/Image:ThreeBandFilterOutputWithWhiteNoiseAsInput.jpg">http://clam-project.org/wiki/Image:ThreeBandFilterOutputWithWhiteNoiseAsInput.jpg</a><br /> <a href="http://clam-project.org/wiki/Image:GaussianWhiteNoiseHistogram.jpg">http://clam-project.org/wiki/Image:GaussianWhiteNoiseHistogram.jpg</a><br /> <a href="http://clam-project.org/wiki/Image:UniformWhiteNoiseHistogram.jpg">http://clam-project.org/wiki/Image:UniformWhiteNoiseHistogram.jpg</a></p> <p>[0] <a href="http://www.fi.uba.ar/">FIUBA</a>: Engineering Faculty of Buenos Aires University<br /> [1] Group: <a href="http://code.google.com/p/club-audio-fiuba">http://code.google.com/p/club-audio-fiuba</a><br /> Source code repo: <a href="http://groups.google.com/group/club_de_audio_fiuba">http://groups.google.com/group/club_de_audio_fiuba</a><br /> [2] <a href="http://audiores.uint8.com.ar/blog/2009/08/17/showing-a-little-about-clam-as-a-prototyping-tool-at-the-audio-club-of-fiuba/">http://audiores.uint8.com.ar/blog/2009/08/17/showing-a-little-about-clam-as-a-prototyping-tool-at-the-audio-club-of-fiuba/</a></p> Fri, 12 Mar 2010 02:21:15 +0000 Showing a little about CLAM as a prototyping tool at the Audio Club of FIUBA http://audiores.uint8.com.ar/blog/2009/08/17/showing-a-little-about-clam-as-a-prototyping-tool-at-the-audio-club-of-fiuba/ http://audiores.uint8.com.ar/blog/2009/08/17/showing-a-little-about-clam-as-a-prototyping-tool-at-the-audio-club-of-fiuba/ <p>Last week, at the recent &#8216;audio club&#8217; of my university, I was showing how to work with the <a href="http://clam-project.org/">CLAM</a> framework as a tool to prototype realtime audio signal processing applications in a simple and fast way.</p> <p>We started with an example network to show some about the NetworkEditor capabilities: <a href="http://audiores.uint8.com.ar/files/networks/karaoke.clamnetwork">karaoke.clamnetwork</a><br /> <img id="image209" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2009/08/karaoke.jpg" alt="Karaoke" /></p> <p>After that, we continue with a simple &#8216;diodo distortion&#8217; plugin:</p> <p>We specified and generated the source code base in this way:<br /> <img id="image210" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2009/08/spec-distorsion-diodo.jpg" alt="Especificación de distorsión tipo diodo" /></p> <p>We wrote this code:</p> <div class="codecolorer-container cpp geshi"><div class="cpp codecolorer">&nbsp; &nbsp; &nbsp; &nbsp; <span>bool</span> Do<span>&#40;</span><span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>bool</span> result <span>=</span> Do<span>&#40;</span> mEntrada.<span>GetAudio</span><span>&#40;</span><span>&#41;</span>, mSalida.<span>GetAudio</span><span>&#40;</span><span>&#41;</span> <span>&#41;</span><span>;</span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mEntrada.<span>Consume</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mSalida.<span>Produce</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>return</span> result<span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>&#125;</span><br /> &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>bool</span> Do<span>&#40;</span><span>const</span> Audio<span>&amp;</span> in, Audio<span>&amp;</span> out<span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>int</span> size <span>=</span> in.<span>GetSize</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>const</span> DataArray<span>&amp;</span> inb <span>=</span> in.<span>GetBuffer</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DataArray<span>&amp;</span> outb <span>=</span> out.<span>GetBuffer</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>for</span> <span>&#40;</span><span>int</span> i<span>=</span><span>0</span><span>;</span>i<span>&lt;</span> size<span>;</span>i<span>++</span><span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>if</span> <span>&#40;</span> <span>fabs</span><span>&#40;</span>inb<span>&#91;</span>i<span>&#93;</span><span>&#41;</span><span>&gt;</span><span>0.8</span> <span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outb<span>&#91;</span>i<span>&#93;</span> <span>=</span> inb<span>&#91;</span>i<span>&#93;</span><span>&amp;</span>lt<span>;</span><span>0</span>.<span>?</span> <span>-</span><span>0.8</span><span>:</span><span>0.8</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>else</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outb<span>&#91;</span>i<span>&#93;</span> <span>=</span> inb<span>&#91;</span>i<span>&#93;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>return</span> <span>true</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>&#125;</span></div></div> <p>And built this net to try it:<br /> <img id="image212" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2009/08/diodo-distorsion.jpg" alt="Red para probar distorsión de diodo" /></p> <p>The source code of the plugin ready to be compiled is here: <a href="http://audiores.uint8.com.ar/files/code/CLAM_plugins/pluginDistorsiónDiodo_ClubAudioFiuba.tar.gz ">pluginDistorsiónDiodo_ClubAudioFiuba.tar.gz</a></p> <p>As extra, I leave here <a href="http://audiores.uint8.com.ar/files/code/CLAM_plugins/pluginDistorsiónDiodoConControlDeClipping_ClubAudioFiuba.tar.gz">pluginDistorsiónDiodoConControlDeClipping_ClubAudioFiuba.tar.gz</a> the same diode distortion, but with a clipping control to set the threshold when playing.</p> <p>They liked these kind of prototyping features a lot, so probably we&#8217;re going to keep using it at the club.</p> Tue, 18 Aug 2009 02:10:03 +0000 Mostrando un poco de CLAM como herramienta para prototipar en el Club de Audio de la FIUBA http://audiores.uint8.com.ar/blog/2009/08/14/mostrando-un-poco-de-clam-como-herramienta-para-prototipar-en-el-club-de-audio-de-la-fiuba/ http://audiores.uint8.com.ar/blog/2009/08/14/mostrando-un-poco-de-clam-como-herramienta-para-prototipar-en-el-club-de-audio-de-la-fiuba/ <p>Ayer estuve mostrando un poco de como usar el framework <a href="http://clam-project.org/">CLAM</a> para prototipar aplicaciones de procesamiento en tiempo real de audio de forma rápida y sencilla.</p> <p>Empezamos con una red de ejemplo para mostrar un poco el NetworkEditor: <a href="http://audiores.uint8.com.ar/files/networks/karaoke.clamnetwork">karaoke.clamnetwork</a><br /> <img id="image209" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2009/08/karaoke.jpg" alt="Karaoke" /></p> <p>Luego seguimos con el plugin &#8220;distorsión de diodo&#8221;.</p> <p>Especificamos y generamos el código base asi:<br /> <img id="image210" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2009/08/spec-distorsion-diodo.jpg" alt="Especificación de distorsión tipo diodo" /></p> <p>Escribimos este código:</p> <p><span></span></p> <div class="codecolorer-container cpp geshi"><div class="cpp codecolorer">&nbsp; &nbsp; &nbsp; &nbsp; <span>bool</span> Do<span>&#40;</span><span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>bool</span> result <span>=</span> Do<span>&#40;</span> mEntrada.<span>GetAudio</span><span>&#40;</span><span>&#41;</span>, mSalida.<span>GetAudio</span><span>&#40;</span><span>&#41;</span> <span>&#41;</span><span>;</span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mEntrada.<span>Consume</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mSalida.<span>Produce</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>return</span> result<span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>&#125;</span><br /> &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>bool</span> Do<span>&#40;</span><span>const</span> Audio<span>&amp;</span> in, Audio<span>&amp;</span> out<span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>int</span> size <span>=</span> in.<span>GetSize</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>const</span> DataArray<span>&amp;</span> inb <span>=</span> in.<span>GetBuffer</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DataArray<span>&amp;</span> outb <span>=</span> out.<span>GetBuffer</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> <br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>for</span> <span>&#40;</span><span>int</span> i<span>=</span><span>0</span><span>;</span>i<span>&lt;</span>size <span>;</span>i<span>++</span><span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>if</span> <span>&#40;</span> <span>fabs</span><span>&#40;</span>inb<span>&#91;</span>i<span>&#93;</span><span>&#41;</span><span>&gt;</span><span>0.8</span> <span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outb<span>&#91;</span>i<span>&#93;</span> <span>=</span> inb<span>&#91;</span>i<span>&#93;</span><span>&amp;</span>lt<span>;</span><span>0</span>.<span>?</span> <span>-</span><span>0.8</span><span>:</span><span>0.8</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>else</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outb<span>&#91;</span>i<span>&#93;</span> <span>=</span> inb<span>&#91;</span>i<span>&#93;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span>return</span> <span>true</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; <span>&#125;</span><br /> <span>&lt;</span><span>/</span>size<span>&gt;</span></div></div> <p></p> <p>Y armamos una red para probarlo:<br /> <img id="image212" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2009/08/diodo-distorsion.jpg" alt="Red para probar distorsión de diodo" /></p> <p>El código del plugin listo para compilar esta aca: <a href="http://audiores.uint8.com.ar/files/code/CLAM_plugins/pluginDistorsiónDiodo_ClubAudioFiuba.tar.gz ">pluginDistorsiónDiodo_ClubAudioFiuba.tar.gz</a></p> <p>Como extra, en <a href="http://audiores.uint8.com.ar/files/code/CLAM_plugins/pluginDistorsiónDiodoConControlDeClipping_ClubAudioFiuba.tar.gz">pluginDistorsiónDiodoConControlDeClipping_ClubAudioFiuba.tar.gz</a> dejo la misma distorsión de diodo pero con un control para poder manejar el umbral de clipping mientras se reproduce.<!--603e42954089b961a22a99ec52171f4c--><!--bbec47b717cb2013dab5a6756245a377--></p> Sat, 15 Aug 2009 00:05:10 +0000 John Redfield, "La música, ciencia y arte" http://audiores.uint8.com.ar/blog/2009/02/17/john-redfield-la-musica-ciencia-y-arte/ http://audiores.uint8.com.ar/blog/2009/02/17/john-redfield-la-musica-ciencia-y-arte/ <p>Una vez <a href="http://audiores.uint8.com.ar/blog/2007/04/10/construir-un-instrumento-de-teclado-temperado-segun-el-sistema-mercator/">publiqué en este blog</a> un <a href="http://audiores.uint8.com.ar/html/sistema_mercator.htm">documento</a> que me habian enviado en el que mencionaban un libro, &#8220;La música, ciencia y arte&#8221; de John Redfield, <a href="http://audiores.uint8.com.ar/html/sistema_mercator.html">supuestamente agotado y casi imposible de conseguir</a>. Ya que el título me resultaba interesante, me puse a buscar información sobre el mismo y me encontré con que al parecer su versión original en inglés (escaneada) esta disponible en <a href="http://es.wikipedia.org/wiki/Archive.org">Internet Archive</a> (supongo que a esta altura ya habrá pasado a dominio público):</p> <p><strong>&#8220;Music: A science and an art&#8221; by John Redfield (1928)</strong><br /> Link: <a href="http://www.archive.org/details/musicascienceand009118mbp">http://www.archive.org/details/musicascienceand009118mbp</a><br /> Publisher: Tudor Publishing Co.<br /> Language: English<br /> Book contributor: Universal Digital Library<br /> Totalpages: 352<!--810324817347064720c5943669099e16--><!--92e2eb5b0542e0dfd5cc81860c46a958--><!--af8f62a282ac697f4e04b804f7b02b18--><!--758b533953f6f265c8ca2dd1427296c0--><!--bd492bbb728a54ec1a6e8a5af398ed73--><!--38f00f0d60e1ec781a9cf6b09f6ec6c8--></p> Tue, 17 Feb 2009 16:56:06 +0000 Idea simple: Delay ajustable para sincronizar transmisiones de radio y tv http://audiores.uint8.com.ar/blog/2009/02/17/idea-simple-delay-ajustable-para-sincronizar-transmisiones-de-radio-y-tv/ http://audiores.uint8.com.ar/blog/2009/02/17/idea-simple-delay-ajustable-para-sincronizar-transmisiones-de-radio-y-tv/ <p>Desde hace bastantes (meses? años?) que tengo ganas de ver los partidos de <a href="http://es.wikipedia.org/wiki/Club_Atl%C3%A9tico_River_Plate">river</a> pero con el relato de Atilio Costa Febre (que va vía radio AM[1]), pero nunca podía hacerlo de una forma satisfactoria ya que la transmisión de la tele siempre estaba retrasada unos cuantos segundos (gritaban gol en la radio y uno veia la pelota por la mitad de la cancha, insoportable).</p> <p>También hace bastante que se me habia ocurrido la simple solución de retrasar la transmisión de radio unos segundos con la computadora hasta que se sincronizara todo. El tema es que los plugins de audio clásicos, están pensados para hacer música y generalmente soportan muy pocos segundos de delay (por ejemplo el delay común de los LADSPA), asi que dije bueno, lo armo en <a href="http://www.clam.iua.upf.edu/">CLAM</a> y sale con fritas&#8230; Pero no habia delay temporal disponible (sí uno espectral), asi que lo tuve que programar, sino en 5 minutos tenia todo listo.</p> <p>El resto, armar la red de conexiones con el NetworkEditor[2], la interfaz[3] con el <a href="http://www.qtsoftware.com/products/appdev/developer-tools">QtDesigner</a>, y listo el prototipo dominguero:</p> <p><a id="p206" rel="attachment" class="imagelink" href="http://audiores.uint8.com.ar/blog/2009/02/17/idea-simple-delay-ajustable-para-sincronizar-transmisiones-de-radio-y-tv/prototipo-de-delay-ajustable/" title="Prototipo de delay ajustable"><img id="image206" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2009/02/atilios-delay.jpg" alt="Prototipo de delay ajustable. Delay en décimas de segundos." /></a></p> <p>&nbsp;</p> <p>Aparte de todo el poderio y posiblidades que tiene <a href="http://www.clam.iua.upf.edu/">CLAM</a>, como me gusta que también sirva para salir del paso y resolver estos pequeños problemas&#8230;</p> <p>[1] Dado que ahora están en <a href="http://www.radiomitre.com.ar">radio mitre</a> y esta transmite por internet, hasta se puede prescindir de una radio externa y usar el streaming por ejemplo con mplayer que soporta jack como backend, lo que permite conectar su salida a la entrada de la red del NetworkEditor fácilmente. El comando:</p> <div class="codecolorer-container text geshi"><div class="text codecolorer">mplayer -cache 32 mms://streammitre.uigc.net/mitrevivo -ao jack</div></div> <p>[2] <a href="http://audiores.uint8.com.ar/files/networks/atilioSimple.clamnetwork">atilioSimple.clamnetwork</a><br /> [3] <a href="http://audiores.uint8.com.ar/files/networks/atilioSimple.ui">atilioSimple.ui</a><!--341308919328a9f25c00eab806c8f8bf--><!--ac244363933ef08c606dc3b2f46a542c--><!--c2c727cfa4f141bd02a4bf2af1f43e4b--><!--66fa28dc8ded97fadc7799d2b05b7d8d--><!--cc64f0b266b88ab8d39573e4f918128b--><!--c92b954a3c79260e5670f67f12a06e84--><!--2e76b48e0e0c41b8ef6ae399ce9bec80--></p> Tue, 17 Feb 2009 03:22:23 +0000 Interactive CLAM programming (with python) http://audiores.uint8.com.ar/blog/2008/08/03/interactive-clam-programming/ http://audiores.uint8.com.ar/blog/2008/08/03/interactive-clam-programming/ <p>Recently I been playing with python bindings for the <a href="http://clam.iua.upf.edu/">CLAM</a> library. Here is a demo demonstrating how to interactively build a network and play a file using the <a href="http://ipython.scipy.org/moin/About">IPython</a> shell:</p> <p></p> <p>&nbsp;<br /> Related scripts: <a href="http://audiores.uint8.com.ar/files/code/python/playfile.py">playfile.py</a> <a href="http://audiores.uint8.com.ar/files/code/python/fft_example.py">fft_example.py</a>.<br /> &nbsp;<br /> <a href="http://clam-project.org/clam/trunk/CLAM/pyclam">PyCLAM source</a>. <a href="http://clam-project.org/clam/trunk/CLAM/pyclam/INSTALL">INSTALL</a>.</p> Mon, 04 Aug 2008 01:00:09 +0000 CLAM processing generator script (example of use) http://audiores.uint8.com.ar/blog/2008/07/07/clam-processing-generator-script-example-of-use/ http://audiores.uint8.com.ar/blog/2008/07/07/clam-processing-generator-script-example-of-use/ <p>This script is about a basic code generation of a <a href="http://www.clam.iua.upf.edu/">CLAM</a> plugin. In some point I think this is some kind of <a href="http://en.wikipedia.org/wiki/Metaprogramming">meta-programming</a> or perhaps the term &#8220;<a href="http://en.wikipedia.org/wiki/Automatic_programming">automatic programming</a>&#8221; fits better. The basic idea is to specify some basic features of the planned new processing in a plain text and then, generate some code with the script, saving in this way many of the often repetitive and mechanical work needed to set-up a new processing from scratch. Main intention is to allow concentrate in the Do() function or plugin details quickly.</p> <p>As an example, I will reproduce here how I worked with me some time ago:<br /> &nbsp;<br /> One day, in the irc #clam channel:<br /> &#8220;[11:51] &#60;groton&#62; Consul, do you know if there is any trigger-like processing unit, list when the volume gets louder than a threshold or something like that&#8221;</p> <p>I&#8217;m not Consul in the irc (I&#8217;m <a href="http://h.ordia.com.ar/">hordia</a>), but next day at my console&#8230;</p> <p>cd CLAM/scripts/TemplatedPluginsGenerator<br /> vi ThresholdTrigger.template</p> <p><span></span></p> <div class="codecolorer-container text geshi"><div class="text codecolorer">Name:ThresholdTriggerTemplate<br /> BaseClass:Processing<br /> i:AudioInPort,Audio Input<br /> ic:0,1,Threshold<br /> oc:0,1,Trigger</div></div> <p></p> <p>In words, this means a Processing template named &#8220;ThresholdTriggerTemplate&#8221; using &#8220;Processing&#8221; as a base class and with one input of &#8220;AudioInPort&#8221; type named &#8220;Audio Input&#8221;, with one in control in the 0..1 range named &#8220;Threshold&#8221; and one out control named &#8220;Trigger&#8221;. Of course, you can add as many inputs/outputs of ports or controls as you want.<br /> &nbsp;</p> <p>This script creates the template:</p> <div class="codecolorer-container text geshi"><div class="text codecolorer">./TemplateGenerator.py ThresholdTrigger.template</div></div> <p>&nbsp;<br /> And this one the processing plugin:</p> <div class="codecolorer-container text geshi"><div class="text codecolorer">./TemplatedPluginsGenerator.py ThresholdTrigger ThresholdTriggerTemplate &quot;Hernán Ordiales&quot; GPL 2008</div></div> <p>Again in words, this means create a new processing called &#8220;ThresholdTrigger&#8221; based on the &#8220;ThresholdTriggerTemplate&#8221; filling the copyright with my name plus the current year and the license with the GPL text.</p> <p>&nbsp;<br /> A final edit just typing the required code for the Do() function:</p> <div class="codecolorer-container text geshi"><div class="text codecolorer">cd CLAM/plugins/ThresholdTrigger<br /> vi ThresholdTrigger.hxx</div></div> <p><span></span></p> <div class="codecolorer-container cpp geshi"><div class="cpp codecolorer"><span>#include &lt;cmath&gt;</span><br /> <br /> <span>bool</span> Do<span>&#40;</span><span>&#41;</span><br /> <span>&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;<span>bool</span> result <span>=</span> Do<span>&#40;</span> mAudioInput.<span>GetAudio</span><span>&#40;</span><span>&#41;</span> <span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;mAudioInput.<span>Consume</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;<span>return</span> result<span>;</span><br /> <span>&#125;</span><br /> <br /> <span>bool</span> Do<span>&#40;</span><span>const</span> Audio<span>&amp;</span> in<span>&#41;</span><br /> <span>&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;<span>int</span> size <span>=</span> in.<span>GetSize</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;<span>const</span> DataArray<span>&amp;</span> inb <span>=</span> in.<span>GetBuffer</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;TData threshold <span>=</span> mThreshold.<span>GetLastValue</span><span>&#40;</span><span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;<span>bool</span> trigger <span>=</span> <span>0</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;<span>for</span> <span>&#40;</span><span>int</span> i<span>=</span><span>0</span><span>;</span>i<span>&lt;</span>size <span>;</span>i<span>++</span><span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;<span>&#123;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span>if</span> <span>&#40;</span>std<span>::</span><span>fabs</span><span>&#40;</span>inb<span>&#91;</span>i<span>&#93;</span><span>&#41;</span><span>&gt;</span>threshold<span>&#41;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;trigger <span>=</span> <span>1</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;<span>&#125;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;mTrigger.<span>SendControl</span><span>&#40;</span>trigger<span>&#41;</span><span>;</span><br /> &nbsp; &nbsp; &nbsp; &nbsp;<span>return</span> <span>true</span><span>;</span><br /> <span>&#125;</span><br /> <span>&lt;</span><span>/</span>size<span>&gt;&lt;</span><span>/</span>cmath<span>&gt;</span></div></div> <p></p> <p>At this point, just remains add the <a href="http://iua-share.upf.es/wikis/clam/index.php/Building_a_processing_library">basic SConstruct file for a CLAM plugin</a>, compile it with the corresponding clam_prefix and install it:</p> <div class="codecolorer-container text geshi"><div class="text codecolorer">scons install clam_prefix=$CLAM_PATH<br /> NetworkEditor</div></div> <p>And ready to use&#8230;</p> <p>This example it&#8217;s very simple and has a poor implementation but was just to show the idea of how those scripts can save a lot of work. </p> <p><strong>Update:</strong> I made a frontend for these scripts: <a href="http://iua-share.upf.edu/wikis/clam/index.php/Image:PluginCodeGenerator.png">ProcessingCodeGenerator</a><!--a24910de7d4088febea5db3b69a5b610--><!--28d68b186d61826fcff9f62e9ec41631--><!--169b59110b19d8debbc714889d0d90eb--><!--27342ec2f95a759062aa2bdec78a3a7b--><!--845b0bf0ea9309faaf83e807187d1f08--></p> Mon, 07 Jul 2008 20:58:49 +0000 Radio de Last.fm, "recordando" las canciones nuevas que escucho y me gustan http://audiores.uint8.com.ar/blog/2008/07/07/radio-de-lastfm-recordando-las-canciones-nuevas-que-escucho-y-me-gustan/ http://audiores.uint8.com.ar/blog/2008/07/07/radio-de-lastfm-recordando-las-canciones-nuevas-que-escucho-y-me-gustan/ <p>Este post surge dado que recientemente redescubrí la radio de <a href="http://www.last.fm/">last.fm</a>. Principalmente gracias a que me bajé el <a href="http://www.last.fm/download/">programa que proveen ellos</a> (btw, multiplaforma y Software Libre). Digo que redescubrí porque antes la usaba desde el <a href="http://amarok.kde.org/">amarok</a>, cosa que esta bien, ya que uno centraliza todo ahi, pero este programita tiene algunas cosas piolas y en algunas situaciones es mucho más cómodo de usar, sobre todo para cambiar de radios, por artistas o tags, etc y encima te tira algo de data (parecido a lo que tiene el amarok que busca en wikipedia, nada más que &#8220;propiedad&#8221; de last.fm). Pero lo que me hizo &#8220;engancharme&#8221; es el tema de poner un artista que me guste y que me empiece a tirar temas con la misma onda, cosa que me hace conocer canciones e interpretes nuevos. ¿Por qué cuento esto? Por que desencadeno en que comience a usar seguido el botón de &#8220;Love&#8221;/&#8221;Favorito&#8221; de la aplicación, que es una forma de decirle a <a href="http://www.last.fm/">last.fm</a> que ese tema te gusta y que lo tenga en cuenta para volverlo a pasar en el futuro o para (supongo) que tengan más probabilidad de aparecer temas similares (si no te gusta para nada, también se puede &#8220;bannear&#8221;). Bueno, todo esto viene dado que de tanto presionar &#8220;love&#8221; (y descubrir/redescubrir varios artistas, sobre todo en blues y jazz) queria tener una forma de acceder a todo eso (nombre del tema + interprete). El programa en cuestión muestra una lista de las canciones recientemente maracadas como favoritas, pero no permite copy&#038;paste y <del datetime="2008-07-20T23:58:54+00:00">tampoco vía <a href="http://www.last.fm">web</a> hay forma de acceder a esa información, como si pasa con otras cosas, por ejemplo las canciones recientemente escuchadas&#8230;</del> (con la nueva versión del sitio si se puede: <a href="http://blog.last.fm/2008/07/17/lastfm-the-next-generation">Last.fm: The Next Generation</a>)</p> <p>Bueno, buscando un poco di con la <a href="http://www.last.fm/api/">API (versión 2.0)</a>, al parecer reciente, pero sin la capacidad de &#8220;recuperar&#8221; las últimas loved songs&#8230; asi que me remití a la <a href="http://www.audioscrobbler.net/data/webservices/">versión 1.0</a> que si lo permite y además se puede usar sin <a href="http://www.last.fm/api/account">api key</a>. Entonces lo que hice fue armarme un script en python que descargara las últimas canciones &#8220;favoritas&#8221; y las vaya guardando en un xml (o .txt), es decir a medida que aparecen nuevas, las agrega y elimina los duplicados&#8230;</p> <p>El script es este: <a href="http://audiores.uint8.com.ar/files/code/python/last.fm/recentLovedTracksList.py">recentLovedTracksList.py</a></p> <p>Tip: si uno quiere estar seguro de no perderse ninguna canción, dado que las &#8220;canciones favoritas recientes&#8221; son solo 10, puede poner este script a correr en cron&#8230; (si es que va marcar muchas canciones como favoritas, pero a lo sumo y con mucha suerte uno marca como &#8220;loved&#8221; una por hora y la frecuencia por supuesto tiende bajar)</p> <p>Ya que estaba jugando con la api, hice otro script para descargarme todo el historial de escucha (otra &#8220;feature&#8221; que no vi disponible vía web, pero por suerte con un poco de &#8220;hacking&#8221; se puede hacer con la API):</p> <p><a href="http://audiores.uint8.com.ar/files/code/python/last.fm/lastfmProfileBackup.py">lastfmProfileBackup.py</a></p> <p>No se para que me puede servir, pero es info mía y ya que la tiene otra persona, al menos me gusta poder tenerla yo <img src="http://audiores.uint8.com.ar/blog/wp-includes/images/smilies/icon_razz.gif" alt=":-P" class="wp-smiley" /> </p> <h2>Otras aplicaciones</h2> <p>Ya que escribo sobre <a href="http://www.last.fm/">last.fm</a> aprovecho para comentar un par de &#8220;nuevos usos&#8221; que se me ocurrieron de este tipo de sistemas, ambos se aplican a un player haciendo <a href="http://www.lastfm.es/help/">scrobbling</a> en una fiesta/reunión:</p> <ul> <li>Con esto se tiene automáticamente trackeada y publicada la lista de canciones que se escucharon. ¿Cuantas veces uno quiere saber como se llama esa canción que le gustó el día anterior para poder volverla a escucharla?</li> <li>Si uno no quiere estar eligiendo música, pero quiere asegurarse que va a escuchar algo de su agrado, puede poner su radio personalizada y listo&#8230; &#8220;satisfacción garantizada&#8221; <img src="http://audiores.uint8.com.ar/blog/wp-includes/images/smilies/icon_razz.gif" alt=":P" class="wp-smiley" /> . Esta feature ahora es paga, pero dado que cualquier usuario puede escuchar la radio del otro&#8230; no es difícil imaginarse como se puede salvaguardar este punto&#8230; de todas formas, la suscripción no es cara, alrededor de 3 euros por mes (creo).</li> </ul> Mon, 07 Jul 2008 04:22:26 +0000 La historia de Horgand (conversación con holborn) http://audiores.uint8.com.ar/blog/?p=186 http://audiores.uint8.com.ar/blog/2008/06/28/la-historia-de-horgand-conversacion-con-holborn/ <p>Hace bastante tiempo que tenia archivada esta conversación sobre <a href="http://es.wikipedia.org/wiki/S%C3%ADntesis_por_modulaci%C3%B3n_de_frecuencias">síntesis por FM</a> y <a href="http://horgand.berlios.de/">Horgand</a> que quería publicar.</p> <p>Qué es <a href="http://horgand.berlios.de/">Horgand</a>? un sintetizador por soft capaz de realizar sonidos de órgano y otros tipos de sonido como pianos eléctricos (Rhodes , Wurlitzer, DX E.Piano ), Jazz Guitar, Strings, Brass, Fretless Bass, Accordion etc. Esta basado en síntesis por FM, según su <a href="http://horgand.berlios.de/">web</a>:</p> <blockquote><p>&#8220;Is based on a FM audio synthesizer with twenty carriers (20) without modulators in a plain based algorithm.<br /> each carrier frequency can be modified for construct complex sounds. The synthesizer incorporate also a LFO (Low frequency oscillator) for generate tremolo effects and detune effects applying LFO Pitch and Amplitude to the carrier frequency&#8217;s. Some synthesizer parameters can be edited for each sound including two ADSR, (Normal and Percussion), Fine Frequency, Attenuation, Rotary Amplitude, Transpose, etc. Four DSP effects are available for obtain more complex sounds, Rotary, Chorus, Delay and Reverberation. Sounds are stored in banks of 32 organ sounds and can be changed externally with MIDI program change (1-32).&#8221;</p></blockquote> <p>También incorpora reconocimiento de acordes para producir acompañamiento automático (bajo y bateria) y con líneas de bajo editables para cada ritmo.</p> <p>Ejemplo de como suena: <a href="http://horgand.berlios.de/Horgand_demo.ogg">Horgand_demo.ogg</a></p> <p>No conozco mucho de <a href="http://es.wikipedia.org/wiki/S%C3%ADntesis_por_modulaci%C3%B3n_de_frecuencias">síntesis por FM</a> y tenía curiosidad de como lograba el sonido y terminó saliendo una especie de entrevista improvisada, creo que puede ser interesante para quienes quieran adentrarse en este tipo de programación.</p> <p><strong>La conversación:</strong><br /> &#8212;<br /> &#60;hordia&#62; despues me tenes que contar en que te basaste para conseguir el sonido de horgand digitalmente&#8230;<br /> &#60;holborn&#62; pues en el DX7 &#8230;. tiene 32 algoritmos de colocacion de los operadores &#8230; pero si usas el plano (todos en linea)&#8230; todo lo que hagas suena a organo &#8230; a partir de ahi &#8230; pues añadirle los efectos &#8230; y claro en vez de 6 &#8220;osciladores&#8221; hay 10 &#8230; que en realidad son 20 &#8230; con lo cual pues es mas rico que un emulador de dx7 tipo hexter o en el dx7 mismo &#8230; en realidad .. para usar 20 osciladores no chupa CPU nada &#8230; otros porgramas usan 3 y ch<br /> &#60;holborn&#62; claro que para ahorrar cpu .. tuve que limitar algunos parametros de edicion &#8230; pero bueno &#8230; yo lo que queria era que sonara &#8230; si nadie se pone a editar sonidos &#8230; ni dios vaya &#8230;<br /> &#60;hordia&#62; que es el DX7? <img src="http://audiores.uint8.com.ar/blog/wp-includes/images/smilies/icon_razz.gif" alt=":P" class="wp-smiley" /> me suena a un teclado legendario pero no estoy seguro&#8230;</p> <p>&#60;holborn&#62; el DX7 fue el primer sintetizador FM &#8230; es de yamaha .. y fue una revolucion porque era el primero que mas o menos imitaba bien sonidos reales &#8230; algunos mejor que otros &#8230;<br /> &#60;holborn&#62; los vendieron todos y mas &#8230;<br /> &#60;holborn&#62; yo realmente era un experto &#8230; en aquella epoca ni dios sabia nada de musica electronica &#8230; yo me hice un curso que daba un loco de la musica electronica .. y sabia programar sintes cosa que nadie sabia .. te estoy hablando de hace mil años &#8230;<br /> &#60;holborn&#62; cuando salio el DX7 pues me tuve que empapar toda la info porque realmente es muy diferente a un sinte analogico tradicional &#8230; y bueno .. le pedi a un amigo que trabajaba en un distribuidor de yamaha .. que me consiguiera info de verdad &#8230; de hecho todavia la conservo ..por ahi ..<br /> &#60;hordia&#62; :O<br /> &#60;holborn&#62; yo llegue a trabajar programando sintes en un estudio de grabacion &#8230;. vaya no todos los dias pero me llamaban de vez en cuando<br /> &#60;holborn&#62; haciendo presets &#8230; me refiero .. claro<br /> &#60;hordia&#62; veo que horgand es el resultado de muchos años de experiencia&#8230;<br /> &#60;holborn&#62; si &#8230; a ese nivel si &#8230; pero todo fue gracias a un ejemplo de la web de alsa .. .se llama fmminisynth.c &#8230; o lago asi &#8230; 100 lineas de codigo &#8230; entonces se me ocurrio &#8230; y empece ..</p> <p>&#60;holborn&#62; luego buscando &#8230; encuentras mil ejemplos de codigo &#8230; en HArmony Central &#8230; no esta el codigo pero explican como funcionan los efectos &#8230; en cristiano .. sin mucha matematica &#8230; esta muy bien .. luego ya el implementarlo es cosa de uno &#8230; pero el mismo Paul Nasca dice por ahi (el del zyn) que se basa en esa explicaciones &#8230; y yo tambien claro <img src="http://audiores.uint8.com.ar/blog/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /><br /> &#60;holborn&#62; ya te aseguro que su implementacion es mejor que la mia <img src="http://audiores.uint8.com.ar/blog/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /><br /> &#60;hordia&#62; jeje<br /> &#60;holborn&#62; ahora &#8230;la mia consume un tercio de cpu que la suya <img src="http://audiores.uint8.com.ar/blog/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /><br /> &#60;hordia&#62; entonces hay que ver que parametros se toman para definir cual es mejor <img src="http://audiores.uint8.com.ar/blog/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /><br /> &#60;holborn&#62; pues es un sinte &#8230; lo que suena &#8230; sus efectos suenan mejor &#8230;. pero &#8230; el usa 3 o 4 osciladores por sonido &#8230; yo uso 20 &#8230; con lo cual en algun lado hay que recortar &#8230;<br /> &#8212;</p> <p>El ejemplo que se menciona: <a href="http://www.suse.de/~mana/miniFMsynth.c">miniFMsynth.c</a></p> Sat, 28 Jun 2008 21:12:13 +0000 Afinando por vibraciones (violín) http://audiores.uint8.com.ar/blog/?p=185 http://audiores.uint8.com.ar/blog/2008/06/28/afinando-por-vibraciones-violin/ <p>Hace un tiempo, cuando le regalé a mi hermana un afinador para violín, para mi sorpresa (por que lo ignoraba) me enteré que hasta los afinadores más baratos incorporan el afinado por vibración (de la madera). Esto es muy conveniente por que elimina ruidos externos de una manera natural, algo imagino casi imprescindible para un violín tradicional (sin micrófonos) que en general se afina en presencia de otros instrumentos de una orquesta. Lo que se hace es colocarlo en alguna parte del instrumento con una especie de prensa que tiene para que quede bien sujeto. La verdad que me gustó.</p> <p>(el afinador era un: matrix gt2)<!--8f826e2d5c6c8d56cfc3fd6904166f91--><!--51317af3bf8e7b0183331bea1e556bc2--><!--af455c28b9abe0e4b27be11aec24b8d8--><!--ea3c26defffc62d48474adc62556dcfd--><!--eb3295edf8ce1e16d8c031078ea43c46--> </p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=185&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_185" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/2008/06/28/afinando-por-vibraciones-violin/#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=185" width="100" height="15" /></a></div> Sat, 28 Jun 2008 20:09:36 +0000 Distortion rack prototype http://audiores.uint8.com.ar/blog/?p=179 http://audiores.uint8.com.ar/blog/2008/01/05/distortion-rack-prototype/ <p>A nice prototype:</p> <p><center><a href="http://audiores.uint8.com.ar/blog/wp-content/uploads/2008/01/distortion-clam-rack.png" alt="prototype" class="linkthumb"><img id="image177" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2008/01/distortion-clam-rack_mini.png" alt="CLAM distortion rack prototype" /></a></center></p> <p>&nbsp;<br /> &nbsp;</p> <p>And the net behind:</p> <p><center><a href="http://audiores.uint8.com.ar/blog/wp-content/uploads/2008/01/rack-net.png" alt="prototype" class="linkthumb"><img id="image177" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2008/01/rack-net_mini.png" alt="CLAM distortion rack prototype" /></a></center><!--35a8c79241a8d80b77b2cfdf1b0fa405--><!--6f0bee0570835a844cdaaca76a716805--><!--1c241245ceac66fdd7d04a46b3dcb929--><!--9e3ad5fcd70018cfa733d99038d51037--><!--46fc60ba37cd6282bde17ed085047b46--> </p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=179&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_179" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/2008/01/05/distortion-rack-prototype/#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=179" width="100" height="15" /></a></div> Sat, 05 Jan 2008 16:09:50 +0000 LADSPA versions of my recent simple distortions http://audiores.uint8.com.ar/blog/?p=175 http://audiores.uint8.com.ar/blog/?p=175 <p>After prototype different kind of simple distortions in NetworkEditor i managed to port all them to <a href="http://www.ladspa.org/" class="linkthumb">ladspa</a> plugins. Despite the fact that the task was less difficult than i had expected at first, prototype with CLAM first worth a lot. Probably, if i had begun coding directly to <a href="http://www.ladspa.org/" class="linkthumb">ladspa</a> source, reach the same status would be taken to me 10 or more times more. I think also was very interesting as &#8220;development process&#8221;, instead of modeling for example with matlab, you could easy modeling (among other things) in CLAM, and then, if you want/need make your final product by your own.</p> <p>More, the other day i learned that is already possible to compile <a href="http://www.ladspa.org/" class="linkthumb">ladspa</a> plugins directly from CLAM networks&#8230; very cool! Though i think this feature is not completely ready yet and i&#8217;m still have to dig in it, i don&#8217;t think that i have lost time porting manually because now i have a better knowledge and understanding about <a href="http://www.ladspa.org/" class="linkthumb">ladspa</a> specification that for sure will be useful to work with this (for me &#8220;new&#8221;) feature, that probably needs some fixes. </p> <p>About the ladspa plugins programming, i just downloaded the sdk from <a href="http://www.ladspa.org/" class="linkthumb">ladspa.org</a>, read some of the ladspa.h file and some basic examples (the ones from sdk) and that was enough to handle the basis. Ah, i had to ask for some <a href="http://www.ladspa.org/" class="linkthumb">ladspa</a> ID&#8217;s for my plugins here: ladspa at muse.demon.co.uk</p> <p>On the other hand i&#8217;ve forwarded my distortion examples to musix distro folks and some of them indeed have tried it and made a couple of <a href="http://jack-rack.sourceforge.net/" class="linkthumb">jack-rack</a> presets and audio demos. More info about this here: <a href="http://www.musix.org.ar/wiki/index.php/DSP-es#Presets" class="linkthumb">DSP-es#Presets</a>, <a href="http://www.musix.org.ar/ogg/disthordian/" class="linkthumb">ogg demos and jack-rack presets</a>, and <a href="http://www.musix.org.ar/wiki/index.php/Distorsion_para_guitarra_disthordian" class="linkthumb">patchs review</a>.</p> <p>Next step (in my TODO list): produce <a href="http://www.ladspa.org/" class="linkthumb">ladspa</a> binaries directly from CLAM networks.</p> <p>I have uploaded these plugins here: <a href="http://audiores.uint8.com.ar/files/code/LADSPA_plugins/disthordian/index.php" class="linkthumb">disthordian ladspa plugins</a>. </p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=175&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_175" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/?p=175#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=175" width="100" height="15" /></a></div> Mon, 17 Dec 2007 04:41:04 +0000 New CLAM plugin: ('very' for now) simple guitar distortion http://audiores.uint8.com.ar/blog/?p=172 http://audiores.uint8.com.ar/blog/?p=172 <p>A week or more ago, Daniel Vidal Chornet (collaborator of <a href="http://musix.org.ar/" class="linkthumb">Musix</a>) asked me if i can develop guitar distortion effects, because he couldn&#8217;t find something decent that suits his needs, i said &#8220;sadly i have no idea about distortions effects and anyway i have no time right now to do that&#8221;, but then i remembered how useful could be the clam framework and i tried to do a little spike about. Results were better than i had expected at first (is not a super cool distortion, but at least sound like one).</p> <p>Basically i merged and tweaked a couple of simple/base algorithms found in the web for distortion and compression and in less than 30 minutes i had something working and sounds like a guitar distortion (&#8221;clean&#8221; ones seems to sound better easily). I was amazed how fast and easy (develop and test in clam/networkeditor, once you get the basis) was. I think right now is far to be a good distortion, but as learning process and first demo seems very good.</p> <p>Here some sound examples: </p> <p>Original: <a href="http://audiores.uint8.com.ar/files/audios/guitardist/dvlc-guitar.mp3">Download audio file (dvlc-guitar.mp3)</a><br /><br /> (<a href="http://audiores.uint8.com.ar/files/audios/guitardist/dvlc-guitar.ogg" class="linkthumb">dvlc-guitar.ogg</a>)</p> <p>With distortion: <a href="http://audiores.uint8.com.ar/files/audios/guitardist/guitardist-ex1.mp3">Download audio file (guitardist-ex1.mp3)</a><br /><br /> (<a href="http://audiores.uint8.com.ar/files/audios/guitardist/guitardist-ex1.ogg" class="linkthumb">guitardist-ex1.ogg</a>)</p> <p>Test network looks like:<br /> <center><img id="image174" src="http://audiores.uint8.com.ar/blog/wp-content/uploads/2007/12/dist-networkt1.png" alt="Distortion NE network" /></center><br /> &nbsp;</p> <p>The source code is here (as NetworkEditor plugin): <a href="http://audiores.uint8.com.ar/files/code/CLAM_plugins/GuitarDistortion.tar.gz" class="linkthumb">GuitarDistortion.tar.gz</a></p> <p>Some optional tweaks could include add a three band filter but i&#8217;m still not sure if it&#8217;s better to put it at first or at the end.</p> <p>Special thanks for testing and audio samples to Daniel Vidal Chornet. I should take from my closet my <a href="http://en.wikipedia.org/wiki/Fender_Stratocaster" class="linkthumb">fender stratocaster</a> and do my own samples <img src="http://audiores.uint8.com.ar/blog/wp-includes/images/smilies/icon_biggrin.gif" alt=":-D" class="wp-smiley" /> . OTOH, we already arrange to do a remote gig with this.</p> <p>Another useful NetworkEditor processings plugins i had made during this &#8220;work&#8221;:</p> <ul> <li>AutomaticGainControl: Adaptative automatic gain control. Given an output reference and step response adjusts the output volume to keep it constant (<a href="http://audiores.uint8.com.ar/files/code/CLAM_plugins/AutomaticGainControl.tar.gz" class="linkthumb">AutomaticGainControl.tar.gz</a>)</li> <li>AudioSwitch: Switchs between a configurable amount of inputs (like a multiplexer) (<a href="http://audiores.uint8.com.ar/files/code/CLAM_plugins/AudioSwitch.tar.gz" class="linkthumb">AudioSwitch.tar.gz</a>)</li> </ul> <p>&nbsp;<br /> <strong>Related:</strong> <a href="http://audiores.uint8.com.ar/blog/?p=175" class="linkthumb">LADSPA versions of my recent simple distortions</a><br /> <strong>Update:</strong> <a href="http://audiores.uint8.com.ar/blog/?p=179" class="linkthumb">Distortion rack prototype</a> </p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=172&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_172" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/?p=172#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=172" width="100" height="15" /></a></div> Sun, 09 Dec 2007 18:47:55 +0000 TAPESTREA: Modelando la escena sonora a partir de ejemplos o muestras http://audiores.uint8.com.ar/blog/?p=165 http://audiores.uint8.com.ar/blog/?p=165 <p>Hoy vi el video demostración de <a href="http://taps.cs.princeton.edu/" class="linkthumb">TAPESTREA</a>: <strong>T</strong>echniques <strong>A</strong>nd <strong>P</strong>aradigms for <strong>E</strong>xpressive <strong>S</strong>ynthesis, <strong>T</strong>ransformation, and <strong>R</strong>endering of <strong>E</strong>nvironmental <strong>A</strong>udio (también conocido como <strong>taps</strong>). Intenta ser un entorno para el diseño de sonido, pero desde un enfoque totalmente nuevo (lo mejor es ver el video para entender mejor de que se trata).</p> <p>Me llamó la antención (además de la división del sonido entre sus componentes <a href="http://en.wikipedia.org/wiki/Sinusoidal" class="linkthumb">sinusoidales</a>, <a href="http://en.wikipedia.org/wiki/Transient" class="linkthumb">transitorios</a> y <a href="http://en.wikipedia.org/wiki/Stochastic" class="linkthumb">residuo</a>), la interfaz gráfica intuitiva y sencilla y la manipulacíón de sonidos en el <a href="http://en.wikipedia.org/wiki/Spectrogram" class="linkthumb">espectrograma</a>.</p> <p> <br /><font size="1"><a href="http://www.metacafe.com/watch/450868/tapestrea_sound_scene_modeling_by_example/" class="linkthumb">TAPESTREA: Sound Scene Modeling By Example</a> - <a href="http://www.metacafe.com/" class="linkthumb">For more funny movies, click here</a></font></p> <p>&nbsp;<br /> El video completo esta disponible aca: <a href="http://soundlab.cs.princeton.edu/listen/taps/tapestrea.mov" class="linkthumb">http://soundlab.cs.princeton.edu/listen/taps/tapestrea.mov</a><br /> &nbsp;</p> <p>Según su web, la idea es ser un framework unificado para analizar de forma interactiva sonidos complejos, transformarlos y sintetizarlos:</p> <ul> <li>Identificar puntos de interés en el sonido y extraerlos para crear &#8220;templates&#8221; (una muestra/un sample) reusables</li> <li>Transformar componentes de sonido de forma independiente a su entorno y otros eventos sonoros</li> <li>Resintetizar continuamente las texturas de fondo de una forma perceptualmente convincente</li> <li>Posicionamiento de eventos &#8220;templatizados&#8221; sobre la escena de fondo por medio de una novedosa interfaz de usuario o scripts escritos en <a href="http://chuck.cs.princeton.edu/" class="linkthumb">Chuck</a> (un lenguaje de programación orientado al audio)</li> <li>Recuperación de componentes de sonidos basandose en la similaridad con otros.</li> </ul> <p><a href="http://taps.cs.princeton.edu/" class="linkthumb">TAPESTREA</a> otorga una nueva forma de transformar dinámicamente una escena de sonido, permite generar puestas de cualquier duración, facilita la composición y el diseño de sonido combinando elementos de diferentes grabaciones de forma muy sencilla y ofreciendo miles de variantes para su manipulación (solo pensar en las posiblidades que otorga el solo hecho de poder manejar por separado sinusoides, transitorio y residuo).</p> <p>Sin duda, una herramienta de trabajo interesante tanto para &#8220;diseñadores de sonido&#8221; como invesitigadores del audio, compositores y cualquier persona interesada en experimentar con el sonido.</p> <p>Por si todo esto fuera poco, es <a href="http://es.wikipedia.org/wiki/Software_Libre" class="linkthumb">Software Libre</a> y <a href="http://es.wikipedia.org/wiki/Multiplataforma" class="linkthumb">multiplataforma</a>. El código fuente y los binarios se consiguen <a href="http://taps.cs.princeton.edu/release/" class="linkthumb">aquí</a>.</p> <p>Más info:</p> <ul> <li><a href="http://taps.cs.princeton.edu/" class="linkthumb">Web oficial</a></li> <li><a href="http://en.wikipedia.org/wiki/TAPESTREA" class="linkthumb">Artículo en Wikipedia</a></li> <li><a href="http://www.linuxjournal.com/node/1000239" class="linkthumb">Artículo en linuxjournal</a></li> </ul> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=165&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_165" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/?p=165#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=165" width="100" height="15" /></a></div> Fri, 02 Nov 2007 00:56:15 +0000 My presentation at the "VI Jornadas de Acústica, Electroacústica y áreas vinculadas (CADAE)" http://audiores.uint8.com.ar/blog/?p=164 http://audiores.uint8.com.ar/blog/?p=164 <p>Yesterday I had the opportunity to give a talk about my recent <a href="http://h.ordia.com.ar/blog/GSoC2007.php" class="linkthumb">work in the google summer of code </a>at the <a href="http://cadae.org.ar/jornadas_2007_formulario.htm" class="linkthumb">VI Jornadas de Acústica, Electroacústica y áreas vinculadas</a> (<a href="http://cadae.org.ar" class="linkthumb">CADAE</a>). The given time was short, so was a little hard to explain all in only 20 minutes, but seems that all went well (at least seemed like the people). Here my presentation (in Spanish):</p> <p>&nbsp;</p> <h2><strong>Transformaciones espectrales en tiempo real para CLAM</strong></h2> <div id="__ss_147509"><br /> <br /> <div><a href="http://www.slideshare.net/?src=embed" class="linkthumb"><img src="http://s3.amazonaws.com/slideshare/logo_embd.png" alt="SlideShare" /></a> | <a href="http://www.slideshare.net/hordiales/transformaciones-espectrales-en-tiempo-real-para-c-l-a-m-hernn-ordiales-147509" title="View 'Transformaciones espectrales en tiempo real para CLAM' on SlideShare" class="linkthumb">View</a> | <a href="http://www.slideshare.net/upload" class="linkthumb">Upload your own</a></div> </div> <p>&nbsp;</p> <p><strong>Download:</strong> <a href="http://audiores.uint8.com.ar/files/doc/slides/Transformaciones%20espectrales%20en%20tiempo%20real%20para%20CLAM%20-%20Hern%e1n%20Ordiales.pdf" class="linkthumb">Transformaciones espectrales en tiempo real para CLAM.pdf</a> </p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=164&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_164" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/?p=164#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=164" width="100" height="15" /></a></div> Sat, 27 Oct 2007 20:47:00 +0000 Presentación en las VI Jornadas de Acústica, Electroacústica y áreas vinculadas (CADAE) http://audiores.uint8.com.ar/blog/?p=163 http://audiores.uint8.com.ar/blog/?p=163 <p>Ayer tuve la oportunidad de presentar mi <a href="http://h.ordia.com.ar/blog/GSoC2007.php" class="linkthumb">trabajo realizado para el google summer of code</a> en el marco de las <a href="http://cadae.org.ar/jornadas_2007_formulario.htm" class="linkthumb">VI Jornadas de Acústica, Electroacústica y áreas vinculadas</a> (<a href="http://cadae.org.ar" class="linkthumb">CADAE</a>), les dejó la presentación de la misma:</p> <p>&nbsp;</p> <h2><strong>Transformaciones espectrales en tiempo real para CLAM</strong></h2> <div id="__ss_147509"><br /> <br /> <div><a href="http://www.slideshare.net/?src=embed" class="linkthumb"><img src="http://s3.amazonaws.com/slideshare/logo_embd.png" alt="SlideShare" /></a> | <a href="http://www.slideshare.net/hordiales/transformaciones-espectrales-en-tiempo-real-para-c-l-a-m-hernn-ordiales-147509" title="View 'Transformaciones espectrales en tiempo real para CLAM' on SlideShare" class="linkthumb">View</a> | <a href="http://www.slideshare.net/upload" class="linkthumb">Upload your own</a></div> </div> <p>&nbsp;</p> <p><strong>Download:</strong> <a href="http://audiores.uint8.com.ar/files/doc/slides/Transformaciones%20espectrales%20en%20tiempo%20real%20para%20CLAM%20-%20Hern%e1n%20Ordiales.pdf" class="linkthumb">Transformaciones espectrales en tiempo real para CLAM.pdf</a> </p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=163&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_163" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/?p=163#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=163" width="100" height="15" /></a></div> Sat, 27 Oct 2007 20:26:18 +0000 Conferencia ‘Tackling the Acoustic Front-end for Distant-Talking Automatic Speech' en BsAs http://audiores.uint8.com.ar/blog/?p=149 http://audiores.uint8.com.ar/blog/?p=149 <p>Me llega vía mail/boletín de <a href="http://www.ieee.org.ar/" class="linkthumb">IEEE Argentina</a> que el próximo lunes 3 de septiembre se va a dar la conferencia &#8216;<em>Tackling the Acoustic Front-end for Distant-Talking Automatic Speech</em>&#8216; dictada por el <a href="http://www.lnt.de/LMS/staff/index.php?lang=eng&function=1&person=3" class="linkthumb">Prof. Dr.-Ing. Walter Kellerman</a>, conferencista distinguido de la <a href="http://www.ieee.org/organizations/society/sp/" class="linkthumb">IEEE Signal Processing Society</a>. Esto será en la Sede de IEEE / CICOMRA, con <strong>entrada libre y gratuita</strong>.</p> <p>&nbsp;</p> <h3>Temario</h3> <blockquote><p>With the ever-growing interest in &#8216;natural&#8217; hands-free acoustic human/machine interfaces, the need for according distant-talking automatic speech recognition (ASR) systems increases. Considering interactive TV as a challenging exemplary application scenario, we investigate the structural problems presented by noisy and reverberant multi-source environments with unpredictable interference and acoustic echoes of loudspeaker signals, and discuss current acoustic signal processing techniques to enhance the input to the actual ASR system. Special attention is paid to reverberation, which affects speech recognizers much more than human listeners, and a recently published method incorporating a reverberation model on the feature level of ASR is discussed.</p></blockquote> <p>&nbsp;</p> <h3>Sobre el orador (para más datos ver <a href="http://www.lnt.de/LMS/staff/index.php?lang=eng&function=1&person=3" class="linkthumb">este link</a>)</h3> <blockquote><p>Walter Kellermann is Professor for communications at the Chair of Multimedia Communications and Signal Processing of the University of<br /> Erlangen-Nuremberg, Germany. His current research interests include speech signal processing, array signal processing, adaptive filtering, and its applications to acoustic human/machine interfaces. He received the Dipl.-Ing. (univ.) degree in Electrical Engineering from the University of Erlangen-Nuremberg in 1983, and the Dr.-Ing. degree (&#8217;with distinction&#8217;) from the Technical University Darmstadt, Germany, in 1988. From 1989 to 1990, he was a Postdoctoral Member of Technical Staff at <a href="http://www.research.att.com/" class="linkthumb">AT&#038;T Bell Laboratories</a>, Murray Hill, NJ. In 1990, he joined Philips Kommunikations Industrie, Nuremberg, Germany. From 1993 to 1999 he was a professor at the Fachhochschule Regensburg before he joined the University Erlangen-Nuremberg as a professor and head of the audio research laboratory in 1999 (for more see <a href="http://www.LNT.de/audio" class="linkthumb">http://www.LNT.de/audio</a>). In 1999 he co-founded the consulting firm <a href="http://www.dspsolutions.de/" class="linkthumb">DSP Solutions</a>. Dr. Kellermann authored or co-authored eight book chapters and more than 100 refereed papers in journals and conference proceedings. He served as a guest editor to various journals, as an associate editor and guest editor to IEEE Transactions on Speech and Audio Processing from 2000 to 2004, and presently serves as associate editor to the EURASIP Journals on Signal Processing and on Advances in Signal Processing. He was the general chair of the 5th International Workshop on Microphone Arrays in 2003 and the IEEE Workshop on Applications of Signal Processing to Audio and Acoustics in 2005. For 2007 and 2008 he is a Distinguished Lecturer of the <a href="http://www.ieee.org/organizations/society/sp/" class="linkthumb">IEEE Signal Processing Society</a>.</p></blockquote> <p>&nbsp;</p> <h3>Datos de la conferencia</h3> <p><strong>Fecha y hora:</strong> Lunes 3 de setiembre a las 19:00<br /> <strong>Lugar:</strong> Auditorio IEEE/CICOMRA, Av. Córdoba 744 Piso 1 B, Buenos Aires<br /> <strong>Inscripción:</strong> No es arancelada, pero se solicita inscripción previa vía web completando el formulario disponible <a href="http://www.ieee.org.ar/sistemainscripciones/InscripcionSolicitud.asp?idevento=22" class="linkthumb">aca</a>. Alternativamente por e-mail a sec.argentina@ieee.org citando &#8216;<em>Conferencia SPS-01</em>&#8216; o por teléfono a IEEE / CICOMRA (011) 4325 8839.</p> <p>No hay charlas ni mucho movimiento sobre este tipo de cosas por aca, asi que voy a tratar de ir&#8230; y después, de hacerme tiempo para un review de la misma. </p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=149&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_149" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/?p=149#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=149" width="100" height="15" /></a></div> Sat, 01 Sep 2007 03:25:50 +0000 Audio Player Wordpress plugin http://audiores.uint8.com.ar/blog/?p=145 http://audiores.uint8.com.ar/blog/?p=145 <p>De casualidad (buscando otra cosa) me topé con esto: <a href="http://www.1pixelout.net/code/audio-player-wordpress-plugin" class="linkthumb">Audio Player Wordpress plugin</a>. Parece bastante bien logrado y lo instalé en este blog&#8230; (además en este último tiempo venia averiguando sobre estos temas, ver: &#8220;<a href="http://audiores.uint8.com.ar/blog/?p=131" class="linkthumb">Streaming audio from your website (mp3 and ogg!)</a>&#8221; y &#8220;<a href="http://audiores.uint8.com.ar/blog/?p=138" class="linkthumb">Many files to stream with cortado in the same page</a>&#8220;). Al estar basado en flash, solo soporta mp3, pero es bastante configurable y tiene cosas copadas como la posibilidad de agregar audios por defecto al inicio o al final de cada track (útil por ejemplo para anuncios comerciales en podcasts o instrucciones de uso), distintas alternativas de mostrado de los audios en el feed, configuración de colores y otras cosas más.</p> <p>También se puede usar en sitios no basados en wordpress (<a href="http://www.macloo.com/examples/audio_player/" class="linkthumb">ver tutorial</a>) y por ejemplo es el que usa digg.com para los podcasts (<a href="http://www.1pixelout.net/2006/12/19/diggcom-use-my-audio-player/" class="linkthumb">ver</a>).</p> <p>Ejemplo:</p> <p><a href="http://audiores.uint8.com.ar/files/audios/smsharmonizer/elvis-harmonized.mp3">Download audio file (elvis-harmonized.mp3)</a><br /></p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=145&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_145" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/?p=145#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=145" width="100" height="15" /></a></div> Mon, 27 Aug 2007 00:24:46 +0000 Fundamental (in Hz) to a MIDI note http://audiores.uint8.com.ar/blog/?p=144 http://audiores.uint8.com.ar/blog/?p=144 <p>Working to have <em>audio-to-midi</em> in NetworkEditor (<a href="http://clam.iua.upf.edu/" class="linkthumb">CLAM</a>) I needed to convert a fundamental frequency value to a MIDI note one.</p> <p>I found some source code related with this in Voice2MIDI app, but was not explained at all, so looking for the reason of that formula I arrived at this:</p> <p>Knowing about equal-tempered scale (<a href="http://audiores.uint8.com.ar/blog/?p=53" class="linkthumb">check this</a>) and <img src="http://l.wordpress.com/latex.php?latex=2%5E%7B%5Cfrac%7Bn%7D%7B12%7D%7D&bg=FFFFFF&fg=000000" alt="2^{\frac{n}{12}}" /> relation between frequencies plus the fact that C4 or &#8220;middle c&#8221; has a MIDI value of 60, it&#8217;s easy to conclude that then A4 (which its frequency value is 440Hz, a standard for tunning and is 9 semi-tones more) has a MIDI value of 69.</p> <p>&nbsp;</p> <p>Then, starting with:<br /> <img src="http://l.wordpress.com/latex.php?latex=fundfrec+%3D+440Hz+%2A+2%5E%7B%28%5Cfrac%7B1%7D%7B12%7D%29%5En%7D+&bg=FFFFFF&fg=000000" alt="fundfrec = 440Hz * 2^{(\frac{1}{12})^n} " /></p> <p>&nbsp;</p> <p>It&#8217;s easy to arrive at this:<br /> <img src="http://l.wordpress.com/latex.php?latex=fund_%7Bmidinote%7D+%3D+69%2Blog_%7B2%5E%7B%28%5Cfrac%7B1%7D%7B12%7D%29%7D%7D%28%5Cfrac%7Bfundfrec%7D%7B440Hz%7D%29+&bg=FFFFFF&fg=000000" alt="fund_{midinote} = 69+log_{2^{(\frac{1}{12})}}(\frac{fundfrec}{440Hz}) " /></p> <p>&nbsp;</p> <p>and then, also taking in account this mathematical relation::<br /> <img src="http://l.wordpress.com/latex.php?latex=log_%7B2%5E%7B%5Cfrac%7B1%7D%7B12%7D%7D%7D%28a%29+%3D+log_%7Be%7D%28a%29%2A17.31234+&bg=FFFFFF&fg=000000" alt="log_{2^{\frac{1}{12}}}(a) = log_{e}(a)*17.31234 " /></p> <p>&nbsp;</p> <p>the final formula looks like:<br /> <img src="http://l.wordpress.com/latex.php?latex=fund_%7Bmidinote%7D+%3D+69%2Blog_%7Be%7D%28%5Cfrac%7Bfundfrec%7D%7B440Hz%7D%29%2A17.31234+&bg=FFFFFF&fg=000000" alt="fund_{midinote} = 69+log_{e}(\frac{fundfrec}{440Hz})*17.31234 " /></p> <p>&nbsp;</p> <p>and a final c++ code like:<br /> <span><pre class="c">fund_midinote = round<span>&#40;</span> <span>69</span>. + log<span>&#40;</span>fundfrec/<span>440</span>.<span>&#41;</span>*<span>17.31234</span> <span>&#41;</span>;</pre></span></p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=144&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_144" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/?p=144#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=144" width="100" height="15" /></a></div> Sun, 26 Aug 2007 23:54:29 +0000 SMS interference mystery solved http://audiores.uint8.com.ar/blog/?p=141 http://audiores.uint8.com.ar/blog/?p=141 <p>Andrés Kasulin, a friend of mine from the <a href="http://www.fi.uba.ar/" class="linkthumb">University</a> gave me some light about the issue of SMS interference (check &#8220;<a href="http://audiores.uint8.com.ar/blog/?p=121" class="linkthumb">Catching (phone) SMS pulse train with CLAM...</a>&#8220;)</p> <p>He says in a comment from <a href="http://audiores.uint8.com.ar/blog/?p=121" class="linkthumb">that post</a>:<br /> <blockquote>&#8220;I've found nice data in wikipedia[<a href="http://en.wikipedia.org/wiki/GSM#Radio_interface" class="linkthumb">1</a>].</blockquote></p> <p>It seems to be radiofrequency interference produced by the the phone, and filtered by the mic-cable-probes-osciloscope system. I think there is only a square pulse because the carrier frequency is much higher than filter cutoff frequency (maybe near 10^5 times).&#8221;</p> <p>[<a href="http://en.wikipedia.org/wiki/GSM#Radio_interface" class="linkthumb">1</a>] <a href="http://en.wikipedia.org/wiki/GSM#Radio_interface" class="linkthumb">http://en.wikipedia.org/wiki/GSM#Radio_interface</a></p> <p>&nbsp;<br /> &nbsp;</p> <p>I&#8217;d add from <a href="http://en.wikipedia.org/wiki/GSM#Radio_interface" class="linkthumb">that article</a>:</p> <blockquote><p>&#8220;A nearby <a href="http://en.wikipedia.org/wiki/GSM" class="linkthumb">GSM</a> handset is usually the source of the &#8220;dit dit dit, dit dit dit, dit dit dit&#8221; signal that can be heard from time to time on home stereo systems, televisions, computers, and personal music devices. When these audio devices are in the <a href="http://en.wikipedia.org/wiki/Near_and_far_field" class="linkthumb">near field</a> of the GSM handset, the radio signal is strong enough that the solid state amplifiers in the audio chain function as a <a href="http://en.wikipedia.org/wiki/Detector_%28radio%29" class="linkthumb">detector</a>. The clicking noise itself represents the power bursts that carry the <a href="http://en.wikipedia.org/wiki/Time_division_multiple_access" class="linkthumb">TDMA</a> signal. These signals have been known to interfere with other electronic devices, such as car stereos and portable audio players. This is a form of <a href="http://en.wikipedia.org/wiki/Radio_Frequency_Interference" class="linkthumb">RFI</a>, and could be mitigated or eliminated by use of additional shielding and/or bypass capacitors in these audio devices. However, the increased cost of doing so is difficult for a designer to justify.&#8221;</p></blockquote> <p>Very thanks Andrés!</p> <p class="akst_link"><a href="http://audiores.uint8.com.ar/blog/?p=141&akst_action=share-this" title="E-mail this, post to del.icio.us, etc." id="akst_link_141" class="akst_share_link" rel="nofollow">Share This/Compártelo</a> </p><div class="tantan-getcomments"><a href="http://audiores.uint8.com.ar/blog/?p=141#comments"><img src="http://audiores.uint8.com.ar/blog/wp-content/plugins/tantan/get-comments.php?p=141" width="100" height="15" /></a></div> Wed, 08 Aug 2007 03:15:34 +0000 Interferencia de los SMS http://h.ordia.com.ar/blog/index.php?entry=entry070808-001444 http://h.ordia.com.ar/blog/index.php?entry=entry070808-001444 No se si alguna vez escucharon los ruidos tipo &quot;tucu tuc tucu tuc&quot; que hacen los celulares cuando están cerca de micrófonos o parlantes... Bueno, el otro día estaba probando un algoritmo que estoy haciendo para el <a href="http://h.ordia.com.ar/blog/GSoC2007.php" target="_blank">google summer of code</a> (que requiere procesar voz en tiempo real, por lo que estaba con un headset con microfóno abierto) cuando me llegó un SMS al móvil que estaba a un par de metros mío y pude ver trenes de pulsos casi perfectos en el osciloscopio que monitoreaba la entrada de audio!!!<br /><br />Se puede ver una captura de esto aca: &quot;<a href="http://audiores.uint8.com.ar/blog/?p=121" target="_blank">Catching (phone) SMS pulse train with CLAM...</a>&quot;<br /><br />Era un tema que ya lo venia charlando con varios amigos, pero nadie (ni yo) me daba una explicación completa (y satisfactoria) del fenómeno.<br /><br />Y dado que este hecho me resultó sumamente curioso y que ya un par de veces habia efectuado búsquedas en google sobre esto sin demasiado éxito, re-pregunté a varios e incluso <i>postié</i> en listas de mails y en mi <a href="http://audiores.uint8.com.ar/blog/?p=121" target="_blank">blog sobre audio</a> tratando de resolver lo que ya en este punto era casi un misterio para mí.<br /><br />Un amigo de la facu, Andrés Kasulin, le echo un poco de luz al asunto con unos <a href="http://audiores.uint8.com.ar/blog/?p=141" target="_blank">comentarios que me hizo</a> e incluso encontró referencias sobre esto en un <a href="http://en.wikipedia.org/wiki/GSM#Radio_interface" target="_blank">artículo de wikipedia</a>.<br /><a href="http://audiores.uint8.com.ar/blog/?p=141" target="_blank"><br />Me dijo</a> que parece ser interferencia de radiofrecuencia producida por el teléfono, filtrada por el sistema formado por el micrófono, cable, los conectores y el <i>osciloscopio</i> y que solo se ve un pulso cuadrado porque la frecuencia de la portadora es mucho más alta que la de corte del filtro (tal vez alrededor de 10^5 veces más).<br /><br />Del <a href="http://en.wikipedia.org/wiki/GSM#Radio_interface" target="_blank">artículo de wikipedia</a> rescataría que comenta que esto normalmente ocurre cuando equipos de audio, televisores o computadoras están <a href="http://en.wikipedia.org/wiki/Near_and_far_field" target="_blank">cerca del campo</a> del aparato <a href="http://en.wikipedia.org/wiki/GSM" target="_blank">GSM</a>, y la señal de radiofrecuencia es lo suficientemente fuerte como para que los amplificadores de estado sólido de los equipos de audio funcionen como <a href="http://en.wikipedia.org/wiki/Detector_%28radio%29" target="_blank">detectores</a>. Los ruidos en si provienen de la portadora de la señal <a href="http://es.wikipedia.org/wiki/TDMA" target="_blank">TDMA</a> y que esta forma de RFI (<a href="http://es.wikipedia.org/wiki/Interferencia_electromagn%C3%A9tica" target="_blank">interferencia electromagnética</a>) puede ser combatida o eliminada usando protecciones adicionales o capacitores de bypass, aunque el costo elevado de esto hace muy difícil que normalmente se justifique. Wed, 08 Aug 2007 03:14:44 +0000 DSPrelated.com revamped http://h.ordia.com.ar/blog/index.php?entry=entry070720-000331 http://h.ordia.com.ar/blog/index.php?entry=entry070720-000331 I knew <a href="http://dsprelated.com/" target="_blank">this site</a> because reunites a lot of dsp mailing-lists (mostly yahoo groups) and even comp.dsp <a href="http://en.wikipedia.org/wiki/Usenet" target="_blank">usenet</a> group. It&#039;s nice to see the new site design, fully web 2.0.<br /><br />News include a (big) list of employers of DSP workers and a job opening section. Also a rating system that allows you to easily rate books and resources simply by clicking on the stars.<br /><br />Seems social-networking and web 2.0 is reaching all fields (I&#039;m also thinking in <a href="http://www.linkedin.com/" target="_blank">LinkedIn</a>)<br /><br /><a href="http://dsprelated.com/" target="_blank">Check it out</a>, I think it deserves a look.<div class="techtags">Tech Tags: <a href="http://technorati.com/tag/c++" rel="tag"><img src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=cpp" alt=" " />c++</a> <a href="http://technorati.com/tag/programming" rel="tag"><img src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=programming" alt=" " />programming</a> <a href="http://technorati.com/tag/clam" rel="tag"><img src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=clam" alt=" " />CLAM</a> <a href="http://technorati.com/tag/audio" rel="tag"><img src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=audio" alt=" " />audio</a> <a href="http://technorati.com/tag/dsp" rel="tag"><img src="http://static.technorati.com/static/img/pub/icon-utag-16x13.png?tag=dsp" alt=" " />dsp</a></div> Fri, 20 Jul 2007 03:03:31 +0000