<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://maxgraf.space/feed.xml" rel="self" type="application/atom+xml" /><link href="https://maxgraf.space/" rel="alternate" type="text/html" /><updated>2026-08-06T10:36:39+00:00</updated><id>https://maxgraf.space/feed.xml</id><title type="html">Max Graf</title><subtitle>Max Graf — Machine Learning Engineer on the CORPUS project and PhD in AI &amp; Music from the Centre for Digital Music, Queen Mary University of London. XR musical instruments, hand tracking, interactive machine learning, and audio ML.</subtitle><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><entry><title type="html">SA3 Variations — On-Device Sample Variations</title><link href="https://maxgraf.space/projects/sa3-variations/" rel="alternate" type="text/html" title="SA3 Variations — On-Device Sample Variations" /><published>2026-05-29T12:00:00+00:00</published><updated>2026-05-29T12:00:00+00:00</updated><id>https://maxgraf.space/projects/sa3-variations</id><content type="html" xml:base="https://maxgraf.space/projects/sa3-variations/"><![CDATA[<p><strong>SA3 Variations</strong> generates Splice-style sample variations entirely on your machine. Drop in a one-shot or a loop and it produces a series of musical and timbral variations. Listen through the outputs, then drag the ones you like straight into your DAW. A batch takes around 10 seconds, runs fully on-device, and nothing is ever uploaded.</p>

<p>It ships as a standalone app, a VST3, and an AU plugin.</p>

<div style="display: flex; flex-direction: column; align-items: center; margin-bottom: 36px;">
  <img src="/assets/images/sa3-variations.png" style="width: 100%; max-width: 340px; margin-bottom: 12px;" alt="SA3 Variations plugin interface" />
</div>

<h2 id="built-to-live-inside-a-plugin">Built to live inside a plugin</h2>

<p>SA3 Variations is built on <a href="https://stability.ai/news-updates/meet-stable-audio-3-the-model-family-built-for-artistic-experimentation-with-open-weight-models" target="_blank">Stable Audio 3</a>. To get it running inside a JUCE plugin, I ported the inference code to <strong>MLX in C++</strong>, with bit-exact outputs against the Python implementation, so it could be embedded directly in the plugin rather than shelling out to a separate Python process.</p>

<p>Variations is just one application of that stack. The same C++ inference pipeline, MLX bindings, and pre-converted models work for any similar plugin you might want to build.</p>

<h2 id="for-audio-developers">For audio developers</h2>

<p>If you’re an audio developer curious about using this kind of approach in your own JUCE project, everything is open source and ready to build on:</p>

<ul>
  <li>the C++ inference pipeline</li>
  <li>the MLX bindings</li>
  <li>pre-converted models on Hugging Face</li>
</ul>

<p>Fork it, extend it, and build your own apps on top of SA3 in JUCE.</p>

<h2 id="links">Links</h2>

<ul>
  <li><a href="https://github.com/maxgraf96/stable-audio-3/tree/sa3-variations" target="_blank">Code</a></li>
  <li><a href="https://github.com/maxgraf96/stable-audio-3/releases" target="_blank">Releases</a></li>
  <li><a href="https://github.com/maxgraf96/stable-audio-3/blob/sa3-variations/plugin/RELEASE.md#end-user-install-steps" target="_blank">App / plugin install guide</a></li>
  <li><a href="https://huggingface.co/maxgraf/sa3-variations-models" target="_blank">Converted models</a></li>
</ul>

<h2 id="whats-next">What’s next</h2>

