{"id":4086,"date":"2021-12-17T19:47:17","date_gmt":"2021-12-17T18:47:17","guid":{"rendered":"https:\/\/www.pschatzmann.ch\/home\/?p=4086"},"modified":"2023-02-19T16:15:13","modified_gmt":"2023-02-19T15:15:13","slug":"ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library","status":"publish","type":"post","link":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/","title":{"rendered":"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library"},"content":{"rendered":"<p>As you might know from my <a href=\"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/06\/the-ai-thinker-audio-kit-experience-or-nothing-is-right\/\">last posts<\/a> I am currently extending my <a href=\"https:\/\/github.com\/pschatzmann\/arduino-audio-tools\">Arduino Audio Tools<\/a> library to support the <a href=\"https:\/\/docs.ai-thinker.com\/en\/esp32-audio-kit\">AI Thinker Audio Kit<\/a> which is based on the ES8388 audio chip.<\/p>\n<p>In my Arduino Audio Tools we have all ingredients to turn our <strong>ESP32 AudioKit<\/strong> into a <strong>simple synthesizer<\/strong> with just a few lines of code:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/pschatzmann.github.io\/Resources\/img\/audio-toolkit.png\" alt=\"Audio Kit\" \/><\/p>\n<p>Naturally you can use this functionality on any other Processor. You just need to replace the output object e.g. with I2SStream, but because I am tired of soldering or putting together the connections on a breadboard I am using the <strong>AudioKit<\/strong>:<\/p>\n<h2>The First Arduino Sketch<\/h2>\n<p>We just start with a simple generation of a C3 note:<\/p>\n<pre><code>#include \"AudioTools.h\"\n#include \"AudioLibs\/AudioKit.h\"\n\nAudioKitStream kit;\nSineWaveGenerator&lt;int16_t&gt; sine;\nGeneratedSoundStream&lt;int16_t&gt; in(sine); \nStreamCopy copier(kit, in); \n\nvoid setup() {\n  AudioLogger::instance().begin(Serial,AudioLogger::Warning);\n\n  \/\/ Setup output\n  auto cfg = kit.defaultConfig(TX_MODE);\n  kit.setVolume(80);\n  kit.begin(cfg);\n\n  \/\/ Setup sound generation based on AudioKit settings\n  sine.begin(cfg, N_C3);\n  in.begin(cfg);\n}\n\n\/\/ copy the data\nvoid loop() {\n  copier.copy();\n  kit.processActions();\n}\n<\/code><\/pre>\n<p>The logic is pretty simple: We use generated sound stream and copy the sound to the AudioKit (I2S output)! This is implemented with a <a href=\"https:\/\/pschatzmann.github.io\/arduino-audio-tools\/html\/classaudio__tools_1_1_generated_sound_stream.html\">GeneratedSoundStream<\/a> together with a <a href=\"https:\/\/pschatzmann.github.io\/arduino-audio-tools\/html\/classaudio__tools_1_1_sound_generator.html\">SoundGenerator<\/a>.<\/p>\n<h2>Supporting Buttons<\/h2>\n<p>Next we want to use the buttons to play individual notes:<\/p>\n<pre><code><br \/>void actionKeyOn(bool active, int pin, void* ptr){\n  int freq = *((int*)ptr);\n  sine.setFrequency(freq);\n  in.begin();\n}\n\nvoid actionKeyOff(bool active, int pin, void* ptr){\n  in.end();\n}\n\n\/\/ We want to play some notes on the AudioKit keys \nvoid setupActions(){\n  \/\/ assign buttons to notes\n  auto act_low = AudioActions::ActiveLow;\n  static int note[] = {N_C3, N_D3, N_E3, N_F3, N_G3, N_A3}; \/\/ frequencies\n  kit.audioActions().add(PIN_KEY1, actionKeyOn, actionKeyOff, act_low, &amp;(note[0])); \/\/ C3\n  kit.audioActions().add(PIN_KEY2, actionKeyOn, actionKeyOff, act_low, &amp;(note[1])); \/\/ D3\n  kit.audioActions().add(PIN_KEY3, actionKeyOn, actionKeyOff, act_low, &amp;(note[2])); \/\/ E3\n  kit.audioActions().add(PIN_KEY4, actionKeyOn, actionKeyOff, act_low, &amp;(note[3])); \/\/ F3\n  kit.audioActions().add(PIN_KEY5, actionKeyOn, actionKeyOff, act_low, &amp;(note[4])); \/\/ G3\n  kit.audioActions().add(PIN_KEY6, actionKeyOn, actionKeyOff, act_low, &amp;(note[5])); \/\/ A3\n}\n\nvoid setup() {\n  ...\n  \/\/ activate keys\n  setupActions();\n}\n\n\/\/ copy the data\nvoid loop() {\n  copier.copy();\n  kit.processActions();\n}\n<\/code><\/pre>\n<p>We use the <a href=\"https:\/\/pschatzmann.github.io\/arduino-audio-tools\/html\/class_audio_actions.html\">AudioActions<\/a> to assign the <code>actionKeyOn()<\/code> and <code>actionKeyOff()<\/code> methods that will be provided with the frequency. When a key is pressed we set the frequency and switch the sound on. When it is released we just switch the sound off again.<\/p>\n<h2>An Simple Improvement: Using ADSR<\/h2>\n<p>So far, our buttons were just switching the sound on and off.<\/p>\n<p>In sound and music, an <strong>envelope<\/strong> describes how a sound changes over time. The most common form of envelope generator is controlled with four parameters: <strong>attack, decay, sustain and release (ADSR)<\/strong>. Fortunately we have an implementation available.<\/p>\n<p>First we need to set up <a href=\"https:\/\/pschatzmann.github.io\/arduino-audio-tools\/html\/classaudio__tools_1_1_audio_effects.html\">AudioEffects<\/a> as follows:<\/p>\n<pre><code>SineWaveGenerator&lt;int16_t&gt; sine;\nAudioEffects effects(sine);\nADSRGain adsr(0.001,0.001,0.5, 0.005);\nGeneratedSoundStream&lt;int16_t&gt; in(effects); \n\n<\/code><\/pre>\n<p>We can to add the ADRS to the effects in the setup() method:<\/p>\n<pre><code>void setup(){\n...\n   effects.addEffect(adsr);\n...\n}\n<\/code><\/pre>\n<p>Finally we change the key action methods:<\/p>\n<pre><code>void actionKeyOn(bool active, int pin, void* ptr){\n  int freq = *((int*)ptr);\n  sine.setFrequency(freq);\n  adsr.keyOn();\n}\n\nvoid actionKeyOff(bool active, int pin, void* ptr){\n  adsr.keyOff();\n}\n\n<\/code><\/pre>\n<h2>Adding More Effects<\/h2>\n<p>Having now this basic setup that supports effects, it is quit simple to add additional sound effects and control them with parameters. You can find an example how to do this in <a href=\"https:\/\/www.pschatzmann.ch\/home\/2021\/11\/05\/arduino-audio-tools-audio-effects\/\">one of my prior posts<\/a> and here is a link to the <a href=\"https:\/\/pschatzmann.github.io\/arduino-audio-tools\/html\/classaudio__tools_1_1_audio_effect.html\">available effects implementations<\/a>.<\/p>\n<h2>Adding Midi Support<\/h2>\n<p>Adding MIDI support is also not too complicated with my <a href=\"https:\/\/github.com\/pschatzmann\/arduino-midi\">Arduino Midi Library<\/a>. We just need to define our own <a href=\"https:\/\/pschatzmann.github.io\/arduino-midi\/html\/classmidi_1_1_midi_action.html\">MidiAction<\/a> handler &#8211; which is pretty much using the same code that we already know from handling the AudioKit keys. By adding the <a href=\"https:\/\/pschatzmann.github.io\/arduino-midi\/html\/classmidi_1_1_midi_ble_server.html\">MidiBleServer<\/a> we can process now midi commands via BLE from a <strong>MIDI Keyboard<\/strong>.<\/p>\n<pre><code>#include &lt;Midi.h&gt;\n\nclass SynthAction : public MidiAction {\n    public:\n        void onNoteOn(uint8_t channel, uint8_t note, uint8_t velocity) {\n           int frq = MidiCommon::noteToFrequency(note);\n           sine.setFrequency(freq);\n           adsr.keyOn();\n        }\n        void onNoteOff(uint8_t channel, uint8_t note, uint8_t velocity) {\n           adsr.keyOff();\n        }\n        void onControlChange(uint8_t channel, uint8_t controller, uint8_t value) {}\n        void onPitchBend(uint8_t channel, uint8_t value) {}\n} action;\n\nMidiBleServer ble(\"MidiServer\", &amp;action);\n\n<\/code><\/pre>\n<h2>Final Conclusions<\/h2>\n<p>The <a href=\"https:\/\/github.com\/pschatzmann\/arduino-audio-tools\">Arduino Audio Tools<\/a> library has all, what is needed to build some powerful audio applications with just a few lines of code.<\/p>\n<p>The presented design is using just one simple input to output stream to generate a sound with different frequencies. On a regular instrument we can play however multiple tones at the same time. In order to deal with this, we will need to add some additional logic &#8211; but that&#8217;s the topic for one of my next blog &#8230;<\/p>\n<h2>Source Code<\/h2>\n<p>The (potentially updated) source code can be found on Github.<br \/>\n&#8211; <a href=\"https:\/\/github.com\/pschatzmann\/arduino-audio-tools\/tree\/main\/examples\/examples-audiokit\/streams-synthbasic1-audiokit\">Step 1 &#8211; Basic Example<\/a><br \/>\n&#8211; <a href=\"https:\/\/github.com\/pschatzmann\/arduino-audio-tools\/tree\/main\/examples\/examples-audiokit\/streams-synthbasic2-audiokit\">Step 2 &#8211; ADSR<\/a><br \/>\n&#8211; <a href=\"https:\/\/github.com\/pschatzmann\/arduino-audio-tools\/tree\/main\/examples\/examples-audiokit\/streams-synthbasic3-audiokit\">Step 3 &#8211; Midi<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>As you might know from my last posts I am currently extending my Arduino Audio Tools library to support the AI Thinker Audio Kit which is based on the ES8388 audio chip. In my Arduino Audio Tools we have all ingredients to turn our ESP32 AudioKit into a simple synthesizer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1398,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[20,22],"tags":[28,26],"class_list":["post-4086","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-machine-sound","tag-esp32audiokit","tag-synthesizer"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library - Phil Schatzmann<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library - Phil Schatzmann\" \/>\n<meta property=\"og:description\" content=\"As you might know from my last posts I am currently extending my Arduino Audio Tools library to support the AI Thinker Audio Kit which is based on the ES8388 audio chip. In my Arduino Audio Tools we have all ingredients to turn our ESP32 AudioKit into a simple synthesizer [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/\" \/>\n<meta property=\"og:site_name\" content=\"Phil Schatzmann\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-17T18:47:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-19T15:15:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2020\/05\/vintage-synthesizer-1601941_960_720.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"639\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"pschatzmann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"pschatzmann\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/\"},\"author\":{\"name\":\"pschatzmann\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\"},\"headline\":\"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library\",\"datePublished\":\"2021-12-17T18:47:17+00:00\",\"dateModified\":\"2023-02-19T15:15:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/\"},\"wordCount\":512,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/vintage-synthesizer-1601941_960_720.jpg\",\"keywords\":[\"ESP32AudioKit\",\"Synthesizer\"],\"articleSection\":[\"Arduino\",\"Machine Sound\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/\",\"url\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/\",\"name\":\"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library - Phil Schatzmann\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/vintage-synthesizer-1601941_960_720.jpg\",\"datePublished\":\"2021-12-17T18:47:17+00:00\",\"dateModified\":\"2023-02-19T15:15:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/vintage-synthesizer-1601941_960_720.jpg\",\"contentUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/vintage-synthesizer-1601941_960_720.jpg\",\"width\":960,\"height\":639},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2021\\\/12\\\/17\\\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#website\",\"url\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/\",\"name\":\"Phil Schatzmann Consulting\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\",\"name\":\"pschatzmann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/pschatzmann.png\",\"url\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/pschatzmann.png\",\"contentUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/pschatzmann.png\",\"width\":305,\"height\":305,\"caption\":\"pschatzmann\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/pschatzmann.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library - Phil Schatzmann","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/","og_locale":"en_US","og_type":"article","og_title":"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library - Phil Schatzmann","og_description":"As you might know from my last posts I am currently extending my Arduino Audio Tools library to support the AI Thinker Audio Kit which is based on the ES8388 audio chip. In my Arduino Audio Tools we have all ingredients to turn our ESP32 AudioKit into a simple synthesizer [&hellip;]","og_url":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/","og_site_name":"Phil Schatzmann","article_published_time":"2021-12-17T18:47:17+00:00","article_modified_time":"2023-02-19T15:15:13+00:00","og_image":[{"width":960,"height":639,"url":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2020\/05\/vintage-synthesizer-1601941_960_720.jpg","type":"image\/jpeg"}],"author":"pschatzmann","twitter_card":"summary_large_image","twitter_misc":{"Written by":"pschatzmann","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/#article","isPartOf":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/"},"author":{"name":"pschatzmann","@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1"},"headline":"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library","datePublished":"2021-12-17T18:47:17+00:00","dateModified":"2023-02-19T15:15:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/"},"wordCount":512,"commentCount":5,"publisher":{"@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1"},"image":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/#primaryimage"},"thumbnailUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2020\/05\/vintage-synthesizer-1601941_960_720.jpg","keywords":["ESP32AudioKit","Synthesizer"],"articleSection":["Arduino","Machine Sound"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/","url":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/","name":"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library - Phil Schatzmann","isPartOf":{"@id":"https:\/\/www.pschatzmann.ch\/home\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/#primaryimage"},"image":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/#primaryimage"},"thumbnailUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2020\/05\/vintage-synthesizer-1601941_960_720.jpg","datePublished":"2021-12-17T18:47:17+00:00","dateModified":"2023-02-19T15:15:13+00:00","breadcrumb":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/#primaryimage","url":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2020\/05\/vintage-synthesizer-1601941_960_720.jpg","contentUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2020\/05\/vintage-synthesizer-1601941_960_720.jpg","width":960,"height":639},{"@type":"BreadcrumbList","@id":"https:\/\/www.pschatzmann.ch\/home\/2021\/12\/17\/ai-thinker-audio-kit-building-a-simple-synthesizer-with-the-audiotools-library\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pschatzmann.ch\/home\/"},{"@type":"ListItem","position":2,"name":"AI Thinker Audio Kit: Building a Simple Synthesizer with the AudioTools Library"}]},{"@type":"WebSite","@id":"https:\/\/www.pschatzmann.ch\/home\/#website","url":"https:\/\/www.pschatzmann.ch\/home\/","name":"Phil Schatzmann Consulting","description":"","publisher":{"@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pschatzmann.ch\/home\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1","name":"pschatzmann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2022\/08\/pschatzmann.png","url":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2022\/08\/pschatzmann.png","contentUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2022\/08\/pschatzmann.png","width":305,"height":305,"caption":"pschatzmann"},"logo":{"@id":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2022\/08\/pschatzmann.png"}}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts\/4086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/comments?post=4086"}],"version-history":[{"count":46,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts\/4086\/revisions"}],"predecessor-version":[{"id":5382,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts\/4086\/revisions\/5382"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/media\/1398"}],"wp:attachment":[{"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/media?parent=4086"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/categories?post=4086"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/tags?post=4086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}