<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>audiodev.blog</title>
    <link>https://audiodev.blog/</link>
    <description>Recent content on audiodev.blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>Copyright &amp;copy; 2025</copyright>
    <lastBuildDate>Sun, 29 Dec 2024 17:00:00 +0100</lastBuildDate>
    <atom:link href="https://audiodev.blog/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>s(M)exoscope</title>
      <link>https://audiodev.blog/smexoscope/</link>
      <pubDate>Sun, 29 Dec 2024 17:00:00 +0100</pubDate>
      <guid>https://audiodev.blog/smexoscope/</guid>
      <description>&lt;p&gt;For years I&amp;rsquo;ve been using Bram &amp;amp; Sean&amp;rsquo;s &lt;strong&gt;s(M)exoscope&lt;/strong&gt; to inspect the waveform output of my plug-ins. It&amp;rsquo;s a very useful debugging tool. Recently I upgraded &amp;mdash; finally! &amp;mdash; to an ARM-based Mac and could not find a version of s(M)exoscope that runs natively on Apple Silicon.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://audiodev.blog/smexoscope/smexoscope.jpg&#34;&#xA;    alt=&#34;Screenshot of the plug-in&#34; width=&#34;873px&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;So I decided to port the plug-in to JUCE and build it for modern systems. It turned out that the version I&amp;rsquo;d been using all this time (from &lt;a href=&#34;https://github.com/armandomontanez/smexoscope&#34;&gt;Armando Montanez&lt;/a&gt;) actually was made with JUCE already, just an old version. So that saved me a lot of work!&lt;/p&gt;</description>
    </item>
    <item>
      <title>I&#39;ll be Speaking at ADC24</title>
      <link>https://audiodev.blog/adc24/</link>
      <pubDate>Fri, 11 Oct 2024 16:00:00 +0200</pubDate>
      <guid>https://audiodev.blog/adc24/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m honored to be giving a talk at the &lt;a href=&#34;https://audio.dev&#34;&gt;Audio Developer Conference&lt;/a&gt; this year! My talk is titled &lt;em&gt;How To Read Scientific DSP Publications and Turn Them Into Code&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s about how to make sense of academic papers and patents if you&amp;rsquo;re not an academic or patent lawyer.&lt;/p&gt;&#xA;&lt;div class=&#34;note&#34;&gt;&#xA;&#xA;  &lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The video of the talk is now &lt;a href=&#34;https://www.youtube.com/watch?v=KdFQDnwav0Y&#34;&gt;available on YouTube&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;The abstract of the talk is as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Academic research papers contain exciting new ideas but typically no ready-to-use source code. Papers are not written for the layperson and are often filled with jargon and inscrutable equations. It&amp;rsquo;s up to the reader to decipher the math and wrestle through dense theory to transform these ideas into C++ code. This can be a daunting task, especially for developers who do not have an academic or mathematics background.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bombaz Bass Synth</title>
      <link>https://audiodev.blog/bombaz/</link>
      <pubDate>Mon, 15 Jul 2024 23:00:00 +0200</pubDate>
      <guid>https://audiodev.blog/bombaz/</guid>
      <description>&lt;p&gt;Bombaz is an electronic bass VSTi based on the little-known technique of &lt;strong&gt;window function synthesis&lt;/strong&gt;. This plug-in is particularly useful for adding sub-bass layers as it produces more harmonics than a simple sine wave.&lt;/p&gt;&#xA;&lt;p&gt;In this blog post I&amp;rsquo;ll explain the synthesis method used. You can &lt;a href=&#34;https://github.com/hollance/bombaz&#34;&gt;grab the code&lt;/a&gt; and &lt;a href=&#34;https://github.com/hollance/bombaz/releases&#34;&gt;VST3/AU files&lt;/a&gt; from GitHub.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://audiodev.blog/bombaz/bombaz.jpg&#34;&#xA;    alt=&#34;Screenshot of the plug-in&#34; width=&#34;468px&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;window-function-synthesis&#34;&gt;Window function synthesis&lt;/h2&gt;&#xA;&lt;p&gt;I first learned about window function or WF synthesis from Curtis Roads&amp;rsquo; excellent book &lt;em&gt;The Computer Music Tutorial&lt;/em&gt; &amp;mdash; the second edition is out now, you should get it!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Krunch Saturator</title>
      <link>https://audiodev.blog/krunch/</link>
      <pubDate>Mon, 08 Jul 2024 17:15:00 +0200</pubDate>
      <guid>https://audiodev.blog/krunch/</guid>
      <description>&lt;p&gt;Some time ago I came across the &lt;a href=&#34;https://gery.casiez.net/1euro/&#34;&gt;1 Euro Filter&lt;/a&gt;, an adaptive filter designed to balance jitter and lag in noisy input for interactive systems. I was curious what it would sound like when applied to audio. &lt;strong&gt;Pretty good actually!&lt;/strong&gt; The filter adds harmonics in an interesting way. So I turned it into a free plug-in named Krunch.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://audiodev.blog/krunch/krunch.jpg&#34;&#xA;    alt=&#34;Screenshot of the plug-in&#34; width=&#34;350px&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;In this blog post I will talk a bit about how the 1 Euro Filter works and why it sounds like a saturation effect when used to process audio.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Complete Beginner&#39;s Guide</title>
      <link>https://audiodev.blog/beginners-book/</link>
      <pubDate>Thu, 27 Jun 2024 17:00:00 +0200</pubDate>
      <guid>https://audiodev.blog/beginners-book/</guid>
      <description>&lt;p&gt;I wrote a new book: &lt;strong&gt;The Complete Beginner&amp;rsquo;s Guide to Audio Plug-in Development&lt;/strong&gt;!&lt;/p&gt;&#xA;&lt;p&gt;Joshua Hodge from &lt;em&gt;The Audio Programmer&lt;/em&gt; asked me to put together a tutorial aimed at complete beginners &amp;mdash; people who have never written any code before &amp;mdash; that explains every step of getting started with audio software development.&lt;/p&gt;&#xA;&lt;p&gt;Learning to program can be daunting, especially in a beginner-unfriendly language such as &lt;strong&gt;C++&lt;/strong&gt;, the standard language for making audio software.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Kiss of Shame</title>
      <link>https://audiodev.blog/kiss-of-shame/</link>
      <pubDate>Wed, 17 Apr 2024 22:00:00 +0200</pubDate>
      <guid>https://audiodev.blog/kiss-of-shame/</guid>
      <description>&lt;p&gt;Recently I was donated the source code to &lt;strong&gt;The Kiss of Shame&lt;/strong&gt;, a magnetic tape emulation plug-in from 2014, originally developed by Eros Marcello and friends. The plug-in was never finished or released, but Eros has graciously allowed it to become open source.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://audiodev.blog/kiss-of-shame/sliced-tape.jpg&#34;&#xA;    alt=&#34;It&amp;#39;s the greatest thing since sliced tape&#34; width=&#34;740px&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;As part of my &lt;a href=&#34;https://audiodev.blog/plugin-archeology/&#34;&gt;plug-in archeology&lt;/a&gt; project, I&amp;rsquo;ve been hacking away at the code to get it up and running again. In this blog post I&amp;rsquo;ll explain in detail how this plug-in works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Audio Consulting Services</title>
      <link>https://audiodev.blog/hire/</link>
      <pubDate>Mon, 22 Jan 2024 16:00:00 +0100</pubDate>
      <guid>https://audiodev.blog/hire/</guid>
      <description>&lt;p&gt;Hi, my name is Matthijs. I&amp;rsquo;m currently available as a &lt;strong&gt;freelance audio developer&lt;/strong&gt;. 🎵&lt;/p&gt;&#xA;&#xA;&lt;center&gt;&lt;img src=&#34;https://audiodev.blog/hire/Matthijs.jpg&#34; style=&#34;width:200px;height:200px;border-radius:50%;border:1px solid #eee;overflow:hidden;&#34; alt=&#34;&#34;&gt;&lt;/center&gt;&#xA;&#xA;&#xA;&lt;p&gt;Previously I&amp;rsquo;ve also worked on machine learning for mobile devices, iOS apps, websites, enterprise software, games, embedded systems, and much more.&lt;/p&gt;&#xA;&lt;p&gt;Location: Netherlands, Europe (looking for remote work only)&lt;/p&gt;&#xA;&lt;p&gt;ACM, IEEE, and AES member.&lt;/p&gt;&#xA;&lt;p&gt;Contact me by &lt;a href=&#34;mailto:mail@hollance.com&#34;&gt;email&lt;/a&gt; – &lt;a href=&#34;https://github.com/hollance&#34;&gt;GitHub&lt;/a&gt; – &lt;a href=&#34;https://www.linkedin.com/in/matthijs-hollemans/&#34;&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-can-i-do-for-you&#34;&gt;What can I do for you?&lt;/h2&gt;&#xA;&lt;p&gt;Key skill areas:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;creating &lt;strong&gt;plug-ins&lt;/strong&gt; and other audio software&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DSP&lt;/strong&gt; implementation and research&lt;/li&gt;&#xA;&lt;li&gt;machine learning &amp;amp; AI for real-time audio&lt;/li&gt;&#xA;&lt;li&gt;implementing &lt;strong&gt;user interfaces&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;UI/UX design&lt;/li&gt;&#xA;&lt;li&gt;graphics and GPU programming&lt;/li&gt;&#xA;&lt;li&gt;finding and fixing difficult bugs&lt;/li&gt;&#xA;&lt;li&gt;modernizing old codebases&lt;/li&gt;&#xA;&lt;li&gt;bringing projects to the &lt;strong&gt;finish line&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;technical writing and teaching&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I can write the code and/or consult on the best ways to solve technical problems, or advise on the usability and design of your software.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Level Meter Plug-in</title>
      <link>https://audiodev.blog/levels-plugin/</link>
      <pubDate>Fri, 22 Dec 2023 16:50:00 +0100</pubDate>
      <guid>https://audiodev.blog/levels-plugin/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m brushing off some of my older plug-in code in order to release it as open source.&lt;/p&gt;&#xA;&lt;p&gt;The first is a (very) basic level metering plug-in. I mainly use this thing when testing and debugging plug-ins that don&amp;rsquo;t have a built-in level meter. It shows the peak levels for the left and right channels, as well as the mids and sides.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://audiodev.blog/levels-plugin/screenshot.png&#34;&#xA;    alt=&#34;Screenshot of Levels&#34; width=&#34;200px&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;You can find the source code at &lt;a href=&#34;https://github.com/hollance/levels&#34;&gt;github.com/hollance/levels&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MDA Overdrive</title>
      <link>https://audiodev.blog/mda-overdrive/</link>
      <pubDate>Wed, 06 Dec 2023 22:26:00 +0100</pubDate>
      <guid>https://audiodev.blog/mda-overdrive/</guid>
      <description>&lt;p&gt;This article is part of the &lt;a href=&#34;https://audiodev.blog/plugin-archeology&#34;&gt;Plug-in Archeology series&lt;/a&gt; where we dig through the source code of old plug-ins to figure out how they work.&lt;/p&gt;&#xA;&lt;p&gt;In this episode we&amp;rsquo;ll take a look at &lt;strong&gt;MDA Overdrive&lt;/strong&gt;, one of the simpler plug-ins from the MDA suite, making it an ideal starting point for someone who is new to audio development.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://audiodev.blog/mda-overdrive/screenshot.png&#34;&#xA;    alt=&#34;Screenshot of MDA Overdrive&#34; width=&#34;476px&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I recommend that you &lt;a href=&#34;https://github.com/hollance/mda-plugins-juce/tree/master/Overdrive&#34;&gt;grab the code&lt;/a&gt;, run it, and try to figure out for yourself first how this plug-in works, and then come back to this article. Reading other people&amp;rsquo;s source code is a great exercise!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Plug-in Archeology</title>
      <link>https://audiodev.blog/plugin-archeology/</link>
      <pubDate>Wed, 06 Dec 2023 22:25:00 +0100</pubDate>
      <guid>https://audiodev.blog/plugin-archeology/</guid>
      <description>&lt;p&gt;One thing I like to do is read the source code of other people&amp;rsquo;s plug-ins to figure out how they work.&lt;/p&gt;&#xA;&lt;p&gt;Usually these are older plug-ins that are no longer commercially relevant and have been open sourced — but that doesn&amp;rsquo;t mean we can&amp;rsquo;t learn anything from them.&lt;/p&gt;&#xA;&lt;p&gt;You can pick up a lot by reading someone else&amp;rsquo;s code. Different programmers have different styles and will solve problems in ways you may not have thought of yourself. Plus, it can be a fun puzzle to figure out what the code does, as comments are often missing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Code Your Own Synth Plugins</title>
      <link>https://audiodev.blog/synth-book/</link>
      <pubDate>Mon, 11 Sep 2023 16:00:00 +0200</pubDate>
      <guid>https://audiodev.blog/synth-book/</guid>
      <description>&lt;p&gt;Last year I wrote the e-book &lt;strong&gt;Code Your Own Synth Plug-Ins With C++ and JUCE&lt;/strong&gt; and self-published it through Leanpub.&lt;/p&gt;&#xA;&lt;p&gt;As of December 2023, the book is being published by &lt;a href=&#34;https://theaudioprogrammer.com/learn/synth-plugin-book&#34;&gt;The Audio Programmer&lt;/a&gt; under the title &lt;strong&gt;Creating Synthesizer Plug-Ins with C++ and JUCE&lt;/strong&gt; and is available in PDF, EPUB, and paperback formats.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://theaudioprogrammer.com/learn/synth-plugin-book&#34;&gt;Check out the book here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve had good success with self-publishing in the past but a downside is that you have to do your own marketing too. Book sales have been doing OK but I feel that more readers could benefit from beginner-level books such as this, so I&amp;rsquo;m taking this opportunity to promote the book on my blog as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FFT Processing in JUCE</title>
      <link>https://audiodev.blog/fft-processing/</link>
      <pubDate>Tue, 05 Sep 2023 22:30:00 +0200</pubDate>
      <guid>https://audiodev.blog/fft-processing/</guid>
      <description>&lt;p&gt;A common question that comes up is how to do FFT processing on real-time audio. It&amp;rsquo;s not as daunting as it may seem but there are some pitfalls to avoid.&lt;/p&gt;&#xA;&lt;p&gt;The goal here is to periodically apply the &lt;strong&gt;Fast Fourier Transform&lt;/strong&gt; (FFT) to a short fragment of audio to get the frequency spectrum at that point in time, then change this spectrum in some interesting way, and finally use the IFFT (inverse FFT) to turn the modified spectrum back into audio.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Protect Your Ears</title>
      <link>https://audiodev.blog/protect-your-ears/</link>
      <pubDate>Wed, 02 Aug 2023 22:00:00 +0200</pubDate>
      <guid>https://audiodev.blog/protect-your-ears/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Be careful when developing audio software while wearing headphones!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s really easy to make a tiny mistake in your DSP code and get extremely loud, screaming feedback as output. That&amp;rsquo;s certainly unpleasant when using loudspeakers, but downright dangerous on headphones. I&amp;rsquo;ve had it happen several times and it&amp;rsquo;s not fun.&lt;/p&gt;&#xA;&lt;p&gt;Of course, sometimes you do need to use headphones — if only to stop scaring the cat with those weird noises you&amp;rsquo;re making — and so it&amp;rsquo;s smart to protect your ears when you do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MIDI Note Chart</title>
      <link>https://audiodev.blog/midi-note-chart/</link>
      <pubDate>Tue, 25 Jul 2023 20:40:00 +0200</pubDate>
      <guid>https://audiodev.blog/midi-note-chart/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://theaudioprogrammer.com/learn/synth-plugin-book&#34;&gt;My book&lt;/a&gt; includes a handy MIDI note chart and I find myself referring to it often, so I figured it might be useful to put it on the blog too. The design is based on &lt;a href=&#34;https://newt.phys.unsw.edu.au/jw/notes.html&#34;&gt;Joe Wolfe&amp;rsquo;s original chart&lt;/a&gt; but redrawn at a higher resolution.&lt;/p&gt;&#xA;&lt;p&gt;The chart includes only the 88 piano notes. C4 is middle C on the piano, which makes MIDI note 0 be C-1. Not everyone uses that convention: some people start counting at C-2 or at C0, so middle C might be named C3 or C5 on your keyboard or DAW. The frequencies are based on A440 tuning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Started with Audio Programming</title>
      <link>https://audiodev.blog/newbie-resources/</link>
      <pubDate>Fri, 03 Feb 2023 23:36:00 +0100</pubDate>
      <guid>https://audiodev.blog/newbie-resources/</guid>
      <description>&lt;p&gt;Are you interested in audio programming but don&amp;rsquo;t know where to begin? Here are my recommendations.&lt;/p&gt;&#xA;&lt;p&gt;In summary, you need:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;to learn C++&lt;/li&gt;&#xA;&lt;li&gt;a development environment / IDE&lt;/li&gt;&#xA;&lt;li&gt;an audio framework&lt;/li&gt;&#xA;&lt;li&gt;digital signal processing (DSP) knowledge&lt;/li&gt;&#xA;&lt;li&gt;good ideas&lt;/li&gt;&#xA;&lt;li&gt;patience and tenacity&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Audio programming is a lot of fun, but it requires specialized know-how that may take some time to acquire. But hey, learning is part of the fun!&lt;/p&gt;&#xA;&lt;h2 id=&#34;learning-c&#34;&gt;Learning C++&lt;/h2&gt;&#xA;&lt;p&gt;The audio programmer&amp;rsquo;s language of choice is C++, pronounced &amp;ldquo;C plus plus&amp;rdquo;. Equally hated and loved, it&amp;rsquo;s the only practical language for writing real-time audio software. It is possible to write the non-audio parts of your program in other languages, but the DSP code needs to be C++.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Explosions Through Filtered Noise</title>
      <link>https://audiodev.blog/explosions/</link>
      <pubDate>Thu, 13 Oct 2022 18:12:02 +0100</pubDate>
      <guid>https://audiodev.blog/explosions/</guid>
      <description>&lt;p&gt;This is a fun little algorithm described by David D. Thiel in the chapter &lt;em&gt;Retro Game Sound: What We Can Learn from 1980s Era Synthesis&lt;/em&gt; in &lt;em&gt;Audio Anecdotes&lt;/em&gt;, Volume I, edited by Ken Greenebaum and Ronen Barzel, published by A K Peters, 2003.&lt;/p&gt;&#xA;&lt;h2 id=&#34;filtered-noise&#34;&gt;Filtered noise&lt;/h2&gt;&#xA;&lt;p&gt;To make filtered noise, we can draw a waveform like in the following image where the slope between the points determines how much high frequency content is in the sound. Steeper slope = more high frequencies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Random Numbers for Audio</title>
      <link>https://audiodev.blog/random-numbers/</link>
      <pubDate>Sun, 09 Oct 2022 15:21:43 +0100</pubDate>
      <guid>https://audiodev.blog/random-numbers/</guid>
      <description>&lt;p&gt;Synthesizing white noise is easy enough: just output a sequence of random numbers. The problem is that making random numbers on the computer can be tricky.&lt;/p&gt;&#xA;&lt;p&gt;A random number generator isn&amp;rsquo;t only used for white noise. It can also be used for other purposes, such as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;making colored noise, by applying a filter to white noise&lt;/li&gt;&#xA;&lt;li&gt;as a modulation source, such as a sample-and-hold LFO&lt;/li&gt;&#xA;&lt;li&gt;starting voices with a random phase&lt;/li&gt;&#xA;&lt;li&gt;playing random notes in an arpeggiator&lt;/li&gt;&#xA;&lt;li&gt;positioning a note randomly in the stereo field&lt;/li&gt;&#xA;&lt;li&gt;randomizing the plug-in parameters&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In this blog post, we&amp;rsquo;ll first look at different methods for making random numbers. These algorithms typically output integers. We&amp;rsquo;ll then examine how to turn these random integers into floating-point values so we can use them in our audio code.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