<p>Breaking open the model for some more fine-grained, musically interesting edits.</p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[SA3 Variations generates Splice-style sample variations entirely on your machine. Drop in a one-shot or a loop and it produces a series of musical and timbral variations. Listen through the outputs, then drag the ones you like straight into your DAW. A batch takes around 10 seconds, runs fully on-device, and nothing is ever uploaded.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/sa3-variations.png" /><media:content medium="image" url="https://maxgraf.space/assets/images/sa3-variations.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Stable Audio Remix — Audio-to-Audio in the Browser</title><link href="https://maxgraf.space/projects/stable-audio-remix/" rel="alternate" type="text/html" title="Stable Audio Remix — Audio-to-Audio in the Browser" /><published>2026-05-23T12:00:00+00:00</published><updated>2026-05-23T12:00:00+00:00</updated><id>https://maxgraf.space/projects/stable-audio-remix</id><content type="html" xml:base="https://maxgraf.space/projects/stable-audio-remix/"><![CDATA[<p><strong>Stable Audio Remix</strong> is a small web app built around <a href="https://stability.ai/news-updates/meet-stable-audio-3-the-model-family-built-for-artistic-experimentation-with-open-weight-models" target="_blank">Stable Audio 3</a>’s audio-to-audio mode. You drop in an existing track, describe the style you’d like instead, and it returns a version that holds onto the original’s timing and shape while moving it toward the new direction. There’s an A/B player built in so you can flip between the source and the remix and compare them easily.</p>

<p>You can try it live at <a href="https://remixab.maxgraf.space/" target="_blank">remixab.maxgraf.space</a>.</p>

<div style="display: flex; flex-direction: column; align-items: center; margin-bottom: 36px;">
  <img src="/assets/images/remixab.png" style="max-width: 85%; margin-bottom: 12px;" alt="Stable Audio Remix interface" />
</div>

<p>The new Stable Audio 3 release is genuinely interesting, and audio-to-audio is the mode I got most drawn into. Rather than generating from scratch, it takes an existing track plus a text direction and edits the original by a controllable amount. The app uses <strong>Stable Audio 3 medium</strong> by default.</p>

<h2 id="keeping-the-vocals">Keeping the vocals</h2>

<p>Stable Audio’s vocals tend to come out weird — the model seems to have been trained mostly on instrumental material, so getting reliably good vocals out of it is hard. To work around this, the app runs source separation in the browser (locally) before anything goes to the GPU, strips the vocals out, sends only the instrumental off to be remixed, and then layers the original vocals back over the result.</p>

<p>The source separation runs entirely on your machine through my own <code class="language-plaintext highlighter-rouge">demucs.onnx</code> port to WebGPU — the same engine behind <a href="/projects/demucs-webgpu/">Demucs WebGPU</a>.</p>

<h2 id="locking-tempo-and-key">Locking tempo and key</h2>

<p>The model has no inherent sense of tempo or key, so a remix can easily drift to a different BPM or land in a different key than the source. To keep it anchored, a small analysis step runs the moment you drop a file, detecting the BPM and key, and both get appended to the prompt. Without that, the remix often ends up at a different tempo or in a different key than the original.</p>

<h2 id="try-it">Try it</h2>

<p>Drop in a track, describe how you’d like it to sound, and use the A/B player to compare the original against the remix. It’s a fun thing to play around with — pick something you’d like to hear in a different style and see what comes back.</p>

<p><a href="https://remixab.maxgraf.space/" target="_blank">Open Stable Audio Remix</a></p>

<h2 id="whats-next">What’s next</h2>

<p>A version that runs fully on your own laptop, with no GPU round-trip at all.</p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[Stable Audio Remix is a small web app built around Stable Audio 3’s audio-to-audio mode. You drop in an existing track, describe the style you’d like instead, and it returns a version that holds onto the original’s timing and shape while moving it toward the new direction. There’s an A/B player built in so you can flip between the source and the remix and compare them easily.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/remixab.png" /><media:content medium="image" url="https://maxgraf.space/assets/images/remixab.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">WavNav — Visual Audio Sample Explorer</title><link href="https://maxgraf.space/projects/wavnav/" rel="alternate" type="text/html" title="WavNav — Visual Audio Sample Explorer" /><published>2026-01-31T12:00:00+00:00</published><updated>2026-01-31T12:00:00+00:00</updated><id>https://maxgraf.space/projects/wavnav</id><content type="html" xml:base="https://maxgraf.space/projects/wavnav/"><![CDATA[<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "WavNav",
  "applicationCategory": "MultimediaApplication",
  "operatingSystem": ["macOS", "Windows"],
  "url": "https://maxgraf.space/projects/wavnav/",
  "sameAs": "https://maxgraf96.gumroad.com/l/wavnav",
  "image": "https://maxgraf.space/assets/images/wavnav-main.webp",
  "description": "A visual audio sample explorer that maps your sample library onto a 2D space by sound, with semantic search, key and BPM filters, and local-only processing.",
  "creator": { "@id": "https://maxgraf.space/#person" }
}
</script>

<p><strong>WavNav</strong> is an audio sample explorer built to make large sample libraries easier to navigate. Instead of digging through folders and filenames, it maps sounds into a 2D visual space where similar samples sit near each other, so browsing becomes much more like exploring a map than managing files.</p>

<p>If you want the full product overview, check out the <a href="/wavnav/">WavNav product page</a> first. It is much more in depth than this post and covers the app in its proper context.</p>

<p>The project sits at the intersection of audio analysis, machine learning, and music production tooling. The current version focuses on fast local analysis, visual search, and practical studio workflows for producers working with big libraries.</p>

<style>
.lazy-video {
  position: relative;
  display: block;
  cursor: pointer;
  overflow: hidden;
  border-radius: 4px;
  background: #000;
  border: 1px solid var(--rule);
  margin: 0 0 32px;
}
.lazy-video img { width: 100%; height: auto; display: block; }
.lazy-video::after {
  content: "";
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0) 55%, rgba(0,0,0,0.25));
  pointer-events: none;
}
.lazy-video__play {
  position: absolute; top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 80px; height: 80px;
  border-radius: 999px;
  border: 0;
  background: rgba(0,0,0,0.55);
  color: #fff;
  cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background .15s ease, transform .15s ease;
  z-index: 1;
}
.lazy-video:hover .lazy-video__play { background: rgba(0,0,0,0.85); transform: translate(-50%, -50%) scale(1.05); }
.lazy-video__play svg { width: 32px; height: 32px; fill: currentColor; }
.lazy-video__caption {
  position: absolute; left: 14px; bottom: 12px;
  color: rgba(255,255,255,0.85);
  font-family: var(--font-mono);
  font-size: 0.7rem;
  letter-spacing: 0.04em;
  pointer-events: none;
  z-index: 1;
}
.demo-figure { margin: 0 0 32px; }
.demo-figure .lazy-video { margin: 0 0 10px; }
.demo-figure__caption {
  font-size: 0.85rem;
  color: var(--ink-softer);
  font-style: italic;
  line-height: 1.5;
}
</style>

<figure class="demo-figure">
  <div class="lazy-video" id="wavnav-demo">
    <img src="/assets/images/wavnav-main.webp" alt="WavNav demo preview" data-no-zoom="" />
    <span class="lazy-video__caption">Demo · click to play</span>
    <button type="button" class="lazy-video__play" aria-label="Play WavNav demo">
      <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M8 5v14l11-7z" /></svg>
    </button>
  </div>
  <figcaption class="demo-figure__caption">A walkthrough of WavNav — browsing an audio sample library as a 2D map, previewing samples on hover, and finding similar sounds through semantic search.</figcaption>
</figure>

<script>
(function () {
  var el = document.getElementById('wavnav-demo');
  if (!el) return;
  el.addEventListener('click', function () {
    var v = document.createElement('video');
    v.src = '/assets/videos/wavnavdemo.mp4';
    v.controls = true;
    v.autoplay = true;
    v.playsInline = true;
    v.preload = 'auto';
    v.style.cssText = 'display:block;width:100%;height:auto;border-radius:4px;background:#000;border:1px solid var(--rule);margin:0 0 32px;';
    el.replaceWith(v);
  }, { once: true });
})();
</script>

<h2 id="what-it-does">What it does</h2>

