
{"id":1981,"date":"2026-07-15T10:00:00","date_gmt":"2026-07-15T08:00:00","guid":{"rendered":"https:\/\/www.pcjv.de\/?p=1981"},"modified":"2026-07-24T17:27:41","modified_gmt":"2026-07-24T15:27:41","slug":"audio-on-linux-in-go","status":"publish","type":"post","link":"https:\/\/www.pcjv.de\/?p=1981","title":{"rendered":"Audio on Linux, in Go"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The VST years were a Windows story. My current audio experiments live somewhere else entirely: on Linux, inside the PipeWire graph, written in Go \u2014 and the parallels to the old days are almost comically direct.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">PipeWire tools<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/CWBudde\/pw_convoverb\" target=\"_blank\" rel=\"noopener\">pw_convoverb<\/a> is a convolution reverb for PipeWire. Convolution has followed me since the very first HRTF 3D plugin and the crosstalk cancellation experiments \u2014 the same mathematics, now running as a node in a modern audio graph instead of a plugin in a 2005 host. <a href=\"https:\/\/github.com\/CWBudde\/pw-comp\" target=\"_blank\" rel=\"noopener\">pw-comp<\/a> is a compressor with a soft knee and a small TUI control interface; its ancestors are the dynamics plugins of the open source project, and the Behringer Composer measurements that once taught me what compressor curves really look like.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quadraphonic time travel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">My favorite recent rabbit hole: <a href=\"https:\/\/github.com\/CWBudde\/go-sq-tool\" target=\"_blank\" rel=\"noopener\">go-sq-tool<\/a>, a standalone decoder and encoder for SQ \u2014 the matrix quadraphonic format of 1970s vinyl. Two decades ago I wrote Quadropolis and Tina-Turner, plugins that simulated quadraphonic sound over headphones and four speakers. Now I decode the real historical format. Some interests simply refuse to die.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">And the VST thread?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Still alive too: I have been working on <a href=\"https:\/\/github.com\/CWBudde\/vst3go\" target=\"_blank\" rel=\"noopener\">vst3go<\/a>, a VST3 plugin framework in Go \u2014 closing a loop that started with Toadstunnel. Add a text-to-speech engine in pure Go (<a href=\"https:\/\/github.com\/CWBudde\/go-pocket-tts\" target=\"_blank\" rel=\"noopener\">go-pocket-tts<\/a> \u2014 safetensors inference without Python or ONNX Runtime) and a nature-inspired optimizer (<a href=\"https:\/\/github.com\/CWBudde\/mayfly\" target=\"_blank\" rel=\"noopener\">mayfly<\/a>, an heir to my old differential evolution library), and the drawer of small sharp tools looks much like it did in 2008. Only the operating system changed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The VST years were a Windows story. My current audio experiments live somewhere else entirely: on Linux, inside the PipeWire graph, written in Go \u2014 and the parallels to the old days are almost comically direct.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,41],"tags":[],"class_list":["post-1981","post","type-post","status-publish","format-standard","hentry","category-dsp","category-go"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Audio on Linux, in Go - Christian&#039;s private site<\/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.pcjv.de\/?p=1981\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Christian\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1981#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1981\"},\"author\":{\"name\":\"Christian\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#\\\/schema\\\/person\\\/79b654f8c2fb5bf9405ccc4cb1c11880\"},\"headline\":\"Audio on Linux, in Go\",\"datePublished\":\"2026-07-15T08:00:00+00:00\",\"dateModified\":\"2026-07-24T15:27:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1981\"},\"wordCount\":253,\"articleSection\":[\"DSP\",\"Go\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1981\",\"url\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1981\",\"name\":\"Audio on Linux, in Go - Christian&#039;s private site\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#website\"},\"datePublished\":\"2026-07-15T08:00:00+00:00\",\"dateModified\":\"2026-07-24T15:27:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#\\\/schema\\\/person\\\/79b654f8c2fb5bf9405ccc4cb1c11880\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1981#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.pcjv.de\\\/?p=1981\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/?p=1981#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.pcjv.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Audio on Linux, in Go\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#website\",\"url\":\"https:\\\/\\\/www.pcjv.de\\\/\",\"name\":\"Christian&#039;s private site\",\"description\":\"Private site of Christian-W. Budde\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.pcjv.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.pcjv.de\\\/#\\\/schema\\\/person\\\/79b654f8c2fb5bf9405ccc4cb1c11880\",\"name\":\"Christian\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g\",\"caption\":\"Christian\"},\"sameAs\":[\"http:\\\/\\\/www.savioursofsoul.de\\\/Christian\"],\"url\":\"https:\\\/\\\/www.pcjv.de\\\/?author=3\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Audio on Linux, in Go - Christian&#039;s private site","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.pcjv.de\/?p=1981","twitter_misc":{"Written by":"Christian","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pcjv.de\/?p=1981#article","isPartOf":{"@id":"https:\/\/www.pcjv.de\/?p=1981"},"author":{"name":"Christian","@id":"https:\/\/www.pcjv.de\/#\/schema\/person\/79b654f8c2fb5bf9405ccc4cb1c11880"},"headline":"Audio on Linux, in Go","datePublished":"2026-07-15T08:00:00+00:00","dateModified":"2026-07-24T15:27:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pcjv.de\/?p=1981"},"wordCount":253,"articleSection":["DSP","Go"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.pcjv.de\/?p=1981","url":"https:\/\/www.pcjv.de\/?p=1981","name":"Audio on Linux, in Go - Christian&#039;s private site","isPartOf":{"@id":"https:\/\/www.pcjv.de\/#website"},"datePublished":"2026-07-15T08:00:00+00:00","dateModified":"2026-07-24T15:27:41+00:00","author":{"@id":"https:\/\/www.pcjv.de\/#\/schema\/person\/79b654f8c2fb5bf9405ccc4cb1c11880"},"breadcrumb":{"@id":"https:\/\/www.pcjv.de\/?p=1981#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pcjv.de\/?p=1981"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.pcjv.de\/?p=1981#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pcjv.de\/"},{"@type":"ListItem","position":2,"name":"Audio on Linux, in Go"}]},{"@type":"WebSite","@id":"https:\/\/www.pcjv.de\/#website","url":"https:\/\/www.pcjv.de\/","name":"Christian&#039;s private site","description":"Private site of Christian-W. Budde","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pcjv.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.pcjv.de\/#\/schema\/person\/79b654f8c2fb5bf9405ccc4cb1c11880","name":"Christian","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/009d545df1a458e74ec172fa5dc19428c1144c2ee8f1ec82d94c3b28f12a0c14?s=96&d=mm&r=g","caption":"Christian"},"sameAs":["http:\/\/www.savioursofsoul.de\/Christian"],"url":"https:\/\/www.pcjv.de\/?author=3"}]}},"_links":{"self":[{"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/posts\/1981","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1981"}],"version-history":[{"count":1,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/posts\/1981\/revisions"}],"predecessor-version":[{"id":2112,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=\/wp\/v2\/posts\/1981\/revisions\/2112"}],"wp:attachment":[{"href":"https:\/\/www.pcjv.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pcjv.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}