{"id":1378,"date":"2020-05-22T18:55:30","date_gmt":"2020-05-22T16:55:30","guid":{"rendered":"https:\/\/www.pschatzmann.ch\/home\/?p=1378"},"modified":"2021-12-07T19:37:03","modified_gmt":"2021-12-07T18:37:03","slug":"synthesizer-for-the-esp32","status":"publish","type":"post","link":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/","title":{"rendered":"Implementing a Synthesizer for the Raspberry PI and the ESP32 &#8211; Introduction"},"content":{"rendered":"<h2>Overview<\/h2>\n<p>I was playing with the idea to implement a simple <strong>Synthesizer for the ESP32<\/strong>.which would play different instruments. The ESP32 should have enough power to <em><strong>generate interesting sounds<\/strong><\/em>. The limitation however is on the memory.\u00a0 So any approach which relies on <em>sampled data and big sound buffers will just not work<strong>. <\/strong><\/em>Therefore\u00a0we need to rely on <em>playing the generated sounds as directly as possible<\/em>.<\/p>\n<p>A <strong>Synthesizer<\/strong> is an electronic musical instrument that generates audio signals.<\/p>\n<p>There are plenty of different implementation approaches<\/p>\n<ul>\n<li><strong>Hardware Devices<\/strong> (e.g. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Roland_JD-XA\">Roland JD-XA)<\/a><\/li>\n<li><strong>Software\u00a0<\/strong><b>applications<\/b> (or plugins) with a powerful GUI (e.g. <a href=\"https:\/\/www.apple.com\/mac\/garageband\/\">Garage Band<\/a>)<\/li>\n<li><strong>Audio Programming Languages<\/strong> (e.g. <a href=\"https:\/\/sonic-pi.net\/\">Sonic PI<\/a>, <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_audio_programming_languages\">see Wikipedia for a complete list)<\/a><\/li>\n<li><strong>Web Browser based Synthesizers<\/strong><\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\">To play the software instruments a <strong>MIDI keyboard<\/strong> is usually connected with a MIDI cable to the computer which runs the software. The <strong>WebMIDI<\/strong> <strong>API<\/strong> brings all the functionality of MIDI to the browser so that it is possible to provide many instruments without installing any software &#8211; I think this is pretty cool! Examples can be found at<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li><a href=\"https:\/\/synth.playtronica.com\/.\">https:\/\/synth.playtronica.com\/.<\/a><\/li>\n<li><a href=\"https:\/\/www.webaudiomodules.org\/\">https:\/\/www.webaudiomodules.org\/<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>The Evolution of Synthesizers<\/h2>\n<p>The first <strong>simple synthesizers<\/strong> were based on generators for shaped sounds which were adjusted by <em><strong>filters <\/strong><\/em>and <em><strong>envelopes<\/strong><\/em> were used to make the sound more dynamic. The next evolution were <strong>FM Synthesizers<\/strong> which were based on the concept of <em><strong>modulating different frequencies<\/strong><\/em> to generate interesting sounds.<\/p>\n<p>Finally the <strong>concept of sampling<\/strong> was added to make it possible to add the recorded sound of real instruments on one hand or basically any type of sound on the other hand in order to generate music.<\/p>\n<h2>DSP Libraries<\/h2>\n<p>Naturally the libraries depend on your target programming language. Because I wanted to have the best flexibility and performance\u00a0 I concentrated on C++ based Digital Signal Processing (DSP) libraries.\u00a0 Here is my <strong>curated list<\/strong>:<a href=\"https:\/\/github.com\/micknoise\/Maximilian\"><\/a><\/p>\n<ul>\n<li><a href=\"https:\/\/ccrma.stanford.edu\/software\/stk\/\">The Synthesis ToolKit in C++ \u00a0STK<\/a> is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language. STK was designed to facilitate rapid development of music synthesis and audio processing software, with an emphasis on cross-platform functionality, realtime control, ease of use, and educational example code.instruments. This library is lightweight and portable so it should be useful for our purpose.<\/li>\n<li><a href=\"https:\/\/github.com\/micknoise\/Maximilian\">Maximilan<\/a>: is an open source, MIT licensed C++ audio synthesis library. It\u2019s designed to be cross platform and simple to use. The syntax and program structure are based on the popular \u2018Processing\u2019 environment. Maximilian provides standard waveforms, envelopes, sample playback, resonant filters, and delay lines. In addition, equal power stereo, quadraphonic and 8-channel ambisonic support is included. There\u2019s also Granular synthesisers with time stretching, FFTs and some Music Information Retrieval stuff.<\/li>\n<li><a href=\"http:\/\/w2.mat.ucsb.edu\/gamma\/\">gamma<\/a>\u00a0is a cross-platform, C++ library for doing generic synthesis and filtering of signals. It is oriented towards real-time sound and graphics applications, but is equally useful for non-real-time tasks. Gamma is designed to be &#8220;light-footed&#8221; in terms of memory and processing making it highly suitable for plug-in development or embedding in other C++ projects.<\/li>\n<li><a href=\"https:\/\/github.com\/garygru\/yummyDSP\">yummyDSP<\/a> is a simple digital sound processing library <em>for the Arduino\u00a0<\/em> which can generate sounds. This library however is very limited in its functionality.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.musicdsp.org\/en\/latest\/\">Musicdsp<\/a>.org <span>\u00a0provides a collection of algorithms, thoughts and snippets, gathered for the music DSP community. <\/span>If you target to develop some platform independent plugins you might also consider the following:<\/p>\n<ul><\/ul>\n<ul>\n<li><a href=\"https:\/\/juce.com\/\">JUCE<\/a><\/li>\n<li><a href=\"http:\/\/hise.audio\/hise_api\/\">HISE<\/a><\/li>\n<\/ul>\n<h2>MIDI Arduino Libraries<\/h2>\n<p>Some of the described libraries provide\u00a0 MIDI functionality. Unfortunately this will not work in Arduino environment. Here is an overview of the relevant <strong>Arduino<\/strong> <strong>libraries<\/strong> which are available to build the solution:<\/p>\n<ul>\n<li>Fortunately there exists already a <a href=\"https:\/\/playground.arduino.cc\/Main\/MIDILibrary\/\">Midi library <\/a>for the Arduino which helps in reading the MIDI input and an implementation<\/li>\n<li><a href=\"https:\/\/github.com\/lathoub\/Arduino-AppleMIDI-Library\">RTP-MIDI<\/a>\u00a0provides Midi functionality over the network..<\/li>\n<\/ul>\n<h2>Playing Sound<\/h2>\n<p>Most of the described libraries are issuing the output with the help of an abstraction layer that is supported by multiple platforms (e.g\u00a0 <span>RTAudio, PortAudio etc). This will be perfect for the <strong>Raspberry PI<\/strong> &#8211; Unfortunately none of these will be working on the <strong>ESP32<\/strong> and the major challenge is to provide a way to use the the available I2S interface:<\/span><\/p>\n<p>In one of my earlier posts I gave an <a href=\"https:\/\/www.pschatzmann.ch\/home\/2020\/03\/19\/sound-from-a-esp32-microcontroller\/\">overview of how to play music on a ESP32. <\/a>The ESP32 can generate sound with the help of the <a href=\"https:\/\/docs.espressif.com\/projects\/esp-idf\/en\/latest\/esp32\/api-reference\/peripherals\/i2s.html\">I2S interface which is described in the ESP32 reference.<\/a> So all we need to to is feed the I2S interface with sound data!<\/p>\n<p>The sound data will be generated by the STK library based on the MIDI input. So in a nutshell this sounds to be pretty straight forward!<\/p>\n<h2>Next Steps<\/h2>\n<p>In my next posts I plan to provide an simple implementation of a Synthesizer for the <strong>Raspberry PI Zero<\/strong> and the <strong>ESP32<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overview I was playing with the idea to implement a simple Synthesizer for the ESP32.which would play different instruments. The ESP32 should have enough power to generate interesting sounds. The limitation however is on the memory.\u00a0 So any approach which relies on sampled data and big sound buffers will just [&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":[26],"class_list":["post-1378","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-machine-sound","tag-synthesizer"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Implementing a Synthesizer for the Raspberry PI and the ESP32 - Introduction - 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\/2020\/05\/22\/synthesizer-for-the-esp32\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Implementing a Synthesizer for the Raspberry PI and the ESP32 - Introduction - Phil Schatzmann\" \/>\n<meta property=\"og:description\" content=\"Overview I was playing with the idea to implement a simple Synthesizer for the ESP32.which would play different instruments. The ESP32 should have enough power to generate interesting sounds. The limitation however is on the memory.\u00a0 So any approach which relies on sampled data and big sound buffers will just [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/\" \/>\n<meta property=\"og:site_name\" content=\"Phil Schatzmann\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T16:55:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-07T18:37:03+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\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/\"},\"author\":{\"name\":\"pschatzmann\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\"},\"headline\":\"Implementing a Synthesizer for the Raspberry PI and the ESP32 &#8211; Introduction\",\"datePublished\":\"2020-05-22T16:55:30+00:00\",\"dateModified\":\"2021-12-07T18:37:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/\"},\"wordCount\":807,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#\\\/schema\\\/person\\\/73a53638a4e34e8373405fd737dac9b1\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/vintage-synthesizer-1601941_960_720.jpg\",\"keywords\":[\"Synthesizer\"],\"articleSection\":[\"Arduino\",\"Machine Sound\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/\",\"url\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/\",\"name\":\"Implementing a Synthesizer for the Raspberry PI and the ESP32 - Introduction - Phil Schatzmann\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.pschatzmann.ch\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/vintage-synthesizer-1601941_960_720.jpg\",\"datePublished\":\"2020-05-22T16:55:30+00:00\",\"dateModified\":\"2021-12-07T18:37:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/#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\\\/2020\\\/05\\\/22\\\/synthesizer-for-the-esp32\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.pschatzmann.ch\\\/home\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Implementing a Synthesizer for the Raspberry PI and the ESP32 &#8211; Introduction\"}]},{\"@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":"Implementing a Synthesizer for the Raspberry PI and the ESP32 - Introduction - 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\/2020\/05\/22\/synthesizer-for-the-esp32\/","og_locale":"en_US","og_type":"article","og_title":"Implementing a Synthesizer for the Raspberry PI and the ESP32 - Introduction - Phil Schatzmann","og_description":"Overview I was playing with the idea to implement a simple Synthesizer for the ESP32.which would play different instruments. The ESP32 should have enough power to generate interesting sounds. The limitation however is on the memory.\u00a0 So any approach which relies on sampled data and big sound buffers will just [&hellip;]","og_url":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/","og_site_name":"Phil Schatzmann","article_published_time":"2020-05-22T16:55:30+00:00","article_modified_time":"2021-12-07T18:37:03+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\/2020\/05\/22\/synthesizer-for-the-esp32\/#article","isPartOf":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/"},"author":{"name":"pschatzmann","@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1"},"headline":"Implementing a Synthesizer for the Raspberry PI and the ESP32 &#8211; Introduction","datePublished":"2020-05-22T16:55:30+00:00","dateModified":"2021-12-07T18:37:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/"},"wordCount":807,"commentCount":3,"publisher":{"@id":"https:\/\/www.pschatzmann.ch\/home\/#\/schema\/person\/73a53638a4e34e8373405fd737dac9b1"},"image":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/#primaryimage"},"thumbnailUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2020\/05\/vintage-synthesizer-1601941_960_720.jpg","keywords":["Synthesizer"],"articleSection":["Arduino","Machine Sound"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/","url":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/","name":"Implementing a Synthesizer for the Raspberry PI and the ESP32 - Introduction - Phil Schatzmann","isPartOf":{"@id":"https:\/\/www.pschatzmann.ch\/home\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/#primaryimage"},"image":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/#primaryimage"},"thumbnailUrl":"https:\/\/www.pschatzmann.ch\/wp-content\/uploads\/2020\/05\/vintage-synthesizer-1601941_960_720.jpg","datePublished":"2020-05-22T16:55:30+00:00","dateModified":"2021-12-07T18:37:03+00:00","breadcrumb":{"@id":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.pschatzmann.ch\/home\/2020\/05\/22\/synthesizer-for-the-esp32\/#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\/2020\/05\/22\/synthesizer-for-the-esp32\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pschatzmann.ch\/home\/"},{"@type":"ListItem","position":2,"name":"Implementing a Synthesizer for the Raspberry PI and the ESP32 &#8211; Introduction"}]},{"@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\/1378","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=1378"}],"version-history":[{"count":55,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts\/1378\/revisions"}],"predecessor-version":[{"id":3943,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/posts\/1378\/revisions\/3943"}],"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=1378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/categories?post=1378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pschatzmann.ch\/home\/wp-json\/wp\/v2\/tags?post=1378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}