<ul>
  <li><strong>Visual browser</strong>: samples appear as points on a map, with similar sounds clustering together.</li>
  <li><strong>Semantic search</strong>: search for sounds using text prompts like <code class="language-plaintext highlighter-rouge">"snare"</code>, <code class="language-plaintext highlighter-rouge">"bright pluck"</code>, or <code class="language-plaintext highlighter-rouge">"dark pad"</code>.</li>
  <li><strong>Search by sound</strong>: drop a sample into the app to find similar material in your library.</li>
  <li><strong>Key and BPM filters</strong>: narrow results by musical key, tempo, or both.</li>
  <li><strong>Folder management</strong>: add multiple sample folders and toggle them on or off without rebuilding everything from scratch.</li>
  <li><strong>Local-first workflow</strong>: machine learning models and audio processing run on your own machine, and the site copy describes the product as fully local with no cloud uploads or data collection after download.</li>
</ul>

<h2 id="workflow">Workflow</h2>

<p>WavNav is built around quick sample discovery:</p>

<ul>
  <li>pan and zoom around the map to explore dense libraries visually</li>
  <li>hover to preview sounds</li>
  <li>click or inspect samples while searching</li>
  <li>copy file paths directly for use in a DAW</li>
  <li>open files in Finder from the app</li>
  <li>save folders and settings between sessions</li>
  <li>use right-click similarity search to find nearby alternatives</li>
</ul>

<h2 id="performance-and-scale">Performance and scale</h2>

<p>WavNav is made for large-library use:</p>

<ul>
  <li>built for <strong>50,000+ samples</strong></li>
  <li>about <strong>~1 minute</strong> for a first load of a 50k library</li>
  <li>about <strong>&lt;3s</strong> startup from cache</li>
  <li><strong>60fps</strong> navigation target</li>
  <li>GPU-accelerated rendering via <strong>OpenGL/Metal</strong></li>
  <li>clustering and map-based exploration using audio embeddings and UMAP-style visualisation</li>
</ul>

<h2 id="platform-status">Platform status</h2>

<ul>
  <li><strong>macOS</strong>: supported on Intel and Apple Silicon, with a stated minimum of <strong>macOS 13.0</strong></li>
  <li><strong>Windows</strong>: supported in <strong>beta</strong>, <strong>x86 only</strong>, with a minimum of <strong>Windows 10 version 1803</strong></li>
</ul>

<div><div style="display: flex;
    flex-direction:column;
    align-items: center;
    margin-bottom: 36px;
">
    <img src="/assets/images/wavnav-main.webp" style="max-width: 60%; margin-bottom: 12px;" alt="Screenshot" />
    <span style="color: gray;">Screenshot</span>
</div></div>

<p><a href="/wavnav/">Product page</a> •
<a href="/wavnav/features/">Features</a> •
<a href="/wavnav/screenshots/">Screenshots</a> •
<a href="https://maxgraf96.gumroad.com/l/wavnav" target="_blank">Buy WavNav</a></p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/wavnav-main.webp" /><media:content medium="image" url="https://maxgraf.space/assets/images/wavnav-main.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Demucs WebGPU</title><link href="https://maxgraf.space/projects/demucs-webgpu/" rel="alternate" type="text/html" title="Demucs WebGPU" /><published>2025-10-23T12:00:00+00:00</published><updated>2025-10-23T12:00:00+00:00</updated><id>https://maxgraf.space/projects/demucs-webgpu</id><content type="html" xml:base="https://maxgraf.space/projects/demucs-webgpu/"><![CDATA[<p><strong>Demucs WebGPU</strong> is a browser-focused extension of <a href="https://github.com/sevagh/demucs.onnx" target="_blank">sevagh’s <code class="language-plaintext highlighter-rouge">demucs.onnx</code></a>, which brings the Demucs v4 hybrid transformer into an ONNX-based inference pipeline for music source separation.</p>

<p>As part of my work on <a href="https://corpus.music/" target="_blank">CORPUS</a>, I wanted to see how far this could be pushed directly in the browser, and specifically whether <strong>WebGPU</strong> could make a serious difference. The answer was yes: with the right changes, Demucs can run surprisingly efficiently client-side and feel genuinely fast.</p>

<h2 id="what-i-changed">What I changed</h2>

<p>The goal was simply to adapt the original project and extend it for practical WebGPU execution on the web.</p>

<p>That included:</p>

<ul>
  <li>pushing inference through <strong>ONNX Runtime Web</strong> with the <strong>WebGPU</strong> execution provider</li>
  <li>building the surrounding DSP path around it with <strong>WASM</strong></li>
  <li>keeping the full separation flow in-browser, from loading audio to rendering separated stems</li>
  <li>adding a simple interactive demo interface with waveform views, transport controls, stem muting/soloing, and downloads</li>
</ul>

<p>I also added some practical web-facing work around model loading and asset handling so the whole experience feels more like a usable demo than a raw port.</p>

<h2 id="why-it-was-interesting">Why it was interesting</h2>

<p>What I liked about this project was that it makes a fairly strong point very quickly: heavyweight music ML models do not always need to stay trapped in native desktop code or server-side inference setups.</p>

<p>With WebGPU, the browser becomes a viable place to run this kind of model at useful speed. That opens up interesting possibilities for lightweight music tools, interactive demos, and more accessible deployment of audio ML systems. For instance, this exact system powers real-time source separation in <a href="/projects/reef-dj/">Reef DJ</a>.</p>

<h2 id="demo">Demo</h2>

<p>You can try the live demo here:</p>

<p><a href="https://ai.pipeline.corpus.music/local_realtime_demucs/src_wasm/demo.html" target="_blank">Demucs WebGPU demo</a></p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[Demucs WebGPU is a browser-focused extension of sevagh’s demucs.onnx, which brings the Demucs v4 hybrid transformer into an ONNX-based inference pipeline for music source separation.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/demucs-onnx.png" /><media:content medium="image" url="https://maxgraf.space/assets/images/demucs-onnx.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Music Analysis Pipeline</title><link href="https://maxgraf.space/projects/music-analysis-pipeline/" rel="alternate" type="text/html" title="Music Analysis Pipeline" /><published>2025-09-30T12:00:00+00:00</published><updated>2025-09-30T12:00:00+00:00</updated><id>https://maxgraf.space/projects/music-analysis-pipeline</id><content type="html" xml:base="https://maxgraf.space/projects/music-analysis-pipeline/"><![CDATA[<p>This project is a <strong>music analysis pipeline</strong> I developed as part of my work on the <a href="https://corpus.music/" target="_blank"><strong>CORPUS</strong></a> project. Its purpose is to take incoming music audio and turn it into rich, structured metadata that can support browsing, filtering, moderation, search, and other downstream creative or editorial workflows.</p>

<p>Rather than focusing on one narrow task, the pipeline performs a broad multi-stage reading of a track. It can process folders in batch or work as an API, and it produces a unified metadata view that describes a piece of music from several angles at once.</p>

<div style="display: flex; justify-content: center; margin-bottom: 32px;">
  <img src="/assets/images/corpus-logo.svg" style="max-width: 240px;" alt="CORPUS logo" />
</div>

<h2 id="what-it-does">What it does</h2>

<p>The pipeline is designed to analyse musical audio in a way that is useful for real systems. Depending on the track, it can extract and combine:</p>

<ul>
  <li><strong>basic metadata</strong> such as title, artist, duration, file type, and sample rate</li>
  <li><strong>musical attributes</strong> such as key, mode, tempo, and tempo changes</li>
  <li><strong>stylistic descriptors</strong> such as genres, moods, instruments, and keywords</li>
  <li><strong>descriptive text</strong> that summarises the overall character of a track</li>
  <li><strong>vocal information</strong>, including whether vocals are present, lyric transcription, detected language, and singer-profile fields</li>
  <li><strong>content safety signals</strong> for lyrics and potentially sensitive material</li>
  <li><strong>non-music filtering</strong>, helping separate genuine music from speech-heavy or irrelevant uploads</li>
  <li><strong>cover-song detection</strong> signals for identifying likely matches against known material</li>
</ul>

<p>The result is a single structured representation of a track that can be consumed by other tools and interfaces.</p>

<h2 id="applications">Applications</h2>

<p>The interesting part of the project is the fact that all of these views are brought together into one coherent pipeline. That makes it possible to work with music collections in a much richer way than simple file metadata allows.</p>

<p>For example, the system can support workflows such as:</p>

<ul>
  <li>organising and indexing large music catalogues</li>
  <li>powering upload-time analysis for music platforms</li>
  <li>generating richer search and filter options</li>
  <li>preparing tracks for recommendation, discovery, or visualisation layers</li>
  <li>supporting moderation and rights-related review workflows</li>
  <li>feeding downstream interfaces that need structured musical descriptions</li>
</ul>

<p>In other words, it turns raw audio into something much more searchable, inspectable, and operationally useful.</p>

<h2 id="design-goals">Design goals</h2>

<p>From the start, I approached this as a <strong>production-minded analysis system</strong> rather than just a research prototype. That meant designing for:</p>

<ul>
  <li><strong>breadth</strong> across many kinds of musical descriptors</li>
  <li><strong>speed</strong> and batch throughput</li>
  <li><strong>reliability</strong> across multiple connected analysis stages</li>
  <li><strong>observability</strong>, so processing can be monitored and diagnosed</li>
  <li><strong>integration</strong>, both as a folder-based pipeline and as an HTTP API</li>
</ul>

<p>The pipeline can analyse whole directories of music files, return JSON outputs, and also expose the same capabilities through service endpoints for other tools to call programmatically.</p>

<h2 id="practical-output">Practical output</h2>

<p>What comes out is a fairly complete metadata package for each track. That package can include musical structure, descriptive tags, text summaries, vocal and lyric analysis, moderation signals, and auxiliary matching results.</p>

<h2 id="context">Context</h2>

<p>I developed this project through my involvement with <strong>CORPUS</strong>, where the focus is on building practical AI and music technology that can plug into larger systems and workflows.</p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[This project is a music analysis pipeline I developed as part of my work on the CORPUS project. Its purpose is to take incoming music audio and turn it into rich, structured metadata that can support browsing, filtering, moderation, search, and other downstream creative or editorial workflows.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/corpus-logo.svg" /><media:content medium="image" url="https://maxgraf.space/assets/images/corpus-logo.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Reef DJ</title><link href="https://maxgraf.space/projects/reef-dj/" rel="alternate" type="text/html" title="Reef DJ" /><published>2025-06-27T12:00:00+00:00</published><updated>2025-06-27T12:00:00+00:00</updated><id>https://maxgraf.space/projects/reef-dj</id><content type="html" xml:base="https://maxgraf.space/projects/reef-dj/"><![CDATA[<p><strong>Reef DJ</strong> is a proof-of-concept developed within CORPUS to explore a lightweight, interactive approach to AI music generation.</p>

<p>It was heavily inspired by Google’s <a href="https://lnkd.in/dVTFuYmx" target="_blank">MusicFX DJ</a>. The point was to see whether a similar kind of live, prompt-driven music interaction could be built without relying on proprietary closed models. Instead of waiting for a full track to render, Reef DJ continuously generates short musical segments in real time and streams them straight into the browser for uninterrupted playback.</p>

<div style="display: flex; flex-direction: column; align-items: center; margin-bottom: 36px;">
  <img src="/assets/images/reefdj-demo.webp" style="max-width: 75%; margin-bottom: 12px;" alt="Reef DJ interface" />
</div>

<h2 id="core-idea">Core idea</h2>

<p>Reef DJ was built to show that interactive AI music systems do not necessarily need very large models or heavy cloud infrastructure to feel responsive and musically playful. In this case, the underlying generation approach was based on <strong>Meta’s MusicGen</strong>, which also made the prototype interesting from a research perspective: it suggested a path toward training and adapting this kind of system on our own material rather than treating the model as a fixed black box.</p>

<p>The project focuses on immediacy, controllability, and a clear performance metaphor.</p>

<p>At the interface level, it behaves a bit like a speculative AI DJ deck:</p>

<ul>
  <li>you build up the generation prompt from multiple weighted text ideas</li>
  <li>you shape the overall musical character with high-level controls</li>
  <li>the system keeps streaming fresh music in short successive chunks</li>
  <li>stems can be manipulated in real time while playback continues</li>
</ul>

<p>That makes the interaction feel less like submitting a prompt and more like steering a live evolving mix.</p>

<h2 id="what-it-does">What it does</h2>

<p>The prototype supports several performance-oriented features:</p>

<ul>
  <li><strong>prompt-weighted mixing</strong>, where multiple text prompts can be blended with slider-based emphasis</li>
  <li><strong>high-level creative macros</strong> for overall density, brightness, and unpredictability</li>
  <li><strong>tempo guidance</strong> through a direct BPM control</li>
  <li><strong>continuous real-time playback</strong> in the browser</li>
  <li><strong>stem-based remixing</strong>, with separate control over drums, bass, and the remaining musical material</li>
  <li><strong>rolling audio capture</strong>, allowing the most recent minute of output to be downloaded</li>
</ul>

<p>Because the system works with a rolling musical context rather than isolated one-shot outputs, it can produce longer developments and gradual stylistic shifts. Sometimes those transitions are surprisingly convincing, and sometimes they expose the model’s limits in a very audible way.</p>

<h2 id="motivation">Motivation</h2>

<p>What interested me about this project was getting a hands-on feel for the generation model itself, and also building the interaction design around it. Reef DJ asks what happens when AI music generation is treated as a responsive musical instrument rather than a series of text-to-music prompts.</p>

<p>That opens up a set of questions:</p>

<ul>
  <li>how direct can prompt-based musical control feel?</li>
  <li>what kinds of abstractions are useful in a performance setting?</li>
  <li>how can generated music remain fluid enough for mixing and intervention?</li>
  <li>what is the smallest practical setup that still feels musically responsive?</li>
</ul>

<p>Within my broader work, Reef DJ sits somewhere between creative tooling, generative music systems, and performance interface design.</p>

<h2 id="demo">Demo</h2>

<video controls="" style="width: 100%; max-width: 960px; margin-bottom: 24px;">
  <source src="/assets/images/reefdj-demo.mp4" type="video/mp4" />
  Your browser does not support the video tag.
</video>

<h2 id="context">Context</h2>

<p>This project emerged as I went further down the rabbit hole of audio-domain music generation and started building a series of practical prototypes around it. It also became a natural bridge between my earlier XR music work and my then recent role at CORPUS, being one of the first prototypes I built for the project.</p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[Reef DJ is a proof-of-concept developed within CORPUS to explore a lightweight, interactive approach to AI music generation.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/reefdj-demo.webp" /><media:content medium="image" url="https://maxgraf.space/assets/images/reefdj-demo.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Netz — XR Musical Instrument (MIDI Innovation Award 2023)</title><link href="https://maxgraf.space/projects/netz/" rel="alternate" type="text/html" title="Netz — XR Musical Instrument (MIDI Innovation Award 2023)" /><published>2024-09-05T12:00:00+00:00</published><updated>2024-09-05T12:00:00+00:00</updated><id>https://maxgraf.space/projects/netz</id><content type="html" xml:base="https://maxgraf.space/projects/netz/"><![CDATA[<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Netz",
  "alternateName": "Netz XR Musical Instrument",
  "applicationCategory": "MultimediaApplication",
  "operatingSystem": "Meta Quest (passthrough mixed reality)",
  "url": "https://maxgraf.space/projects/netz/",
  "sameAs": "https://www.netzxr.com/",
  "image": "https://maxgraf.space/assets/images/netz-header.png",
  "description": "An XR musical instrument combining a Tonnetz-inspired note layout, hand-gesture control, and an on-device synthesizer, built in Unity for Meta Quest passthrough mixed reality.",
  "creator": { "@id": "https://maxgraf.space/#person" },
  "award": "Winner, 2023 MIDI Innovation Awards — Software Prototypes and Non-Commercial Products",
  "video": "https://youtu.be/nlKgbJVJpnk"
}
</script>

<p><strong>Netz</strong> is an XR musical instrument that grew directly out of my PhD research in AI and Music. For more information check out the website at <strong><a href="https://www.netzxr.com/" target="_blank">netzxr.com</a></strong>. The instrument itself emerged from a research process focused on musical control, ergonomics, hand tracking, and expressive interaction in mixed reality.</p>

<p>Netz was co-created through a longitudinal participatory design process with a professional keyboard player and music producer. Across ten design sessions, we developed an instrument that keeps the playing area compact, anchors interaction to a tabletop for better physical grounding, and uses hand- and finger-level gestures for nuanced musical control.</p>

<h2 id="research-idea">Research idea</h2>

<p>The core design goal behind Netz was to move away from large, fatiguing mid-air XR interfaces and toward something that feels more playable, learnable, and expressive for musicians. The result is a compact mixed-reality instrument that sits on a physical surface while extending interaction into 3D space above it.</p>

<p>Its note layout is based on a custom <strong>Tonnetz-inspired</strong> structure designed for harmonic exploration. That makes it possible to play notes, scales, chords, and chord inversions through spatial patterns rather than a traditional piano keyboard layout. Additional “bridge” notes were introduced during the design process to make major and minor scale playing more practical with one hand.</p>

<div><div style="display: flex;
    flex-direction:column;
    align-items: center;
    margin-bottom: 36px;
">
    <img src="/assets/images/netz-header.png" style="max-width: 60%; margin-bottom: 12px;" alt="Screenshot" />
    <span style="color: gray;">Screenshot</span>
</div></div>

<h2 id="how-it-works">How it works</h2>

<ul>
  <li><strong>Surface-anchored mixed reality</strong>: the instrument is placed on a real table, giving the player a stable physical reference while still allowing 3D gestures above the surface.</li>
  <li><strong>Expressive note layout</strong>: the interface uses an isomorphic harmonic layout tailored for learning chord shapes, scales, and transposition.</li>
  <li><strong>Hand-pose control</strong>: different hand poses are used to distinguish between single notes, chords, and inversions.</li>
  <li><strong>Continuous expression</strong>: wrist and finger movements can shape pitch, timbre, dynamics, and portamento-like transitions between notes.</li>
  <li><strong>On-device sound engine</strong>: the prototype was built as a self-contained instrument with synthesis running directly on the XR headset.</li>
  <li><strong>Interactive machine learning</strong>: a personalised hand-pose model was integrated to reduce sensing errors and improve musical control.</li>
</ul>

<p>On the product side, the current Netz website describes <strong>full XR integration</strong>, <strong>hand tracking and gesture recognition</strong>, <strong>DAW integration</strong>, <strong>customisable gestures</strong>, <strong>MPE-style note expression</strong>, and support aimed at <strong>Meta Quest headsets</strong>, with <strong>Apple Vision Pro</strong> support planned.</p>

<h2 id="under-the-hood">Under the hood</h2>

<p>The prototype described in my thesis was implemented in <strong>Unity</strong> for <strong>Meta Quest passthrough mixed reality</strong>. It combines:</p>

<ul>
  <li>a custom tabletop XR interface</li>
  <li>collision-driven note interaction</li>
  <li>a <strong>3,7,4-Tonnetz</strong>-inspired note structure</li>
  <li>hand-tracking-based gesture control</li>
  <li>an on-device <strong>wavetable synthesizer</strong></li>
  <li><strong>MIDI MPE</strong> messaging for expressive per-note control</li>
</ul>

<p>One major theme of the project was dealing with <strong>system errors</strong> in XR hand tracking. Netz became the basis for my later work on using interactive machine learning and, beyond that, multimodal sensing to make XR musical instruments more reliable and expressive.</p>

<h2 id="outcomes">Outcomes</h2>

<p>Netz has already led to both academic and commercial outcomes.</p>

<ul>
  <li>It won the <strong>2023 MIDI Innovation Awards</strong> in the category <em>Software Prototypes and Non-Commercial Products</em>.</li>
  <li>It was showcased at <strong>NAMM 2024</strong> as part of the MIDI Innovation Awards winners.</li>
  <li>It formed the basis of multiple research publications on XR musical instruments, hand tracking, and interactive machine learning.</li>
  <li>It supported follow-on commercial exploration through <strong>Queen Mary Innovation Impact Fund</strong> support and the <strong>Innovate UK ICURe Discover</strong> and <strong>ICURe Explore</strong> programmes.</li>
</ul>

<p>The project was also featured in a <a href="https://www.reuters.com/lifestyle/will-ai-mean-death-music-or-herald-new-era-creativity-2024-02-01/" target="_blank">Reuters article</a> on AI and music.</p>

<h2 id="publications-and-links">Publications and links</h2>

<p><a href="https://www.netzxr.com/" target="_blank">Website</a> •
<a href="https://youtu.be/nlKgbJVJpnk" target="_blank">Demo video</a> •
<a href="https://qmro.qmul.ac.uk/xmlui/bitstream/handle/123456789/97727/Graf%20When%20XR%20Meets%202024%20Accepted.pdf?sequence=2" target="_blank">When XR Meets AI (AES 2024)</a> •
<a href="https://arxiv.org/abs/2307.10203" target="_blank">Combining Vision and EMG-Based Hand Tracking (CMMR 2023)</a> •
<a href="https://dl.acm.org/doi/10.1145/3611659.3617210" target="_blank">Reducing Sensing Errors in a Mixed Reality Musical Instrument (VRST 2023)</a></p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/netz-header.png" /><media:content medium="image" url="https://maxgraf.space/assets/images/netz-header.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Combining Vision and EMG-Based Hand Tracking for Extended Reality Musical Instruments</title><link href="https://maxgraf.space/projects/cmmr-semghandtracking/" rel="alternate" type="text/html" title="Combining Vision and EMG-Based Hand Tracking for Extended Reality Musical Instruments" /><published>2023-11-13T12:00:00+00:00</published><updated>2023-11-13T12:00:00+00:00</updated><id>https://maxgraf.space/projects/cmmr-semghandtracking</id><content type="html" xml:base="https://maxgraf.space/projects/cmmr-semghandtracking/"><![CDATA[<p>This paper grew out of a practical problem in my XR musical instrument research: camera-based hand tracking works well until the fingers become occluded, which is exactly when musical interaction often needs the most precision. In this project, I explored a <strong>multimodal hand tracking</strong> pipeline that combines <strong>vision-based tracking</strong> from an XR headset with <strong>surface electromyography (sEMG)</strong> from a Myo armband.</p>

<p>The key idea is simple: the headset provides the <strong>global hand position and orientation</strong>, while a deep learning model predicts <strong>finger joint rotations</strong> from forearm muscle activity. That means the system can keep estimating finger articulation even when the camera loses a clear view of the hand.</p>

<div style="display: flex; flex-direction: column; align-items: center; margin-bottom: 36px;">
  <img src="/assets/images/cmmr-pipeline.jpg" style="max-width: 60%; margin-bottom: 12px;" alt="Data preprocessing, feature extraction, and model pipeline" />
  <span style="color: gray;">Data preprocessing, feature extraction, and model pipeline</span>
</div>

<h2 id="what-the-paper-does">What the paper does</h2>

<ul>
  <li>combines <strong>Meta Quest 2</strong> hand tracking with <strong>Myo armband</strong> sEMG sensing</li>
  <li>estimates the MCP and PIP joint rotations of the <strong>index, middle, ring, and little fingers</strong></li>
  <li>uses a deep learning model to map windowed sEMG features to finger joint angles</li>
  <li>evaluates the multimodal system against the headset’s native vision tracking</li>
  <li>uses <strong>Leap Motion</strong> as a reference tracker for finger joint angle comparisons</li>
</ul>

<p>This was a <strong>proof-of-concept study</strong>, but it established an important direction for the rest of my PhD: if vision-based XR tracking breaks under self-occlusion, adding a second sensing modality can make musical interaction more reliable.</p>

<h2 id="publication-note">Publication note</h2>

<p>The version linked below under the original CMMR title is currently only publicly available as a <strong>preprint</strong>. After the conference, the organisers allowed authors to further revise and extend their papers, and a longer version of this work was later published as a Springer <strong>LNCS</strong> book chapter:</p>

<p><strong>Multimodal Hand Tracking for XR Musical Instruments Using Electromyography</strong><br />
Music and Sound Generation in the AI Era (LNCS 15236), first published online on <strong>10 October 2025</strong>.</p>

<h2 id="main-result">Main result</h2>

<p>The multimodal approach often produced <strong>lower finger-tracking error under self-occlusion</strong> than vision-only tracking. In full-view conditions, vision tracking remained competitive or better in several tasks, which is expected. The value of the approach is therefore not that sEMG replaces vision, but that it <strong>complements</strong> it when camera tracking becomes unreliable.</p>

<p>That distinction is important: the <strong>overall tracking pipeline is multimodal</strong>, but the finger-pose model itself is <strong>unimodal</strong> and uses only sEMG-derived input features.</p>

<h2 id="relevance-for-musical-xr">Relevance for musical XR</h2>

<p>For XR musical instruments, small tracking failures quickly become musical failures: wrong notes, unstable control, broken gestures, and loss of performance flow. This paper was one of my first serious attempts to address that problem at the sensing level rather than only at the interaction-design level.</p>

<p>It also directly fed into later work on:</p>

<ul>
  <li>more reliable control for <strong>Netz</strong></li>
  <li>interactive machine learning for gesture interpretation</li>
  <li>larger-scale investigations into multimodal hand tracking for XR musical performance</li>
</ul>

<h2 id="video">Video</h2>

<p>The video below shows a side-by-side comparison between the vision-only tracker and the multimodal system.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/ivl2g2t2oaI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>

<h2 id="recognition">Recognition</h2>

<p>The paper was published at <strong>CMMR 2023</strong> and was <strong>nominated for the best paper award</strong>.</p>

<h2 id="links">Links</h2>

<p><a href="https://arxiv.org/abs/2307.10203" target="_blank">CMMR paper (preprint)</a> •
<a href="https://link.springer.com/chapter/10.1007/978-3-032-02042-0_2" target="_blank">Extended LNCS book chapter</a> •
<a href="https://qmro.qmul.ac.uk/xmlui/handle/123456789/91305" target="_blank">Repository record</a> •
<a href="https://www.youtube.com/watch?v=ivl2g2t2oaI" target="_blank">Video</a> •
<a href="https://github.com/maxgraf96/sEMG-myo-unity" target="_blank">sEMG Unity code</a> •
<a href="https://github.com/maxgraf96/sEMG-myo-python" target="_blank">Python pipeline</a> •
<a href="https://github.com/maxgraf96/semg-unity-bridge" target="_blank">Unity bridge</a></p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[This paper grew out of a practical problem in my XR musical instrument research: camera-based hand tracking works well until the fingers become occluded, which is exactly when musical interaction often needs the most precision. In this project, I explored a multimodal hand tracking pipeline that combines vision-based tracking from an XR headset with surface electromyography (sEMG) from a Myo armband.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/cmmr-pipeline.jpg" /><media:content medium="image" url="https://maxgraf.space/assets/images/cmmr-pipeline.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Mixed Reality Musical Interface: Exploring Ergonomics and Adaptive Hand Pose Recognition for Gestural Control</title><link href="https://maxgraf.space/projects/nime-mrmi/" rel="alternate" type="text/html" title="Mixed Reality Musical Interface: Exploring Ergonomics and Adaptive Hand Pose Recognition for Gestural Control" /><published>2022-06-28T12:00:00+00:00</published><updated>2022-06-28T12:00:00+00:00</updated><id>https://maxgraf.space/projects/nime-mrmi</id><content type="html" xml:base="https://maxgraf.space/projects/nime-mrmi/"><![CDATA[<p>This project was my first full XR musical instrument prototype study during the PhD. It became the foundation for much of the later work in <strong>Netz</strong>, multimodal hand tracking, and interactive machine learning for musical XR.</p>

<p>The paper, published at <strong>NIME 2022</strong>, presents an early <strong>mixed reality musical interface (MRMI)</strong> built for the <strong>Microsoft HoloLens 2</strong>. The core idea was to investigate how musicians would actually respond to a virtual instrument arranged in physical space: how large it should be, how gestures should work, and whether hand-pose recognition could become musically useful rather than just technically novel.</p>

<div style="display: flex; flex-direction: column; align-items: center; margin-bottom: 36px;">
  <img src="/assets/images/nime-screengrab.webp" style="max-width: 60%; margin-bottom: 12px;" alt="Musical inteface and mapping controls captured from the XR device in mixed reality" />
  <span style="color: gray;">Musical inteface and mapping controls captured from the XR device in mixed reality</span>
</div>

<h2 id="what-i-built">What I built</h2>

<p>The prototype was implemented in <strong>Unreal Engine</strong> and used a piano-inspired octave of <strong>12 virtual musical objects</strong> floating in mixed reality. Each object could be touched, grabbed, and dragged through space.</p>

<p>The playing model split musical interaction across both hands:</p>

<ul>
  <li>the <strong>right hand</strong> triggered and manipulated notes and arpeggios</li>
  <li>the <strong>left hand</strong> controlled <strong>chord quality</strong> through recognised hand poses</li>
  <li>the whole instrument could be <strong>repositioned, rotated, and scaled</strong> with two-handed gestures</li>
</ul>

<p>Sound generation happened externally through <strong>OSC-to-MIDI</strong> control into a DAW instrument, while the XR device handled interaction, visuals, and hand tracking.</p>

<h2 id="motivation">Motivation</h2>

<p>This was not meant to be a finished instrument. It was an <strong>exploratory prototype study</strong> designed to surface design questions for future XR musical instruments:</p>

<ul>
  <li>What instrument sizes and spacings feel playable in mixed reality?</li>
  <li>Can hand poses become a meaningful control layer for harmony and expression?</li>
  <li>Is lightweight real-time pose recognition robust enough for performance?</li>
  <li>Can <strong>interactive machine learning</strong> help performers personalise the system to their own hands?</li>
</ul>

<p>To explore that last point, I integrated an <strong>IML workflow</strong> that let performers record their own hand poses, train a classifier on-device, and map those poses to different chord types. That made the instrument adaptive rather than fixed: players could reshape the control vocabulary to match their own hands and mnemonic strategies.</p>

<h2 id="study-findings">Study findings</h2>

<p>I evaluated the prototype with <strong>10 musically experienced participants</strong>. The study showed that the concept was promising, but also made several limitations very clear.</p>

<ul>
  <li><strong>Compactness matters</strong>: participants consistently wanted a smaller, more body-centred instrument.</li>
  <li><strong>Familiar musical logic helps</strong>, but a piano-like layout in mid-air does not automatically feel like a piano to play.</li>
  <li><strong>Pose-based chord control was compelling</strong> when performers could personalise it through IML.</li>
  <li><strong>Tracking reliability, lack of haptics, and limited field of view</strong> made sustained performance harder.</li>
  <li>Several participants wanted the interface anchored to a <strong>physical surface</strong> for better timing, confidence, and reduced fatigue.</li>
</ul>

<p>Those findings directly shaped the design direction of later projects, especially the move toward more compact, surface-anchored XR instruments and more robust sensing pipelines.</p>

<h2 id="legacy-in-the-phd">Legacy in the PhD</h2>

<p>This project was the starting point for several later themes in my research:</p>

<ul>
  <li>ergonomic design of XR musical instruments</li>
  <li>personalised hand-pose recognition</li>
  <li>mixed reality as more than a novelty interface</li>
  <li>the need for tactile or spatial anchoring in musical XR</li>
  <li>the gap between promising interaction ideas and reliable musical control</li>
</ul>

<p>In that sense, this NIME paper is the point where the broader research trajectory really began.</p>

<h2 id="links">Links</h2>

<p><a href="https://nime.pubpub.org/pub/g1ja2o6o/release/1?readingCollection=50ef1fd6" target="_blank">Paper</a> •
<a href="https://github.com/maxgraf96/xrmi-framework-unreal" target="_blank">Code</a> •
<a href="https://youtu.be/rVIKZdsk6ig" target="_blank">IML demo video</a></p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[This project was my first full XR musical instrument prototype study during the PhD. It became the foundation for much of the later work in Netz, multimodal hand tracking, and interactive machine learning for musical XR.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/nime-screengrab.webp" /><media:content medium="image" url="https://maxgraf.space/assets/images/nime-screengrab.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Interactive Musical Co-Creation in the Style of Pop Piano</title><link href="https://maxgraf.space/projects/interactive-pop-piano-cocreation/" rel="alternate" type="text/html" title="Interactive Musical Co-Creation in the Style of Pop Piano" /><published>2021-05-04T18:02:52+00:00</published><updated>2021-05-04T18:02:52+00:00</updated><id>https://maxgraf.space/projects/interactive-pop-piano-cocreation</id><content type="html" xml:base="https://maxgraf.space/projects/interactive-pop-piano-cocreation/"><![CDATA[<p>Computer-generated music can provide interesting insights into the structure of music and serve as inspiration for
novice and professional composers alike. I investigate the use of the Transformer-XL neural network architecture for
interactive co-creation of symbolic music in the style of pop piano. I present a modular system consisting of two
software components: backend (music generation engine) and frontend (user interaction). I evaluate the neural network
architecture and discuss the overall system with regard to higher-level issues in the field of computational creativity.
Based on musical prompts, the system can be used to iteratively generate musical pieces of several bars length. However,
it does not generalise well to new data, hindering interaction with complex user prompts.</p>

<h3 id="audio-examples">Audio examples</h3>
<p>Music generated from scratch:</p>
<div style="display: flex; flex-direction: row; align-items: center; justify-content: space-around; margin-bottom: 12px;"><div>
    <audio controls="">
      <source src="/assets/sounds/interactive-pop-piano/FS1.mp3" type="audio/ogg" />
      Your browser does not support the audio element.
    </audio>
  </div><div>
    <audio controls="">
      <source src="/assets/sounds/interactive-pop-piano/FS2.mp3" type="audio/ogg" />
      Your browser does not support the audio element.
    </audio>
  </div><div>
    <audio controls="">
      <source src="/assets/sounds/interactive-pop-piano/FS3.mp3" type="audio/ogg" />
      Your browser does not support the audio element.
    </audio>
  </div></div>
<p>Music generated from prompts:</p>
<div style="display: flex; flex-direction: row; align-items: center; justify-content: space-around; margin-bottom: 12px;"><div>
    <audio controls="">
      <source src="/assets/sounds/interactive-pop-piano/UG1.mp3" type="audio/ogg" />
      Your browser does not support the audio element.
    </audio>
  </div><div>
    <audio controls="">
      <source src="/assets/sounds/interactive-pop-piano/UG2.mp3" type="audio/ogg" />
      Your browser does not support the audio element.
    </audio>
  </div><div>
    <audio controls="">
      <source src="/assets/sounds/interactive-pop-piano/UG3.mp3" type="audio/ogg" />
      Your browser does not support the audio element.
    </audio>
  </div></div>
<div><div style="display: flex;
    flex-direction:column;
    align-items: center;
    margin-bottom: 36px;
">
    <img src="/assets/images/cc-project.png" style="max-width: 60%; margin-bottom: 12px;" alt="Screenshot" />
    <span style="color: gray;">Screenshot</span>
</div></div>

<p><a href="https://github.com/maxgraf96/pop-music-transformer-xl-python/blob/master/Report.pdf" target="_blank">Report (PDF)</a> •
<a href="https://github.com/maxgraf96/pop-music-transformer-xl-python" target="_blank">Code</a></p>]]></content><author><name>Max Graf</name><email>max.graf@qmul.ac.uk</email></author><category term="projects" /><category term="projects" /><summary type="html"><![CDATA[Computer-generated music can provide interesting insights into the structure of music and serve as inspiration for novice and professional composers alike. I investigate the use of the Transformer-XL neural network architecture for interactive co-creation of symbolic music in the style of pop piano. I present a modular system consisting of two software components: backend (music generation engine) and frontend (user interaction). I evaluate the neural network architecture and discuss the overall system with regard to higher-level issues in the field of computational creativity. Based on musical prompts, the system can be used to iteratively generate musical pieces of several bars length. However, it does not generalise well to new data, hindering interaction with complex user prompts.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://maxgraf.space/assets/images/cc-project.png" /><media:content medium="image" url="https://maxgraf.space/assets/images/cc-project.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>