diff --git a/404.html b/404.html index c26377db..a6e58be3 100644 --- a/404.html +++ b/404.html @@ -39,7 +39,7 @@
- + \ No newline at end of file diff --git a/README.html b/README.html index 692b1924..7afc1084 100644 --- a/README.html +++ b/README.html @@ -42,7 +42,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone

WEB SYNTHS

TO DO

  • SEO proof texts
  • Logos
  • save state
  • favourites
  • ranks + reviews
- + \ No newline at end of file diff --git a/ableton/index.html b/ableton/index.html index 5f47c7bf..aff9a600 100644 --- a/ableton/index.html +++ b/ableton/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Learning synths
by Ableton
Explore the fundamentals of synthesis with this interactive web-app by Ableton. Dive into the world of sound design, experiment with different parameters, and learn how to sculpt your own unique sounds with ease.
- + \ No newline at end of file diff --git a/acid-machine-2/index.html b/acid-machine-2/index.html index 0c211348..f14a7c53 100644 --- a/acid-machine-2/index.html +++ b/acid-machine-2/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
- + \ No newline at end of file diff --git a/aqwertyon/index.html b/aqwertyon/index.html index 74a1f399..617fca58 100644 --- a/aqwertyon/index.html +++ b/aqwertyon/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
aQWERTYon
by Mused lab
polyphonic
samples
aQWERTYon is an interactive web app that turns your computer keyboard into a musical instrument. Designed for music theory practice, it allows users to play notes and chords using a QWERTY keyboard layout. The app provides a visual representation of notes and scales, making it a useful tool for learning and exploring music theory concepts.

The aQWERTYon (QWERTY accordion) is designed to simplify the process for improvising, learning, and making music with your computer keyboard. Play along with your favorite YouTube videos, learn music theory through our Music Theory for Bedroom Producers course in collaboration with Soundfly, or take advantage of Web MIDI and us it to play and record into your favorite digital audio workstation, such as Soundtrap.com, GarageBand, Logic, or Ableton, or as input into music notation programs like Noteflight.

https://youtu.be/hqFr4lF6u_Y

- + \ No newline at end of file diff --git a/assets/cync_index.md.DHsYnHsR.js b/assets/cync_index.md.DHsYnHsR.js new file mode 100644 index 00000000..468e8ad8 --- /dev/null +++ b/assets/cync_index.md.DHsYnHsR.js @@ -0,0 +1 @@ +import{_ as n}from"./chunks/SynthPage.CH5KmkC0.js";import{B as r,h as s,D as i,Q as c,R as o,u as l,k as e,f as p}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const d=e("p",null,"Most drum sequencers are rectangular, organizing notes linearly in a quantized grid. However, there are many rhythms that are difficult or impossible to construct this way (such as traditional African, Indian, and Indonesian drumbeats). These rhythms rely on repeating patterns of different lengths, which can vary in arrangement and timing.",-1),u=e("p",null,"Representing these grooves as overlapping cycles reveals their underlying patterns. This approach can also be used to explore and experiment with polyrhythms, syncopation, and beat construction.",-1),w=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://cync.app","date_created":"2024-08-25T05:00:42.506Z","title":"Cync","slug":"cync","author":"Jon Tiburzi","author_link":"https://github.com/tiburzi/cync","description":"A cyclic drum machine for experimenting with non-quantized grooves. ","tags":["Educational","sequencer","Percussion","Metronome"],"archive_link":null,"archive":false,"iframe":true,"cover":"8c7eac07-92d5-4c10-bb3f-e44d6a36a4af","id":63,"sort":48,"clicks":2,"public":false,"is_new":true,"stats":[55]},"relativePath":"cync/index.md","filePath":"cync/index.md","lastUpdated":0}'),h={name:"cync/index.md"},z=Object.assign(h,{setup(m){const{params:t,frontmatter:_}=r();return(f,y)=>{const a=n;return p(),s("div",null,[i(a,c(o(l(t))),null,16),d,u])}}});export{w as __pageData,z as default}; diff --git a/assets/cync_index.md.DHsYnHsR.lean.js b/assets/cync_index.md.DHsYnHsR.lean.js new file mode 100644 index 00000000..468e8ad8 --- /dev/null +++ b/assets/cync_index.md.DHsYnHsR.lean.js @@ -0,0 +1 @@ +import{_ as n}from"./chunks/SynthPage.CH5KmkC0.js";import{B as r,h as s,D as i,Q as c,R as o,u as l,k as e,f as p}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const d=e("p",null,"Most drum sequencers are rectangular, organizing notes linearly in a quantized grid. However, there are many rhythms that are difficult or impossible to construct this way (such as traditional African, Indian, and Indonesian drumbeats). These rhythms rely on repeating patterns of different lengths, which can vary in arrangement and timing.",-1),u=e("p",null,"Representing these grooves as overlapping cycles reveals their underlying patterns. This approach can also be used to explore and experiment with polyrhythms, syncopation, and beat construction.",-1),w=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://cync.app","date_created":"2024-08-25T05:00:42.506Z","title":"Cync","slug":"cync","author":"Jon Tiburzi","author_link":"https://github.com/tiburzi/cync","description":"A cyclic drum machine for experimenting with non-quantized grooves. ","tags":["Educational","sequencer","Percussion","Metronome"],"archive_link":null,"archive":false,"iframe":true,"cover":"8c7eac07-92d5-4c10-bb3f-e44d6a36a4af","id":63,"sort":48,"clicks":2,"public":false,"is_new":true,"stats":[55]},"relativePath":"cync/index.md","filePath":"cync/index.md","lastUpdated":0}'),h={name:"cync/index.md"},z=Object.assign(h,{setup(m){const{params:t,frontmatter:_}=r();return(f,y)=>{const a=n;return p(),s("div",null,[i(a,c(o(l(t))),null,16),d,u])}}});export{w as __pageData,z as default}; diff --git a/assets/granular_index.md.D13yGB7o.js b/assets/granular_index.md.D7tQVXqv.js similarity index 94% rename from assets/granular_index.md.D13yGB7o.js rename to assets/granular_index.md.D7tQVXqv.js index 249d0eb1..2717f24f 100644 --- a/assets/granular_index.md.D13yGB7o.js +++ b/assets/granular_index.md.D7tQVXqv.js @@ -1 +1 @@ -import{_ as r}from"./chunks/SynthPage.CH5KmkC0.js";import{B as e,h as s,D as n,Q as i,R as o,u as l,f as u}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://zya.github.io/granular/","date_created":"2024-07-29T17:37:33.497Z","title":"Multi-Touch Granular Sampler","slug":"granular","author":"Zya","author_link":"https://github.com/zya/","description":"The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.","tags":["Granular"],"archive_link":null,"archive":false,"iframe":true,"cover":"f44fa962-37f0-487d-b69b-6880dd06dbd1","id":61,"sort":50,"clicks":1,"public":false,"is_new":false,"stats":[53]},"relativePath":"granular/index.md","filePath":"granular/index.md","lastUpdated":0}'),c={name:"granular/index.md"},P=Object.assign(c,{setup(d){const{params:a,frontmatter:p}=e();return(m,h)=>{const t=r;return u(),s("div",null,[n(t,i(o(l(a))),null,16)])}}});export{v as __pageData,P as default}; +import{_ as r}from"./chunks/SynthPage.CH5KmkC0.js";import{B as e,h as s,D as n,Q as i,R as o,u as l,f as u}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://zya.github.io/granular/","date_created":"2024-07-29T17:37:33.497Z","title":"Multi-Touch Granular Sampler","slug":"granular","author":"Zya","author_link":"https://github.com/zya/","description":"The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.","tags":["Granular"],"archive_link":null,"archive":false,"iframe":true,"cover":"f44fa962-37f0-487d-b69b-6880dd06dbd1","id":61,"sort":51,"clicks":1,"public":false,"is_new":false,"stats":[53]},"relativePath":"granular/index.md","filePath":"granular/index.md","lastUpdated":0}'),c={name:"granular/index.md"},P=Object.assign(c,{setup(d){const{params:a,frontmatter:p}=e();return(m,h)=>{const t=r;return u(),s("div",null,[n(t,i(o(l(a))),null,16)])}}});export{v as __pageData,P as default}; diff --git a/assets/granular_index.md.D13yGB7o.lean.js b/assets/granular_index.md.D7tQVXqv.lean.js similarity index 94% rename from assets/granular_index.md.D13yGB7o.lean.js rename to assets/granular_index.md.D7tQVXqv.lean.js index 249d0eb1..2717f24f 100644 --- a/assets/granular_index.md.D13yGB7o.lean.js +++ b/assets/granular_index.md.D7tQVXqv.lean.js @@ -1 +1 @@ -import{_ as r}from"./chunks/SynthPage.CH5KmkC0.js";import{B as e,h as s,D as n,Q as i,R as o,u as l,f as u}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://zya.github.io/granular/","date_created":"2024-07-29T17:37:33.497Z","title":"Multi-Touch Granular Sampler","slug":"granular","author":"Zya","author_link":"https://github.com/zya/","description":"The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.","tags":["Granular"],"archive_link":null,"archive":false,"iframe":true,"cover":"f44fa962-37f0-487d-b69b-6880dd06dbd1","id":61,"sort":50,"clicks":1,"public":false,"is_new":false,"stats":[53]},"relativePath":"granular/index.md","filePath":"granular/index.md","lastUpdated":0}'),c={name:"granular/index.md"},P=Object.assign(c,{setup(d){const{params:a,frontmatter:p}=e();return(m,h)=>{const t=r;return u(),s("div",null,[n(t,i(o(l(a))),null,16)])}}});export{v as __pageData,P as default}; +import{_ as r}from"./chunks/SynthPage.CH5KmkC0.js";import{B as e,h as s,D as n,Q as i,R as o,u as l,f as u}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://zya.github.io/granular/","date_created":"2024-07-29T17:37:33.497Z","title":"Multi-Touch Granular Sampler","slug":"granular","author":"Zya","author_link":"https://github.com/zya/","description":"The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.","tags":["Granular"],"archive_link":null,"archive":false,"iframe":true,"cover":"f44fa962-37f0-487d-b69b-6880dd06dbd1","id":61,"sort":51,"clicks":1,"public":false,"is_new":false,"stats":[53]},"relativePath":"granular/index.md","filePath":"granular/index.md","lastUpdated":0}'),c={name:"granular/index.md"},P=Object.assign(c,{setup(d){const{params:a,frontmatter:p}=e();return(m,h)=>{const t=r;return u(),s("div",null,[n(t,i(o(l(a))),null,16)])}}});export{v as __pageData,P as default}; diff --git a/assets/index.md.MqSGm3kh.js b/assets/index.md.CXVvb3vr.js similarity index 59% rename from assets/index.md.MqSGm3kh.js rename to assets/index.md.CXVvb3vr.js index c5a7ba9a..5401e205 100644 --- a/assets/index.md.MqSGm3kh.js +++ b/assets/index.md.CXVvb3vr.js @@ -1 +1 @@ -import{u as Le,a as pe,b as Pe,w as Oe,c as ve,d as $e}from"./chunks/theme.DaoXcD6v.js";import{f as b,h as y,k as f,u as M,A as _,r as O,t as P,d as Re,I as j,j as X,p as ee,l as U,_ as we,B as ze,C as Be,J as te,D as B,E as G,F as se,K as Ne,m as We,L as ke,H as Fe,M as je,N as Ze,e as J,o as qe,w as Ve,T as Ye,q as Ue,O as Ge,P as Ke}from"./chunks/framework.Ch2f3zJW.js";import{u as He,f as Y,_ as Je,a as Qe}from"./chunks/useClicks.RkCdhX3B.js";import"./chunks/index.CVGuM2cA.js";const Xe={class:"text-center line-height-loose text-md"},et={class:"mx-auto max-w-75ch intro md-text-lg"},tt=f("div",{class:"i-mdi-share"},null,-1),st=f("span",null,"Share to save for later",-1),nt=[tt,st],it={__name:"AboutShare",setup(t){const{share:e,isSupported:s}=Le();function n(){e({title:"Web synths collection",text:"Look at this online synthesizer collection. No need to install anything - just your browser and any MIDI controller will do.",url:location.href})}return(i,a)=>(b(),y("div",Xe,[f("div",et,[M(s)?(b(),y("button",{key:0,class:"mx-auto flex items-center gap-2 text-white py-2 px-4 mt-6 shadow-lg rounded-lg cursor-pointer bg-green-600 -hover-translate-y-2px transition",onClick:a[0]||(a[0]=o=>n()),"data-umami-event":"Shared via button"},nt)):_("",!0)])]))}},ne=JSON.parse(`[{"url":"https://dotpiano.com/","date_created":"2023-10-27T12:45:53.887Z","title":"Dotpiano","slug":"dotpiano","author":"Alex Chen and Yotam Mann","author_link":null,"description":"Dot Piano is an online musical instrument allowing users to play a digital piano using their computer keyboard. The interactive web app provides a simple and intuitive interface for creating and sharing music, making it accessible for both beginners and experienced musicians.","tags":["polyphonic","midi","keyboard","Multiplayer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6dac5187-213f-4eb8-96ed-63c2e689b206","id":1,"sort":1,"clicks":6427,"public":true,"is_new":false,"stats":[1]},{"url":"https://waveform.playtronica.com/","date_created":"2023-10-27T12:45:54.644Z","title":"Waveform","slug":"waveform","author":"Qvantor","author_link":"https://github.com/qvantor/","description":"Polyphonic web synthesizer with simple yet capable interface.","tags":["playtronica","polyphonic","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"86cb9385-9deb-4f10-95cb-765980156e65","id":39,"sort":2,"clicks":6795,"public":true,"is_new":false,"stats":[2]},{"url":"https://juno-106.js.org/","date_created":"2023-10-27T12:45:54.085Z","title":"Juno-106","slug":"juno-106","author":"Steve Goldberg ","author_link":"https://github.com/stevengoldberg","description":"Online emulator of the classic Roland Juno-106 synthesizer. This interactive web app allows users to experiment with the iconic sounds of the Juno-106 directly from their browser. It features authentic recreations of the synth's controls and sound characteristics, making it a valuable tool for music enthusiasts and producers. ","tags":["fm","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b54cfce7-af2f-4e03-a5b3-81fc853d2cc8","id":14,"sort":3,"clicks":5019,"public":true,"is_new":false,"stats":[3]},{"url":"https://chromatone.center/practice/synth/elementary/","date_created":"2023-10-27T12:45:54.453Z","title":"Elementary synth","slug":"elementary","author":"Chromatone","author_link":"https://chromatone.center","description":"The Chromatone Elementary Synth is an interactive web-based synthesizer designed to provide a hands-on learning experience in sound synthesis. It features MIDI support and is built using the Elementary audio library. This synthesizer allows users to explore different synthesis techniques through a user-friendly interface, making it an excellent tool for both beginners and experienced musicians looking to experiment with sound design.","tags":["chromatone","polyphonic","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"21070a51-6089-48bd-8840-ba37b5f2963d","id":29,"sort":4,"clicks":3186,"public":true,"is_new":false,"stats":[4]},{"url":"https://mmontag.github.io/dx7-synth-js/","date_created":"2023-10-27T12:45:54.477Z","title":"DX7 Synth","slug":"dx7","author":"Matt Montag ","author_link":"https://github.com/mmontag","description":"The DX7 Synth JS is an online emulator of the classic Yamaha DX7 synthesizer. This interactive web app replicates the iconic FM synthesis capabilities of the DX7, allowing users to create and manipulate sounds using various parameters such as algorithms, operators, and envelopes. The app supports MIDI devices and provides a user-friendly interface for sound design experimentation. ","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"f3b285ee-6b82-453b-9ff6-aeda18ec675b","id":30,"sort":5,"clicks":2718,"public":true,"is_new":false,"stats":[5]},{"url":"https://touchme.chromatone.center/","date_created":"2023-10-27T12:45:53.941Z","title":"TouchME","slug":"touchme","author":"Chromatone","author_link":"https://chromatone.center","description":"TouchMe Experience by Chromatone is an interactive audio-visual web app that transforms touch inputs into music and visual effects. It features MIDI support, multiple synth oscillators, and various quantize and BPM modes. Users can explore six interactive SVG scenes, switch between light and dark modes, and view basic session statistics. Designed for creative experimentation, it offers a unique way to engage with music and visuals.","tags":["chromatone","playtronica"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"68062279-8e08-4953-ae8f-7a77c584948e","id":3,"sort":6,"clicks":3418,"public":true,"is_new":false,"stats":[6]},{"url":"https://muted.io/","date_created":"2023-10-27T12:45:54.742Z","title":"Muted.io","slug":"muted-io","author":"Sébastien Noël","author_link":"https://twitter.com/muted_io","description":"Muted.io offers a collection of interactive music theory tools designed for learning music online. These tools include a virtual piano, chord and scale references, a circle of fifths, tuners, and various visual aids to understand music theory concepts. The site is ideal for musicians looking to improve their knowledge and practice music in an engaging way.","tags":["educational","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"5c08ac7d-4414-47c0-b7d1-a9867ba3949f","id":43,"sort":7,"clicks":175,"public":false,"is_new":false,"stats":[10]},{"url":"https://chromatone.center/practice/synth/soundfont/","date_created":"2023-12-18T10:20:56.985Z","title":"Soundfont Sampler Synth","slug":"soundfont","author":"Chromatone","author_link":"https://github.com/chromatone","description":"Free open source soundfont sampler online synthesizer. Very robust and hassle free way to play some straightforward sampled instruments like horns, xylophones and just piano sounds. Instantly playable instrument with about 90 presets out of the box. ","tags":["Poly","Keyboard","Sampler","MIDI"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"26704e9d-5964-4a0f-940c-370c14777e95","id":51,"sort":8,"clicks":0,"public":true,"is_new":true,"stats":[43]},{"url":"https://midi.city/","date_created":"2023-12-28T05:40:45.140Z","title":"MIDI.city","slug":"midi-city","author":"Astral Digital","author_link":"https://astral.digital/","description":"midi.city is a free online synthesizer, built by Jack.\\n\\nmidi.city has over 128 different instruments including: Pianos, Saxophones, Drums, Trumpets, Synth Pads, Guitar, Violins and all other instruments defined in the General Midi specification.","tags":null,"archive_link":null,"archive":false,"content":"midi.city has been created with the help of hundreds of different open-source projects and with contributions from many others.\\n\\n- Tone.js by Yotam Mann: the Web Audio API-based sound engine that implements a majority of nodes used in the audio graph. It powers many of the advanced features used such as Granular Synthesis, Reverb, and timing.\\n- Groove Monkee: graciously provided the MIDI files that are used for the percussion loops.\\n- Keenan Brand: created the midi.city logo and various icons used on the site.\\n- Noun Project: various icons are used via a Pro license.\\n- Google Material Design: various icons.\\n- Compifont by Marcin Dziembor: the soundfont powering the samples and many the audio graph definitions, is originally . Several modifications have been made to adapt to midi.city and the Web Audio API. ","iframe":true,"cover":"8cb479ba-e4e0-42f2-986c-597b68b8e639","id":52,"sort":9,"clicks":10,"public":false,"is_new":false,"stats":[44]},{"url":"https://apps.musedlab.org/aqwertyon/theory/","date_created":"2023-10-27T12:45:54.711Z","title":"aQWERTYon","slug":"aqwertyon","author":"Mused lab","author_link":"https://musedlab.org/","description":"aQWERTYon is an interactive web app that turns your computer keyboard into a musical instrument. Designed for music theory practice, it allows users to play notes and chords using a QWERTY keyboard layout. The app provides a visual representation of notes and scales, making it a useful tool for learning and exploring music theory concepts.","tags":["polyphonic","samples"],"archive_link":null,"archive":false,"content":"The **aQWERTYon** (QWERTY accordion) is designed to simplify the process for improvising, learning, and making music with your computer keyboard. Play along with your favorite YouTube videos, learn music theory through our Music Theory for Bedroom Producers course in collaboration with Soundfly, or take advantage of Web MIDI and us it to play and record into your favorite digital audio workstation, such as Soundtrap.com, GarageBand, Logic, or Ableton, or as input into music notation programs like Noteflight.\\n\\nhttps://youtu.be/hqFr4lF6u_Y","iframe":true,"cover":"e7c87de8-c290-4da9-b0e0-eed73871b27a","id":42,"sort":10,"clicks":348,"public":false,"is_new":false,"stats":[8]},{"url":"https://musiclab.chromeexperiments.com/","date_created":"2023-11-26T08:23:47.351Z","title":"Chrome Music Lab","slug":"chrome-lab","author":"Google","author_link":"https://github.com/googlecreativelab/chrome-music-lab","description":"Chrome Music Lab is a website that makes learning music more accessible through fun, hands-on experiments.","tags":["Educational","Keyboard","MIDI","Poly","Piano","Analysis","Mic","Visuals"],"archive_link":null,"archive":false,"content":"## What can it be used for?\\n\\nMany teachers have been using Chrome Music Lab as a tool in their classrooms to explore music and its connections to science, math, art, and more. They’ve been combining it with dance and live instruments. Here’s a collection of some uses we’ve found on Twitter.\\n\\n## Can I use it to make my own songs?\\n\\nYes. Check out the Song Maker experiment, which lets you make and share your own songs.\\n\\n## Do I need to make an account?\\n\\nNope. Just open any experiment and start playing.\\n\\n## How were these built?\\n\\nAll our experiments are all built with freely accessible web technology such as Web Audio API, WebMIDI, Tone.js, and more. These tools make it easier for coders to build new interactive music experiences. You can get the open-source code to lots of these experiments here on [Github](https://github.com/googlecreativelab/chrome-music-lab).\\n\\n## What devices do these work on?\\n\\nYou can play with these experiments across devices – phones, tablets, laptops – just by opening the site on a web browser such as Chrome.","iframe":true,"cover":"297b059e-a6fa-4faa-91b2-c2e1e68cf98f","id":50,"sort":11,"clicks":304,"public":false,"is_new":false,"stats":[9]},{"url":"https://topos.live/","date_created":"2024-06-21T12:06:09.754Z","title":"Topos","slug":"topos","author":"Raphael","author_link":"https://github.com/Bubobubobubobubo/topos","description":"Topos is an algorithmic sequencer. Topos is also a live coding environment. To sum it up, think: \\"making music in real time through code\\". Code used as an expressive medium for musical improvisation! Topos uses small algorithms to represent musical sequences and processes.","tags":["Live coding","MIDI","Poly","Visuals","FM"],"archive_link":null,"archive":false,"content":"Topos is deeply inspired by the Monome Teletype. The Teletype is/was an open source hardware module for Eurorack synthesizers. While the Teletype was initially born as an hardware module, Topos aims to be a web-browser based cousin of it! It is a sequencer, a scriptable interface, a companion for algorithmic music-making. Topos wishes to fullfill the same goal as the Teletype, keeping the same spirit alive on the web. It is free, open-source, and made to be shared and used by everyone. Learn more about live coding on livecoding.fr.","iframe":true,"cover":"76e0c2b7-e95e-447d-982d-e156cb9d1530","id":57,"sort":12,"clicks":0,"public":false,"is_new":true,"stats":[49]},{"url":"https://websynths.com/","date_created":"2023-10-27T12:45:54.019Z","title":"Websynths Microtonal","slug":"microtonal","author":"WebSynths","author_link":"https://www.websynths.com/microtonal/","description":"The deepest internet synthesizer","tags":null,"archive_link":null,"archive":false,"content":"\\nWebSynths is a free resource for any musician with internet access! But, it is made possible by support from our patrons. Please consider helping if you can: patreon.com/WebSynths\\n\\n- You can use your QWERTY keyboard, mouse, mobile touch or MIDI keyboard to play the sounds.\\n- You can change the tuning of the keys, or select a scale, by clicking the tuning button.\\n- MIDI is a way to use an external physical instrument to play it. If you have a MIDI keyboard that you wish to use, hit the MIDI button to set it up.\\n- If a note gets stuck, hit the panic button, it will stop all voices from playing.\\n- You can use the arrows on your computer keyboard to scroll through the presets.\\n\\nA simple explanation of Subtractive Synthesis:\\n\\n- Subtractive Synthesis works by taking one or more oscillators, setting the pitch of their oscillation (usually to the note of the key being pressed,) setting the shape of their oscillation to the desired timbre (Sine, Saw, Square or more complex shapes,) mixing them together and running them through a filter to change their EQ (usually filtering out the highest or lowest frequencies... this is why it is called \\"subtractive\\"), then running them through an envelope so the note can be heard on when a key is pressed down and is silenced when the key is released. In the case of WebSynths Microtonal, the sound is then sent through effects like delay, chorus and reverb and out to your speakers.\\n- Oscillators are the voices. This synth has 3 of them in the left column. You can change the character of each voice by changing the parameters of them. The 'Shape' menu allows you to choose from different styles of voice for each oscillator. You can turn each voice on or off and mix them together.\\n- The filter section applies equalization to your oscillators via the cutoff and emphasis controls. You can change the equalization filter type to 'low pass / high pass' and many more. You can use the LFOs and/or Envelopes to change how the filtration changes over time. An LFO is just a slow oscillator that is uses to automatically move a parameter over time.\\n- The amplitude envelope changes how your sound is played, volume-wise, when you hit a note. For example, having a long release time will mean that once you let go of the note you are playing it will tail off until fading out. Having a slow attack will mean that your note will fade in instead of playing at full volume straight away.\\n- The effects section allows you to add various effects to your overall sound. You can change the effects, mix them together and toggle them on or off too.\\n\\n","iframe":false,"cover":"ffc54664-7ba4-4855-a56a-6657a5542a04","id":10,"sort":13,"clicks":172,"public":false,"is_new":false,"stats":[11]},{"url":"https://stuartmemo.com/synth/","date_created":"2023-10-27T12:45:54.586Z","title":"Sympathetic Synthesizer System Mk 1","slug":"sympathetic","author":"Stuart Memo ","author_link":"https://github.com/stuartmemo","description":"The Sympathetic Synthesizer System Mk 1 is an interactive web app that emulates a complex synthesizer. It features three oscillators with selectable waveforms, an LFO, filters with ADSR controls, and noise generation. The app allows users to explore sound design through various parameters, offering a detailed and hands-on synthesis experience. MIDI support is also included for enhanced control.","tags":["keyboard","midi","additive"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"123aeb6d-c7b0-43dd-a852-98660bdf03f0","id":37,"sort":14,"clicks":302,"public":false,"is_new":false,"stats":[12]},{"url":"https://learningsynths.ableton.com/","date_created":"2023-10-27T12:45:54.360Z","title":"Learning synths","slug":"ableton","author":"Ableton","author_link":"https://github.com/Ableton","description":"Explore the fundamentals of synthesis with this interactive web-app by Ableton. Dive into the world of sound design, experiment with different parameters, and learn how to sculpt your own unique sounds with ease.","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"0bf8312d-c449-4f5c-80ad-36594ef98db6","id":26,"sort":15,"clicks":185,"public":false,"is_new":false,"stats":[13]},{"url":"https://www.femurdesign.com/theremin/","date_created":"2023-10-27T12:45:54.206Z","title":"Theremin","slug":"theremin","author":"Femur","author_link":"https://femurdesign.com/","description":"Experience the magic of the theremin with this interactive web-app by Femur Design. Harness the power of motion to create ethereal music without physical contact. Experiment with pitch and volume to craft haunting melodies right in your browser.","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6b22ef48-6830-4cf2-810d-809408033450","id":19,"sort":16,"clicks":320,"public":false,"is_new":false,"stats":[14]},{"url":"https://cardinal.kx.studio/live","date_created":"2024-05-20T18:57:14.836Z","title":" DISTRHO Cardinal","slug":"cardinal","author":"Filipe Coelho, aka falkTX","author_link":"https://falktx.berlin/","description":"Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.","tags":["Modular","FM","Poly"],"archive_link":null,"archive":false,"content":"Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.\\nIt is based on the popular VCV Rack but with a focus on being a fully self-contained plugin version.\\n\\nMore specifically, this is a DPF-based plugin wrapper around VCV Rack, using its code directly instead of forking the project, with the target of having a self-contained, fully free and open-source plugin version of Rack.\\nSee the why section below for the reasons Cardinal exists, also for frequently asked questions check this FAQ document.\\n\\nCardinal contains Rack, some 3rd-party modules and a few internal utilities all in a single binary.\\nAll \\"Core\\" modules from Rack have been replaced by Cardinal equivalents, simplified to better work for an audio plugin.\\n\\nCardinal does not load external modules and does not connect to the official Rack library/store.\\nAll VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues.\\n\\n## Why\\n\\nCardinal was created first and foremost as a way to have Rack as a proper open-source audio plugin.\\nA proper audio plugin should be self-contained as much as possible, as to not interfere with the DAW/Host. Loading external modules clearly goes against this idea.\\nNot to mention being open-source, otherwise we are at the mercy of the wishes of a company for what we can and cannot do, which is not something Cardinal's authors wish to abide by.\\n\\nA self-contained plugin can't be overstated, as DLL/shared-object symbol conflicts can trigger hard-to-debug crashes.\\nWhile Rack tries to mitigate this as much as possible, crashes due to conflicting modules have already been seen in v2 builds.\\nOn the other side, Cardinal redefines class and function names as needed to avoid as many conflicts as possible.\\n\\nSupport for ARM and non-mainstream platforms (for example BSD) has also always been missing from the official Rack since the start.\\nWhile we can patch the Rack free version to support these, same can't be done with Rack Pro with it being a closed-source product.\\nThe online library/store only supports a very specific set of platforms too, so non-supported platforms would need any 3rd-party modules to be manually compiled to make them usable.\\n\\nUnhappiness with the audio threading behaviour of Rack also plays a role.\\nBoth audio and MIDI should be locked to the host audio thread as to minimize (or even altogether remove) latency and jitter.\\nThe use of separate threads for MIDI is bad design, one that has been corrected in DAWs and JACK-MIDI for several years...\\nBut Rack's use of RtMidi requires separate threading, so Cardinal does not use it.","iframe":true,"cover":"dc7070e1-66fd-4f74-95d2-92d8388864e2","id":56,"sort":17,"clicks":5,"public":false,"is_new":true,"stats":[48]},{"url":"https://multiplayer-orchestra.com","date_created":"2024-04-23T08:07:22.796Z","title":"Multiplayer Orchestra","slug":"multiplayer-orchestra","author":"Mutli_Orchestra","author_link":"https://twitter.com/Mutli_Orchestra","description":"Play in real time with people from all around the world with more than 400 instruments.","tags":["Poly","MIDI","Keyboard","Collaborative","Online"],"archive_link":null,"archive":false,"content":"Multiplayer Orchestra ([https://www.multiplayer-orchestra.com/](https://www.multiplayer-orchestra.com/)) is a web application that allows you to virtually collaborate with musicians from around the world in real-time. Here are some key features:\\n\\n* **Large instrument selection:** Choose from over 400 instruments, including pianos, guitars, drums, and orchestral instruments.\\n* **Real-time collaboration:** Play music simultaneously with other users, creating a virtual orchestra.\\n* **Public and private rooms:** Join public rooms to jam with others or create private rooms with a password for specific collaborations.\\n* **Contests:** Participate in contests to win prizes like Amazon gift cards by recording solo performances.\\n\\n**It's important to note that the website seems to be in beta based on the version information listed (Beta 0.30).** ","iframe":true,"cover":"d743d9ea-d73f-4593-a70e-58a3e4deaa1b","id":55,"sort":18,"clicks":5,"public":false,"is_new":true,"stats":[47]},{"url":"https://touchpianist.com/","date_created":"2023-10-27T12:45:54.691Z","title":"Touch Pianist","slug":"touch-pianist","author":"EarSlap","author_link":null,"description":"Unleash your inner virtuoso with Touch Pianist. Experience the thrill of playing the piano with just your fingertips. Choose your favorite classical masterpiece and immerse yourself in the joy of creating beautiful music, all through the power of touch.","tags":["entertainment","piano"],"archive_link":null,"archive":false,"content":"Touch Pianist is a musical toy / instrument that allows the user to perform hard-to-play classical piano music favorites (from composers like Beethoven, Mozart, Bach, Satie, Debussy to name a few) just by tapping the rhythm of the piece's particular sound events on a computer keyboard or a touch screen.\\n\\nIt also provides live visualisation of the pieces that are being performed. There is no score keeping, the user is free to perform the music in any way they wish. The premise is that it is really fun to perform a piece you know well, exactly like you feel it with so little effort.\\n\\nTouch Pianist has CoreMIDI support so you can use your favorite piano / sound plug-in in your computer as a sound source if you wish.","iframe":false,"cover":"415deeeb-a843-4363-b6c9-78918aa688af","id":41,"sort":19,"clicks":177,"public":false,"is_new":false,"stats":[15]},{"url":"https://www.beepbox.co","date_created":"2024-03-21T02:43:35.749Z","title":"BeepBox","slug":"beepbox","author":"John Nesky","author_link":"https://johnnesky.com/","description":"BeepBox is an online tool for sketching and sharing instrumental music.\\n\\nAll song data is contained in the URL at the top of your browser. When you make changes to the song, the URL is updated to reflect your changes. When you are satisfied with your song, just copy and paste the URL to save and share your song!\\n\\nBeepBox is a passion project, and will always be free to use. ","tags":["Poly","Sequencer","FM"],"archive_link":null,"archive":false,"content":" BeepBox is developed by John Nesky.\\n\\nBeepBox does not claim ownership over songs created with it, so original songs belong to their authors.\\n\\nNeither John Nesky nor BeepBox assume responsibility for any copyrighted material played on BeepBox. No songs are ever received, recorded, or distributed by BeepBox's servers. All song data is contained in the URL after the hash (#) mark, and your song data will not leave your device unless you copy and share the URL. BeepBox does not collect, track, or share any user data. ","iframe":true,"cover":"dea37f5f-504c-443f-ba9a-3dff4d583506","id":54,"sort":20,"clicks":10,"public":false,"is_new":true,"stats":[46]},{"url":"https://roland50.studio/","date_created":"2023-11-25T05:42:57.573Z","title":"Roland 50 Studio","slug":"roland50","author":"Yuri Suzuki","author_link":"https://www.yurisuzuki.com/","description":"It's a professional sounding online musical interface, which records your masterpieces and allows you to share your creations through social media, messaging and also as a download.\\nOn top of the TR-808 drum machine and TB-303 bass synthesizer featured at the original 2020 release, now the sound of SH-101 synthesizer is added, and more sounds to come later in the year 2022, commemorating Roland's 50th anniversary.","tags":["drum machine","SP404","TR808","TB303","Step sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"3b5aec13-7e50-475c-9165-bc963872515d","id":45,"sort":21,"clicks":17,"public":false,"is_new":false,"stats":[16]},{"url":"https://www.disco-computer.com/synthesizer/synth.html","date_created":"2023-10-27T12:45:54.270Z","title":"Disco-computer","slug":"disco-computer","author":"Patrick Sawyer","author_link":null,"description":null,"tags":["polyphonic","fm","keyboard"],"archive_link":"/archive/synthescheisse/index.html","archive":true,"content":null,"iframe":true,"cover":"0d0183e6-8964-4246-a18c-a6ca0a0f2794","id":22,"sort":22,"clicks":269,"public":false,"is_new":false,"stats":[17]},{"url":"https://seeing-sound.netlify.app/","date_created":"2023-10-27T12:45:54.492Z","title":"Video Sampler","slug":"video-sampler","author":"Playtronica","author_link":"https://shop.playtronica.com","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b39cc546-2571-4402-84cd-f8497e27d0c9","id":31,"sort":23,"clicks":256,"public":false,"is_new":false,"stats":[18]},{"url":"https://bs.stranno.su/","date_created":"2024-08-21T10:02:11.468Z","title":"Binary Synth","slug":"binary-synth","author":"Max Alyokhin ","author_link":"https://github.com/MaxAlyokhin","description":"Audio synthesis from binary code of any file","tags":["FX","MIDI","Educational"],"archive_link":null,"archive":false,"content":"A web-synthesizer that generates sound from the binary code of any files. It can synthesize sound directly in the browser, or be a generator of MIDI messages to external devices or DAWs, turning any file into a score. All the application code is written in Javascript and along with everything you need is packed into a single .html file of about 750kb. The synthesizer doesn't need internet, it can be downloaded and run locally on any device with a browser.\\n\\nThe application reads the file sequentially, and due to the high speed of reading and random deviation of reading duration, we can get quite unpredictable generation of timbre nuances, and at certain settings we can switch to granular synthesis.","iframe":true,"cover":"b43984bd-bdca-4134-bb55-567306668935","id":62,"sort":25,"clicks":0,"public":false,"is_new":true,"stats":[54]},{"url":"https://www.stef.be/bassoontracker/","date_created":"2024-03-14T07:04:03.311Z","title":"Bassoon Tracker","slug":"bassoon","author":"Steffest","author_link":" https://www.stef.be","description":"Browser-based old-school Amiga Music Tracker in plain old JavaScript.","tags":["FM","tracker","8-bit","low-fi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"70c9db80-8ef8-4aa5-9dcd-6b5c3c0da5b2","id":53,"sort":26,"clicks":10,"public":false,"is_new":true,"stats":[45]},{"url":"https://www.igorski.nl/experiment/websid","date_created":"2023-10-27T12:45:54.438Z","title":"WebSID Commodore 64","slug":"web-sid","author":"Igor Zinken","author_link":"https://www.igorski.nl/","description":null,"tags":["polyphonic","keyboard","midi","additive"],"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"932e0ae0-0048-4c6d-92bb-a4a17a8a4dd4","id":28,"sort":27,"clicks":156,"public":false,"is_new":false,"stats":[19]},{"url":"https://nicroto.github.io/viktor/","date_created":"2023-10-27T12:45:54.388Z","title":"Viktor NV-1","slug":"nv-1","author":"Nikolay Tsenkov ","author_link":"https://github.com/nicroto","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"ff3082ad-3c38-4880-ab23-35711c97ea71","id":27,"sort":28,"clicks":496,"public":false,"is_new":false,"stats":[20]},{"url":"https://virtualpiano.eu/","date_created":"2023-10-27T12:45:54.542Z","title":"VirtualPiano.eu","slug":"virtual-piano","author":"WebSyrup","author_link":"https://websyrup.net/","description":null,"tags":["midi","keyboard"],"archive_link":null,"archive":false,"content":"VirtualPiano.eu is the online synthesizer that allows you to play 128 musical instruments for free using your PC keyboard, the mouse or by connecting an external MIDI keyboard.\\n\\nYou can adjust Volume, Reverb, Loop and quality. Use the sustain and adjust the octaves, you can also select and set different channels including the one for the drums.\\n\\nCreate your own melodies, have fun playing or use VirtualPiano to learn how to play the Piano online on your own. ","iframe":true,"cover":"9a59eea5-c77f-483c-9443-1cd0727e6dcc","id":35,"sort":29,"clicks":282,"public":false,"is_new":false,"stats":[21]},{"url":"https://onlinesequencer.net/","date_created":"2023-10-27T12:45:54.565Z","title":"Online sequencer","slug":"online-sequencer","author":"Jacob Morgan and George Burdell","author_link":"https://github.com/buildist","description":null,"tags":["sequencer"],"archive_link":null,"archive":false,"content":"**Online Sequencer** is a web-based music sequencer that allows users to create music saved online, or on their computer. The piano roll is essential to the sequencer, which is on the left of the screen, with 72 notes from C2-B7 (labelled differently from a piano, C2 on the sequencer corresponds to C1 on a piano). In addition to several parameters which can be modified to change the sound of the music, additional functionality can be accessed via the console.\\n\\nUpon opening the site, users can begin composing and \\"drawing\\" notes on the grid, with the default instrument being Electric Piano. By default, a sequence's time signature is set to 4/4, and the grid spacing is set to 1/4 (16 notes per measure). The note lengths can be adjusted by dragging the dark tab on the right of each note, and precision can be afforded by changing the 'Grid' option to other note divisions. \\n\\n## History\\n\\nOnline Sequencer was created on January 2, 2013 by Jacob Morgan during a break at Georgia Tech.\\n\\nBeginning in the fall of 2013, accounts were available but were separate from the music portion of the site. They were only used in the forum and the website chat.\\n\\nIn 2015, accounts were linked to the main website and allowed songs to be saved under someone's username.\\n\\nThe World Update in 2018 added several new instruments and changed the landscape of sound design on the site. The \\"World Update Contest\\" was held for the update.\\n\\nStarting in late 2020, OS began to receive a variety of updates which vastly improved the functionality of the site. These updates introduced features like custom grid sizes, automation with markers, extra reverb options, detune, and distortion. In 2021, the \\"Space Race\\" contest was held, as to see who could work best with the changes.\\n\\nIn late 2022, newer, higher-quality instruments were added. Some of the instruments, such as Electric Piano, Grand Piano, Violin, and Cello got an updated sustained version, while the original versions still exist under the \\"classic\\" designation.\\n\\nCurrently, the 10-Year Anniversary Contest is being held.\\n\\n## Features\\n\\nWithin the editor, numerous user interface features allow for various changes which will impact the individual sequence on that page.\\n\\n### Basic features\\n\\nUI features include:\\n\\n- Tempo (10-999 BPM)\\n- Measure count or Time count (MM: SS.ssss)\\n- Time signature (2/4, 3/4, 4/4, 5/4)\\n- Grid size (This correlates to note divisions; 1/16, 1/12, 1/8, 1/6, 1/4, 1/3, 1/2)\\n- Auto Scroll (Fast, Smooth, Off; how the sequencer displays measures off-screen as a sequence plays)\\n- Add an Audio Track (This won't be saved to the sequence but will play alongside it for ease of transcription)\\n- Title input\\n- Draw, select, and erase\\n- Instrument dropdown, instrument options, and select instrument (selects all notes of the current instrument)\\n- Select all, Cut, Copy, and Paste\\n- Zoom options\\n- Export options\\n- Help\\n- Fullscreen\\n- Tooltips\\n\\n### Advanced features\\n\\nUsers can access more advanced features for use in their sequences by clicking the advanced tab on the instrument they wish to change. This menu contains options to change volume, panning, detune (-1200 to +1200), reverb, distortion, and an equalizer. This array lets users configure specific instruments to create specific sounds, and textures, or to accompany other instruments as a layer or development of the original sound.\\n\\nOS also allows for commands to be entered in the browser console to manipulate different options in specific ways, such as setting custom to detune values (0-infinity), custom grid sizes, note divisions, and sequence ID amongst other things. These options bring OS closer to that of classic Digital Audio Workstations (DAWs) but are still limited in terms of accessibility and availability.\\n\\n### Browser and device support\\n\\nOnline Sequencer supports Chrome and other Chromium-based browsers, such as Microsoft Edge, Opera, and Brave. Firefox is also supported, but often with limited functionality. Safari and Internet Explorer are not supported, due to engine issues.\\n\\nOther mobile browsers support sequence playback, but not editing. However, iOS users have the same problem with WebKit on macOS. However, unlike in macOS, all browsers (even Chromium-based browsers) use WebKit as the engine for iOS due to Apple prohibiting other engines for security reasons; iOS does not support Online Sequencer, other than chat and forums.\\n\\nThe website's user interface is formatted for proper use on desktops, but some pages such as the chat page, playlists, and forums should be formatted well on mobile devices. ","iframe":true,"cover":"ec08ba72-8157-4415-8b34-aea1fe686e09","id":36,"sort":30,"clicks":321,"public":false,"is_new":false,"stats":[22]},{"url":"https://sb.bitsnbites.eu/","date_created":"2023-10-27T12:45:54.625Z","title":"Sound Box","slug":"sound-box","author":"Bits'n'bites","author_link":"https://gitlab.com/mbitsnbites","description":null,"tags":["tracker"],"archive_link":null,"archive":false,"content":"https://github.com/mbitsnbites/soundbox","iframe":true,"cover":"f2f825f3-a084-408b-86d1-2b64cf822c3c","id":38,"sort":31,"clicks":209,"public":false,"is_new":false,"stats":[23]},{"url":"https://femurdesign.com/omni/","date_created":"2023-10-27T12:45:54.224Z","title":"Omni","slug":"omni","author":"Luke Phillips","author_link":"https://femurdesign.com/","description":null,"tags":["polyphonic","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"fbb1364f-53cf-4f71-8f29-d7f572308e78","id":20,"sort":32,"clicks":210,"public":false,"is_new":false,"stats":[24]},{"url":"https://www.g200kg.com/docs/webmodular/","date_created":"2023-10-27T12:45:54.252Z","title":"Web Modular","slug":"web-modular","author":"g200kg","author_link":"https://www.g200kg.com/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"48e0280c-f7ff-4308-bde3-973b7febe89c","id":21,"sort":33,"clicks":202,"public":false,"is_new":false,"stats":[25]},{"url":"https://errozero.co.uk/acid-machine/","date_created":"2023-10-27T12:45:54.333Z","title":"Acid Machine 2","slug":"acid-machine-2","author":"Errozero","author_link":"https://www.errozero.co.uk/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"031eab3e-2f21-442a-8fdc-9769907824e0","id":25,"sort":34,"clicks":166,"public":false,"is_new":false,"stats":[26]},{"url":"https://apps.musedlab.org/groovepizza/","date_created":"2023-11-21T04:30:41.565Z","title":"Groove Pizza","slug":"groove-pizza","author":"NYU Music Experience Design Lab","author_link":"https://musedlab.org/groovepizza/","description":"Groove Pizza is a circular rhythm app for creative music making and learning! It’s also a playful tool for creating grooves using math concepts like shapes, angles and patterns","tags":["drums","sequencer","Educational"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"50d7bc15-edd5-4261-bc2a-1b173b5a1547","id":44,"sort":35,"clicks":91,"public":false,"is_new":false,"stats":[27]},{"url":"https://ojack.github.io/PIXELSYNTH/","date_created":"2023-10-27T12:45:54.286Z","title":"PixelSynth","slug":"pixel-synth","author":"Olivia Jack","author_link":"https://ojack.xyz/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"77369c22-944c-4f6a-83b5-85e16fe43abc","id":24,"sort":36,"clicks":217,"public":false,"is_new":false,"stats":[28]},{"url":"https://neosynth.pro","date_created":"2024-07-22T08:19:41.905Z","title":"NeoSynth.pro","slug":"neosynth","author":"NeoSynth","author_link":null,"description":"More than just an online synthesizer – it's a comprehensive learning platform designed to help music enthusiasts of all levels master the art of sound synthesis. Whether you're a beginner looking to understand the basics or an experienced producer aiming to refine your skills, NeoSynth Pro provides the tools and knowledge you need to create amazing sounds.","tags":null,"archive_link":null,"archive":false,"content":"Features\\n\\n Interactive synthesizer with multiple waveforms and real-time parameter control\\n Comprehensive tutorials covering all aspects of sound synthesis\\n Preset system for quick access to popular sounds\\n Visual feedback with dynamic waveform display\\n Responsive design for seamless use on desktop and mobile devices\\n","iframe":true,"cover":"da587f71-e54d-4146-88e5-551ffb2e64f9","id":60,"sort":37,"clicks":2,"public":false,"is_new":true,"stats":[52]},{"url":"https://www.multiplayerpiano.org/","date_created":"2023-11-26T08:06:18.875Z","title":"Multiplayer Piano","slug":"multiplayer-piano","author":"Brandon Lockaby","author_link":"https://github.com/Multiplayer-Piano","description":"Online piano, that can be played by any site visitor together in a virtual room or alone.","tags":["Piano","MIDI","Poly","Multiplayer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"9c10771b-e38f-469f-b58b-c9e6bb91a072","id":49,"sort":38,"clicks":4,"public":false,"is_new":false,"stats":[29]},{"url":"https://webaudiodemos.appspot.com/midi-synth/index.html","date_created":"2023-10-27T12:45:53.963Z","title":"MIDI–driven Web Audio","slug":"midi-driven-web-audio","author":"Chris Wilson","author_link":"https://github.com/cwilso","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"0005a0c9-c7e7-4922-a1e5-49d4326d2f77","id":6,"sort":39,"clicks":127,"public":false,"is_new":false,"stats":[30]},{"url":"https://samplestitch.com.s3-website-us-east-1.amazonaws.com/","date_created":"2023-10-27T12:45:54.185Z","title":"Samplestich","slug":"sample-stich","author":"Matt Daniels","author_link":"https://mdaniels.com","description":null,"tags":["samples","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"89859f9f-0d45-44dc-93b6-98dfa2e7d799","id":18,"sort":40,"clicks":164,"public":false,"is_new":false,"stats":[31]},{"url":"https://www.audiotool.com/product/device/heisenberg/","date_created":"2023-10-27T12:45:53.983Z","title":"Meet the Heisenberg","slug":"meet-the-heisenberg","author":"AudioTool","author_link":"https://www.audiotool.com","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"a2397ce6-7712-40e5-b4e0-df95c7992662","id":8,"sort":41,"clicks":255,"public":false,"is_new":false,"stats":[32]},{"url":"https://www.gsn-lib.org/apps/cardboardsynth/index.html","date_created":"2023-10-27T12:45:54.002Z","title":"Cardboard Synth","slug":"cardboard-synth","author":" Thorsten Thormählen","author_link":"https://www.uni-marburg.de/en/fb12/research-groups/grafikmultimedia/thormae","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"29fe1fcc-ca85-41b3-ab1e-7f10770f2c1f","id":9,"sort":42,"clicks":184,"public":false,"is_new":false,"stats":[33]},{"url":"https://poly.ozieblowski.dev/","date_created":"2024-06-26T15:32:49.507Z","title":"Polyrhythm3","slug":"polyrhythm3","author":"Anagramme","author_link":"https://github.com/Angramme","description":"A new reworked release of polyrhythm generator / metronome. The UI is divided into blocks, the first block is the visualization block, here you can see your \\"sections\\" displayed in a midi-esque fashion. It allows you to do the following actions:\\n\\n- dd new sections with the add button to the right\\n- select the section that you are currently editing in the editor by clicking on it.\\n- swap two sections by dragging one section over another.\\n","tags":["polyrhythm","MIDI","Sequencer","metronome"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"48979a40-1009-4ad3-8363-8cde02abf2c0","id":58,"sort":43,"clicks":null,"public":false,"is_new":true,"stats":[50]},{"url":"https://tanguysynth.com/","date_created":"2023-10-27T12:45:54.036Z","title":"Tanguy synth","slug":"tanguy-synth","author":"Luke Teaford","author_link":"https://github.com/luketeaford","description":null,"tags":["monophonic","additive","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"5471a71e-7c5b-4ea6-aee0-1b394873c381","id":11,"sort":44,"clicks":117,"public":false,"is_new":false,"stats":[34]},{"url":"https://www.blokdust.com/","date_created":"2023-11-25T06:31:23.261Z","title":"BlokDust","slug":"blokdust","author":"Luke Twyman, Luke Phillips, Edward Silverton","author_link":"https://wvnl.xyz/","description":"BlokDust is a creative visual drag and drop music exploration tool. Developed in Brighton UK and released in 2016, BlokDust uses the Web Audio API and makes use of Tone.js as an audio framework.","tags":["creative","sequencer"],"archive_link":null,"archive":false,"content":"Luke Twyman - project concept, design & Ul.\\nwhitevinyldesign.com\\n@whitevinylUK\\nLuke Phillips - audio development & musical interaction.\\nfemurdesign.com\\n@lukephills\\nEdward Silverton - client & server architecture & core development.\\nedsilv.com\\n@edsilv","iframe":true,"cover":"7e5bcda8-f37a-46c0-91d9-0a6ea501a101","id":47,"sort":45,"clicks":19,"public":false,"is_new":false,"stats":[35]},{"url":"https://billard.medusis.com/","date_created":"2024-06-26T16:11:33.298Z","title":"Billiard","slug":"biliard","author":"Carl-Leonard Von Fligenstein","author_link":"https://news.ycombinator.com/user?id=bambax","description":" Here's Billard. It combines music and physics into a unique creative tool, as I explore various unconventional methods for generating music.\\n\\nMost traditional music composition tools revolve around the idea of a repeatable pattern. Billard is a webapp that never repeats itself. It generates music automatically based on the collisions of balls in a 2D space. Collisions trigger notes (or chords) in a given key. One can add balls or move them (y-position is pitch); the app remembers its state between reloads; or it can be reset with the 'init' button on the top left. Gravity can be adjusted in real time to change the behavior of the balls.\\n\\nIt owes a lot of inspiration to Brian Eno and Erik Satie (inventor of musique d'ameublement, or \\"furniture music\\"). Some may think the lack of pattern makes it not musical enough -- but this lets it be listened to —and watched— for a while without boredom.\\n\\nThe webapp is made using plain JavaScript. (All SVG icons were made 'by hand'.) It uses Tone.js only for triggering piano samples. Beyond piano, it's MIDI-enabled and works well at slow speed with haunting, dark synth sounds.","tags":["MIDI","Poly","Physics","Sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b56f4acb-b528-4d18-a3b5-405fb10cafa4","id":59,"sort":46,"clicks":2,"public":false,"is_new":true,"stats":[51]},{"url":"https://mod-synth.io/","date_created":"2023-10-27T12:45:54.052Z","title":"MOD synth","slug":"mod-synth","author":"André Venâncio ","author_link":"https://github.com/andrevenancio","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"31564bf3-fca9-41a4-b390-d78ccd848107","id":12,"sort":47,"clicks":146,"public":false,"is_new":false,"stats":[36]},{"url":"https://perso.numericable.fr/olivier.friker/synth/O3-synth%20V1.3.html","date_created":"2023-10-27T12:45:54.069Z","title":"OLIF SY1K","slug":"olif-sy-1-k","author":"Olivier Friker","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"3b9a5e11-3de3-46fe-9cdc-e1668b152f31","id":13,"sort":48,"clicks":145,"public":false,"is_new":false,"stats":[37]},{"url":"http://www.noisesculptor.com/","date_created":"2023-10-27T12:45:54.104Z","title":"Note Sculptor","slug":"note-sculptor","author":"Ruin Technology","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"a01968d1-3f88-4522-9752-1c33d10d90d9","id":15,"sort":49,"clicks":129,"public":false,"is_new":false,"stats":[38]},{"url":"https://zya.github.io/granular/","date_created":"2024-07-29T17:37:33.497Z","title":"Multi-Touch Granular Sampler","slug":"granular","author":"Zya","author_link":"https://github.com/zya/","description":"The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.","tags":["Granular"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"f44fa962-37f0-487d-b69b-6880dd06dbd1","id":61,"sort":50,"clicks":1,"public":false,"is_new":false,"stats":[53]},{"url":"https://aikelab.net/websynthv2/","date_created":"2023-10-27T12:45:54.141Z","title":"WebAudioSynth V2","slug":"web-audio-synth-v2","author":"like","author_link":"https://github.com/aike/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"ac668fba-7226-43dc-a91f-bd21a31446e5","id":16,"sort":51,"clicks":305,"public":false,"is_new":false,"stats":[39]},{"url":"https://isleoftune.com/","date_created":"2023-11-25T06:22:15.184Z","title":"Isle of Tune","slug":"isleoftune","author":"Jim Hall","author_link":"https://twitter.com/isleoftune","description":"Draw an island, where everything plays music.","tags":["game","sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6830c24f-c7bf-430f-abc1-3d7fbf5f2557","id":46,"sort":52,"clicks":15,"public":false,"is_new":false,"stats":[40]},{"url":"https://www.soundtrap.com/","date_created":"2023-10-27T12:45:54.155Z","title":"Sound Trap","slug":"sound-trap","author":"Soundtrap","author_link":"https://www.soundtrap.com/about","description":null,"tags":["daw"],"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"63ef832a-f7da-4536-851f-4964005a89f1","id":17,"sort":53,"clicks":124,"public":false,"is_new":false,"stats":[41]},{"url":"http://typedrummer.com/","date_created":"2023-11-25T06:34:10.166Z","title":"Type Drummer","slug":"typedrummer","author":"Kyle Stetz","author_link":"http://kylestetz.com/","description":"Type your drum loops","tags":["sequencer","drums","Keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"19454c82-7338-4144-9f1c-010c80a70a6e","id":48,"sort":54,"clicks":21,"public":false,"is_new":false,"stats":[42]}]`),at={class:"text-center line-height-loose text-md"},ot={class:"mx-auto max-w-75ch intro md-text-lg"},rt={class:"p-2 flex flex-col mt-8"},lt={class:"text-4xl font-bold"},ct=f("div",{class:"text-lg"},"web synths",-1),ut={class:"p-2 flex flex-col mt-8"},ht={class:"text-4xl font-bold"},dt=f("div",{class:"text-lg"},"web musicians",-1),pt={__name:"AboutCount",setup(t){const e=O(),s=O(0),n=O(0),i=pe(s),a=pe(n),o=Pe(e);return Oe(o,async r=>{if(r){s.value=ne.length;const c=await(await fetch("https://dbs.chromatone.center/flows/trigger/0c0e8d82-8e12-44a6-867a-57ddeec9d774",{type:"GET",mode:"cors",headers:{"Content-Type":"application/json"}})).json();n.value=c.count}}),(r,l)=>(b(),y("div",at,[f("div",ot,[f("div",{class:"flex justify-center",ref_key:"counters",ref:e},[f("div",rt,[f("div",lt,P(M(i).toFixed()),1),ct]),f("div",ut,[f("div",ht,P(M(a).toFixed()||5e3)+"+",1),dt])],512)])]))}},ft={class:"flex flex-col text-center gap-4 bg-light-700 dark-bg-dark-200 dark-bg-opacity-20 p-4 rounded-lg shadow-lg mb-8"},mt=f("div",{class:"text-xl font-bold my-2"},"Suggest a new web-synth to the collection",-1),gt=["disabled"],bt={__name:"FormSynth",emits:["submitted"],setup(t,{emit:e}){const s=e,n=Re({url:"",text:""}),i=/[(http(s) ?): \/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/;function a(l){return i.test(l)}const o=O();async function r(){var l,c,u;try{const h=await fetch("https://dbs.chromatone.center/flows/trigger/dc8ca96f-76e6-4cac-b26c-10751746eb89",{method:"POST",mode:"cors",cache:"no-cache",credentials:"same-origin",headers:{"Content-Type":"application/json"},redirect:"follow",referrerPolicy:"no-referrer",body:JSON.stringify(n)});o.value=await(h==null?void 0:h.json()),n.url="",n.text="",setTimeout(()=>{s("submitted")},2e3)}catch(h){console.error(h,(c=(l=h==null?void 0:h.errors)==null?void 0:l[0])==null?void 0:c.message,(u=h==null?void 0:h.response)==null?void 0:u.status)}}return(l,c)=>(b(),y("div",ft,[o.value?(b(),y(j,{key:1},[U("Thanks for your suggestion!")],64)):(b(),y(j,{key:0},[mt,X(f("input",{class:"py-2 px-4 rounded bg-light-200 dark-bg-dark-200",type:"text",placeholder:"https://new.synth.url/","onUpdate:modelValue":c[0]||(c[0]=u=>n.url=u)},null,512),[[ee,n.url]]),X(f("textarea",{class:"py-2 px-4 rounded bg-light-200 dark-bg-dark-200",oninput:"this.style.height = ''; this.style.height = this.scrollHeight +'px'",placeholder:"Describe the web-app and how do you use it musically","onUpdate:modelValue":c[1]||(c[1]=u=>n.text=u)},null,512),[[ee,n.text]]),f("button",{class:"text-xl py-2 px-4 rounded bg-dark-100 text-light-200 dark-bg-light-700 dark-text-dark-500 shadow-lg disabled-opacity-20",disabled:!a(n.url),onClick:c[2]||(c[2]=u=>r())},P(a(n.url)?"Submit":"Please provide a valid URL"),9,gt)],64))]))}},_e=t=>(je("data-v-5f69066e"),t=t(),Ze(),t),yt={key:0,class:"px-2 py-1 bg-light-800 dark-bg-dark-800 rounded-xl transition text-sm select-none absolute bottom-2 left-2 text-center z-200 flex items-center gap-1 opacity-70 hover-opacity-100",title:"Since 28 Oct 2023"},vt=_e(()=>f("div",{class:"i-la-eye"},null,-1)),wt={class:"p-0 mt-2px"},kt={class:"p-4 flex flex-col items-start justify-between gap-2",style:{flex:"10 0 200px"}},_t={class:"flex items-center gap-2 flex-0 w-full"},xt={class:"transition text-xl select-none absolute top-4 left-4 text-center z-200 text-shadow-md"},St={class:"flex-auto"},Tt={class:"flex items-center gap-2"},Mt={class:"text-2xl font-bold"},It={key:0,class:"font-normal",title:"Archived locally by us"},At=_e(()=>f("div",{class:"i-ph-archive-duotone"},null,-1)),Ct=[At],Et={class:"flex-1"},Dt={key:1,class:"flex-1 flex items-end flex flex-wrap gap-2"},Lt=["href"],Pt={key:3,class:"text-xl p-2 absolute left-2 top-4 bg-yellow-600 rounded-xl shadow font-bold z-1000 transform -rotate-10"},Ot={__name:"SynthCard",props:{pos:{type:Number,default:0},sort:{type:Number,default:0},public:{type:Boolean,default:!1},title:{type:String,default:""},id:{type:Number,default:0},slug:{type:String,default:""},description:{type:String,default:""},cover:{type:String,default:""},url:{type:String,default:""},author:{type:String,default:""},author_link:{type:String,default:""},tags:{type:Array,default:()=>[]},archive:{type:Boolean,default:!1},archive_link:{type:String,default:""},iframe:{type:Boolean,default:null},clicks:{type:Number,default:0},stars:{type:Number,default:0},counter:{type:Number,default:0},is_new:{type:Boolean,default:null}},setup(t){const{isDark:e}=ze(),s=t,{isFormOpen:n,isAccessGranted:i}=ve(),{clicksCount:a,clickSynth:o}=He(s.id);async function r(){!s.public&&!i.value?n.value=!n.value:(o(s.id),s.iframe?window.open(s.slug+"/","_self"):window.open(s.archive?s.archive_link:s.url,"_blank"))}return(l,c)=>{var d;const u=Je,h=Be("ClientOnly");return b(),y("button",{class:"max-w-180 w-full flex flex-wrap items-stretch text-left relative bg-light-500 dark-bg-dark-300 -hover-translate-y-6px transition duration-200 hover-shadow-lg rounded-lg overflow-hidden relative border-1 border-dark-100 border-opacity-20 shadow-sm dark-border-light-800 dark-border-opacity-20",style:te({borderColor:M(Y)[t.id]?M(e)?"hsl(50deg,80%,35%)":"hsl(40deg,90%,80%)":null}),onClick:r},[f("div",{class:"cover min-h-50 bg-cover bg-center filter transition",style:te([{backgroundImage:`url(/cover/${t.slug}.webp)`},{flex:"1 1 280px"}])},[M(a)||t.counter?(b(),y("div",yt,[vt,f("div",wt,P(M(a)||t.counter),1)])):_("",!0)],4),f("div",kt,[f("div",_t,[f("div",xt,P(t.sort),1),f("div",St,[f("span",Tt,[f("div",Mt,P(t.title),1),t.archive?(b(),y("span",It,Ct)):_("",!0)])]),B(h,null,{default:G(()=>[B(u,{class:"text-xl mr-2 absolute z-200",id:t.id,stars:t.stars},null,8,["id","stars"])]),_:1})]),t.author?(b(),se(Ne(t.author_link?"a":"div"),{key:0,class:"p-0 text-md",href:t.author_link,target:"_blank"},{default:G(()=>[U("by "+P(t.author),1)]),_:1},8,["href"])):_("",!0),f("div",Et,[We(l.$slots,"default",{},void 0,!0)]),((d=t.tags)==null?void 0:d.length)>0?(b(),y("div",Dt,[(b(!0),y(j,null,ke(t.tags,g=>(b(),y("div",{class:"px-2 py-1 text-sm bg-light-800 dark-bg-dark-500 rounded-lg",key:g},P(g),1))),128))])):_("",!0),t.iframe?_("",!0):(b(),y("a",{key:2,class:"absolute bottom-4 right-4 i-la-external-link-square-alt text-lg opacity-40 transition transition hover-opacity-100",onClick:c[0]||(c[0]=Fe(()=>{},["stop"])),href:`/${t.slug}/`,title:"Opens in a new window"},null,8,Lt)),t.is_new?(b(),y("div",Pt,"NEW!")):_("",!0)])],4)}}},$t=we(Ot,[["__scopeId","data-v-5f69066e"]]);function L(t){return Array.isArray?Array.isArray(t):Te(t)==="[object Array]"}const Rt=1/0;function zt(t){if(typeof t=="string")return t;let e=t+"";return e=="0"&&1/t==-Rt?"-0":e}function Bt(t){return t==null?"":zt(t)}function E(t){return typeof t=="string"}function xe(t){return typeof t=="number"}function Nt(t){return t===!0||t===!1||Wt(t)&&Te(t)=="[object Boolean]"}function Se(t){return typeof t=="object"}function Wt(t){return Se(t)&&t!==null}function x(t){return t!=null}function Q(t){return!t.trim().length}function Te(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}const Ft="Incorrect 'index' type",jt=t=>`Invalid value for key ${t}`,Zt=t=>`Pattern length exceeds max of ${t}.`,qt=t=>`Missing ${t} property in key`,Vt=t=>`Property 'weight' in key '${t}' must be a positive integer`,fe=Object.prototype.hasOwnProperty;class Yt{constructor(e){this._keys=[],this._keyMap={};let s=0;e.forEach(n=>{let i=Me(n);this._keys.push(i),this._keyMap[i.id]=i,s+=i.weight}),this._keys.forEach(n=>{n.weight/=s})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function Me(t){let e=null,s=null,n=null,i=1,a=null;if(E(t)||L(t))n=t,e=me(t),s=ie(t);else{if(!fe.call(t,"name"))throw new Error(qt("name"));const o=t.name;if(n=o,fe.call(t,"weight")&&(i=t.weight,i<=0))throw new Error(Vt(o));e=me(o),s=ie(o),a=t.getFn}return{path:e,id:s,weight:i,src:n,getFn:a}}function me(t){return L(t)?t:t.split(".")}function ie(t){return L(t)?t.join("."):t}function Ut(t,e){let s=[],n=!1;const i=(a,o,r)=>{if(x(a))if(!o[r])s.push(a);else{let l=o[r];const c=a[l];if(!x(c))return;if(r===o.length-1&&(E(c)||xe(c)||Nt(c)))s.push(Bt(c));else if(L(c)){n=!0;for(let u=0,h=c.length;ut.score===e.score?t.idx{this._keysMap[s.id]=n})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,E(this.docs[0])?this.docs.forEach((e,s)=>{this._addString(e,s)}):this.docs.forEach((e,s)=>{this._addObject(e,s)}),this.norm.clear())}add(e){const s=this.size();E(e)?this._addString(e,s):this._addObject(e,s)}removeAt(e){this.records.splice(e,1);for(let s=e,n=this.size();s{let o=i.getFn?i.getFn(e):this.getFn(e,i.path);if(x(o)){if(L(o)){let r=[];const l=[{nestedArrIndex:-1,value:o}];for(;l.length;){const{nestedArrIndex:c,value:u}=l.pop();if(x(u))if(E(u)&&!Q(u)){let h={v:u,i:c,n:this.norm.get(u)};r.push(h)}else L(u)&&u.forEach((h,d)=>{l.push({nestedArrIndex:d,value:h})})}n.$[a]=r}else if(E(o)&&!Q(o)){let r={v:o,n:this.norm.get(o)};n.$[a]=r}}}),this.records.push(n)}toJSON(){return{keys:this.keys,records:this.records}}}function Ie(t,e,{getFn:s=p.getFn,fieldNormWeight:n=p.fieldNormWeight}={}){const i=new ue({getFn:s,fieldNormWeight:n});return i.setKeys(t.map(Me)),i.setSources(e),i.create(),i}function es(t,{getFn:e=p.getFn,fieldNormWeight:s=p.fieldNormWeight}={}){const{keys:n,records:i}=t,a=new ue({getFn:e,fieldNormWeight:s});return a.setKeys(n),a.setIndexRecords(i),a}function V(t,{errors:e=0,currentLocation:s=0,expectedLocation:n=0,distance:i=p.distance,ignoreLocation:a=p.ignoreLocation}={}){const o=e/t.length;if(a)return o;const r=Math.abs(n-s);return i?o+r/i:r?1:o}function ts(t=[],e=p.minMatchCharLength){let s=[],n=-1,i=-1,a=0;for(let o=t.length;a=e&&s.push([n,i]),n=-1)}return t[a-1]&&a-n>=e&&s.push([n,a-1]),s}const z=32;function ss(t,e,s,{location:n=p.location,distance:i=p.distance,threshold:a=p.threshold,findAllMatches:o=p.findAllMatches,minMatchCharLength:r=p.minMatchCharLength,includeMatches:l=p.includeMatches,ignoreLocation:c=p.ignoreLocation}={}){if(e.length>z)throw new Error(Zt(z));const u=e.length,h=t.length,d=Math.max(0,Math.min(n,h));let g=a,v=d;const m=r>1||l,S=m?Array(h):[];let T;for(;(T=t.indexOf(e,v))>-1;){let k=V(e,{currentLocation:T,expectedLocation:d,distance:i,ignoreLocation:c});if(g=Math.min(k,g),v=T+u,m){let I=0;for(;I=he;A-=1){let q=A-1,de=s[t.charAt(q)];if(m&&(S[q]=+!!de),W[A]=(W[A+1]<<1|1)&de,k&&(W[A]|=(D[A+1]|D[A])<<1|1|D[A+1]),W[A]&Z&&(C=V(e,{errors:k,currentLocation:q,expectedLocation:d,distance:i,ignoreLocation:c}),C<=g)){if(g=C,v=q,v<=d)break;he=Math.max(1,2*d-v)}}if(V(e,{errors:k+1,currentLocation:d,expectedLocation:d,distance:i,ignoreLocation:c})>g)break;D=W}const N={isMatch:v>=0,score:Math.max(.001,C)};if(m){const k=ts(S,r);k.length?l&&(N.indices=k):N.isMatch=!1}return N}function ns(t){let e={};for(let s=0,n=t.length;s{this.chunks.push({pattern:d,alphabet:ns(d),startIndex:g})},h=this.pattern.length;if(h>z){let d=0;const g=h%z,v=h-g;for(;d{const{isMatch:T,score:D,indices:C}=ss(e,v,m,{location:i+S,distance:a,threshold:o,findAllMatches:r,minMatchCharLength:l,includeMatches:n,ignoreLocation:c});T&&(d=!0),h+=D,T&&C&&(u=[...u,...C])});let g={isMatch:d,score:d?h/this.chunks.length:1};return d&&n&&(g.indices=u),g}}class ${constructor(e){this.pattern=e}static isMultiMatch(e){return ge(e,this.multiRegex)}static isSingleMatch(e){return ge(e,this.singleRegex)}search(){}}function ge(t,e){const s=t.match(e);return s?s[1]:null}class is extends ${constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const s=e===this.pattern;return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class as extends ${constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const n=e.indexOf(this.pattern)===-1;return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class os extends ${constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const s=e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class rs extends ${constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const s=!e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class ls extends ${constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const s=e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}class cs extends ${constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const s=!e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class Ce extends ${constructor(e,{location:s=p.location,threshold:n=p.threshold,distance:i=p.distance,includeMatches:a=p.includeMatches,findAllMatches:o=p.findAllMatches,minMatchCharLength:r=p.minMatchCharLength,isCaseSensitive:l=p.isCaseSensitive,ignoreLocation:c=p.ignoreLocation}={}){super(e),this._bitapSearch=new Ae(e,{location:s,threshold:n,distance:i,includeMatches:a,findAllMatches:o,minMatchCharLength:r,isCaseSensitive:l,ignoreLocation:c})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class Ee extends ${constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let s=0,n;const i=[],a=this.pattern.length;for(;(n=e.indexOf(this.pattern,s))>-1;)s=n+a,i.push([n,s-1]);const o=!!i.length;return{isMatch:o,score:o?0:1,indices:i}}}const ae=[is,Ee,os,rs,cs,ls,as,Ce],be=ae.length,us=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,hs="|";function ds(t,e={}){return t.split(hs).map(s=>{let n=s.trim().split(us).filter(a=>a&&!!a.trim()),i=[];for(let a=0,o=n.length;a!!(t[K.AND]||t[K.OR]),gs=t=>!!t[le.PATH],bs=t=>!L(t)&&Se(t)&&!ce(t),ye=t=>({[K.AND]:Object.keys(t).map(e=>({[e]:t[e]}))});function De(t,e,{auto:s=!0}={}){const n=i=>{let a=Object.keys(i);const o=gs(i);if(!o&&a.length>1&&!ce(i))return n(ye(i));if(bs(i)){const l=o?i[le.PATH]:a[0],c=o?i[le.PATTERN]:i[l];if(!E(c))throw new Error(jt(l));const u={keyId:ie(l),pattern:c};return s&&(u.searcher=re(c,e)),u}let r={children:[],operator:a[0]};return a.forEach(l=>{const c=i[l];L(c)&&c.forEach(u=>{r.children.push(n(u))})}),r};return ce(t)||(t=ye(t)),n(t)}function ys(t,{ignoreFieldNorm:e=p.ignoreFieldNorm}){t.forEach(s=>{let n=1;s.matches.forEach(({key:i,norm:a,score:o})=>{const r=i?i.weight:null;n*=Math.pow(o===0&&r?Number.EPSILON:o,(r||1)*(e?1:a))}),s.score=n})}function vs(t,e){const s=t.matches;e.matches=[],x(s)&&s.forEach(n=>{if(!x(n.indices)||!n.indices.length)return;const{indices:i,value:a}=n;let o={indices:i,value:a};n.key&&(o.key=n.key.src),n.idx>-1&&(o.refIndex=n.idx),e.matches.push(o)})}function ws(t,e){e.score=t.score}function ks(t,e,{includeMatches:s=p.includeMatches,includeScore:n=p.includeScore}={}){const i=[];return s&&i.push(vs),n&&i.push(ws),t.map(a=>{const{idx:o}=a,r={item:e[o],refIndex:o};return i.length&&i.forEach(l=>{l(a,r)}),r})}class F{constructor(e,s={},n){this.options={...p,...s},this.options.useExtendedSearch,this._keyStore=new Yt(this.options.keys),this.setCollection(e,n)}setCollection(e,s){if(this._docs=e,s&&!(s instanceof ue))throw new Error(Ft);this._myIndex=s||Ie(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){x(e)&&(this._docs.push(e),this._myIndex.add(e))}remove(e=()=>!1){const s=[];for(let n=0,i=this._docs.length;n-1&&(l=l.slice(0,s)),ks(l,this._docs,{includeMatches:n,includeScore:i})}_searchStringList(e){const s=re(e,this.options),{records:n}=this._myIndex,i=[];return n.forEach(({v:a,i:o,n:r})=>{if(!x(a))return;const{isMatch:l,score:c,indices:u}=s.searchIn(a);l&&i.push({item:a,idx:o,matches:[{score:c,value:a,norm:r,indices:u}]})}),i}_searchLogical(e){const s=De(e,this.options),n=(r,l,c)=>{if(!r.children){const{keyId:h,searcher:d}=r,g=this._findMatches({key:this._keyStore.get(h),value:this._myIndex.getValueForItemAtKeyId(l,h),searcher:d});return g&&g.length?[{idx:c,item:l,matches:g}]:[]}const u=[];for(let h=0,d=r.children.length;h{if(x(r)){let c=n(s,r,l);c.length&&(a[l]||(a[l]={idx:l,item:r,matches:[]},o.push(a[l])),c.forEach(({matches:u})=>{a[l].matches.push(...u)}))}}),o}_searchObjectList(e){const s=re(e,this.options),{keys:n,records:i}=this._myIndex,a=[];return i.forEach(({$:o,i:r})=>{if(!x(o))return;let l=[];n.forEach((c,u)=>{l.push(...this._findMatches({key:c,value:o[u],searcher:s}))}),l.length&&a.push({idx:r,item:o,matches:l})}),a}_findMatches({key:e,value:s,searcher:n}){if(!x(s))return[];let i=[];if(L(s))s.forEach(({v:a,i:o,n:r})=>{if(!x(a))return;const{isMatch:l,score:c,indices:u}=n.searchIn(a);l&&i.push({score:c,key:e,value:a,idx:o,norm:r,indices:u})});else{const{v:a,n:o}=s,{isMatch:r,score:l,indices:c}=n.searchIn(a);r&&i.push({score:l,key:e,value:a,norm:o,indices:c})}return i}}F.version="7.0.0";F.createIndex=Ie;F.parseIndex=es;F.config=p;F.parseQuery=De;ms(fs);const _s={class:"flex flex-col items-center mb-2 px-8 relative"},xs={class:"w-full max-w-110 flex items-center relative my-4 gap-2"},Ss=f("div",{class:"i-la-search absolute left-2 text-xl opacity-40"},null,-1),Ts=["title"],Ms={key:0,class:"i-la-star-solid"},Is={key:1,class:"i-la-star"},As={class:"flex flex-col items-center gap-8 p-2 max-w-160 mx-auto mb-12"},Cs=["index"],Es={class:"p-2",key:"nnn"},Ds={key:0,class:"animate-pulse text-center"},Ls={__name:"SynthList",setup(t){const{isAccessGranted:e}=ve(),s=O(ne),n=new F(ne,{includeScore:!0,ignoreLocation:!0,shouldSort:!0,keys:["title","slug","author"]}),i=$e("fav-filter",!1),a=O(""),o=O(!1),r=J(()=>n.search(a.value)),l=J(()=>r.value.filter(h=>h.score<.2).sort((h,d)=>h.score>d.score?1:0).map(h=>h.item.slug)),c=J(()=>s.value.filter(h=>a.value?l.value.includes(h.slug):i.value?Y.value[h.id]:!0)),u=O([]);return qe(async()=>{u.value=await Qe("synths",{fields:["id",{stats:["views","stars"]}]})}),Ve(Y,h=>{Object.values(h).filter(Boolean).length==0&&(i.value=!1)},{deep:!0,immediate:!0}),(h,d)=>{const g=$t,v=bt;return b(),y(j,null,[f("div",_s,[f("div",xs,[X(f("input",{class:"w-full focus text-xl py-2 pl-9 bg-light-50 bg-opacity-100 shadow-inner border-1 border-dark-100 border-opacity-10 rounded-lg dark-bg-dark-200 outline-none focus-border-opacity-90",placeholder:"Type to search...","onUpdate:modelValue":d[0]||(d[0]=m=>a.value=m)},null,512),[[ee,a.value]]),Ss,a.value?(b(),y("div",{key:0,class:"i-la-times absolute right-2 text-xl opacity-40 hover-opacity-80 transition cursor-pointer",onClick:d[1]||(d[1]=m=>a.value="")})):_("",!0),Object.values(M(Y)).filter(Boolean).length>0&&!a.value?(b(),y("button",{key:1,class:"transition p-2 shadow dark-bg-dark-200 dark-hover-bg-dark-100 bg-light-300 hover-bg-light-100 rounded-lg flex items-center gap-2 text-xl text-yellow",title:M(i)?"Only favourites are shown":"Show only favourites",onClick:d[2]||(d[2]=m=>i.value=!M(i))},[B(Ye,{name:"fade"},{default:G(()=>[M(i)?(b(),y("div",Ms)):(b(),y("div",Is))]),_:1})],8,Ts)):_("",!0),a.value?_("",!0):(b(),y("button",{key:2,class:"transition p-2 shadow dark-bg-dark-200 dark-hover-bg-dark-100 bg-light-300 hover-bg-light-100 rounded-lg flex items-center gap-2 text-xl",title:"Suggest a new link to the collection",onClick:d[3]||(d[3]=m=>o.value=!o.value)},[f("div",{class:Ue(["i-la-plus transform transition",{"rotate-45":o.value}])},null,2)]))])]),f("div",As,[o.value?_("",!0):(b(),se(Ke,{key:0,name:"fade"},{default:G(()=>[(b(!0),y(j,null,ke(c.value,(m,S)=>{var T,D,C,R,Z,N,k,I;return b(),y("div",{class:"flex w-full sticky",style:te([{top:`${10+S*4}px`,zIndex:S+10},{flex:"1 1 240px"}]),key:m.id,index:S},[(b(),se(g,Ge({pos:S,style:{filter:!m.public&&!M(e)?"contrast(70%) blur(2px) opacity(80%)":""},key:m.id,ref_for:!0},m,{counter:(R=(C=(D=(T=u.value)==null?void 0:T.find(w=>(w==null?void 0:w.id)==(m==null?void 0:m.id)))==null?void 0:D.stats)==null?void 0:C[0])==null?void 0:R.views,stars:(I=(k=(N=(Z=u.value)==null?void 0:Z.find(w=>(w==null?void 0:w.id)==(m==null?void 0:m.id)))==null?void 0:N.stats)==null?void 0:k[0])==null?void 0:I.stars}),null,16,["pos","style","counter","stars"]))],12,Cs)}),128))]),_:1})),c.value.length==0||o.value?(b(),y("div",Es,[o.value?_("",!0):(b(),y("div",Ds,"We don't know such a web-app yet. ")),B(v,{class:"max-w-140 mx-auto mt-6",onSubmitted:d[4]||(d[4]=m=>o.value=!1)})])):_("",!0)])],64)}}},Ps="/click-logo.svg",Gs=JSON.parse('{"title":"Web synths","description":"Web synthesizers to play with MIDI controllers","frontmatter":{"title":"Web synths","description":"Web synthesizers to play with MIDI controllers","date":"2023-06-22T00:00:00.000Z","layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1724317618000}'),Os={name:"index.md"},$s=f("h1",{class:"text-center text-2xl sm-text-3xl font-bold mt-8",style:{padding:"0.1rem 1rem"}},"Online synthesizers and web piano apps",-1),Rs=f("h2",{class:"text-xl sm-text-2xl text-center my-2",style:{padding:"0 1rem"}},"Curated collection of free music creation resources",-1),zs={class:"px-4 text-lg text-center mb-8 max-w-150 mx-auto"},Bs=f("a",{class:"font-bold",href:"https://chromatone.center",target:"_blank",rel:"noopener"}," Chromatone",-1),Ns=f("a",{class:"font-bold",href:"https://playtronica.com",target:"_blank",rel:"noopener"}," Playtronica",-1),Ws=f("h3",{class:"font-bold text-xl"},"Welcome to the community of web-based musicians!",-1),Fs=f("h4",null,[f("a",{target:"_blank",href:"https://chromatone.center/"},[f("img",{src:Ps,class:"max-w-16 mx-auto"})])],-1);function js(t,e,s,n,i,a){const o=Ls,r=pt,l=it;return b(),y("div",null,[$s,Rs,B(o),f("div",zs,[Bs,U(" is an open source visual music language for education, research and performance. We develop a new universal way to communicate music. "),Ns,U(" is a digital playground that explores the possibilities of the material world through technology, creating gadgets that make the world musical. Together we share our passion for online music instruments. "),B(r),Ws,Fs,B(l)])])}const Ks=we(Os,[["render",js]]);export{Gs as __pageData,Ks as default}; +import{u as De,a as pe,b as Le,w as Oe,c as ve,d as ze}from"./chunks/theme.DaoXcD6v.js";import{f as b,h as y,k as f,u as M,A as _,r as O,t as L,d as $e,I as j,j as X,p as ee,l as U,_ as we,B as Re,C as Be,J as te,D as B,E as G,F as se,K as Ne,m as We,L as ke,H as Fe,M as je,N as Ze,e as K,o as qe,w as Ve,T as Ye,q as Ue,O as Ge,P as He}from"./chunks/framework.Ch2f3zJW.js";import{u as Je,f as Y,_ as Ke,a as Qe}from"./chunks/useClicks.RkCdhX3B.js";import"./chunks/index.CVGuM2cA.js";const Xe={class:"text-center line-height-loose text-md"},et={class:"mx-auto max-w-75ch intro md-text-lg"},tt=f("div",{class:"i-mdi-share"},null,-1),st=f("span",null,"Share to save for later",-1),nt=[tt,st],it={__name:"AboutShare",setup(t){const{share:e,isSupported:s}=De();function n(){e({title:"Web synths collection",text:"Look at this online synthesizer collection. No need to install anything - just your browser and any MIDI controller will do.",url:location.href})}return(i,a)=>(b(),y("div",Xe,[f("div",et,[M(s)?(b(),y("button",{key:0,class:"mx-auto flex items-center gap-2 text-white py-2 px-4 mt-6 shadow-lg rounded-lg cursor-pointer bg-green-600 -hover-translate-y-2px transition",onClick:a[0]||(a[0]=o=>n()),"data-umami-event":"Shared via button"},nt)):_("",!0)])]))}},ne=JSON.parse(`[{"url":"https://dotpiano.com/","date_created":"2023-10-27T12:45:53.887Z","title":"Dotpiano","slug":"dotpiano","author":"Alex Chen and Yotam Mann","author_link":null,"description":"Dot Piano is an online musical instrument allowing users to play a digital piano using their computer keyboard. The interactive web app provides a simple and intuitive interface for creating and sharing music, making it accessible for both beginners and experienced musicians.","tags":["polyphonic","midi","keyboard","Multiplayer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6dac5187-213f-4eb8-96ed-63c2e689b206","id":1,"sort":1,"clicks":6427,"public":true,"is_new":false,"stats":[1]},{"url":"https://waveform.playtronica.com/","date_created":"2023-10-27T12:45:54.644Z","title":"Waveform","slug":"waveform","author":"Qvantor","author_link":"https://github.com/qvantor/","description":"Polyphonic web synthesizer with simple yet capable interface.","tags":["playtronica","polyphonic","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"86cb9385-9deb-4f10-95cb-765980156e65","id":39,"sort":2,"clicks":6795,"public":true,"is_new":false,"stats":[2]},{"url":"https://juno-106.js.org/","date_created":"2023-10-27T12:45:54.085Z","title":"Juno-106","slug":"juno-106","author":"Steve Goldberg ","author_link":"https://github.com/stevengoldberg","description":"Online emulator of the classic Roland Juno-106 synthesizer. This interactive web app allows users to experiment with the iconic sounds of the Juno-106 directly from their browser. It features authentic recreations of the synth's controls and sound characteristics, making it a valuable tool for music enthusiasts and producers. ","tags":["fm","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b54cfce7-af2f-4e03-a5b3-81fc853d2cc8","id":14,"sort":3,"clicks":5019,"public":true,"is_new":false,"stats":[3]},{"url":"https://chromatone.center/practice/synth/elementary/","date_created":"2023-10-27T12:45:54.453Z","title":"Elementary synth","slug":"elementary","author":"Chromatone","author_link":"https://chromatone.center","description":"The Chromatone Elementary Synth is an interactive web-based synthesizer designed to provide a hands-on learning experience in sound synthesis. It features MIDI support and is built using the Elementary audio library. This synthesizer allows users to explore different synthesis techniques through a user-friendly interface, making it an excellent tool for both beginners and experienced musicians looking to experiment with sound design.","tags":["chromatone","polyphonic","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"21070a51-6089-48bd-8840-ba37b5f2963d","id":29,"sort":4,"clicks":3186,"public":true,"is_new":false,"stats":[4]},{"url":"https://mmontag.github.io/dx7-synth-js/","date_created":"2023-10-27T12:45:54.477Z","title":"DX7 Synth","slug":"dx7","author":"Matt Montag ","author_link":"https://github.com/mmontag","description":"The DX7 Synth JS is an online emulator of the classic Yamaha DX7 synthesizer. This interactive web app replicates the iconic FM synthesis capabilities of the DX7, allowing users to create and manipulate sounds using various parameters such as algorithms, operators, and envelopes. The app supports MIDI devices and provides a user-friendly interface for sound design experimentation. ","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"f3b285ee-6b82-453b-9ff6-aeda18ec675b","id":30,"sort":5,"clicks":2718,"public":true,"is_new":false,"stats":[5]},{"url":"https://touchme.chromatone.center/","date_created":"2023-10-27T12:45:53.941Z","title":"TouchME","slug":"touchme","author":"Chromatone","author_link":"https://chromatone.center","description":"TouchMe Experience by Chromatone is an interactive audio-visual web app that transforms touch inputs into music and visual effects. It features MIDI support, multiple synth oscillators, and various quantize and BPM modes. Users can explore six interactive SVG scenes, switch between light and dark modes, and view basic session statistics. Designed for creative experimentation, it offers a unique way to engage with music and visuals.","tags":["chromatone","playtronica"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"68062279-8e08-4953-ae8f-7a77c584948e","id":3,"sort":6,"clicks":3418,"public":true,"is_new":false,"stats":[6]},{"url":"https://muted.io/","date_created":"2023-10-27T12:45:54.742Z","title":"Muted.io","slug":"muted-io","author":"Sébastien Noël","author_link":"https://twitter.com/muted_io","description":"Muted.io offers a collection of interactive music theory tools designed for learning music online. These tools include a virtual piano, chord and scale references, a circle of fifths, tuners, and various visual aids to understand music theory concepts. The site is ideal for musicians looking to improve their knowledge and practice music in an engaging way.","tags":["educational","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"5c08ac7d-4414-47c0-b7d1-a9867ba3949f","id":43,"sort":7,"clicks":175,"public":false,"is_new":false,"stats":[10]},{"url":"https://chromatone.center/practice/synth/soundfont/","date_created":"2023-12-18T10:20:56.985Z","title":"Soundfont Sampler Synth","slug":"soundfont","author":"Chromatone","author_link":"https://github.com/chromatone","description":"Free open source soundfont sampler online synthesizer. Very robust and hassle free way to play some straightforward sampled instruments like horns, xylophones and just piano sounds. Instantly playable instrument with about 90 presets out of the box. ","tags":["Poly","Keyboard","Sampler","MIDI"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"26704e9d-5964-4a0f-940c-370c14777e95","id":51,"sort":8,"clicks":0,"public":true,"is_new":true,"stats":[43]},{"url":"https://midi.city/","date_created":"2023-12-28T05:40:45.140Z","title":"MIDI.city","slug":"midi-city","author":"Astral Digital","author_link":"https://astral.digital/","description":"midi.city is a free online synthesizer, built by Jack.\\n\\nmidi.city has over 128 different instruments including: Pianos, Saxophones, Drums, Trumpets, Synth Pads, Guitar, Violins and all other instruments defined in the General Midi specification.","tags":null,"archive_link":null,"archive":false,"content":"midi.city has been created with the help of hundreds of different open-source projects and with contributions from many others.\\n\\n- Tone.js by Yotam Mann: the Web Audio API-based sound engine that implements a majority of nodes used in the audio graph. It powers many of the advanced features used such as Granular Synthesis, Reverb, and timing.\\n- Groove Monkee: graciously provided the MIDI files that are used for the percussion loops.\\n- Keenan Brand: created the midi.city logo and various icons used on the site.\\n- Noun Project: various icons are used via a Pro license.\\n- Google Material Design: various icons.\\n- Compifont by Marcin Dziembor: the soundfont powering the samples and many the audio graph definitions, is originally . Several modifications have been made to adapt to midi.city and the Web Audio API. ","iframe":true,"cover":"8cb479ba-e4e0-42f2-986c-597b68b8e639","id":52,"sort":9,"clicks":10,"public":false,"is_new":false,"stats":[44]},{"url":"https://apps.musedlab.org/aqwertyon/theory/","date_created":"2023-10-27T12:45:54.711Z","title":"aQWERTYon","slug":"aqwertyon","author":"Mused lab","author_link":"https://musedlab.org/","description":"aQWERTYon is an interactive web app that turns your computer keyboard into a musical instrument. Designed for music theory practice, it allows users to play notes and chords using a QWERTY keyboard layout. The app provides a visual representation of notes and scales, making it a useful tool for learning and exploring music theory concepts.","tags":["polyphonic","samples"],"archive_link":null,"archive":false,"content":"The **aQWERTYon** (QWERTY accordion) is designed to simplify the process for improvising, learning, and making music with your computer keyboard. Play along with your favorite YouTube videos, learn music theory through our Music Theory for Bedroom Producers course in collaboration with Soundfly, or take advantage of Web MIDI and us it to play and record into your favorite digital audio workstation, such as Soundtrap.com, GarageBand, Logic, or Ableton, or as input into music notation programs like Noteflight.\\n\\nhttps://youtu.be/hqFr4lF6u_Y","iframe":true,"cover":"e7c87de8-c290-4da9-b0e0-eed73871b27a","id":42,"sort":10,"clicks":348,"public":false,"is_new":false,"stats":[8]},{"url":"https://musiclab.chromeexperiments.com/","date_created":"2023-11-26T08:23:47.351Z","title":"Chrome Music Lab","slug":"chrome-lab","author":"Google","author_link":"https://github.com/googlecreativelab/chrome-music-lab","description":"Chrome Music Lab is a website that makes learning music more accessible through fun, hands-on experiments.","tags":["Educational","Keyboard","MIDI","Poly","Piano","Analysis","Mic","Visuals"],"archive_link":null,"archive":false,"content":"## What can it be used for?\\n\\nMany teachers have been using Chrome Music Lab as a tool in their classrooms to explore music and its connections to science, math, art, and more. They’ve been combining it with dance and live instruments. Here’s a collection of some uses we’ve found on Twitter.\\n\\n## Can I use it to make my own songs?\\n\\nYes. Check out the Song Maker experiment, which lets you make and share your own songs.\\n\\n## Do I need to make an account?\\n\\nNope. Just open any experiment and start playing.\\n\\n## How were these built?\\n\\nAll our experiments are all built with freely accessible web technology such as Web Audio API, WebMIDI, Tone.js, and more. These tools make it easier for coders to build new interactive music experiences. You can get the open-source code to lots of these experiments here on [Github](https://github.com/googlecreativelab/chrome-music-lab).\\n\\n## What devices do these work on?\\n\\nYou can play with these experiments across devices – phones, tablets, laptops – just by opening the site on a web browser such as Chrome.","iframe":true,"cover":"297b059e-a6fa-4faa-91b2-c2e1e68cf98f","id":50,"sort":11,"clicks":304,"public":false,"is_new":false,"stats":[9]},{"url":"https://topos.live/","date_created":"2024-06-21T12:06:09.754Z","title":"Topos","slug":"topos","author":"Raphael","author_link":"https://github.com/Bubobubobubobubo/topos","description":"Topos is an algorithmic sequencer. Topos is also a live coding environment. To sum it up, think: \\"making music in real time through code\\". Code used as an expressive medium for musical improvisation! Topos uses small algorithms to represent musical sequences and processes.","tags":["Live coding","MIDI","Poly","Visuals","FM"],"archive_link":null,"archive":false,"content":"Topos is deeply inspired by the Monome Teletype. The Teletype is/was an open source hardware module for Eurorack synthesizers. While the Teletype was initially born as an hardware module, Topos aims to be a web-browser based cousin of it! It is a sequencer, a scriptable interface, a companion for algorithmic music-making. Topos wishes to fullfill the same goal as the Teletype, keeping the same spirit alive on the web. It is free, open-source, and made to be shared and used by everyone. Learn more about live coding on livecoding.fr.","iframe":true,"cover":"76e0c2b7-e95e-447d-982d-e156cb9d1530","id":57,"sort":12,"clicks":0,"public":false,"is_new":true,"stats":[49]},{"url":"https://websynths.com/","date_created":"2023-10-27T12:45:54.019Z","title":"Websynths Microtonal","slug":"microtonal","author":"WebSynths","author_link":"https://www.websynths.com/microtonal/","description":"The deepest internet synthesizer","tags":null,"archive_link":null,"archive":false,"content":"\\nWebSynths is a free resource for any musician with internet access! But, it is made possible by support from our patrons. Please consider helping if you can: patreon.com/WebSynths\\n\\n- You can use your QWERTY keyboard, mouse, mobile touch or MIDI keyboard to play the sounds.\\n- You can change the tuning of the keys, or select a scale, by clicking the tuning button.\\n- MIDI is a way to use an external physical instrument to play it. If you have a MIDI keyboard that you wish to use, hit the MIDI button to set it up.\\n- If a note gets stuck, hit the panic button, it will stop all voices from playing.\\n- You can use the arrows on your computer keyboard to scroll through the presets.\\n\\nA simple explanation of Subtractive Synthesis:\\n\\n- Subtractive Synthesis works by taking one or more oscillators, setting the pitch of their oscillation (usually to the note of the key being pressed,) setting the shape of their oscillation to the desired timbre (Sine, Saw, Square or more complex shapes,) mixing them together and running them through a filter to change their EQ (usually filtering out the highest or lowest frequencies... this is why it is called \\"subtractive\\"), then running them through an envelope so the note can be heard on when a key is pressed down and is silenced when the key is released. In the case of WebSynths Microtonal, the sound is then sent through effects like delay, chorus and reverb and out to your speakers.\\n- Oscillators are the voices. This synth has 3 of them in the left column. You can change the character of each voice by changing the parameters of them. The 'Shape' menu allows you to choose from different styles of voice for each oscillator. You can turn each voice on or off and mix them together.\\n- The filter section applies equalization to your oscillators via the cutoff and emphasis controls. You can change the equalization filter type to 'low pass / high pass' and many more. You can use the LFOs and/or Envelopes to change how the filtration changes over time. An LFO is just a slow oscillator that is uses to automatically move a parameter over time.\\n- The amplitude envelope changes how your sound is played, volume-wise, when you hit a note. For example, having a long release time will mean that once you let go of the note you are playing it will tail off until fading out. Having a slow attack will mean that your note will fade in instead of playing at full volume straight away.\\n- The effects section allows you to add various effects to your overall sound. You can change the effects, mix them together and toggle them on or off too.\\n\\n","iframe":false,"cover":"ffc54664-7ba4-4855-a56a-6657a5542a04","id":10,"sort":13,"clicks":172,"public":false,"is_new":false,"stats":[11]},{"url":"https://stuartmemo.com/synth/","date_created":"2023-10-27T12:45:54.586Z","title":"Sympathetic Synthesizer System Mk 1","slug":"sympathetic","author":"Stuart Memo ","author_link":"https://github.com/stuartmemo","description":"The Sympathetic Synthesizer System Mk 1 is an interactive web app that emulates a complex synthesizer. It features three oscillators with selectable waveforms, an LFO, filters with ADSR controls, and noise generation. The app allows users to explore sound design through various parameters, offering a detailed and hands-on synthesis experience. MIDI support is also included for enhanced control.","tags":["keyboard","midi","additive"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"123aeb6d-c7b0-43dd-a852-98660bdf03f0","id":37,"sort":14,"clicks":302,"public":false,"is_new":false,"stats":[12]},{"url":"https://learningsynths.ableton.com/","date_created":"2023-10-27T12:45:54.360Z","title":"Learning synths","slug":"ableton","author":"Ableton","author_link":"https://github.com/Ableton","description":"Explore the fundamentals of synthesis with this interactive web-app by Ableton. Dive into the world of sound design, experiment with different parameters, and learn how to sculpt your own unique sounds with ease.","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"0bf8312d-c449-4f5c-80ad-36594ef98db6","id":26,"sort":15,"clicks":185,"public":false,"is_new":false,"stats":[13]},{"url":"https://www.femurdesign.com/theremin/","date_created":"2023-10-27T12:45:54.206Z","title":"Theremin","slug":"theremin","author":"Femur","author_link":"https://femurdesign.com/","description":"Experience the magic of the theremin with this interactive web-app by Femur Design. Harness the power of motion to create ethereal music without physical contact. Experiment with pitch and volume to craft haunting melodies right in your browser.","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6b22ef48-6830-4cf2-810d-809408033450","id":19,"sort":16,"clicks":320,"public":false,"is_new":false,"stats":[14]},{"url":"https://cardinal.kx.studio/live","date_created":"2024-05-20T18:57:14.836Z","title":" DISTRHO Cardinal","slug":"cardinal","author":"Filipe Coelho, aka falkTX","author_link":"https://falktx.berlin/","description":"Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.","tags":["Modular","FM","Poly"],"archive_link":null,"archive":false,"content":"Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.\\nIt is based on the popular VCV Rack but with a focus on being a fully self-contained plugin version.\\n\\nMore specifically, this is a DPF-based plugin wrapper around VCV Rack, using its code directly instead of forking the project, with the target of having a self-contained, fully free and open-source plugin version of Rack.\\nSee the why section below for the reasons Cardinal exists, also for frequently asked questions check this FAQ document.\\n\\nCardinal contains Rack, some 3rd-party modules and a few internal utilities all in a single binary.\\nAll \\"Core\\" modules from Rack have been replaced by Cardinal equivalents, simplified to better work for an audio plugin.\\n\\nCardinal does not load external modules and does not connect to the official Rack library/store.\\nAll VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues.\\n\\n## Why\\n\\nCardinal was created first and foremost as a way to have Rack as a proper open-source audio plugin.\\nA proper audio plugin should be self-contained as much as possible, as to not interfere with the DAW/Host. Loading external modules clearly goes against this idea.\\nNot to mention being open-source, otherwise we are at the mercy of the wishes of a company for what we can and cannot do, which is not something Cardinal's authors wish to abide by.\\n\\nA self-contained plugin can't be overstated, as DLL/shared-object symbol conflicts can trigger hard-to-debug crashes.\\nWhile Rack tries to mitigate this as much as possible, crashes due to conflicting modules have already been seen in v2 builds.\\nOn the other side, Cardinal redefines class and function names as needed to avoid as many conflicts as possible.\\n\\nSupport for ARM and non-mainstream platforms (for example BSD) has also always been missing from the official Rack since the start.\\nWhile we can patch the Rack free version to support these, same can't be done with Rack Pro with it being a closed-source product.\\nThe online library/store only supports a very specific set of platforms too, so non-supported platforms would need any 3rd-party modules to be manually compiled to make them usable.\\n\\nUnhappiness with the audio threading behaviour of Rack also plays a role.\\nBoth audio and MIDI should be locked to the host audio thread as to minimize (or even altogether remove) latency and jitter.\\nThe use of separate threads for MIDI is bad design, one that has been corrected in DAWs and JACK-MIDI for several years...\\nBut Rack's use of RtMidi requires separate threading, so Cardinal does not use it.","iframe":true,"cover":"dc7070e1-66fd-4f74-95d2-92d8388864e2","id":56,"sort":17,"clicks":5,"public":false,"is_new":true,"stats":[48]},{"url":"https://multiplayer-orchestra.com","date_created":"2024-04-23T08:07:22.796Z","title":"Multiplayer Orchestra","slug":"multiplayer-orchestra","author":"Mutli_Orchestra","author_link":"https://twitter.com/Mutli_Orchestra","description":"Play in real time with people from all around the world with more than 400 instruments.","tags":["Poly","MIDI","Keyboard","Collaborative","Online"],"archive_link":null,"archive":false,"content":"Multiplayer Orchestra ([https://www.multiplayer-orchestra.com/](https://www.multiplayer-orchestra.com/)) is a web application that allows you to virtually collaborate with musicians from around the world in real-time. Here are some key features:\\n\\n* **Large instrument selection:** Choose from over 400 instruments, including pianos, guitars, drums, and orchestral instruments.\\n* **Real-time collaboration:** Play music simultaneously with other users, creating a virtual orchestra.\\n* **Public and private rooms:** Join public rooms to jam with others or create private rooms with a password for specific collaborations.\\n* **Contests:** Participate in contests to win prizes like Amazon gift cards by recording solo performances.\\n\\n**It's important to note that the website seems to be in beta based on the version information listed (Beta 0.30).** ","iframe":true,"cover":"d743d9ea-d73f-4593-a70e-58a3e4deaa1b","id":55,"sort":18,"clicks":5,"public":false,"is_new":true,"stats":[47]},{"url":"https://touchpianist.com/","date_created":"2023-10-27T12:45:54.691Z","title":"Touch Pianist","slug":"touch-pianist","author":"EarSlap","author_link":null,"description":"Unleash your inner virtuoso with Touch Pianist. Experience the thrill of playing the piano with just your fingertips. Choose your favorite classical masterpiece and immerse yourself in the joy of creating beautiful music, all through the power of touch.","tags":["entertainment","piano"],"archive_link":null,"archive":false,"content":"Touch Pianist is a musical toy / instrument that allows the user to perform hard-to-play classical piano music favorites (from composers like Beethoven, Mozart, Bach, Satie, Debussy to name a few) just by tapping the rhythm of the piece's particular sound events on a computer keyboard or a touch screen.\\n\\nIt also provides live visualisation of the pieces that are being performed. There is no score keeping, the user is free to perform the music in any way they wish. The premise is that it is really fun to perform a piece you know well, exactly like you feel it with so little effort.\\n\\nTouch Pianist has CoreMIDI support so you can use your favorite piano / sound plug-in in your computer as a sound source if you wish.","iframe":false,"cover":"415deeeb-a843-4363-b6c9-78918aa688af","id":41,"sort":19,"clicks":177,"public":false,"is_new":false,"stats":[15]},{"url":"https://www.beepbox.co","date_created":"2024-03-21T02:43:35.749Z","title":"BeepBox","slug":"beepbox","author":"John Nesky","author_link":"https://johnnesky.com/","description":"BeepBox is an online tool for sketching and sharing instrumental music.\\n\\nAll song data is contained in the URL at the top of your browser. When you make changes to the song, the URL is updated to reflect your changes. When you are satisfied with your song, just copy and paste the URL to save and share your song!\\n\\nBeepBox is a passion project, and will always be free to use. ","tags":["Poly","Sequencer","FM"],"archive_link":null,"archive":false,"content":" BeepBox is developed by John Nesky.\\n\\nBeepBox does not claim ownership over songs created with it, so original songs belong to their authors.\\n\\nNeither John Nesky nor BeepBox assume responsibility for any copyrighted material played on BeepBox. No songs are ever received, recorded, or distributed by BeepBox's servers. All song data is contained in the URL after the hash (#) mark, and your song data will not leave your device unless you copy and share the URL. BeepBox does not collect, track, or share any user data. ","iframe":true,"cover":"dea37f5f-504c-443f-ba9a-3dff4d583506","id":54,"sort":20,"clicks":10,"public":false,"is_new":true,"stats":[46]},{"url":"https://roland50.studio/","date_created":"2023-11-25T05:42:57.573Z","title":"Roland 50 Studio","slug":"roland50","author":"Yuri Suzuki","author_link":"https://www.yurisuzuki.com/","description":"It's a professional sounding online musical interface, which records your masterpieces and allows you to share your creations through social media, messaging and also as a download.\\nOn top of the TR-808 drum machine and TB-303 bass synthesizer featured at the original 2020 release, now the sound of SH-101 synthesizer is added, and more sounds to come later in the year 2022, commemorating Roland's 50th anniversary.","tags":["drum machine","SP404","TR808","TB303","Step sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"3b5aec13-7e50-475c-9165-bc963872515d","id":45,"sort":21,"clicks":17,"public":false,"is_new":false,"stats":[16]},{"url":"https://www.disco-computer.com/synthesizer/synth.html","date_created":"2023-10-27T12:45:54.270Z","title":"Disco-computer","slug":"disco-computer","author":"Patrick Sawyer","author_link":null,"description":null,"tags":["polyphonic","fm","keyboard"],"archive_link":"/archive/synthescheisse/index.html","archive":true,"content":null,"iframe":true,"cover":"0d0183e6-8964-4246-a18c-a6ca0a0f2794","id":22,"sort":22,"clicks":269,"public":false,"is_new":false,"stats":[17]},{"url":"https://seeing-sound.netlify.app/","date_created":"2023-10-27T12:45:54.492Z","title":"Video Sampler","slug":"video-sampler","author":"Playtronica","author_link":"https://shop.playtronica.com","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b39cc546-2571-4402-84cd-f8497e27d0c9","id":31,"sort":23,"clicks":256,"public":false,"is_new":false,"stats":[18]},{"url":"https://bs.stranno.su/","date_created":"2024-08-21T10:02:11.468Z","title":"Binary Synth","slug":"binary-synth","author":"Max Alyokhin ","author_link":"https://github.com/MaxAlyokhin","description":"Audio synthesis from binary code of any file","tags":["FX","MIDI","Educational"],"archive_link":null,"archive":false,"content":"A web-synthesizer that generates sound from the binary code of any files. It can synthesize sound directly in the browser, or be a generator of MIDI messages to external devices or DAWs, turning any file into a score. All the application code is written in Javascript and along with everything you need is packed into a single .html file of about 750kb. The synthesizer doesn't need internet, it can be downloaded and run locally on any device with a browser.\\n\\nThe application reads the file sequentially, and due to the high speed of reading and random deviation of reading duration, we can get quite unpredictable generation of timbre nuances, and at certain settings we can switch to granular synthesis.","iframe":true,"cover":"b43984bd-bdca-4134-bb55-567306668935","id":62,"sort":25,"clicks":0,"public":false,"is_new":true,"stats":[54]},{"url":"https://www.stef.be/bassoontracker/","date_created":"2024-03-14T07:04:03.311Z","title":"Bassoon Tracker","slug":"bassoon","author":"Steffest","author_link":" https://www.stef.be","description":"Browser-based old-school Amiga Music Tracker in plain old JavaScript.","tags":["FM","tracker","8-bit","low-fi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"70c9db80-8ef8-4aa5-9dcd-6b5c3c0da5b2","id":53,"sort":26,"clicks":10,"public":false,"is_new":true,"stats":[45]},{"url":"https://www.igorski.nl/experiment/websid","date_created":"2023-10-27T12:45:54.438Z","title":"WebSID Commodore 64","slug":"web-sid","author":"Igor Zinken","author_link":"https://www.igorski.nl/","description":null,"tags":["polyphonic","keyboard","midi","additive"],"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"932e0ae0-0048-4c6d-92bb-a4a17a8a4dd4","id":28,"sort":27,"clicks":156,"public":false,"is_new":false,"stats":[19]},{"url":"https://nicroto.github.io/viktor/","date_created":"2023-10-27T12:45:54.388Z","title":"Viktor NV-1","slug":"nv-1","author":"Nikolay Tsenkov ","author_link":"https://github.com/nicroto","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"ff3082ad-3c38-4880-ab23-35711c97ea71","id":27,"sort":28,"clicks":496,"public":false,"is_new":false,"stats":[20]},{"url":"https://virtualpiano.eu/","date_created":"2023-10-27T12:45:54.542Z","title":"VirtualPiano.eu","slug":"virtual-piano","author":"WebSyrup","author_link":"https://websyrup.net/","description":null,"tags":["midi","keyboard"],"archive_link":null,"archive":false,"content":"VirtualPiano.eu is the online synthesizer that allows you to play 128 musical instruments for free using your PC keyboard, the mouse or by connecting an external MIDI keyboard.\\n\\nYou can adjust Volume, Reverb, Loop and quality. Use the sustain and adjust the octaves, you can also select and set different channels including the one for the drums.\\n\\nCreate your own melodies, have fun playing or use VirtualPiano to learn how to play the Piano online on your own. ","iframe":true,"cover":"9a59eea5-c77f-483c-9443-1cd0727e6dcc","id":35,"sort":29,"clicks":282,"public":false,"is_new":false,"stats":[21]},{"url":"https://onlinesequencer.net/","date_created":"2023-10-27T12:45:54.565Z","title":"Online sequencer","slug":"online-sequencer","author":"Jacob Morgan and George Burdell","author_link":"https://github.com/buildist","description":null,"tags":["sequencer"],"archive_link":null,"archive":false,"content":"**Online Sequencer** is a web-based music sequencer that allows users to create music saved online, or on their computer. The piano roll is essential to the sequencer, which is on the left of the screen, with 72 notes from C2-B7 (labelled differently from a piano, C2 on the sequencer corresponds to C1 on a piano). In addition to several parameters which can be modified to change the sound of the music, additional functionality can be accessed via the console.\\n\\nUpon opening the site, users can begin composing and \\"drawing\\" notes on the grid, with the default instrument being Electric Piano. By default, a sequence's time signature is set to 4/4, and the grid spacing is set to 1/4 (16 notes per measure). The note lengths can be adjusted by dragging the dark tab on the right of each note, and precision can be afforded by changing the 'Grid' option to other note divisions. \\n\\n## History\\n\\nOnline Sequencer was created on January 2, 2013 by Jacob Morgan during a break at Georgia Tech.\\n\\nBeginning in the fall of 2013, accounts were available but were separate from the music portion of the site. They were only used in the forum and the website chat.\\n\\nIn 2015, accounts were linked to the main website and allowed songs to be saved under someone's username.\\n\\nThe World Update in 2018 added several new instruments and changed the landscape of sound design on the site. The \\"World Update Contest\\" was held for the update.\\n\\nStarting in late 2020, OS began to receive a variety of updates which vastly improved the functionality of the site. These updates introduced features like custom grid sizes, automation with markers, extra reverb options, detune, and distortion. In 2021, the \\"Space Race\\" contest was held, as to see who could work best with the changes.\\n\\nIn late 2022, newer, higher-quality instruments were added. Some of the instruments, such as Electric Piano, Grand Piano, Violin, and Cello got an updated sustained version, while the original versions still exist under the \\"classic\\" designation.\\n\\nCurrently, the 10-Year Anniversary Contest is being held.\\n\\n## Features\\n\\nWithin the editor, numerous user interface features allow for various changes which will impact the individual sequence on that page.\\n\\n### Basic features\\n\\nUI features include:\\n\\n- Tempo (10-999 BPM)\\n- Measure count or Time count (MM: SS.ssss)\\n- Time signature (2/4, 3/4, 4/4, 5/4)\\n- Grid size (This correlates to note divisions; 1/16, 1/12, 1/8, 1/6, 1/4, 1/3, 1/2)\\n- Auto Scroll (Fast, Smooth, Off; how the sequencer displays measures off-screen as a sequence plays)\\n- Add an Audio Track (This won't be saved to the sequence but will play alongside it for ease of transcription)\\n- Title input\\n- Draw, select, and erase\\n- Instrument dropdown, instrument options, and select instrument (selects all notes of the current instrument)\\n- Select all, Cut, Copy, and Paste\\n- Zoom options\\n- Export options\\n- Help\\n- Fullscreen\\n- Tooltips\\n\\n### Advanced features\\n\\nUsers can access more advanced features for use in their sequences by clicking the advanced tab on the instrument they wish to change. This menu contains options to change volume, panning, detune (-1200 to +1200), reverb, distortion, and an equalizer. This array lets users configure specific instruments to create specific sounds, and textures, or to accompany other instruments as a layer or development of the original sound.\\n\\nOS also allows for commands to be entered in the browser console to manipulate different options in specific ways, such as setting custom to detune values (0-infinity), custom grid sizes, note divisions, and sequence ID amongst other things. These options bring OS closer to that of classic Digital Audio Workstations (DAWs) but are still limited in terms of accessibility and availability.\\n\\n### Browser and device support\\n\\nOnline Sequencer supports Chrome and other Chromium-based browsers, such as Microsoft Edge, Opera, and Brave. Firefox is also supported, but often with limited functionality. Safari and Internet Explorer are not supported, due to engine issues.\\n\\nOther mobile browsers support sequence playback, but not editing. However, iOS users have the same problem with WebKit on macOS. However, unlike in macOS, all browsers (even Chromium-based browsers) use WebKit as the engine for iOS due to Apple prohibiting other engines for security reasons; iOS does not support Online Sequencer, other than chat and forums.\\n\\nThe website's user interface is formatted for proper use on desktops, but some pages such as the chat page, playlists, and forums should be formatted well on mobile devices. ","iframe":true,"cover":"ec08ba72-8157-4415-8b34-aea1fe686e09","id":36,"sort":30,"clicks":321,"public":false,"is_new":false,"stats":[22]},{"url":"https://sb.bitsnbites.eu/","date_created":"2023-10-27T12:45:54.625Z","title":"Sound Box","slug":"sound-box","author":"Bits'n'bites","author_link":"https://gitlab.com/mbitsnbites","description":null,"tags":["tracker"],"archive_link":null,"archive":false,"content":"https://github.com/mbitsnbites/soundbox","iframe":true,"cover":"f2f825f3-a084-408b-86d1-2b64cf822c3c","id":38,"sort":31,"clicks":209,"public":false,"is_new":false,"stats":[23]},{"url":"https://femurdesign.com/omni/","date_created":"2023-10-27T12:45:54.224Z","title":"Omni","slug":"omni","author":"Luke Phillips","author_link":"https://femurdesign.com/","description":null,"tags":["polyphonic","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"fbb1364f-53cf-4f71-8f29-d7f572308e78","id":20,"sort":32,"clicks":210,"public":false,"is_new":false,"stats":[24]},{"url":"https://www.g200kg.com/docs/webmodular/","date_created":"2023-10-27T12:45:54.252Z","title":"Web Modular","slug":"web-modular","author":"g200kg","author_link":"https://www.g200kg.com/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"48e0280c-f7ff-4308-bde3-973b7febe89c","id":21,"sort":33,"clicks":202,"public":false,"is_new":false,"stats":[25]},{"url":"https://errozero.co.uk/acid-machine/","date_created":"2023-10-27T12:45:54.333Z","title":"Acid Machine 2","slug":"acid-machine-2","author":"Errozero","author_link":"https://www.errozero.co.uk/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"031eab3e-2f21-442a-8fdc-9769907824e0","id":25,"sort":34,"clicks":166,"public":false,"is_new":false,"stats":[26]},{"url":"https://apps.musedlab.org/groovepizza/","date_created":"2023-11-21T04:30:41.565Z","title":"Groove Pizza","slug":"groove-pizza","author":"NYU Music Experience Design Lab","author_link":"https://musedlab.org/groovepizza/","description":"Groove Pizza is a circular rhythm app for creative music making and learning! It’s also a playful tool for creating grooves using math concepts like shapes, angles and patterns","tags":["drums","sequencer","Educational"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"50d7bc15-edd5-4261-bc2a-1b173b5a1547","id":44,"sort":35,"clicks":91,"public":false,"is_new":false,"stats":[27]},{"url":"https://ojack.github.io/PIXELSYNTH/","date_created":"2023-10-27T12:45:54.286Z","title":"PixelSynth","slug":"pixel-synth","author":"Olivia Jack","author_link":"https://ojack.xyz/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"77369c22-944c-4f6a-83b5-85e16fe43abc","id":24,"sort":36,"clicks":217,"public":false,"is_new":false,"stats":[28]},{"url":"https://neosynth.pro","date_created":"2024-07-22T08:19:41.905Z","title":"NeoSynth.pro","slug":"neosynth","author":"NeoSynth","author_link":null,"description":"More than just an online synthesizer – it's a comprehensive learning platform designed to help music enthusiasts of all levels master the art of sound synthesis. Whether you're a beginner looking to understand the basics or an experienced producer aiming to refine your skills, NeoSynth Pro provides the tools and knowledge you need to create amazing sounds.","tags":null,"archive_link":null,"archive":false,"content":"Features\\n\\n Interactive synthesizer with multiple waveforms and real-time parameter control\\n Comprehensive tutorials covering all aspects of sound synthesis\\n Preset system for quick access to popular sounds\\n Visual feedback with dynamic waveform display\\n Responsive design for seamless use on desktop and mobile devices\\n","iframe":true,"cover":"da587f71-e54d-4146-88e5-551ffb2e64f9","id":60,"sort":37,"clicks":2,"public":false,"is_new":true,"stats":[52]},{"url":"https://www.multiplayerpiano.org/","date_created":"2023-11-26T08:06:18.875Z","title":"Multiplayer Piano","slug":"multiplayer-piano","author":"Brandon Lockaby","author_link":"https://github.com/Multiplayer-Piano","description":"Online piano, that can be played by any site visitor together in a virtual room or alone.","tags":["Piano","MIDI","Poly","Multiplayer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"9c10771b-e38f-469f-b58b-c9e6bb91a072","id":49,"sort":38,"clicks":4,"public":false,"is_new":false,"stats":[29]},{"url":"https://webaudiodemos.appspot.com/midi-synth/index.html","date_created":"2023-10-27T12:45:53.963Z","title":"MIDI–driven Web Audio","slug":"midi-driven-web-audio","author":"Chris Wilson","author_link":"https://github.com/cwilso","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"0005a0c9-c7e7-4922-a1e5-49d4326d2f77","id":6,"sort":39,"clicks":127,"public":false,"is_new":false,"stats":[30]},{"url":"https://samplestitch.com.s3-website-us-east-1.amazonaws.com/","date_created":"2023-10-27T12:45:54.185Z","title":"Samplestich","slug":"sample-stich","author":"Matt Daniels","author_link":"https://mdaniels.com","description":null,"tags":["samples","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"89859f9f-0d45-44dc-93b6-98dfa2e7d799","id":18,"sort":40,"clicks":164,"public":false,"is_new":false,"stats":[31]},{"url":"https://www.audiotool.com/product/device/heisenberg/","date_created":"2023-10-27T12:45:53.983Z","title":"Meet the Heisenberg","slug":"meet-the-heisenberg","author":"AudioTool","author_link":"https://www.audiotool.com","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"a2397ce6-7712-40e5-b4e0-df95c7992662","id":8,"sort":41,"clicks":255,"public":false,"is_new":false,"stats":[32]},{"url":"https://www.gsn-lib.org/apps/cardboardsynth/index.html","date_created":"2023-10-27T12:45:54.002Z","title":"Cardboard Synth","slug":"cardboard-synth","author":" Thorsten Thormählen","author_link":"https://www.uni-marburg.de/en/fb12/research-groups/grafikmultimedia/thormae","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"29fe1fcc-ca85-41b3-ab1e-7f10770f2c1f","id":9,"sort":42,"clicks":184,"public":false,"is_new":false,"stats":[33]},{"url":"https://poly.ozieblowski.dev/","date_created":"2024-06-26T15:32:49.507Z","title":"Polyrhythm3","slug":"polyrhythm3","author":"Anagramme","author_link":"https://github.com/Angramme","description":"A new reworked release of polyrhythm generator / metronome. The UI is divided into blocks, the first block is the visualization block, here you can see your \\"sections\\" displayed in a midi-esque fashion. It allows you to do the following actions:\\n\\n- dd new sections with the add button to the right\\n- select the section that you are currently editing in the editor by clicking on it.\\n- swap two sections by dragging one section over another.\\n","tags":["polyrhythm","MIDI","Sequencer","metronome"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"48979a40-1009-4ad3-8363-8cde02abf2c0","id":58,"sort":43,"clicks":null,"public":false,"is_new":true,"stats":[50]},{"url":"https://tanguysynth.com/","date_created":"2023-10-27T12:45:54.036Z","title":"Tanguy synth","slug":"tanguy-synth","author":"Luke Teaford","author_link":"https://github.com/luketeaford","description":null,"tags":["monophonic","additive","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"5471a71e-7c5b-4ea6-aee0-1b394873c381","id":11,"sort":44,"clicks":117,"public":false,"is_new":false,"stats":[34]},{"url":"https://www.blokdust.com/","date_created":"2023-11-25T06:31:23.261Z","title":"BlokDust","slug":"blokdust","author":"Luke Twyman, Luke Phillips, Edward Silverton","author_link":"https://wvnl.xyz/","description":"BlokDust is a creative visual drag and drop music exploration tool. Developed in Brighton UK and released in 2016, BlokDust uses the Web Audio API and makes use of Tone.js as an audio framework.","tags":["creative","sequencer"],"archive_link":null,"archive":false,"content":"Luke Twyman - project concept, design & Ul.\\nwhitevinyldesign.com\\n@whitevinylUK\\nLuke Phillips - audio development & musical interaction.\\nfemurdesign.com\\n@lukephills\\nEdward Silverton - client & server architecture & core development.\\nedsilv.com\\n@edsilv","iframe":true,"cover":"7e5bcda8-f37a-46c0-91d9-0a6ea501a101","id":47,"sort":45,"clicks":19,"public":false,"is_new":false,"stats":[35]},{"url":"https://billard.medusis.com/","date_created":"2024-06-26T16:11:33.298Z","title":"Billiard","slug":"biliard","author":"Carl-Leonard Von Fligenstein","author_link":"https://news.ycombinator.com/user?id=bambax","description":" Here's Billard. It combines music and physics into a unique creative tool, as I explore various unconventional methods for generating music.\\n\\nMost traditional music composition tools revolve around the idea of a repeatable pattern. Billard is a webapp that never repeats itself. It generates music automatically based on the collisions of balls in a 2D space. Collisions trigger notes (or chords) in a given key. One can add balls or move them (y-position is pitch); the app remembers its state between reloads; or it can be reset with the 'init' button on the top left. Gravity can be adjusted in real time to change the behavior of the balls.\\n\\nIt owes a lot of inspiration to Brian Eno and Erik Satie (inventor of musique d'ameublement, or \\"furniture music\\"). Some may think the lack of pattern makes it not musical enough -- but this lets it be listened to —and watched— for a while without boredom.\\n\\nThe webapp is made using plain JavaScript. (All SVG icons were made 'by hand'.) It uses Tone.js only for triggering piano samples. Beyond piano, it's MIDI-enabled and works well at slow speed with haunting, dark synth sounds.","tags":["MIDI","Poly","Physics","Sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b56f4acb-b528-4d18-a3b5-405fb10cafa4","id":59,"sort":46,"clicks":2,"public":false,"is_new":true,"stats":[51]},{"url":"https://mod-synth.io/","date_created":"2023-10-27T12:45:54.052Z","title":"MOD synth","slug":"mod-synth","author":"André Venâncio ","author_link":"https://github.com/andrevenancio","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"31564bf3-fca9-41a4-b390-d78ccd848107","id":12,"sort":47,"clicks":146,"public":false,"is_new":false,"stats":[36]},{"url":"https://cync.app","date_created":"2024-08-25T05:00:42.506Z","title":"Cync","slug":"cync","author":"Jon Tiburzi","author_link":"https://github.com/tiburzi/cync","description":"A cyclic drum machine for experimenting with non-quantized grooves. ","tags":["Educational","sequencer","Percussion","Metronome"],"archive_link":null,"archive":false,"content":"Most drum sequencers are rectangular, organizing notes linearly in a quantized grid. However, there are many rhythms that are difficult or impossible to construct this way (such as traditional African, Indian, and Indonesian drumbeats). These rhythms rely on repeating patterns of different lengths, which can vary in arrangement and timing.\\n\\nRepresenting these grooves as overlapping cycles reveals their underlying patterns. This approach can also be used to explore and experiment with polyrhythms, syncopation, and beat construction.\\n","iframe":true,"cover":"8c7eac07-92d5-4c10-bb3f-e44d6a36a4af","id":63,"sort":48,"clicks":2,"public":false,"is_new":true,"stats":[55]},{"url":"https://perso.numericable.fr/olivier.friker/synth/O3-synth%20V1.3.html","date_created":"2023-10-27T12:45:54.069Z","title":"OLIF SY1K","slug":"olif-sy-1-k","author":"Olivier Friker","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"3b9a5e11-3de3-46fe-9cdc-e1668b152f31","id":13,"sort":49,"clicks":145,"public":false,"is_new":false,"stats":[37]},{"url":"http://www.noisesculptor.com/","date_created":"2023-10-27T12:45:54.104Z","title":"Note Sculptor","slug":"note-sculptor","author":"Ruin Technology","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"a01968d1-3f88-4522-9752-1c33d10d90d9","id":15,"sort":50,"clicks":129,"public":false,"is_new":false,"stats":[38]},{"url":"https://zya.github.io/granular/","date_created":"2024-07-29T17:37:33.497Z","title":"Multi-Touch Granular Sampler","slug":"granular","author":"Zya","author_link":"https://github.com/zya/","description":"The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.","tags":["Granular"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"f44fa962-37f0-487d-b69b-6880dd06dbd1","id":61,"sort":51,"clicks":1,"public":false,"is_new":false,"stats":[53]},{"url":"https://aikelab.net/websynthv2/","date_created":"2023-10-27T12:45:54.141Z","title":"WebAudioSynth V2","slug":"web-audio-synth-v2","author":"like","author_link":"https://github.com/aike/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"ac668fba-7226-43dc-a91f-bd21a31446e5","id":16,"sort":52,"clicks":305,"public":false,"is_new":false,"stats":[39]},{"url":"https://isleoftune.com/","date_created":"2023-11-25T06:22:15.184Z","title":"Isle of Tune","slug":"isleoftune","author":"Jim Hall","author_link":"https://twitter.com/isleoftune","description":"Draw an island, where everything plays music.","tags":["game","sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6830c24f-c7bf-430f-abc1-3d7fbf5f2557","id":46,"sort":53,"clicks":15,"public":false,"is_new":false,"stats":[40]},{"url":"https://www.soundtrap.com/","date_created":"2023-10-27T12:45:54.155Z","title":"Sound Trap","slug":"sound-trap","author":"Soundtrap","author_link":"https://www.soundtrap.com/about","description":null,"tags":["daw"],"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"63ef832a-f7da-4536-851f-4964005a89f1","id":17,"sort":54,"clicks":124,"public":false,"is_new":false,"stats":[41]},{"url":"http://typedrummer.com/","date_created":"2023-11-25T06:34:10.166Z","title":"Type Drummer","slug":"typedrummer","author":"Kyle Stetz","author_link":"http://kylestetz.com/","description":"Type your drum loops","tags":["sequencer","drums","Keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"19454c82-7338-4144-9f1c-010c80a70a6e","id":48,"sort":55,"clicks":21,"public":false,"is_new":false,"stats":[42]}]`),at={class:"text-center line-height-loose text-md"},ot={class:"mx-auto max-w-75ch intro md-text-lg"},rt={class:"p-2 flex flex-col mt-8"},lt={class:"text-4xl font-bold"},ct=f("div",{class:"text-lg"},"web synths",-1),ut={class:"p-2 flex flex-col mt-8"},ht={class:"text-4xl font-bold"},dt=f("div",{class:"text-lg"},"web musicians",-1),pt={__name:"AboutCount",setup(t){const e=O(),s=O(0),n=O(0),i=pe(s),a=pe(n),o=Le(e);return Oe(o,async r=>{if(r){s.value=ne.length;const c=await(await fetch("https://dbs.chromatone.center/flows/trigger/0c0e8d82-8e12-44a6-867a-57ddeec9d774",{type:"GET",mode:"cors",headers:{"Content-Type":"application/json"}})).json();n.value=c.count}}),(r,l)=>(b(),y("div",at,[f("div",ot,[f("div",{class:"flex justify-center",ref_key:"counters",ref:e},[f("div",rt,[f("div",lt,L(M(i).toFixed()),1),ct]),f("div",ut,[f("div",ht,L(M(a).toFixed()||5e3)+"+",1),dt])],512)])]))}},ft={class:"flex flex-col text-center gap-4 bg-light-700 dark-bg-dark-200 dark-bg-opacity-20 p-4 rounded-lg shadow-lg mb-8"},mt=f("div",{class:"text-xl font-bold my-2"},"Suggest a new web-synth to the collection",-1),gt=["disabled"],bt={__name:"FormSynth",emits:["submitted"],setup(t,{emit:e}){const s=e,n=$e({url:"",text:""}),i=/[(http(s) ?): \/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/;function a(l){return i.test(l)}const o=O();async function r(){var l,c,u;try{const h=await fetch("https://dbs.chromatone.center/flows/trigger/dc8ca96f-76e6-4cac-b26c-10751746eb89",{method:"POST",mode:"cors",cache:"no-cache",credentials:"same-origin",headers:{"Content-Type":"application/json"},redirect:"follow",referrerPolicy:"no-referrer",body:JSON.stringify(n)});o.value=await(h==null?void 0:h.json()),n.url="",n.text="",setTimeout(()=>{s("submitted")},2e3)}catch(h){console.error(h,(c=(l=h==null?void 0:h.errors)==null?void 0:l[0])==null?void 0:c.message,(u=h==null?void 0:h.response)==null?void 0:u.status)}}return(l,c)=>(b(),y("div",ft,[o.value?(b(),y(j,{key:1},[U("Thanks for your suggestion!")],64)):(b(),y(j,{key:0},[mt,X(f("input",{class:"py-2 px-4 rounded bg-light-200 dark-bg-dark-200",type:"text",placeholder:"https://new.synth.url/","onUpdate:modelValue":c[0]||(c[0]=u=>n.url=u)},null,512),[[ee,n.url]]),X(f("textarea",{class:"py-2 px-4 rounded bg-light-200 dark-bg-dark-200",oninput:"this.style.height = ''; this.style.height = this.scrollHeight +'px'",placeholder:"Describe the web-app and how do you use it musically","onUpdate:modelValue":c[1]||(c[1]=u=>n.text=u)},null,512),[[ee,n.text]]),f("button",{class:"text-xl py-2 px-4 rounded bg-dark-100 text-light-200 dark-bg-light-700 dark-text-dark-500 shadow-lg disabled-opacity-20",disabled:!a(n.url),onClick:c[2]||(c[2]=u=>r())},L(a(n.url)?"Submit":"Please provide a valid URL"),9,gt)],64))]))}},_e=t=>(je("data-v-5f69066e"),t=t(),Ze(),t),yt={key:0,class:"px-2 py-1 bg-light-800 dark-bg-dark-800 rounded-xl transition text-sm select-none absolute bottom-2 left-2 text-center z-200 flex items-center gap-1 opacity-70 hover-opacity-100",title:"Since 28 Oct 2023"},vt=_e(()=>f("div",{class:"i-la-eye"},null,-1)),wt={class:"p-0 mt-2px"},kt={class:"p-4 flex flex-col items-start justify-between gap-2",style:{flex:"10 0 200px"}},_t={class:"flex items-center gap-2 flex-0 w-full"},xt={class:"transition text-xl select-none absolute top-4 left-4 text-center z-200 text-shadow-md"},St={class:"flex-auto"},Tt={class:"flex items-center gap-2"},Mt={class:"text-2xl font-bold"},It={key:0,class:"font-normal",title:"Archived locally by us"},At=_e(()=>f("div",{class:"i-ph-archive-duotone"},null,-1)),Ct=[At],Et={class:"flex-1"},Pt={key:1,class:"flex-1 flex items-end flex flex-wrap gap-2"},Dt=["href"],Lt={key:3,class:"text-xl p-2 absolute left-2 top-4 bg-yellow-600 rounded-xl shadow font-bold z-1000 transform -rotate-10"},Ot={__name:"SynthCard",props:{pos:{type:Number,default:0},sort:{type:Number,default:0},public:{type:Boolean,default:!1},title:{type:String,default:""},id:{type:Number,default:0},slug:{type:String,default:""},description:{type:String,default:""},cover:{type:String,default:""},url:{type:String,default:""},author:{type:String,default:""},author_link:{type:String,default:""},tags:{type:Array,default:()=>[]},archive:{type:Boolean,default:!1},archive_link:{type:String,default:""},iframe:{type:Boolean,default:null},clicks:{type:Number,default:0},stars:{type:Number,default:0},counter:{type:Number,default:0},is_new:{type:Boolean,default:null}},setup(t){const{isDark:e}=Re(),s=t,{isFormOpen:n,isAccessGranted:i}=ve(),{clicksCount:a,clickSynth:o}=Je(s.id);async function r(){!s.public&&!i.value?n.value=!n.value:(o(s.id),s.iframe?window.open(s.slug+"/","_self"):window.open(s.archive?s.archive_link:s.url,"_blank"))}return(l,c)=>{var d;const u=Ke,h=Be("ClientOnly");return b(),y("button",{class:"max-w-180 w-full flex flex-wrap items-stretch text-left relative bg-light-500 dark-bg-dark-300 -hover-translate-y-6px transition duration-200 hover-shadow-lg rounded-lg overflow-hidden relative border-1 border-dark-100 border-opacity-20 shadow-sm dark-border-light-800 dark-border-opacity-20",style:te({borderColor:M(Y)[t.id]?M(e)?"hsl(50deg,80%,35%)":"hsl(40deg,90%,80%)":null}),onClick:r},[f("div",{class:"cover min-h-50 bg-cover bg-center filter transition",style:te([{backgroundImage:`url(/cover/${t.slug}.webp)`},{flex:"1 1 280px"}])},[M(a)||t.counter?(b(),y("div",yt,[vt,f("div",wt,L(M(a)||t.counter),1)])):_("",!0)],4),f("div",kt,[f("div",_t,[f("div",xt,L(t.sort),1),f("div",St,[f("span",Tt,[f("div",Mt,L(t.title),1),t.archive?(b(),y("span",It,Ct)):_("",!0)])]),B(h,null,{default:G(()=>[B(u,{class:"text-xl mr-2 absolute z-200",id:t.id,stars:t.stars},null,8,["id","stars"])]),_:1})]),t.author?(b(),se(Ne(t.author_link?"a":"div"),{key:0,class:"p-0 text-md",href:t.author_link,target:"_blank"},{default:G(()=>[U("by "+L(t.author),1)]),_:1},8,["href"])):_("",!0),f("div",Et,[We(l.$slots,"default",{},void 0,!0)]),((d=t.tags)==null?void 0:d.length)>0?(b(),y("div",Pt,[(b(!0),y(j,null,ke(t.tags,g=>(b(),y("div",{class:"px-2 py-1 text-sm bg-light-800 dark-bg-dark-500 rounded-lg",key:g},L(g),1))),128))])):_("",!0),t.iframe?_("",!0):(b(),y("a",{key:2,class:"absolute bottom-4 right-4 i-la-external-link-square-alt text-lg opacity-40 transition transition hover-opacity-100",onClick:c[0]||(c[0]=Fe(()=>{},["stop"])),href:`/${t.slug}/`,title:"Opens in a new window"},null,8,Dt)),t.is_new?(b(),y("div",Lt,"NEW!")):_("",!0)])],4)}}},zt=we(Ot,[["__scopeId","data-v-5f69066e"]]);function D(t){return Array.isArray?Array.isArray(t):Te(t)==="[object Array]"}const $t=1/0;function Rt(t){if(typeof t=="string")return t;let e=t+"";return e=="0"&&1/t==-$t?"-0":e}function Bt(t){return t==null?"":Rt(t)}function E(t){return typeof t=="string"}function xe(t){return typeof t=="number"}function Nt(t){return t===!0||t===!1||Wt(t)&&Te(t)=="[object Boolean]"}function Se(t){return typeof t=="object"}function Wt(t){return Se(t)&&t!==null}function x(t){return t!=null}function Q(t){return!t.trim().length}function Te(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}const Ft="Incorrect 'index' type",jt=t=>`Invalid value for key ${t}`,Zt=t=>`Pattern length exceeds max of ${t}.`,qt=t=>`Missing ${t} property in key`,Vt=t=>`Property 'weight' in key '${t}' must be a positive integer`,fe=Object.prototype.hasOwnProperty;class Yt{constructor(e){this._keys=[],this._keyMap={};let s=0;e.forEach(n=>{let i=Me(n);this._keys.push(i),this._keyMap[i.id]=i,s+=i.weight}),this._keys.forEach(n=>{n.weight/=s})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function Me(t){let e=null,s=null,n=null,i=1,a=null;if(E(t)||D(t))n=t,e=me(t),s=ie(t);else{if(!fe.call(t,"name"))throw new Error(qt("name"));const o=t.name;if(n=o,fe.call(t,"weight")&&(i=t.weight,i<=0))throw new Error(Vt(o));e=me(o),s=ie(o),a=t.getFn}return{path:e,id:s,weight:i,src:n,getFn:a}}function me(t){return D(t)?t:t.split(".")}function ie(t){return D(t)?t.join("."):t}function Ut(t,e){let s=[],n=!1;const i=(a,o,r)=>{if(x(a))if(!o[r])s.push(a);else{let l=o[r];const c=a[l];if(!x(c))return;if(r===o.length-1&&(E(c)||xe(c)||Nt(c)))s.push(Bt(c));else if(D(c)){n=!0;for(let u=0,h=c.length;ut.score===e.score?t.idx{this._keysMap[s.id]=n})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,E(this.docs[0])?this.docs.forEach((e,s)=>{this._addString(e,s)}):this.docs.forEach((e,s)=>{this._addObject(e,s)}),this.norm.clear())}add(e){const s=this.size();E(e)?this._addString(e,s):this._addObject(e,s)}removeAt(e){this.records.splice(e,1);for(let s=e,n=this.size();s{let o=i.getFn?i.getFn(e):this.getFn(e,i.path);if(x(o)){if(D(o)){let r=[];const l=[{nestedArrIndex:-1,value:o}];for(;l.length;){const{nestedArrIndex:c,value:u}=l.pop();if(x(u))if(E(u)&&!Q(u)){let h={v:u,i:c,n:this.norm.get(u)};r.push(h)}else D(u)&&u.forEach((h,d)=>{l.push({nestedArrIndex:d,value:h})})}n.$[a]=r}else if(E(o)&&!Q(o)){let r={v:o,n:this.norm.get(o)};n.$[a]=r}}}),this.records.push(n)}toJSON(){return{keys:this.keys,records:this.records}}}function Ie(t,e,{getFn:s=p.getFn,fieldNormWeight:n=p.fieldNormWeight}={}){const i=new ue({getFn:s,fieldNormWeight:n});return i.setKeys(t.map(Me)),i.setSources(e),i.create(),i}function es(t,{getFn:e=p.getFn,fieldNormWeight:s=p.fieldNormWeight}={}){const{keys:n,records:i}=t,a=new ue({getFn:e,fieldNormWeight:s});return a.setKeys(n),a.setIndexRecords(i),a}function V(t,{errors:e=0,currentLocation:s=0,expectedLocation:n=0,distance:i=p.distance,ignoreLocation:a=p.ignoreLocation}={}){const o=e/t.length;if(a)return o;const r=Math.abs(n-s);return i?o+r/i:r?1:o}function ts(t=[],e=p.minMatchCharLength){let s=[],n=-1,i=-1,a=0;for(let o=t.length;a=e&&s.push([n,i]),n=-1)}return t[a-1]&&a-n>=e&&s.push([n,a-1]),s}const R=32;function ss(t,e,s,{location:n=p.location,distance:i=p.distance,threshold:a=p.threshold,findAllMatches:o=p.findAllMatches,minMatchCharLength:r=p.minMatchCharLength,includeMatches:l=p.includeMatches,ignoreLocation:c=p.ignoreLocation}={}){if(e.length>R)throw new Error(Zt(R));const u=e.length,h=t.length,d=Math.max(0,Math.min(n,h));let g=a,v=d;const m=r>1||l,S=m?Array(h):[];let T;for(;(T=t.indexOf(e,v))>-1;){let k=V(e,{currentLocation:T,expectedLocation:d,distance:i,ignoreLocation:c});if(g=Math.min(k,g),v=T+u,m){let I=0;for(;I=he;A-=1){let q=A-1,de=s[t.charAt(q)];if(m&&(S[q]=+!!de),W[A]=(W[A+1]<<1|1)&de,k&&(W[A]|=(P[A+1]|P[A])<<1|1|P[A+1]),W[A]&Z&&(C=V(e,{errors:k,currentLocation:q,expectedLocation:d,distance:i,ignoreLocation:c}),C<=g)){if(g=C,v=q,v<=d)break;he=Math.max(1,2*d-v)}}if(V(e,{errors:k+1,currentLocation:d,expectedLocation:d,distance:i,ignoreLocation:c})>g)break;P=W}const N={isMatch:v>=0,score:Math.max(.001,C)};if(m){const k=ts(S,r);k.length?l&&(N.indices=k):N.isMatch=!1}return N}function ns(t){let e={};for(let s=0,n=t.length;s{this.chunks.push({pattern:d,alphabet:ns(d),startIndex:g})},h=this.pattern.length;if(h>R){let d=0;const g=h%R,v=h-g;for(;d{const{isMatch:T,score:P,indices:C}=ss(e,v,m,{location:i+S,distance:a,threshold:o,findAllMatches:r,minMatchCharLength:l,includeMatches:n,ignoreLocation:c});T&&(d=!0),h+=P,T&&C&&(u=[...u,...C])});let g={isMatch:d,score:d?h/this.chunks.length:1};return d&&n&&(g.indices=u),g}}class z{constructor(e){this.pattern=e}static isMultiMatch(e){return ge(e,this.multiRegex)}static isSingleMatch(e){return ge(e,this.singleRegex)}search(){}}function ge(t,e){const s=t.match(e);return s?s[1]:null}class is extends z{constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const s=e===this.pattern;return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class as extends z{constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const n=e.indexOf(this.pattern)===-1;return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class os extends z{constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const s=e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class rs extends z{constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const s=!e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class ls extends z{constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const s=e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}class cs extends z{constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const s=!e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class Ce extends z{constructor(e,{location:s=p.location,threshold:n=p.threshold,distance:i=p.distance,includeMatches:a=p.includeMatches,findAllMatches:o=p.findAllMatches,minMatchCharLength:r=p.minMatchCharLength,isCaseSensitive:l=p.isCaseSensitive,ignoreLocation:c=p.ignoreLocation}={}){super(e),this._bitapSearch=new Ae(e,{location:s,threshold:n,distance:i,includeMatches:a,findAllMatches:o,minMatchCharLength:r,isCaseSensitive:l,ignoreLocation:c})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class Ee extends z{constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let s=0,n;const i=[],a=this.pattern.length;for(;(n=e.indexOf(this.pattern,s))>-1;)s=n+a,i.push([n,s-1]);const o=!!i.length;return{isMatch:o,score:o?0:1,indices:i}}}const ae=[is,Ee,os,rs,cs,ls,as,Ce],be=ae.length,us=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,hs="|";function ds(t,e={}){return t.split(hs).map(s=>{let n=s.trim().split(us).filter(a=>a&&!!a.trim()),i=[];for(let a=0,o=n.length;a!!(t[H.AND]||t[H.OR]),gs=t=>!!t[le.PATH],bs=t=>!D(t)&&Se(t)&&!ce(t),ye=t=>({[H.AND]:Object.keys(t).map(e=>({[e]:t[e]}))});function Pe(t,e,{auto:s=!0}={}){const n=i=>{let a=Object.keys(i);const o=gs(i);if(!o&&a.length>1&&!ce(i))return n(ye(i));if(bs(i)){const l=o?i[le.PATH]:a[0],c=o?i[le.PATTERN]:i[l];if(!E(c))throw new Error(jt(l));const u={keyId:ie(l),pattern:c};return s&&(u.searcher=re(c,e)),u}let r={children:[],operator:a[0]};return a.forEach(l=>{const c=i[l];D(c)&&c.forEach(u=>{r.children.push(n(u))})}),r};return ce(t)||(t=ye(t)),n(t)}function ys(t,{ignoreFieldNorm:e=p.ignoreFieldNorm}){t.forEach(s=>{let n=1;s.matches.forEach(({key:i,norm:a,score:o})=>{const r=i?i.weight:null;n*=Math.pow(o===0&&r?Number.EPSILON:o,(r||1)*(e?1:a))}),s.score=n})}function vs(t,e){const s=t.matches;e.matches=[],x(s)&&s.forEach(n=>{if(!x(n.indices)||!n.indices.length)return;const{indices:i,value:a}=n;let o={indices:i,value:a};n.key&&(o.key=n.key.src),n.idx>-1&&(o.refIndex=n.idx),e.matches.push(o)})}function ws(t,e){e.score=t.score}function ks(t,e,{includeMatches:s=p.includeMatches,includeScore:n=p.includeScore}={}){const i=[];return s&&i.push(vs),n&&i.push(ws),t.map(a=>{const{idx:o}=a,r={item:e[o],refIndex:o};return i.length&&i.forEach(l=>{l(a,r)}),r})}class F{constructor(e,s={},n){this.options={...p,...s},this.options.useExtendedSearch,this._keyStore=new Yt(this.options.keys),this.setCollection(e,n)}setCollection(e,s){if(this._docs=e,s&&!(s instanceof ue))throw new Error(Ft);this._myIndex=s||Ie(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){x(e)&&(this._docs.push(e),this._myIndex.add(e))}remove(e=()=>!1){const s=[];for(let n=0,i=this._docs.length;n-1&&(l=l.slice(0,s)),ks(l,this._docs,{includeMatches:n,includeScore:i})}_searchStringList(e){const s=re(e,this.options),{records:n}=this._myIndex,i=[];return n.forEach(({v:a,i:o,n:r})=>{if(!x(a))return;const{isMatch:l,score:c,indices:u}=s.searchIn(a);l&&i.push({item:a,idx:o,matches:[{score:c,value:a,norm:r,indices:u}]})}),i}_searchLogical(e){const s=Pe(e,this.options),n=(r,l,c)=>{if(!r.children){const{keyId:h,searcher:d}=r,g=this._findMatches({key:this._keyStore.get(h),value:this._myIndex.getValueForItemAtKeyId(l,h),searcher:d});return g&&g.length?[{idx:c,item:l,matches:g}]:[]}const u=[];for(let h=0,d=r.children.length;h{if(x(r)){let c=n(s,r,l);c.length&&(a[l]||(a[l]={idx:l,item:r,matches:[]},o.push(a[l])),c.forEach(({matches:u})=>{a[l].matches.push(...u)}))}}),o}_searchObjectList(e){const s=re(e,this.options),{keys:n,records:i}=this._myIndex,a=[];return i.forEach(({$:o,i:r})=>{if(!x(o))return;let l=[];n.forEach((c,u)=>{l.push(...this._findMatches({key:c,value:o[u],searcher:s}))}),l.length&&a.push({idx:r,item:o,matches:l})}),a}_findMatches({key:e,value:s,searcher:n}){if(!x(s))return[];let i=[];if(D(s))s.forEach(({v:a,i:o,n:r})=>{if(!x(a))return;const{isMatch:l,score:c,indices:u}=n.searchIn(a);l&&i.push({score:c,key:e,value:a,idx:o,norm:r,indices:u})});else{const{v:a,n:o}=s,{isMatch:r,score:l,indices:c}=n.searchIn(a);r&&i.push({score:l,key:e,value:a,norm:o,indices:c})}return i}}F.version="7.0.0";F.createIndex=Ie;F.parseIndex=es;F.config=p;F.parseQuery=Pe;ms(fs);const _s={class:"flex flex-col items-center mb-2 px-8 relative"},xs={class:"w-full max-w-110 flex items-center relative my-4 gap-2"},Ss=f("div",{class:"i-la-search absolute left-2 text-xl opacity-40"},null,-1),Ts=["title"],Ms={key:0,class:"i-la-star-solid"},Is={key:1,class:"i-la-star"},As={class:"flex flex-col items-center gap-8 p-2 max-w-160 mx-auto mb-12"},Cs=["index"],Es={class:"p-2",key:"nnn"},Ps={key:0,class:"animate-pulse text-center"},Ds={__name:"SynthList",setup(t){const{isAccessGranted:e}=ve(),s=O(ne),n=new F(ne,{includeScore:!0,ignoreLocation:!0,shouldSort:!0,keys:["title","slug","author"]}),i=ze("fav-filter",!1),a=O(""),o=O(!1),r=K(()=>n.search(a.value)),l=K(()=>r.value.filter(h=>h.score<.2).sort((h,d)=>h.score>d.score?1:0).map(h=>h.item.slug)),c=K(()=>s.value.filter(h=>a.value?l.value.includes(h.slug):i.value?Y.value[h.id]:!0)),u=O([]);return qe(async()=>{u.value=await Qe("synths",{fields:["id",{stats:["views","stars"]}]})}),Ve(Y,h=>{Object.values(h).filter(Boolean).length==0&&(i.value=!1)},{deep:!0,immediate:!0}),(h,d)=>{const g=zt,v=bt;return b(),y(j,null,[f("div",_s,[f("div",xs,[X(f("input",{class:"w-full focus text-xl py-2 pl-9 bg-light-50 bg-opacity-100 shadow-inner border-1 border-dark-100 border-opacity-10 rounded-lg dark-bg-dark-200 outline-none focus-border-opacity-90",placeholder:"Type to search...","onUpdate:modelValue":d[0]||(d[0]=m=>a.value=m)},null,512),[[ee,a.value]]),Ss,a.value?(b(),y("div",{key:0,class:"i-la-times absolute right-2 text-xl opacity-40 hover-opacity-80 transition cursor-pointer",onClick:d[1]||(d[1]=m=>a.value="")})):_("",!0),Object.values(M(Y)).filter(Boolean).length>0&&!a.value?(b(),y("button",{key:1,class:"transition p-2 shadow dark-bg-dark-200 dark-hover-bg-dark-100 bg-light-300 hover-bg-light-100 rounded-lg flex items-center gap-2 text-xl text-yellow",title:M(i)?"Only favourites are shown":"Show only favourites",onClick:d[2]||(d[2]=m=>i.value=!M(i))},[B(Ye,{name:"fade"},{default:G(()=>[M(i)?(b(),y("div",Ms)):(b(),y("div",Is))]),_:1})],8,Ts)):_("",!0),a.value?_("",!0):(b(),y("button",{key:2,class:"transition p-2 shadow dark-bg-dark-200 dark-hover-bg-dark-100 bg-light-300 hover-bg-light-100 rounded-lg flex items-center gap-2 text-xl",title:"Suggest a new link to the collection",onClick:d[3]||(d[3]=m=>o.value=!o.value)},[f("div",{class:Ue(["i-la-plus transform transition",{"rotate-45":o.value}])},null,2)]))])]),f("div",As,[o.value?_("",!0):(b(),se(He,{key:0,name:"fade"},{default:G(()=>[(b(!0),y(j,null,ke(c.value,(m,S)=>{var T,P,C,$,Z,N,k,I;return b(),y("div",{class:"flex w-full sticky",style:te([{top:`${10+S*4}px`,zIndex:S+10},{flex:"1 1 240px"}]),key:m.id,index:S},[(b(),se(g,Ge({pos:S,style:{filter:!m.public&&!M(e)?"contrast(70%) blur(2px) opacity(80%)":""},key:m.id,ref_for:!0},m,{counter:($=(C=(P=(T=u.value)==null?void 0:T.find(w=>(w==null?void 0:w.id)==(m==null?void 0:m.id)))==null?void 0:P.stats)==null?void 0:C[0])==null?void 0:$.views,stars:(I=(k=(N=(Z=u.value)==null?void 0:Z.find(w=>(w==null?void 0:w.id)==(m==null?void 0:m.id)))==null?void 0:N.stats)==null?void 0:k[0])==null?void 0:I.stars}),null,16,["pos","style","counter","stars"]))],12,Cs)}),128))]),_:1})),c.value.length==0||o.value?(b(),y("div",Es,[o.value?_("",!0):(b(),y("div",Ps,"We don't know such a web-app yet. ")),B(v,{class:"max-w-140 mx-auto mt-6",onSubmitted:d[4]||(d[4]=m=>o.value=!1)})])):_("",!0)])],64)}}},Ls="/click-logo.svg",Gs=JSON.parse('{"title":"Web synths","description":"Web synthesizers to play with MIDI controllers","frontmatter":{"title":"Web synths","description":"Web synthesizers to play with MIDI controllers","date":"2023-06-22T00:00:00.000Z","layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1724317618000}'),Os={name:"index.md"},zs=f("h1",{class:"text-center text-2xl sm-text-3xl font-bold mt-8",style:{padding:"0.1rem 1rem"}},"Online synthesizers and web piano apps",-1),$s=f("h2",{class:"text-xl sm-text-2xl text-center my-2",style:{padding:"0 1rem"}},"Curated collection of free music creation resources",-1),Rs={class:"px-4 text-lg text-center mb-8 max-w-150 mx-auto"},Bs=f("a",{class:"font-bold",href:"https://chromatone.center",target:"_blank",rel:"noopener"}," Chromatone",-1),Ns=f("a",{class:"font-bold",href:"https://playtronica.com",target:"_blank",rel:"noopener"}," Playtronica",-1),Ws=f("h3",{class:"font-bold text-xl"},"Welcome to the community of web-based musicians!",-1),Fs=f("h4",null,[f("a",{target:"_blank",href:"https://chromatone.center/"},[f("img",{src:Ls,class:"max-w-16 mx-auto"})])],-1);function js(t,e,s,n,i,a){const o=Ds,r=pt,l=it;return b(),y("div",null,[zs,$s,B(o),f("div",Rs,[Bs,U(" is an open source visual music language for education, research and performance. We develop a new universal way to communicate music. "),Ns,U(" is a digital playground that explores the possibilities of the material world through technology, creating gadgets that make the world musical. Together we share our passion for online music instruments. "),B(r),Ws,Fs,B(l)])])}const Hs=we(Os,[["render",js]]);export{Gs as __pageData,Hs as default}; diff --git a/assets/index.md.MqSGm3kh.lean.js b/assets/index.md.CXVvb3vr.lean.js similarity index 59% rename from assets/index.md.MqSGm3kh.lean.js rename to assets/index.md.CXVvb3vr.lean.js index c5a7ba9a..5401e205 100644 --- a/assets/index.md.MqSGm3kh.lean.js +++ b/assets/index.md.CXVvb3vr.lean.js @@ -1 +1 @@ -import{u as Le,a as pe,b as Pe,w as Oe,c as ve,d as $e}from"./chunks/theme.DaoXcD6v.js";import{f as b,h as y,k as f,u as M,A as _,r as O,t as P,d as Re,I as j,j as X,p as ee,l as U,_ as we,B as ze,C as Be,J as te,D as B,E as G,F as se,K as Ne,m as We,L as ke,H as Fe,M as je,N as Ze,e as J,o as qe,w as Ve,T as Ye,q as Ue,O as Ge,P as Ke}from"./chunks/framework.Ch2f3zJW.js";import{u as He,f as Y,_ as Je,a as Qe}from"./chunks/useClicks.RkCdhX3B.js";import"./chunks/index.CVGuM2cA.js";const Xe={class:"text-center line-height-loose text-md"},et={class:"mx-auto max-w-75ch intro md-text-lg"},tt=f("div",{class:"i-mdi-share"},null,-1),st=f("span",null,"Share to save for later",-1),nt=[tt,st],it={__name:"AboutShare",setup(t){const{share:e,isSupported:s}=Le();function n(){e({title:"Web synths collection",text:"Look at this online synthesizer collection. No need to install anything - just your browser and any MIDI controller will do.",url:location.href})}return(i,a)=>(b(),y("div",Xe,[f("div",et,[M(s)?(b(),y("button",{key:0,class:"mx-auto flex items-center gap-2 text-white py-2 px-4 mt-6 shadow-lg rounded-lg cursor-pointer bg-green-600 -hover-translate-y-2px transition",onClick:a[0]||(a[0]=o=>n()),"data-umami-event":"Shared via button"},nt)):_("",!0)])]))}},ne=JSON.parse(`[{"url":"https://dotpiano.com/","date_created":"2023-10-27T12:45:53.887Z","title":"Dotpiano","slug":"dotpiano","author":"Alex Chen and Yotam Mann","author_link":null,"description":"Dot Piano is an online musical instrument allowing users to play a digital piano using their computer keyboard. The interactive web app provides a simple and intuitive interface for creating and sharing music, making it accessible for both beginners and experienced musicians.","tags":["polyphonic","midi","keyboard","Multiplayer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6dac5187-213f-4eb8-96ed-63c2e689b206","id":1,"sort":1,"clicks":6427,"public":true,"is_new":false,"stats":[1]},{"url":"https://waveform.playtronica.com/","date_created":"2023-10-27T12:45:54.644Z","title":"Waveform","slug":"waveform","author":"Qvantor","author_link":"https://github.com/qvantor/","description":"Polyphonic web synthesizer with simple yet capable interface.","tags":["playtronica","polyphonic","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"86cb9385-9deb-4f10-95cb-765980156e65","id":39,"sort":2,"clicks":6795,"public":true,"is_new":false,"stats":[2]},{"url":"https://juno-106.js.org/","date_created":"2023-10-27T12:45:54.085Z","title":"Juno-106","slug":"juno-106","author":"Steve Goldberg ","author_link":"https://github.com/stevengoldberg","description":"Online emulator of the classic Roland Juno-106 synthesizer. This interactive web app allows users to experiment with the iconic sounds of the Juno-106 directly from their browser. It features authentic recreations of the synth's controls and sound characteristics, making it a valuable tool for music enthusiasts and producers. ","tags":["fm","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b54cfce7-af2f-4e03-a5b3-81fc853d2cc8","id":14,"sort":3,"clicks":5019,"public":true,"is_new":false,"stats":[3]},{"url":"https://chromatone.center/practice/synth/elementary/","date_created":"2023-10-27T12:45:54.453Z","title":"Elementary synth","slug":"elementary","author":"Chromatone","author_link":"https://chromatone.center","description":"The Chromatone Elementary Synth is an interactive web-based synthesizer designed to provide a hands-on learning experience in sound synthesis. It features MIDI support and is built using the Elementary audio library. This synthesizer allows users to explore different synthesis techniques through a user-friendly interface, making it an excellent tool for both beginners and experienced musicians looking to experiment with sound design.","tags":["chromatone","polyphonic","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"21070a51-6089-48bd-8840-ba37b5f2963d","id":29,"sort":4,"clicks":3186,"public":true,"is_new":false,"stats":[4]},{"url":"https://mmontag.github.io/dx7-synth-js/","date_created":"2023-10-27T12:45:54.477Z","title":"DX7 Synth","slug":"dx7","author":"Matt Montag ","author_link":"https://github.com/mmontag","description":"The DX7 Synth JS is an online emulator of the classic Yamaha DX7 synthesizer. This interactive web app replicates the iconic FM synthesis capabilities of the DX7, allowing users to create and manipulate sounds using various parameters such as algorithms, operators, and envelopes. The app supports MIDI devices and provides a user-friendly interface for sound design experimentation. ","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"f3b285ee-6b82-453b-9ff6-aeda18ec675b","id":30,"sort":5,"clicks":2718,"public":true,"is_new":false,"stats":[5]},{"url":"https://touchme.chromatone.center/","date_created":"2023-10-27T12:45:53.941Z","title":"TouchME","slug":"touchme","author":"Chromatone","author_link":"https://chromatone.center","description":"TouchMe Experience by Chromatone is an interactive audio-visual web app that transforms touch inputs into music and visual effects. It features MIDI support, multiple synth oscillators, and various quantize and BPM modes. Users can explore six interactive SVG scenes, switch between light and dark modes, and view basic session statistics. Designed for creative experimentation, it offers a unique way to engage with music and visuals.","tags":["chromatone","playtronica"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"68062279-8e08-4953-ae8f-7a77c584948e","id":3,"sort":6,"clicks":3418,"public":true,"is_new":false,"stats":[6]},{"url":"https://muted.io/","date_created":"2023-10-27T12:45:54.742Z","title":"Muted.io","slug":"muted-io","author":"Sébastien Noël","author_link":"https://twitter.com/muted_io","description":"Muted.io offers a collection of interactive music theory tools designed for learning music online. These tools include a virtual piano, chord and scale references, a circle of fifths, tuners, and various visual aids to understand music theory concepts. The site is ideal for musicians looking to improve their knowledge and practice music in an engaging way.","tags":["educational","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"5c08ac7d-4414-47c0-b7d1-a9867ba3949f","id":43,"sort":7,"clicks":175,"public":false,"is_new":false,"stats":[10]},{"url":"https://chromatone.center/practice/synth/soundfont/","date_created":"2023-12-18T10:20:56.985Z","title":"Soundfont Sampler Synth","slug":"soundfont","author":"Chromatone","author_link":"https://github.com/chromatone","description":"Free open source soundfont sampler online synthesizer. Very robust and hassle free way to play some straightforward sampled instruments like horns, xylophones and just piano sounds. Instantly playable instrument with about 90 presets out of the box. ","tags":["Poly","Keyboard","Sampler","MIDI"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"26704e9d-5964-4a0f-940c-370c14777e95","id":51,"sort":8,"clicks":0,"public":true,"is_new":true,"stats":[43]},{"url":"https://midi.city/","date_created":"2023-12-28T05:40:45.140Z","title":"MIDI.city","slug":"midi-city","author":"Astral Digital","author_link":"https://astral.digital/","description":"midi.city is a free online synthesizer, built by Jack.\\n\\nmidi.city has over 128 different instruments including: Pianos, Saxophones, Drums, Trumpets, Synth Pads, Guitar, Violins and all other instruments defined in the General Midi specification.","tags":null,"archive_link":null,"archive":false,"content":"midi.city has been created with the help of hundreds of different open-source projects and with contributions from many others.\\n\\n- Tone.js by Yotam Mann: the Web Audio API-based sound engine that implements a majority of nodes used in the audio graph. It powers many of the advanced features used such as Granular Synthesis, Reverb, and timing.\\n- Groove Monkee: graciously provided the MIDI files that are used for the percussion loops.\\n- Keenan Brand: created the midi.city logo and various icons used on the site.\\n- Noun Project: various icons are used via a Pro license.\\n- Google Material Design: various icons.\\n- Compifont by Marcin Dziembor: the soundfont powering the samples and many the audio graph definitions, is originally . Several modifications have been made to adapt to midi.city and the Web Audio API. ","iframe":true,"cover":"8cb479ba-e4e0-42f2-986c-597b68b8e639","id":52,"sort":9,"clicks":10,"public":false,"is_new":false,"stats":[44]},{"url":"https://apps.musedlab.org/aqwertyon/theory/","date_created":"2023-10-27T12:45:54.711Z","title":"aQWERTYon","slug":"aqwertyon","author":"Mused lab","author_link":"https://musedlab.org/","description":"aQWERTYon is an interactive web app that turns your computer keyboard into a musical instrument. Designed for music theory practice, it allows users to play notes and chords using a QWERTY keyboard layout. The app provides a visual representation of notes and scales, making it a useful tool for learning and exploring music theory concepts.","tags":["polyphonic","samples"],"archive_link":null,"archive":false,"content":"The **aQWERTYon** (QWERTY accordion) is designed to simplify the process for improvising, learning, and making music with your computer keyboard. Play along with your favorite YouTube videos, learn music theory through our Music Theory for Bedroom Producers course in collaboration with Soundfly, or take advantage of Web MIDI and us it to play and record into your favorite digital audio workstation, such as Soundtrap.com, GarageBand, Logic, or Ableton, or as input into music notation programs like Noteflight.\\n\\nhttps://youtu.be/hqFr4lF6u_Y","iframe":true,"cover":"e7c87de8-c290-4da9-b0e0-eed73871b27a","id":42,"sort":10,"clicks":348,"public":false,"is_new":false,"stats":[8]},{"url":"https://musiclab.chromeexperiments.com/","date_created":"2023-11-26T08:23:47.351Z","title":"Chrome Music Lab","slug":"chrome-lab","author":"Google","author_link":"https://github.com/googlecreativelab/chrome-music-lab","description":"Chrome Music Lab is a website that makes learning music more accessible through fun, hands-on experiments.","tags":["Educational","Keyboard","MIDI","Poly","Piano","Analysis","Mic","Visuals"],"archive_link":null,"archive":false,"content":"## What can it be used for?\\n\\nMany teachers have been using Chrome Music Lab as a tool in their classrooms to explore music and its connections to science, math, art, and more. They’ve been combining it with dance and live instruments. Here’s a collection of some uses we’ve found on Twitter.\\n\\n## Can I use it to make my own songs?\\n\\nYes. Check out the Song Maker experiment, which lets you make and share your own songs.\\n\\n## Do I need to make an account?\\n\\nNope. Just open any experiment and start playing.\\n\\n## How were these built?\\n\\nAll our experiments are all built with freely accessible web technology such as Web Audio API, WebMIDI, Tone.js, and more. These tools make it easier for coders to build new interactive music experiences. You can get the open-source code to lots of these experiments here on [Github](https://github.com/googlecreativelab/chrome-music-lab).\\n\\n## What devices do these work on?\\n\\nYou can play with these experiments across devices – phones, tablets, laptops – just by opening the site on a web browser such as Chrome.","iframe":true,"cover":"297b059e-a6fa-4faa-91b2-c2e1e68cf98f","id":50,"sort":11,"clicks":304,"public":false,"is_new":false,"stats":[9]},{"url":"https://topos.live/","date_created":"2024-06-21T12:06:09.754Z","title":"Topos","slug":"topos","author":"Raphael","author_link":"https://github.com/Bubobubobubobubo/topos","description":"Topos is an algorithmic sequencer. Topos is also a live coding environment. To sum it up, think: \\"making music in real time through code\\". Code used as an expressive medium for musical improvisation! Topos uses small algorithms to represent musical sequences and processes.","tags":["Live coding","MIDI","Poly","Visuals","FM"],"archive_link":null,"archive":false,"content":"Topos is deeply inspired by the Monome Teletype. The Teletype is/was an open source hardware module for Eurorack synthesizers. While the Teletype was initially born as an hardware module, Topos aims to be a web-browser based cousin of it! It is a sequencer, a scriptable interface, a companion for algorithmic music-making. Topos wishes to fullfill the same goal as the Teletype, keeping the same spirit alive on the web. It is free, open-source, and made to be shared and used by everyone. Learn more about live coding on livecoding.fr.","iframe":true,"cover":"76e0c2b7-e95e-447d-982d-e156cb9d1530","id":57,"sort":12,"clicks":0,"public":false,"is_new":true,"stats":[49]},{"url":"https://websynths.com/","date_created":"2023-10-27T12:45:54.019Z","title":"Websynths Microtonal","slug":"microtonal","author":"WebSynths","author_link":"https://www.websynths.com/microtonal/","description":"The deepest internet synthesizer","tags":null,"archive_link":null,"archive":false,"content":"\\nWebSynths is a free resource for any musician with internet access! But, it is made possible by support from our patrons. Please consider helping if you can: patreon.com/WebSynths\\n\\n- You can use your QWERTY keyboard, mouse, mobile touch or MIDI keyboard to play the sounds.\\n- You can change the tuning of the keys, or select a scale, by clicking the tuning button.\\n- MIDI is a way to use an external physical instrument to play it. If you have a MIDI keyboard that you wish to use, hit the MIDI button to set it up.\\n- If a note gets stuck, hit the panic button, it will stop all voices from playing.\\n- You can use the arrows on your computer keyboard to scroll through the presets.\\n\\nA simple explanation of Subtractive Synthesis:\\n\\n- Subtractive Synthesis works by taking one or more oscillators, setting the pitch of their oscillation (usually to the note of the key being pressed,) setting the shape of their oscillation to the desired timbre (Sine, Saw, Square or more complex shapes,) mixing them together and running them through a filter to change their EQ (usually filtering out the highest or lowest frequencies... this is why it is called \\"subtractive\\"), then running them through an envelope so the note can be heard on when a key is pressed down and is silenced when the key is released. In the case of WebSynths Microtonal, the sound is then sent through effects like delay, chorus and reverb and out to your speakers.\\n- Oscillators are the voices. This synth has 3 of them in the left column. You can change the character of each voice by changing the parameters of them. The 'Shape' menu allows you to choose from different styles of voice for each oscillator. You can turn each voice on or off and mix them together.\\n- The filter section applies equalization to your oscillators via the cutoff and emphasis controls. You can change the equalization filter type to 'low pass / high pass' and many more. You can use the LFOs and/or Envelopes to change how the filtration changes over time. An LFO is just a slow oscillator that is uses to automatically move a parameter over time.\\n- The amplitude envelope changes how your sound is played, volume-wise, when you hit a note. For example, having a long release time will mean that once you let go of the note you are playing it will tail off until fading out. Having a slow attack will mean that your note will fade in instead of playing at full volume straight away.\\n- The effects section allows you to add various effects to your overall sound. You can change the effects, mix them together and toggle them on or off too.\\n\\n","iframe":false,"cover":"ffc54664-7ba4-4855-a56a-6657a5542a04","id":10,"sort":13,"clicks":172,"public":false,"is_new":false,"stats":[11]},{"url":"https://stuartmemo.com/synth/","date_created":"2023-10-27T12:45:54.586Z","title":"Sympathetic Synthesizer System Mk 1","slug":"sympathetic","author":"Stuart Memo ","author_link":"https://github.com/stuartmemo","description":"The Sympathetic Synthesizer System Mk 1 is an interactive web app that emulates a complex synthesizer. It features three oscillators with selectable waveforms, an LFO, filters with ADSR controls, and noise generation. The app allows users to explore sound design through various parameters, offering a detailed and hands-on synthesis experience. MIDI support is also included for enhanced control.","tags":["keyboard","midi","additive"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"123aeb6d-c7b0-43dd-a852-98660bdf03f0","id":37,"sort":14,"clicks":302,"public":false,"is_new":false,"stats":[12]},{"url":"https://learningsynths.ableton.com/","date_created":"2023-10-27T12:45:54.360Z","title":"Learning synths","slug":"ableton","author":"Ableton","author_link":"https://github.com/Ableton","description":"Explore the fundamentals of synthesis with this interactive web-app by Ableton. Dive into the world of sound design, experiment with different parameters, and learn how to sculpt your own unique sounds with ease.","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"0bf8312d-c449-4f5c-80ad-36594ef98db6","id":26,"sort":15,"clicks":185,"public":false,"is_new":false,"stats":[13]},{"url":"https://www.femurdesign.com/theremin/","date_created":"2023-10-27T12:45:54.206Z","title":"Theremin","slug":"theremin","author":"Femur","author_link":"https://femurdesign.com/","description":"Experience the magic of the theremin with this interactive web-app by Femur Design. Harness the power of motion to create ethereal music without physical contact. Experiment with pitch and volume to craft haunting melodies right in your browser.","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6b22ef48-6830-4cf2-810d-809408033450","id":19,"sort":16,"clicks":320,"public":false,"is_new":false,"stats":[14]},{"url":"https://cardinal.kx.studio/live","date_created":"2024-05-20T18:57:14.836Z","title":" DISTRHO Cardinal","slug":"cardinal","author":"Filipe Coelho, aka falkTX","author_link":"https://falktx.berlin/","description":"Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.","tags":["Modular","FM","Poly"],"archive_link":null,"archive":false,"content":"Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.\\nIt is based on the popular VCV Rack but with a focus on being a fully self-contained plugin version.\\n\\nMore specifically, this is a DPF-based plugin wrapper around VCV Rack, using its code directly instead of forking the project, with the target of having a self-contained, fully free and open-source plugin version of Rack.\\nSee the why section below for the reasons Cardinal exists, also for frequently asked questions check this FAQ document.\\n\\nCardinal contains Rack, some 3rd-party modules and a few internal utilities all in a single binary.\\nAll \\"Core\\" modules from Rack have been replaced by Cardinal equivalents, simplified to better work for an audio plugin.\\n\\nCardinal does not load external modules and does not connect to the official Rack library/store.\\nAll VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues.\\n\\n## Why\\n\\nCardinal was created first and foremost as a way to have Rack as a proper open-source audio plugin.\\nA proper audio plugin should be self-contained as much as possible, as to not interfere with the DAW/Host. Loading external modules clearly goes against this idea.\\nNot to mention being open-source, otherwise we are at the mercy of the wishes of a company for what we can and cannot do, which is not something Cardinal's authors wish to abide by.\\n\\nA self-contained plugin can't be overstated, as DLL/shared-object symbol conflicts can trigger hard-to-debug crashes.\\nWhile Rack tries to mitigate this as much as possible, crashes due to conflicting modules have already been seen in v2 builds.\\nOn the other side, Cardinal redefines class and function names as needed to avoid as many conflicts as possible.\\n\\nSupport for ARM and non-mainstream platforms (for example BSD) has also always been missing from the official Rack since the start.\\nWhile we can patch the Rack free version to support these, same can't be done with Rack Pro with it being a closed-source product.\\nThe online library/store only supports a very specific set of platforms too, so non-supported platforms would need any 3rd-party modules to be manually compiled to make them usable.\\n\\nUnhappiness with the audio threading behaviour of Rack also plays a role.\\nBoth audio and MIDI should be locked to the host audio thread as to minimize (or even altogether remove) latency and jitter.\\nThe use of separate threads for MIDI is bad design, one that has been corrected in DAWs and JACK-MIDI for several years...\\nBut Rack's use of RtMidi requires separate threading, so Cardinal does not use it.","iframe":true,"cover":"dc7070e1-66fd-4f74-95d2-92d8388864e2","id":56,"sort":17,"clicks":5,"public":false,"is_new":true,"stats":[48]},{"url":"https://multiplayer-orchestra.com","date_created":"2024-04-23T08:07:22.796Z","title":"Multiplayer Orchestra","slug":"multiplayer-orchestra","author":"Mutli_Orchestra","author_link":"https://twitter.com/Mutli_Orchestra","description":"Play in real time with people from all around the world with more than 400 instruments.","tags":["Poly","MIDI","Keyboard","Collaborative","Online"],"archive_link":null,"archive":false,"content":"Multiplayer Orchestra ([https://www.multiplayer-orchestra.com/](https://www.multiplayer-orchestra.com/)) is a web application that allows you to virtually collaborate with musicians from around the world in real-time. Here are some key features:\\n\\n* **Large instrument selection:** Choose from over 400 instruments, including pianos, guitars, drums, and orchestral instruments.\\n* **Real-time collaboration:** Play music simultaneously with other users, creating a virtual orchestra.\\n* **Public and private rooms:** Join public rooms to jam with others or create private rooms with a password for specific collaborations.\\n* **Contests:** Participate in contests to win prizes like Amazon gift cards by recording solo performances.\\n\\n**It's important to note that the website seems to be in beta based on the version information listed (Beta 0.30).** ","iframe":true,"cover":"d743d9ea-d73f-4593-a70e-58a3e4deaa1b","id":55,"sort":18,"clicks":5,"public":false,"is_new":true,"stats":[47]},{"url":"https://touchpianist.com/","date_created":"2023-10-27T12:45:54.691Z","title":"Touch Pianist","slug":"touch-pianist","author":"EarSlap","author_link":null,"description":"Unleash your inner virtuoso with Touch Pianist. Experience the thrill of playing the piano with just your fingertips. Choose your favorite classical masterpiece and immerse yourself in the joy of creating beautiful music, all through the power of touch.","tags":["entertainment","piano"],"archive_link":null,"archive":false,"content":"Touch Pianist is a musical toy / instrument that allows the user to perform hard-to-play classical piano music favorites (from composers like Beethoven, Mozart, Bach, Satie, Debussy to name a few) just by tapping the rhythm of the piece's particular sound events on a computer keyboard or a touch screen.\\n\\nIt also provides live visualisation of the pieces that are being performed. There is no score keeping, the user is free to perform the music in any way they wish. The premise is that it is really fun to perform a piece you know well, exactly like you feel it with so little effort.\\n\\nTouch Pianist has CoreMIDI support so you can use your favorite piano / sound plug-in in your computer as a sound source if you wish.","iframe":false,"cover":"415deeeb-a843-4363-b6c9-78918aa688af","id":41,"sort":19,"clicks":177,"public":false,"is_new":false,"stats":[15]},{"url":"https://www.beepbox.co","date_created":"2024-03-21T02:43:35.749Z","title":"BeepBox","slug":"beepbox","author":"John Nesky","author_link":"https://johnnesky.com/","description":"BeepBox is an online tool for sketching and sharing instrumental music.\\n\\nAll song data is contained in the URL at the top of your browser. When you make changes to the song, the URL is updated to reflect your changes. When you are satisfied with your song, just copy and paste the URL to save and share your song!\\n\\nBeepBox is a passion project, and will always be free to use. ","tags":["Poly","Sequencer","FM"],"archive_link":null,"archive":false,"content":" BeepBox is developed by John Nesky.\\n\\nBeepBox does not claim ownership over songs created with it, so original songs belong to their authors.\\n\\nNeither John Nesky nor BeepBox assume responsibility for any copyrighted material played on BeepBox. No songs are ever received, recorded, or distributed by BeepBox's servers. All song data is contained in the URL after the hash (#) mark, and your song data will not leave your device unless you copy and share the URL. BeepBox does not collect, track, or share any user data. ","iframe":true,"cover":"dea37f5f-504c-443f-ba9a-3dff4d583506","id":54,"sort":20,"clicks":10,"public":false,"is_new":true,"stats":[46]},{"url":"https://roland50.studio/","date_created":"2023-11-25T05:42:57.573Z","title":"Roland 50 Studio","slug":"roland50","author":"Yuri Suzuki","author_link":"https://www.yurisuzuki.com/","description":"It's a professional sounding online musical interface, which records your masterpieces and allows you to share your creations through social media, messaging and also as a download.\\nOn top of the TR-808 drum machine and TB-303 bass synthesizer featured at the original 2020 release, now the sound of SH-101 synthesizer is added, and more sounds to come later in the year 2022, commemorating Roland's 50th anniversary.","tags":["drum machine","SP404","TR808","TB303","Step sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"3b5aec13-7e50-475c-9165-bc963872515d","id":45,"sort":21,"clicks":17,"public":false,"is_new":false,"stats":[16]},{"url":"https://www.disco-computer.com/synthesizer/synth.html","date_created":"2023-10-27T12:45:54.270Z","title":"Disco-computer","slug":"disco-computer","author":"Patrick Sawyer","author_link":null,"description":null,"tags":["polyphonic","fm","keyboard"],"archive_link":"/archive/synthescheisse/index.html","archive":true,"content":null,"iframe":true,"cover":"0d0183e6-8964-4246-a18c-a6ca0a0f2794","id":22,"sort":22,"clicks":269,"public":false,"is_new":false,"stats":[17]},{"url":"https://seeing-sound.netlify.app/","date_created":"2023-10-27T12:45:54.492Z","title":"Video Sampler","slug":"video-sampler","author":"Playtronica","author_link":"https://shop.playtronica.com","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b39cc546-2571-4402-84cd-f8497e27d0c9","id":31,"sort":23,"clicks":256,"public":false,"is_new":false,"stats":[18]},{"url":"https://bs.stranno.su/","date_created":"2024-08-21T10:02:11.468Z","title":"Binary Synth","slug":"binary-synth","author":"Max Alyokhin ","author_link":"https://github.com/MaxAlyokhin","description":"Audio synthesis from binary code of any file","tags":["FX","MIDI","Educational"],"archive_link":null,"archive":false,"content":"A web-synthesizer that generates sound from the binary code of any files. It can synthesize sound directly in the browser, or be a generator of MIDI messages to external devices or DAWs, turning any file into a score. All the application code is written in Javascript and along with everything you need is packed into a single .html file of about 750kb. The synthesizer doesn't need internet, it can be downloaded and run locally on any device with a browser.\\n\\nThe application reads the file sequentially, and due to the high speed of reading and random deviation of reading duration, we can get quite unpredictable generation of timbre nuances, and at certain settings we can switch to granular synthesis.","iframe":true,"cover":"b43984bd-bdca-4134-bb55-567306668935","id":62,"sort":25,"clicks":0,"public":false,"is_new":true,"stats":[54]},{"url":"https://www.stef.be/bassoontracker/","date_created":"2024-03-14T07:04:03.311Z","title":"Bassoon Tracker","slug":"bassoon","author":"Steffest","author_link":" https://www.stef.be","description":"Browser-based old-school Amiga Music Tracker in plain old JavaScript.","tags":["FM","tracker","8-bit","low-fi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"70c9db80-8ef8-4aa5-9dcd-6b5c3c0da5b2","id":53,"sort":26,"clicks":10,"public":false,"is_new":true,"stats":[45]},{"url":"https://www.igorski.nl/experiment/websid","date_created":"2023-10-27T12:45:54.438Z","title":"WebSID Commodore 64","slug":"web-sid","author":"Igor Zinken","author_link":"https://www.igorski.nl/","description":null,"tags":["polyphonic","keyboard","midi","additive"],"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"932e0ae0-0048-4c6d-92bb-a4a17a8a4dd4","id":28,"sort":27,"clicks":156,"public":false,"is_new":false,"stats":[19]},{"url":"https://nicroto.github.io/viktor/","date_created":"2023-10-27T12:45:54.388Z","title":"Viktor NV-1","slug":"nv-1","author":"Nikolay Tsenkov ","author_link":"https://github.com/nicroto","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"ff3082ad-3c38-4880-ab23-35711c97ea71","id":27,"sort":28,"clicks":496,"public":false,"is_new":false,"stats":[20]},{"url":"https://virtualpiano.eu/","date_created":"2023-10-27T12:45:54.542Z","title":"VirtualPiano.eu","slug":"virtual-piano","author":"WebSyrup","author_link":"https://websyrup.net/","description":null,"tags":["midi","keyboard"],"archive_link":null,"archive":false,"content":"VirtualPiano.eu is the online synthesizer that allows you to play 128 musical instruments for free using your PC keyboard, the mouse or by connecting an external MIDI keyboard.\\n\\nYou can adjust Volume, Reverb, Loop and quality. Use the sustain and adjust the octaves, you can also select and set different channels including the one for the drums.\\n\\nCreate your own melodies, have fun playing or use VirtualPiano to learn how to play the Piano online on your own. ","iframe":true,"cover":"9a59eea5-c77f-483c-9443-1cd0727e6dcc","id":35,"sort":29,"clicks":282,"public":false,"is_new":false,"stats":[21]},{"url":"https://onlinesequencer.net/","date_created":"2023-10-27T12:45:54.565Z","title":"Online sequencer","slug":"online-sequencer","author":"Jacob Morgan and George Burdell","author_link":"https://github.com/buildist","description":null,"tags":["sequencer"],"archive_link":null,"archive":false,"content":"**Online Sequencer** is a web-based music sequencer that allows users to create music saved online, or on their computer. The piano roll is essential to the sequencer, which is on the left of the screen, with 72 notes from C2-B7 (labelled differently from a piano, C2 on the sequencer corresponds to C1 on a piano). In addition to several parameters which can be modified to change the sound of the music, additional functionality can be accessed via the console.\\n\\nUpon opening the site, users can begin composing and \\"drawing\\" notes on the grid, with the default instrument being Electric Piano. By default, a sequence's time signature is set to 4/4, and the grid spacing is set to 1/4 (16 notes per measure). The note lengths can be adjusted by dragging the dark tab on the right of each note, and precision can be afforded by changing the 'Grid' option to other note divisions. \\n\\n## History\\n\\nOnline Sequencer was created on January 2, 2013 by Jacob Morgan during a break at Georgia Tech.\\n\\nBeginning in the fall of 2013, accounts were available but were separate from the music portion of the site. They were only used in the forum and the website chat.\\n\\nIn 2015, accounts were linked to the main website and allowed songs to be saved under someone's username.\\n\\nThe World Update in 2018 added several new instruments and changed the landscape of sound design on the site. The \\"World Update Contest\\" was held for the update.\\n\\nStarting in late 2020, OS began to receive a variety of updates which vastly improved the functionality of the site. These updates introduced features like custom grid sizes, automation with markers, extra reverb options, detune, and distortion. In 2021, the \\"Space Race\\" contest was held, as to see who could work best with the changes.\\n\\nIn late 2022, newer, higher-quality instruments were added. Some of the instruments, such as Electric Piano, Grand Piano, Violin, and Cello got an updated sustained version, while the original versions still exist under the \\"classic\\" designation.\\n\\nCurrently, the 10-Year Anniversary Contest is being held.\\n\\n## Features\\n\\nWithin the editor, numerous user interface features allow for various changes which will impact the individual sequence on that page.\\n\\n### Basic features\\n\\nUI features include:\\n\\n- Tempo (10-999 BPM)\\n- Measure count or Time count (MM: SS.ssss)\\n- Time signature (2/4, 3/4, 4/4, 5/4)\\n- Grid size (This correlates to note divisions; 1/16, 1/12, 1/8, 1/6, 1/4, 1/3, 1/2)\\n- Auto Scroll (Fast, Smooth, Off; how the sequencer displays measures off-screen as a sequence plays)\\n- Add an Audio Track (This won't be saved to the sequence but will play alongside it for ease of transcription)\\n- Title input\\n- Draw, select, and erase\\n- Instrument dropdown, instrument options, and select instrument (selects all notes of the current instrument)\\n- Select all, Cut, Copy, and Paste\\n- Zoom options\\n- Export options\\n- Help\\n- Fullscreen\\n- Tooltips\\n\\n### Advanced features\\n\\nUsers can access more advanced features for use in their sequences by clicking the advanced tab on the instrument they wish to change. This menu contains options to change volume, panning, detune (-1200 to +1200), reverb, distortion, and an equalizer. This array lets users configure specific instruments to create specific sounds, and textures, or to accompany other instruments as a layer or development of the original sound.\\n\\nOS also allows for commands to be entered in the browser console to manipulate different options in specific ways, such as setting custom to detune values (0-infinity), custom grid sizes, note divisions, and sequence ID amongst other things. These options bring OS closer to that of classic Digital Audio Workstations (DAWs) but are still limited in terms of accessibility and availability.\\n\\n### Browser and device support\\n\\nOnline Sequencer supports Chrome and other Chromium-based browsers, such as Microsoft Edge, Opera, and Brave. Firefox is also supported, but often with limited functionality. Safari and Internet Explorer are not supported, due to engine issues.\\n\\nOther mobile browsers support sequence playback, but not editing. However, iOS users have the same problem with WebKit on macOS. However, unlike in macOS, all browsers (even Chromium-based browsers) use WebKit as the engine for iOS due to Apple prohibiting other engines for security reasons; iOS does not support Online Sequencer, other than chat and forums.\\n\\nThe website's user interface is formatted for proper use on desktops, but some pages such as the chat page, playlists, and forums should be formatted well on mobile devices. ","iframe":true,"cover":"ec08ba72-8157-4415-8b34-aea1fe686e09","id":36,"sort":30,"clicks":321,"public":false,"is_new":false,"stats":[22]},{"url":"https://sb.bitsnbites.eu/","date_created":"2023-10-27T12:45:54.625Z","title":"Sound Box","slug":"sound-box","author":"Bits'n'bites","author_link":"https://gitlab.com/mbitsnbites","description":null,"tags":["tracker"],"archive_link":null,"archive":false,"content":"https://github.com/mbitsnbites/soundbox","iframe":true,"cover":"f2f825f3-a084-408b-86d1-2b64cf822c3c","id":38,"sort":31,"clicks":209,"public":false,"is_new":false,"stats":[23]},{"url":"https://femurdesign.com/omni/","date_created":"2023-10-27T12:45:54.224Z","title":"Omni","slug":"omni","author":"Luke Phillips","author_link":"https://femurdesign.com/","description":null,"tags":["polyphonic","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"fbb1364f-53cf-4f71-8f29-d7f572308e78","id":20,"sort":32,"clicks":210,"public":false,"is_new":false,"stats":[24]},{"url":"https://www.g200kg.com/docs/webmodular/","date_created":"2023-10-27T12:45:54.252Z","title":"Web Modular","slug":"web-modular","author":"g200kg","author_link":"https://www.g200kg.com/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"48e0280c-f7ff-4308-bde3-973b7febe89c","id":21,"sort":33,"clicks":202,"public":false,"is_new":false,"stats":[25]},{"url":"https://errozero.co.uk/acid-machine/","date_created":"2023-10-27T12:45:54.333Z","title":"Acid Machine 2","slug":"acid-machine-2","author":"Errozero","author_link":"https://www.errozero.co.uk/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"031eab3e-2f21-442a-8fdc-9769907824e0","id":25,"sort":34,"clicks":166,"public":false,"is_new":false,"stats":[26]},{"url":"https://apps.musedlab.org/groovepizza/","date_created":"2023-11-21T04:30:41.565Z","title":"Groove Pizza","slug":"groove-pizza","author":"NYU Music Experience Design Lab","author_link":"https://musedlab.org/groovepizza/","description":"Groove Pizza is a circular rhythm app for creative music making and learning! It’s also a playful tool for creating grooves using math concepts like shapes, angles and patterns","tags":["drums","sequencer","Educational"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"50d7bc15-edd5-4261-bc2a-1b173b5a1547","id":44,"sort":35,"clicks":91,"public":false,"is_new":false,"stats":[27]},{"url":"https://ojack.github.io/PIXELSYNTH/","date_created":"2023-10-27T12:45:54.286Z","title":"PixelSynth","slug":"pixel-synth","author":"Olivia Jack","author_link":"https://ojack.xyz/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"77369c22-944c-4f6a-83b5-85e16fe43abc","id":24,"sort":36,"clicks":217,"public":false,"is_new":false,"stats":[28]},{"url":"https://neosynth.pro","date_created":"2024-07-22T08:19:41.905Z","title":"NeoSynth.pro","slug":"neosynth","author":"NeoSynth","author_link":null,"description":"More than just an online synthesizer – it's a comprehensive learning platform designed to help music enthusiasts of all levels master the art of sound synthesis. Whether you're a beginner looking to understand the basics or an experienced producer aiming to refine your skills, NeoSynth Pro provides the tools and knowledge you need to create amazing sounds.","tags":null,"archive_link":null,"archive":false,"content":"Features\\n\\n Interactive synthesizer with multiple waveforms and real-time parameter control\\n Comprehensive tutorials covering all aspects of sound synthesis\\n Preset system for quick access to popular sounds\\n Visual feedback with dynamic waveform display\\n Responsive design for seamless use on desktop and mobile devices\\n","iframe":true,"cover":"da587f71-e54d-4146-88e5-551ffb2e64f9","id":60,"sort":37,"clicks":2,"public":false,"is_new":true,"stats":[52]},{"url":"https://www.multiplayerpiano.org/","date_created":"2023-11-26T08:06:18.875Z","title":"Multiplayer Piano","slug":"multiplayer-piano","author":"Brandon Lockaby","author_link":"https://github.com/Multiplayer-Piano","description":"Online piano, that can be played by any site visitor together in a virtual room or alone.","tags":["Piano","MIDI","Poly","Multiplayer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"9c10771b-e38f-469f-b58b-c9e6bb91a072","id":49,"sort":38,"clicks":4,"public":false,"is_new":false,"stats":[29]},{"url":"https://webaudiodemos.appspot.com/midi-synth/index.html","date_created":"2023-10-27T12:45:53.963Z","title":"MIDI–driven Web Audio","slug":"midi-driven-web-audio","author":"Chris Wilson","author_link":"https://github.com/cwilso","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"0005a0c9-c7e7-4922-a1e5-49d4326d2f77","id":6,"sort":39,"clicks":127,"public":false,"is_new":false,"stats":[30]},{"url":"https://samplestitch.com.s3-website-us-east-1.amazonaws.com/","date_created":"2023-10-27T12:45:54.185Z","title":"Samplestich","slug":"sample-stich","author":"Matt Daniels","author_link":"https://mdaniels.com","description":null,"tags":["samples","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"89859f9f-0d45-44dc-93b6-98dfa2e7d799","id":18,"sort":40,"clicks":164,"public":false,"is_new":false,"stats":[31]},{"url":"https://www.audiotool.com/product/device/heisenberg/","date_created":"2023-10-27T12:45:53.983Z","title":"Meet the Heisenberg","slug":"meet-the-heisenberg","author":"AudioTool","author_link":"https://www.audiotool.com","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"a2397ce6-7712-40e5-b4e0-df95c7992662","id":8,"sort":41,"clicks":255,"public":false,"is_new":false,"stats":[32]},{"url":"https://www.gsn-lib.org/apps/cardboardsynth/index.html","date_created":"2023-10-27T12:45:54.002Z","title":"Cardboard Synth","slug":"cardboard-synth","author":" Thorsten Thormählen","author_link":"https://www.uni-marburg.de/en/fb12/research-groups/grafikmultimedia/thormae","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"29fe1fcc-ca85-41b3-ab1e-7f10770f2c1f","id":9,"sort":42,"clicks":184,"public":false,"is_new":false,"stats":[33]},{"url":"https://poly.ozieblowski.dev/","date_created":"2024-06-26T15:32:49.507Z","title":"Polyrhythm3","slug":"polyrhythm3","author":"Anagramme","author_link":"https://github.com/Angramme","description":"A new reworked release of polyrhythm generator / metronome. The UI is divided into blocks, the first block is the visualization block, here you can see your \\"sections\\" displayed in a midi-esque fashion. It allows you to do the following actions:\\n\\n- dd new sections with the add button to the right\\n- select the section that you are currently editing in the editor by clicking on it.\\n- swap two sections by dragging one section over another.\\n","tags":["polyrhythm","MIDI","Sequencer","metronome"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"48979a40-1009-4ad3-8363-8cde02abf2c0","id":58,"sort":43,"clicks":null,"public":false,"is_new":true,"stats":[50]},{"url":"https://tanguysynth.com/","date_created":"2023-10-27T12:45:54.036Z","title":"Tanguy synth","slug":"tanguy-synth","author":"Luke Teaford","author_link":"https://github.com/luketeaford","description":null,"tags":["monophonic","additive","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"5471a71e-7c5b-4ea6-aee0-1b394873c381","id":11,"sort":44,"clicks":117,"public":false,"is_new":false,"stats":[34]},{"url":"https://www.blokdust.com/","date_created":"2023-11-25T06:31:23.261Z","title":"BlokDust","slug":"blokdust","author":"Luke Twyman, Luke Phillips, Edward Silverton","author_link":"https://wvnl.xyz/","description":"BlokDust is a creative visual drag and drop music exploration tool. Developed in Brighton UK and released in 2016, BlokDust uses the Web Audio API and makes use of Tone.js as an audio framework.","tags":["creative","sequencer"],"archive_link":null,"archive":false,"content":"Luke Twyman - project concept, design & Ul.\\nwhitevinyldesign.com\\n@whitevinylUK\\nLuke Phillips - audio development & musical interaction.\\nfemurdesign.com\\n@lukephills\\nEdward Silverton - client & server architecture & core development.\\nedsilv.com\\n@edsilv","iframe":true,"cover":"7e5bcda8-f37a-46c0-91d9-0a6ea501a101","id":47,"sort":45,"clicks":19,"public":false,"is_new":false,"stats":[35]},{"url":"https://billard.medusis.com/","date_created":"2024-06-26T16:11:33.298Z","title":"Billiard","slug":"biliard","author":"Carl-Leonard Von Fligenstein","author_link":"https://news.ycombinator.com/user?id=bambax","description":" Here's Billard. It combines music and physics into a unique creative tool, as I explore various unconventional methods for generating music.\\n\\nMost traditional music composition tools revolve around the idea of a repeatable pattern. Billard is a webapp that never repeats itself. It generates music automatically based on the collisions of balls in a 2D space. Collisions trigger notes (or chords) in a given key. One can add balls or move them (y-position is pitch); the app remembers its state between reloads; or it can be reset with the 'init' button on the top left. Gravity can be adjusted in real time to change the behavior of the balls.\\n\\nIt owes a lot of inspiration to Brian Eno and Erik Satie (inventor of musique d'ameublement, or \\"furniture music\\"). Some may think the lack of pattern makes it not musical enough -- but this lets it be listened to —and watched— for a while without boredom.\\n\\nThe webapp is made using plain JavaScript. (All SVG icons were made 'by hand'.) It uses Tone.js only for triggering piano samples. Beyond piano, it's MIDI-enabled and works well at slow speed with haunting, dark synth sounds.","tags":["MIDI","Poly","Physics","Sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b56f4acb-b528-4d18-a3b5-405fb10cafa4","id":59,"sort":46,"clicks":2,"public":false,"is_new":true,"stats":[51]},{"url":"https://mod-synth.io/","date_created":"2023-10-27T12:45:54.052Z","title":"MOD synth","slug":"mod-synth","author":"André Venâncio ","author_link":"https://github.com/andrevenancio","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"31564bf3-fca9-41a4-b390-d78ccd848107","id":12,"sort":47,"clicks":146,"public":false,"is_new":false,"stats":[36]},{"url":"https://perso.numericable.fr/olivier.friker/synth/O3-synth%20V1.3.html","date_created":"2023-10-27T12:45:54.069Z","title":"OLIF SY1K","slug":"olif-sy-1-k","author":"Olivier Friker","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"3b9a5e11-3de3-46fe-9cdc-e1668b152f31","id":13,"sort":48,"clicks":145,"public":false,"is_new":false,"stats":[37]},{"url":"http://www.noisesculptor.com/","date_created":"2023-10-27T12:45:54.104Z","title":"Note Sculptor","slug":"note-sculptor","author":"Ruin Technology","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"a01968d1-3f88-4522-9752-1c33d10d90d9","id":15,"sort":49,"clicks":129,"public":false,"is_new":false,"stats":[38]},{"url":"https://zya.github.io/granular/","date_created":"2024-07-29T17:37:33.497Z","title":"Multi-Touch Granular Sampler","slug":"granular","author":"Zya","author_link":"https://github.com/zya/","description":"The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.","tags":["Granular"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"f44fa962-37f0-487d-b69b-6880dd06dbd1","id":61,"sort":50,"clicks":1,"public":false,"is_new":false,"stats":[53]},{"url":"https://aikelab.net/websynthv2/","date_created":"2023-10-27T12:45:54.141Z","title":"WebAudioSynth V2","slug":"web-audio-synth-v2","author":"like","author_link":"https://github.com/aike/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"ac668fba-7226-43dc-a91f-bd21a31446e5","id":16,"sort":51,"clicks":305,"public":false,"is_new":false,"stats":[39]},{"url":"https://isleoftune.com/","date_created":"2023-11-25T06:22:15.184Z","title":"Isle of Tune","slug":"isleoftune","author":"Jim Hall","author_link":"https://twitter.com/isleoftune","description":"Draw an island, where everything plays music.","tags":["game","sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6830c24f-c7bf-430f-abc1-3d7fbf5f2557","id":46,"sort":52,"clicks":15,"public":false,"is_new":false,"stats":[40]},{"url":"https://www.soundtrap.com/","date_created":"2023-10-27T12:45:54.155Z","title":"Sound Trap","slug":"sound-trap","author":"Soundtrap","author_link":"https://www.soundtrap.com/about","description":null,"tags":["daw"],"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"63ef832a-f7da-4536-851f-4964005a89f1","id":17,"sort":53,"clicks":124,"public":false,"is_new":false,"stats":[41]},{"url":"http://typedrummer.com/","date_created":"2023-11-25T06:34:10.166Z","title":"Type Drummer","slug":"typedrummer","author":"Kyle Stetz","author_link":"http://kylestetz.com/","description":"Type your drum loops","tags":["sequencer","drums","Keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"19454c82-7338-4144-9f1c-010c80a70a6e","id":48,"sort":54,"clicks":21,"public":false,"is_new":false,"stats":[42]}]`),at={class:"text-center line-height-loose text-md"},ot={class:"mx-auto max-w-75ch intro md-text-lg"},rt={class:"p-2 flex flex-col mt-8"},lt={class:"text-4xl font-bold"},ct=f("div",{class:"text-lg"},"web synths",-1),ut={class:"p-2 flex flex-col mt-8"},ht={class:"text-4xl font-bold"},dt=f("div",{class:"text-lg"},"web musicians",-1),pt={__name:"AboutCount",setup(t){const e=O(),s=O(0),n=O(0),i=pe(s),a=pe(n),o=Pe(e);return Oe(o,async r=>{if(r){s.value=ne.length;const c=await(await fetch("https://dbs.chromatone.center/flows/trigger/0c0e8d82-8e12-44a6-867a-57ddeec9d774",{type:"GET",mode:"cors",headers:{"Content-Type":"application/json"}})).json();n.value=c.count}}),(r,l)=>(b(),y("div",at,[f("div",ot,[f("div",{class:"flex justify-center",ref_key:"counters",ref:e},[f("div",rt,[f("div",lt,P(M(i).toFixed()),1),ct]),f("div",ut,[f("div",ht,P(M(a).toFixed()||5e3)+"+",1),dt])],512)])]))}},ft={class:"flex flex-col text-center gap-4 bg-light-700 dark-bg-dark-200 dark-bg-opacity-20 p-4 rounded-lg shadow-lg mb-8"},mt=f("div",{class:"text-xl font-bold my-2"},"Suggest a new web-synth to the collection",-1),gt=["disabled"],bt={__name:"FormSynth",emits:["submitted"],setup(t,{emit:e}){const s=e,n=Re({url:"",text:""}),i=/[(http(s) ?): \/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/;function a(l){return i.test(l)}const o=O();async function r(){var l,c,u;try{const h=await fetch("https://dbs.chromatone.center/flows/trigger/dc8ca96f-76e6-4cac-b26c-10751746eb89",{method:"POST",mode:"cors",cache:"no-cache",credentials:"same-origin",headers:{"Content-Type":"application/json"},redirect:"follow",referrerPolicy:"no-referrer",body:JSON.stringify(n)});o.value=await(h==null?void 0:h.json()),n.url="",n.text="",setTimeout(()=>{s("submitted")},2e3)}catch(h){console.error(h,(c=(l=h==null?void 0:h.errors)==null?void 0:l[0])==null?void 0:c.message,(u=h==null?void 0:h.response)==null?void 0:u.status)}}return(l,c)=>(b(),y("div",ft,[o.value?(b(),y(j,{key:1},[U("Thanks for your suggestion!")],64)):(b(),y(j,{key:0},[mt,X(f("input",{class:"py-2 px-4 rounded bg-light-200 dark-bg-dark-200",type:"text",placeholder:"https://new.synth.url/","onUpdate:modelValue":c[0]||(c[0]=u=>n.url=u)},null,512),[[ee,n.url]]),X(f("textarea",{class:"py-2 px-4 rounded bg-light-200 dark-bg-dark-200",oninput:"this.style.height = ''; this.style.height = this.scrollHeight +'px'",placeholder:"Describe the web-app and how do you use it musically","onUpdate:modelValue":c[1]||(c[1]=u=>n.text=u)},null,512),[[ee,n.text]]),f("button",{class:"text-xl py-2 px-4 rounded bg-dark-100 text-light-200 dark-bg-light-700 dark-text-dark-500 shadow-lg disabled-opacity-20",disabled:!a(n.url),onClick:c[2]||(c[2]=u=>r())},P(a(n.url)?"Submit":"Please provide a valid URL"),9,gt)],64))]))}},_e=t=>(je("data-v-5f69066e"),t=t(),Ze(),t),yt={key:0,class:"px-2 py-1 bg-light-800 dark-bg-dark-800 rounded-xl transition text-sm select-none absolute bottom-2 left-2 text-center z-200 flex items-center gap-1 opacity-70 hover-opacity-100",title:"Since 28 Oct 2023"},vt=_e(()=>f("div",{class:"i-la-eye"},null,-1)),wt={class:"p-0 mt-2px"},kt={class:"p-4 flex flex-col items-start justify-between gap-2",style:{flex:"10 0 200px"}},_t={class:"flex items-center gap-2 flex-0 w-full"},xt={class:"transition text-xl select-none absolute top-4 left-4 text-center z-200 text-shadow-md"},St={class:"flex-auto"},Tt={class:"flex items-center gap-2"},Mt={class:"text-2xl font-bold"},It={key:0,class:"font-normal",title:"Archived locally by us"},At=_e(()=>f("div",{class:"i-ph-archive-duotone"},null,-1)),Ct=[At],Et={class:"flex-1"},Dt={key:1,class:"flex-1 flex items-end flex flex-wrap gap-2"},Lt=["href"],Pt={key:3,class:"text-xl p-2 absolute left-2 top-4 bg-yellow-600 rounded-xl shadow font-bold z-1000 transform -rotate-10"},Ot={__name:"SynthCard",props:{pos:{type:Number,default:0},sort:{type:Number,default:0},public:{type:Boolean,default:!1},title:{type:String,default:""},id:{type:Number,default:0},slug:{type:String,default:""},description:{type:String,default:""},cover:{type:String,default:""},url:{type:String,default:""},author:{type:String,default:""},author_link:{type:String,default:""},tags:{type:Array,default:()=>[]},archive:{type:Boolean,default:!1},archive_link:{type:String,default:""},iframe:{type:Boolean,default:null},clicks:{type:Number,default:0},stars:{type:Number,default:0},counter:{type:Number,default:0},is_new:{type:Boolean,default:null}},setup(t){const{isDark:e}=ze(),s=t,{isFormOpen:n,isAccessGranted:i}=ve(),{clicksCount:a,clickSynth:o}=He(s.id);async function r(){!s.public&&!i.value?n.value=!n.value:(o(s.id),s.iframe?window.open(s.slug+"/","_self"):window.open(s.archive?s.archive_link:s.url,"_blank"))}return(l,c)=>{var d;const u=Je,h=Be("ClientOnly");return b(),y("button",{class:"max-w-180 w-full flex flex-wrap items-stretch text-left relative bg-light-500 dark-bg-dark-300 -hover-translate-y-6px transition duration-200 hover-shadow-lg rounded-lg overflow-hidden relative border-1 border-dark-100 border-opacity-20 shadow-sm dark-border-light-800 dark-border-opacity-20",style:te({borderColor:M(Y)[t.id]?M(e)?"hsl(50deg,80%,35%)":"hsl(40deg,90%,80%)":null}),onClick:r},[f("div",{class:"cover min-h-50 bg-cover bg-center filter transition",style:te([{backgroundImage:`url(/cover/${t.slug}.webp)`},{flex:"1 1 280px"}])},[M(a)||t.counter?(b(),y("div",yt,[vt,f("div",wt,P(M(a)||t.counter),1)])):_("",!0)],4),f("div",kt,[f("div",_t,[f("div",xt,P(t.sort),1),f("div",St,[f("span",Tt,[f("div",Mt,P(t.title),1),t.archive?(b(),y("span",It,Ct)):_("",!0)])]),B(h,null,{default:G(()=>[B(u,{class:"text-xl mr-2 absolute z-200",id:t.id,stars:t.stars},null,8,["id","stars"])]),_:1})]),t.author?(b(),se(Ne(t.author_link?"a":"div"),{key:0,class:"p-0 text-md",href:t.author_link,target:"_blank"},{default:G(()=>[U("by "+P(t.author),1)]),_:1},8,["href"])):_("",!0),f("div",Et,[We(l.$slots,"default",{},void 0,!0)]),((d=t.tags)==null?void 0:d.length)>0?(b(),y("div",Dt,[(b(!0),y(j,null,ke(t.tags,g=>(b(),y("div",{class:"px-2 py-1 text-sm bg-light-800 dark-bg-dark-500 rounded-lg",key:g},P(g),1))),128))])):_("",!0),t.iframe?_("",!0):(b(),y("a",{key:2,class:"absolute bottom-4 right-4 i-la-external-link-square-alt text-lg opacity-40 transition transition hover-opacity-100",onClick:c[0]||(c[0]=Fe(()=>{},["stop"])),href:`/${t.slug}/`,title:"Opens in a new window"},null,8,Lt)),t.is_new?(b(),y("div",Pt,"NEW!")):_("",!0)])],4)}}},$t=we(Ot,[["__scopeId","data-v-5f69066e"]]);function L(t){return Array.isArray?Array.isArray(t):Te(t)==="[object Array]"}const Rt=1/0;function zt(t){if(typeof t=="string")return t;let e=t+"";return e=="0"&&1/t==-Rt?"-0":e}function Bt(t){return t==null?"":zt(t)}function E(t){return typeof t=="string"}function xe(t){return typeof t=="number"}function Nt(t){return t===!0||t===!1||Wt(t)&&Te(t)=="[object Boolean]"}function Se(t){return typeof t=="object"}function Wt(t){return Se(t)&&t!==null}function x(t){return t!=null}function Q(t){return!t.trim().length}function Te(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}const Ft="Incorrect 'index' type",jt=t=>`Invalid value for key ${t}`,Zt=t=>`Pattern length exceeds max of ${t}.`,qt=t=>`Missing ${t} property in key`,Vt=t=>`Property 'weight' in key '${t}' must be a positive integer`,fe=Object.prototype.hasOwnProperty;class Yt{constructor(e){this._keys=[],this._keyMap={};let s=0;e.forEach(n=>{let i=Me(n);this._keys.push(i),this._keyMap[i.id]=i,s+=i.weight}),this._keys.forEach(n=>{n.weight/=s})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function Me(t){let e=null,s=null,n=null,i=1,a=null;if(E(t)||L(t))n=t,e=me(t),s=ie(t);else{if(!fe.call(t,"name"))throw new Error(qt("name"));const o=t.name;if(n=o,fe.call(t,"weight")&&(i=t.weight,i<=0))throw new Error(Vt(o));e=me(o),s=ie(o),a=t.getFn}return{path:e,id:s,weight:i,src:n,getFn:a}}function me(t){return L(t)?t:t.split(".")}function ie(t){return L(t)?t.join("."):t}function Ut(t,e){let s=[],n=!1;const i=(a,o,r)=>{if(x(a))if(!o[r])s.push(a);else{let l=o[r];const c=a[l];if(!x(c))return;if(r===o.length-1&&(E(c)||xe(c)||Nt(c)))s.push(Bt(c));else if(L(c)){n=!0;for(let u=0,h=c.length;ut.score===e.score?t.idx{this._keysMap[s.id]=n})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,E(this.docs[0])?this.docs.forEach((e,s)=>{this._addString(e,s)}):this.docs.forEach((e,s)=>{this._addObject(e,s)}),this.norm.clear())}add(e){const s=this.size();E(e)?this._addString(e,s):this._addObject(e,s)}removeAt(e){this.records.splice(e,1);for(let s=e,n=this.size();s{let o=i.getFn?i.getFn(e):this.getFn(e,i.path);if(x(o)){if(L(o)){let r=[];const l=[{nestedArrIndex:-1,value:o}];for(;l.length;){const{nestedArrIndex:c,value:u}=l.pop();if(x(u))if(E(u)&&!Q(u)){let h={v:u,i:c,n:this.norm.get(u)};r.push(h)}else L(u)&&u.forEach((h,d)=>{l.push({nestedArrIndex:d,value:h})})}n.$[a]=r}else if(E(o)&&!Q(o)){let r={v:o,n:this.norm.get(o)};n.$[a]=r}}}),this.records.push(n)}toJSON(){return{keys:this.keys,records:this.records}}}function Ie(t,e,{getFn:s=p.getFn,fieldNormWeight:n=p.fieldNormWeight}={}){const i=new ue({getFn:s,fieldNormWeight:n});return i.setKeys(t.map(Me)),i.setSources(e),i.create(),i}function es(t,{getFn:e=p.getFn,fieldNormWeight:s=p.fieldNormWeight}={}){const{keys:n,records:i}=t,a=new ue({getFn:e,fieldNormWeight:s});return a.setKeys(n),a.setIndexRecords(i),a}function V(t,{errors:e=0,currentLocation:s=0,expectedLocation:n=0,distance:i=p.distance,ignoreLocation:a=p.ignoreLocation}={}){const o=e/t.length;if(a)return o;const r=Math.abs(n-s);return i?o+r/i:r?1:o}function ts(t=[],e=p.minMatchCharLength){let s=[],n=-1,i=-1,a=0;for(let o=t.length;a=e&&s.push([n,i]),n=-1)}return t[a-1]&&a-n>=e&&s.push([n,a-1]),s}const z=32;function ss(t,e,s,{location:n=p.location,distance:i=p.distance,threshold:a=p.threshold,findAllMatches:o=p.findAllMatches,minMatchCharLength:r=p.minMatchCharLength,includeMatches:l=p.includeMatches,ignoreLocation:c=p.ignoreLocation}={}){if(e.length>z)throw new Error(Zt(z));const u=e.length,h=t.length,d=Math.max(0,Math.min(n,h));let g=a,v=d;const m=r>1||l,S=m?Array(h):[];let T;for(;(T=t.indexOf(e,v))>-1;){let k=V(e,{currentLocation:T,expectedLocation:d,distance:i,ignoreLocation:c});if(g=Math.min(k,g),v=T+u,m){let I=0;for(;I=he;A-=1){let q=A-1,de=s[t.charAt(q)];if(m&&(S[q]=+!!de),W[A]=(W[A+1]<<1|1)&de,k&&(W[A]|=(D[A+1]|D[A])<<1|1|D[A+1]),W[A]&Z&&(C=V(e,{errors:k,currentLocation:q,expectedLocation:d,distance:i,ignoreLocation:c}),C<=g)){if(g=C,v=q,v<=d)break;he=Math.max(1,2*d-v)}}if(V(e,{errors:k+1,currentLocation:d,expectedLocation:d,distance:i,ignoreLocation:c})>g)break;D=W}const N={isMatch:v>=0,score:Math.max(.001,C)};if(m){const k=ts(S,r);k.length?l&&(N.indices=k):N.isMatch=!1}return N}function ns(t){let e={};for(let s=0,n=t.length;s{this.chunks.push({pattern:d,alphabet:ns(d),startIndex:g})},h=this.pattern.length;if(h>z){let d=0;const g=h%z,v=h-g;for(;d{const{isMatch:T,score:D,indices:C}=ss(e,v,m,{location:i+S,distance:a,threshold:o,findAllMatches:r,minMatchCharLength:l,includeMatches:n,ignoreLocation:c});T&&(d=!0),h+=D,T&&C&&(u=[...u,...C])});let g={isMatch:d,score:d?h/this.chunks.length:1};return d&&n&&(g.indices=u),g}}class ${constructor(e){this.pattern=e}static isMultiMatch(e){return ge(e,this.multiRegex)}static isSingleMatch(e){return ge(e,this.singleRegex)}search(){}}function ge(t,e){const s=t.match(e);return s?s[1]:null}class is extends ${constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const s=e===this.pattern;return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class as extends ${constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const n=e.indexOf(this.pattern)===-1;return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class os extends ${constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const s=e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class rs extends ${constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const s=!e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class ls extends ${constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const s=e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}class cs extends ${constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const s=!e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class Ce extends ${constructor(e,{location:s=p.location,threshold:n=p.threshold,distance:i=p.distance,includeMatches:a=p.includeMatches,findAllMatches:o=p.findAllMatches,minMatchCharLength:r=p.minMatchCharLength,isCaseSensitive:l=p.isCaseSensitive,ignoreLocation:c=p.ignoreLocation}={}){super(e),this._bitapSearch=new Ae(e,{location:s,threshold:n,distance:i,includeMatches:a,findAllMatches:o,minMatchCharLength:r,isCaseSensitive:l,ignoreLocation:c})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class Ee extends ${constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let s=0,n;const i=[],a=this.pattern.length;for(;(n=e.indexOf(this.pattern,s))>-1;)s=n+a,i.push([n,s-1]);const o=!!i.length;return{isMatch:o,score:o?0:1,indices:i}}}const ae=[is,Ee,os,rs,cs,ls,as,Ce],be=ae.length,us=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,hs="|";function ds(t,e={}){return t.split(hs).map(s=>{let n=s.trim().split(us).filter(a=>a&&!!a.trim()),i=[];for(let a=0,o=n.length;a!!(t[K.AND]||t[K.OR]),gs=t=>!!t[le.PATH],bs=t=>!L(t)&&Se(t)&&!ce(t),ye=t=>({[K.AND]:Object.keys(t).map(e=>({[e]:t[e]}))});function De(t,e,{auto:s=!0}={}){const n=i=>{let a=Object.keys(i);const o=gs(i);if(!o&&a.length>1&&!ce(i))return n(ye(i));if(bs(i)){const l=o?i[le.PATH]:a[0],c=o?i[le.PATTERN]:i[l];if(!E(c))throw new Error(jt(l));const u={keyId:ie(l),pattern:c};return s&&(u.searcher=re(c,e)),u}let r={children:[],operator:a[0]};return a.forEach(l=>{const c=i[l];L(c)&&c.forEach(u=>{r.children.push(n(u))})}),r};return ce(t)||(t=ye(t)),n(t)}function ys(t,{ignoreFieldNorm:e=p.ignoreFieldNorm}){t.forEach(s=>{let n=1;s.matches.forEach(({key:i,norm:a,score:o})=>{const r=i?i.weight:null;n*=Math.pow(o===0&&r?Number.EPSILON:o,(r||1)*(e?1:a))}),s.score=n})}function vs(t,e){const s=t.matches;e.matches=[],x(s)&&s.forEach(n=>{if(!x(n.indices)||!n.indices.length)return;const{indices:i,value:a}=n;let o={indices:i,value:a};n.key&&(o.key=n.key.src),n.idx>-1&&(o.refIndex=n.idx),e.matches.push(o)})}function ws(t,e){e.score=t.score}function ks(t,e,{includeMatches:s=p.includeMatches,includeScore:n=p.includeScore}={}){const i=[];return s&&i.push(vs),n&&i.push(ws),t.map(a=>{const{idx:o}=a,r={item:e[o],refIndex:o};return i.length&&i.forEach(l=>{l(a,r)}),r})}class F{constructor(e,s={},n){this.options={...p,...s},this.options.useExtendedSearch,this._keyStore=new Yt(this.options.keys),this.setCollection(e,n)}setCollection(e,s){if(this._docs=e,s&&!(s instanceof ue))throw new Error(Ft);this._myIndex=s||Ie(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){x(e)&&(this._docs.push(e),this._myIndex.add(e))}remove(e=()=>!1){const s=[];for(let n=0,i=this._docs.length;n-1&&(l=l.slice(0,s)),ks(l,this._docs,{includeMatches:n,includeScore:i})}_searchStringList(e){const s=re(e,this.options),{records:n}=this._myIndex,i=[];return n.forEach(({v:a,i:o,n:r})=>{if(!x(a))return;const{isMatch:l,score:c,indices:u}=s.searchIn(a);l&&i.push({item:a,idx:o,matches:[{score:c,value:a,norm:r,indices:u}]})}),i}_searchLogical(e){const s=De(e,this.options),n=(r,l,c)=>{if(!r.children){const{keyId:h,searcher:d}=r,g=this._findMatches({key:this._keyStore.get(h),value:this._myIndex.getValueForItemAtKeyId(l,h),searcher:d});return g&&g.length?[{idx:c,item:l,matches:g}]:[]}const u=[];for(let h=0,d=r.children.length;h{if(x(r)){let c=n(s,r,l);c.length&&(a[l]||(a[l]={idx:l,item:r,matches:[]},o.push(a[l])),c.forEach(({matches:u})=>{a[l].matches.push(...u)}))}}),o}_searchObjectList(e){const s=re(e,this.options),{keys:n,records:i}=this._myIndex,a=[];return i.forEach(({$:o,i:r})=>{if(!x(o))return;let l=[];n.forEach((c,u)=>{l.push(...this._findMatches({key:c,value:o[u],searcher:s}))}),l.length&&a.push({idx:r,item:o,matches:l})}),a}_findMatches({key:e,value:s,searcher:n}){if(!x(s))return[];let i=[];if(L(s))s.forEach(({v:a,i:o,n:r})=>{if(!x(a))return;const{isMatch:l,score:c,indices:u}=n.searchIn(a);l&&i.push({score:c,key:e,value:a,idx:o,norm:r,indices:u})});else{const{v:a,n:o}=s,{isMatch:r,score:l,indices:c}=n.searchIn(a);r&&i.push({score:l,key:e,value:a,norm:o,indices:c})}return i}}F.version="7.0.0";F.createIndex=Ie;F.parseIndex=es;F.config=p;F.parseQuery=De;ms(fs);const _s={class:"flex flex-col items-center mb-2 px-8 relative"},xs={class:"w-full max-w-110 flex items-center relative my-4 gap-2"},Ss=f("div",{class:"i-la-search absolute left-2 text-xl opacity-40"},null,-1),Ts=["title"],Ms={key:0,class:"i-la-star-solid"},Is={key:1,class:"i-la-star"},As={class:"flex flex-col items-center gap-8 p-2 max-w-160 mx-auto mb-12"},Cs=["index"],Es={class:"p-2",key:"nnn"},Ds={key:0,class:"animate-pulse text-center"},Ls={__name:"SynthList",setup(t){const{isAccessGranted:e}=ve(),s=O(ne),n=new F(ne,{includeScore:!0,ignoreLocation:!0,shouldSort:!0,keys:["title","slug","author"]}),i=$e("fav-filter",!1),a=O(""),o=O(!1),r=J(()=>n.search(a.value)),l=J(()=>r.value.filter(h=>h.score<.2).sort((h,d)=>h.score>d.score?1:0).map(h=>h.item.slug)),c=J(()=>s.value.filter(h=>a.value?l.value.includes(h.slug):i.value?Y.value[h.id]:!0)),u=O([]);return qe(async()=>{u.value=await Qe("synths",{fields:["id",{stats:["views","stars"]}]})}),Ve(Y,h=>{Object.values(h).filter(Boolean).length==0&&(i.value=!1)},{deep:!0,immediate:!0}),(h,d)=>{const g=$t,v=bt;return b(),y(j,null,[f("div",_s,[f("div",xs,[X(f("input",{class:"w-full focus text-xl py-2 pl-9 bg-light-50 bg-opacity-100 shadow-inner border-1 border-dark-100 border-opacity-10 rounded-lg dark-bg-dark-200 outline-none focus-border-opacity-90",placeholder:"Type to search...","onUpdate:modelValue":d[0]||(d[0]=m=>a.value=m)},null,512),[[ee,a.value]]),Ss,a.value?(b(),y("div",{key:0,class:"i-la-times absolute right-2 text-xl opacity-40 hover-opacity-80 transition cursor-pointer",onClick:d[1]||(d[1]=m=>a.value="")})):_("",!0),Object.values(M(Y)).filter(Boolean).length>0&&!a.value?(b(),y("button",{key:1,class:"transition p-2 shadow dark-bg-dark-200 dark-hover-bg-dark-100 bg-light-300 hover-bg-light-100 rounded-lg flex items-center gap-2 text-xl text-yellow",title:M(i)?"Only favourites are shown":"Show only favourites",onClick:d[2]||(d[2]=m=>i.value=!M(i))},[B(Ye,{name:"fade"},{default:G(()=>[M(i)?(b(),y("div",Ms)):(b(),y("div",Is))]),_:1})],8,Ts)):_("",!0),a.value?_("",!0):(b(),y("button",{key:2,class:"transition p-2 shadow dark-bg-dark-200 dark-hover-bg-dark-100 bg-light-300 hover-bg-light-100 rounded-lg flex items-center gap-2 text-xl",title:"Suggest a new link to the collection",onClick:d[3]||(d[3]=m=>o.value=!o.value)},[f("div",{class:Ue(["i-la-plus transform transition",{"rotate-45":o.value}])},null,2)]))])]),f("div",As,[o.value?_("",!0):(b(),se(Ke,{key:0,name:"fade"},{default:G(()=>[(b(!0),y(j,null,ke(c.value,(m,S)=>{var T,D,C,R,Z,N,k,I;return b(),y("div",{class:"flex w-full sticky",style:te([{top:`${10+S*4}px`,zIndex:S+10},{flex:"1 1 240px"}]),key:m.id,index:S},[(b(),se(g,Ge({pos:S,style:{filter:!m.public&&!M(e)?"contrast(70%) blur(2px) opacity(80%)":""},key:m.id,ref_for:!0},m,{counter:(R=(C=(D=(T=u.value)==null?void 0:T.find(w=>(w==null?void 0:w.id)==(m==null?void 0:m.id)))==null?void 0:D.stats)==null?void 0:C[0])==null?void 0:R.views,stars:(I=(k=(N=(Z=u.value)==null?void 0:Z.find(w=>(w==null?void 0:w.id)==(m==null?void 0:m.id)))==null?void 0:N.stats)==null?void 0:k[0])==null?void 0:I.stars}),null,16,["pos","style","counter","stars"]))],12,Cs)}),128))]),_:1})),c.value.length==0||o.value?(b(),y("div",Es,[o.value?_("",!0):(b(),y("div",Ds,"We don't know such a web-app yet. ")),B(v,{class:"max-w-140 mx-auto mt-6",onSubmitted:d[4]||(d[4]=m=>o.value=!1)})])):_("",!0)])],64)}}},Ps="/click-logo.svg",Gs=JSON.parse('{"title":"Web synths","description":"Web synthesizers to play with MIDI controllers","frontmatter":{"title":"Web synths","description":"Web synthesizers to play with MIDI controllers","date":"2023-06-22T00:00:00.000Z","layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1724317618000}'),Os={name:"index.md"},$s=f("h1",{class:"text-center text-2xl sm-text-3xl font-bold mt-8",style:{padding:"0.1rem 1rem"}},"Online synthesizers and web piano apps",-1),Rs=f("h2",{class:"text-xl sm-text-2xl text-center my-2",style:{padding:"0 1rem"}},"Curated collection of free music creation resources",-1),zs={class:"px-4 text-lg text-center mb-8 max-w-150 mx-auto"},Bs=f("a",{class:"font-bold",href:"https://chromatone.center",target:"_blank",rel:"noopener"}," Chromatone",-1),Ns=f("a",{class:"font-bold",href:"https://playtronica.com",target:"_blank",rel:"noopener"}," Playtronica",-1),Ws=f("h3",{class:"font-bold text-xl"},"Welcome to the community of web-based musicians!",-1),Fs=f("h4",null,[f("a",{target:"_blank",href:"https://chromatone.center/"},[f("img",{src:Ps,class:"max-w-16 mx-auto"})])],-1);function js(t,e,s,n,i,a){const o=Ls,r=pt,l=it;return b(),y("div",null,[$s,Rs,B(o),f("div",zs,[Bs,U(" is an open source visual music language for education, research and performance. We develop a new universal way to communicate music. "),Ns,U(" is a digital playground that explores the possibilities of the material world through technology, creating gadgets that make the world musical. Together we share our passion for online music instruments. "),B(r),Ws,Fs,B(l)])])}const Ks=we(Os,[["render",js]]);export{Gs as __pageData,Ks as default}; +import{u as De,a as pe,b as Le,w as Oe,c as ve,d as ze}from"./chunks/theme.DaoXcD6v.js";import{f as b,h as y,k as f,u as M,A as _,r as O,t as L,d as $e,I as j,j as X,p as ee,l as U,_ as we,B as Re,C as Be,J as te,D as B,E as G,F as se,K as Ne,m as We,L as ke,H as Fe,M as je,N as Ze,e as K,o as qe,w as Ve,T as Ye,q as Ue,O as Ge,P as He}from"./chunks/framework.Ch2f3zJW.js";import{u as Je,f as Y,_ as Ke,a as Qe}from"./chunks/useClicks.RkCdhX3B.js";import"./chunks/index.CVGuM2cA.js";const Xe={class:"text-center line-height-loose text-md"},et={class:"mx-auto max-w-75ch intro md-text-lg"},tt=f("div",{class:"i-mdi-share"},null,-1),st=f("span",null,"Share to save for later",-1),nt=[tt,st],it={__name:"AboutShare",setup(t){const{share:e,isSupported:s}=De();function n(){e({title:"Web synths collection",text:"Look at this online synthesizer collection. No need to install anything - just your browser and any MIDI controller will do.",url:location.href})}return(i,a)=>(b(),y("div",Xe,[f("div",et,[M(s)?(b(),y("button",{key:0,class:"mx-auto flex items-center gap-2 text-white py-2 px-4 mt-6 shadow-lg rounded-lg cursor-pointer bg-green-600 -hover-translate-y-2px transition",onClick:a[0]||(a[0]=o=>n()),"data-umami-event":"Shared via button"},nt)):_("",!0)])]))}},ne=JSON.parse(`[{"url":"https://dotpiano.com/","date_created":"2023-10-27T12:45:53.887Z","title":"Dotpiano","slug":"dotpiano","author":"Alex Chen and Yotam Mann","author_link":null,"description":"Dot Piano is an online musical instrument allowing users to play a digital piano using their computer keyboard. The interactive web app provides a simple and intuitive interface for creating and sharing music, making it accessible for both beginners and experienced musicians.","tags":["polyphonic","midi","keyboard","Multiplayer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6dac5187-213f-4eb8-96ed-63c2e689b206","id":1,"sort":1,"clicks":6427,"public":true,"is_new":false,"stats":[1]},{"url":"https://waveform.playtronica.com/","date_created":"2023-10-27T12:45:54.644Z","title":"Waveform","slug":"waveform","author":"Qvantor","author_link":"https://github.com/qvantor/","description":"Polyphonic web synthesizer with simple yet capable interface.","tags":["playtronica","polyphonic","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"86cb9385-9deb-4f10-95cb-765980156e65","id":39,"sort":2,"clicks":6795,"public":true,"is_new":false,"stats":[2]},{"url":"https://juno-106.js.org/","date_created":"2023-10-27T12:45:54.085Z","title":"Juno-106","slug":"juno-106","author":"Steve Goldberg ","author_link":"https://github.com/stevengoldberg","description":"Online emulator of the classic Roland Juno-106 synthesizer. This interactive web app allows users to experiment with the iconic sounds of the Juno-106 directly from their browser. It features authentic recreations of the synth's controls and sound characteristics, making it a valuable tool for music enthusiasts and producers. ","tags":["fm","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b54cfce7-af2f-4e03-a5b3-81fc853d2cc8","id":14,"sort":3,"clicks":5019,"public":true,"is_new":false,"stats":[3]},{"url":"https://chromatone.center/practice/synth/elementary/","date_created":"2023-10-27T12:45:54.453Z","title":"Elementary synth","slug":"elementary","author":"Chromatone","author_link":"https://chromatone.center","description":"The Chromatone Elementary Synth is an interactive web-based synthesizer designed to provide a hands-on learning experience in sound synthesis. It features MIDI support and is built using the Elementary audio library. This synthesizer allows users to explore different synthesis techniques through a user-friendly interface, making it an excellent tool for both beginners and experienced musicians looking to experiment with sound design.","tags":["chromatone","polyphonic","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"21070a51-6089-48bd-8840-ba37b5f2963d","id":29,"sort":4,"clicks":3186,"public":true,"is_new":false,"stats":[4]},{"url":"https://mmontag.github.io/dx7-synth-js/","date_created":"2023-10-27T12:45:54.477Z","title":"DX7 Synth","slug":"dx7","author":"Matt Montag ","author_link":"https://github.com/mmontag","description":"The DX7 Synth JS is an online emulator of the classic Yamaha DX7 synthesizer. This interactive web app replicates the iconic FM synthesis capabilities of the DX7, allowing users to create and manipulate sounds using various parameters such as algorithms, operators, and envelopes. The app supports MIDI devices and provides a user-friendly interface for sound design experimentation. ","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"f3b285ee-6b82-453b-9ff6-aeda18ec675b","id":30,"sort":5,"clicks":2718,"public":true,"is_new":false,"stats":[5]},{"url":"https://touchme.chromatone.center/","date_created":"2023-10-27T12:45:53.941Z","title":"TouchME","slug":"touchme","author":"Chromatone","author_link":"https://chromatone.center","description":"TouchMe Experience by Chromatone is an interactive audio-visual web app that transforms touch inputs into music and visual effects. It features MIDI support, multiple synth oscillators, and various quantize and BPM modes. Users can explore six interactive SVG scenes, switch between light and dark modes, and view basic session statistics. Designed for creative experimentation, it offers a unique way to engage with music and visuals.","tags":["chromatone","playtronica"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"68062279-8e08-4953-ae8f-7a77c584948e","id":3,"sort":6,"clicks":3418,"public":true,"is_new":false,"stats":[6]},{"url":"https://muted.io/","date_created":"2023-10-27T12:45:54.742Z","title":"Muted.io","slug":"muted-io","author":"Sébastien Noël","author_link":"https://twitter.com/muted_io","description":"Muted.io offers a collection of interactive music theory tools designed for learning music online. These tools include a virtual piano, chord and scale references, a circle of fifths, tuners, and various visual aids to understand music theory concepts. The site is ideal for musicians looking to improve their knowledge and practice music in an engaging way.","tags":["educational","midi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"5c08ac7d-4414-47c0-b7d1-a9867ba3949f","id":43,"sort":7,"clicks":175,"public":false,"is_new":false,"stats":[10]},{"url":"https://chromatone.center/practice/synth/soundfont/","date_created":"2023-12-18T10:20:56.985Z","title":"Soundfont Sampler Synth","slug":"soundfont","author":"Chromatone","author_link":"https://github.com/chromatone","description":"Free open source soundfont sampler online synthesizer. Very robust and hassle free way to play some straightforward sampled instruments like horns, xylophones and just piano sounds. Instantly playable instrument with about 90 presets out of the box. ","tags":["Poly","Keyboard","Sampler","MIDI"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"26704e9d-5964-4a0f-940c-370c14777e95","id":51,"sort":8,"clicks":0,"public":true,"is_new":true,"stats":[43]},{"url":"https://midi.city/","date_created":"2023-12-28T05:40:45.140Z","title":"MIDI.city","slug":"midi-city","author":"Astral Digital","author_link":"https://astral.digital/","description":"midi.city is a free online synthesizer, built by Jack.\\n\\nmidi.city has over 128 different instruments including: Pianos, Saxophones, Drums, Trumpets, Synth Pads, Guitar, Violins and all other instruments defined in the General Midi specification.","tags":null,"archive_link":null,"archive":false,"content":"midi.city has been created with the help of hundreds of different open-source projects and with contributions from many others.\\n\\n- Tone.js by Yotam Mann: the Web Audio API-based sound engine that implements a majority of nodes used in the audio graph. It powers many of the advanced features used such as Granular Synthesis, Reverb, and timing.\\n- Groove Monkee: graciously provided the MIDI files that are used for the percussion loops.\\n- Keenan Brand: created the midi.city logo and various icons used on the site.\\n- Noun Project: various icons are used via a Pro license.\\n- Google Material Design: various icons.\\n- Compifont by Marcin Dziembor: the soundfont powering the samples and many the audio graph definitions, is originally . Several modifications have been made to adapt to midi.city and the Web Audio API. ","iframe":true,"cover":"8cb479ba-e4e0-42f2-986c-597b68b8e639","id":52,"sort":9,"clicks":10,"public":false,"is_new":false,"stats":[44]},{"url":"https://apps.musedlab.org/aqwertyon/theory/","date_created":"2023-10-27T12:45:54.711Z","title":"aQWERTYon","slug":"aqwertyon","author":"Mused lab","author_link":"https://musedlab.org/","description":"aQWERTYon is an interactive web app that turns your computer keyboard into a musical instrument. Designed for music theory practice, it allows users to play notes and chords using a QWERTY keyboard layout. The app provides a visual representation of notes and scales, making it a useful tool for learning and exploring music theory concepts.","tags":["polyphonic","samples"],"archive_link":null,"archive":false,"content":"The **aQWERTYon** (QWERTY accordion) is designed to simplify the process for improvising, learning, and making music with your computer keyboard. Play along with your favorite YouTube videos, learn music theory through our Music Theory for Bedroom Producers course in collaboration with Soundfly, or take advantage of Web MIDI and us it to play and record into your favorite digital audio workstation, such as Soundtrap.com, GarageBand, Logic, or Ableton, or as input into music notation programs like Noteflight.\\n\\nhttps://youtu.be/hqFr4lF6u_Y","iframe":true,"cover":"e7c87de8-c290-4da9-b0e0-eed73871b27a","id":42,"sort":10,"clicks":348,"public":false,"is_new":false,"stats":[8]},{"url":"https://musiclab.chromeexperiments.com/","date_created":"2023-11-26T08:23:47.351Z","title":"Chrome Music Lab","slug":"chrome-lab","author":"Google","author_link":"https://github.com/googlecreativelab/chrome-music-lab","description":"Chrome Music Lab is a website that makes learning music more accessible through fun, hands-on experiments.","tags":["Educational","Keyboard","MIDI","Poly","Piano","Analysis","Mic","Visuals"],"archive_link":null,"archive":false,"content":"## What can it be used for?\\n\\nMany teachers have been using Chrome Music Lab as a tool in their classrooms to explore music and its connections to science, math, art, and more. They’ve been combining it with dance and live instruments. Here’s a collection of some uses we’ve found on Twitter.\\n\\n## Can I use it to make my own songs?\\n\\nYes. Check out the Song Maker experiment, which lets you make and share your own songs.\\n\\n## Do I need to make an account?\\n\\nNope. Just open any experiment and start playing.\\n\\n## How were these built?\\n\\nAll our experiments are all built with freely accessible web technology such as Web Audio API, WebMIDI, Tone.js, and more. These tools make it easier for coders to build new interactive music experiences. You can get the open-source code to lots of these experiments here on [Github](https://github.com/googlecreativelab/chrome-music-lab).\\n\\n## What devices do these work on?\\n\\nYou can play with these experiments across devices – phones, tablets, laptops – just by opening the site on a web browser such as Chrome.","iframe":true,"cover":"297b059e-a6fa-4faa-91b2-c2e1e68cf98f","id":50,"sort":11,"clicks":304,"public":false,"is_new":false,"stats":[9]},{"url":"https://topos.live/","date_created":"2024-06-21T12:06:09.754Z","title":"Topos","slug":"topos","author":"Raphael","author_link":"https://github.com/Bubobubobubobubo/topos","description":"Topos is an algorithmic sequencer. Topos is also a live coding environment. To sum it up, think: \\"making music in real time through code\\". Code used as an expressive medium for musical improvisation! Topos uses small algorithms to represent musical sequences and processes.","tags":["Live coding","MIDI","Poly","Visuals","FM"],"archive_link":null,"archive":false,"content":"Topos is deeply inspired by the Monome Teletype. The Teletype is/was an open source hardware module for Eurorack synthesizers. While the Teletype was initially born as an hardware module, Topos aims to be a web-browser based cousin of it! It is a sequencer, a scriptable interface, a companion for algorithmic music-making. Topos wishes to fullfill the same goal as the Teletype, keeping the same spirit alive on the web. It is free, open-source, and made to be shared and used by everyone. Learn more about live coding on livecoding.fr.","iframe":true,"cover":"76e0c2b7-e95e-447d-982d-e156cb9d1530","id":57,"sort":12,"clicks":0,"public":false,"is_new":true,"stats":[49]},{"url":"https://websynths.com/","date_created":"2023-10-27T12:45:54.019Z","title":"Websynths Microtonal","slug":"microtonal","author":"WebSynths","author_link":"https://www.websynths.com/microtonal/","description":"The deepest internet synthesizer","tags":null,"archive_link":null,"archive":false,"content":"\\nWebSynths is a free resource for any musician with internet access! But, it is made possible by support from our patrons. Please consider helping if you can: patreon.com/WebSynths\\n\\n- You can use your QWERTY keyboard, mouse, mobile touch or MIDI keyboard to play the sounds.\\n- You can change the tuning of the keys, or select a scale, by clicking the tuning button.\\n- MIDI is a way to use an external physical instrument to play it. If you have a MIDI keyboard that you wish to use, hit the MIDI button to set it up.\\n- If a note gets stuck, hit the panic button, it will stop all voices from playing.\\n- You can use the arrows on your computer keyboard to scroll through the presets.\\n\\nA simple explanation of Subtractive Synthesis:\\n\\n- Subtractive Synthesis works by taking one or more oscillators, setting the pitch of their oscillation (usually to the note of the key being pressed,) setting the shape of their oscillation to the desired timbre (Sine, Saw, Square or more complex shapes,) mixing them together and running them through a filter to change their EQ (usually filtering out the highest or lowest frequencies... this is why it is called \\"subtractive\\"), then running them through an envelope so the note can be heard on when a key is pressed down and is silenced when the key is released. In the case of WebSynths Microtonal, the sound is then sent through effects like delay, chorus and reverb and out to your speakers.\\n- Oscillators are the voices. This synth has 3 of them in the left column. You can change the character of each voice by changing the parameters of them. The 'Shape' menu allows you to choose from different styles of voice for each oscillator. You can turn each voice on or off and mix them together.\\n- The filter section applies equalization to your oscillators via the cutoff and emphasis controls. You can change the equalization filter type to 'low pass / high pass' and many more. You can use the LFOs and/or Envelopes to change how the filtration changes over time. An LFO is just a slow oscillator that is uses to automatically move a parameter over time.\\n- The amplitude envelope changes how your sound is played, volume-wise, when you hit a note. For example, having a long release time will mean that once you let go of the note you are playing it will tail off until fading out. Having a slow attack will mean that your note will fade in instead of playing at full volume straight away.\\n- The effects section allows you to add various effects to your overall sound. You can change the effects, mix them together and toggle them on or off too.\\n\\n","iframe":false,"cover":"ffc54664-7ba4-4855-a56a-6657a5542a04","id":10,"sort":13,"clicks":172,"public":false,"is_new":false,"stats":[11]},{"url":"https://stuartmemo.com/synth/","date_created":"2023-10-27T12:45:54.586Z","title":"Sympathetic Synthesizer System Mk 1","slug":"sympathetic","author":"Stuart Memo ","author_link":"https://github.com/stuartmemo","description":"The Sympathetic Synthesizer System Mk 1 is an interactive web app that emulates a complex synthesizer. It features three oscillators with selectable waveforms, an LFO, filters with ADSR controls, and noise generation. The app allows users to explore sound design through various parameters, offering a detailed and hands-on synthesis experience. MIDI support is also included for enhanced control.","tags":["keyboard","midi","additive"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"123aeb6d-c7b0-43dd-a852-98660bdf03f0","id":37,"sort":14,"clicks":302,"public":false,"is_new":false,"stats":[12]},{"url":"https://learningsynths.ableton.com/","date_created":"2023-10-27T12:45:54.360Z","title":"Learning synths","slug":"ableton","author":"Ableton","author_link":"https://github.com/Ableton","description":"Explore the fundamentals of synthesis with this interactive web-app by Ableton. Dive into the world of sound design, experiment with different parameters, and learn how to sculpt your own unique sounds with ease.","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"0bf8312d-c449-4f5c-80ad-36594ef98db6","id":26,"sort":15,"clicks":185,"public":false,"is_new":false,"stats":[13]},{"url":"https://www.femurdesign.com/theremin/","date_created":"2023-10-27T12:45:54.206Z","title":"Theremin","slug":"theremin","author":"Femur","author_link":"https://femurdesign.com/","description":"Experience the magic of the theremin with this interactive web-app by Femur Design. Harness the power of motion to create ethereal music without physical contact. Experiment with pitch and volume to craft haunting melodies right in your browser.","tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6b22ef48-6830-4cf2-810d-809408033450","id":19,"sort":16,"clicks":320,"public":false,"is_new":false,"stats":[14]},{"url":"https://cardinal.kx.studio/live","date_created":"2024-05-20T18:57:14.836Z","title":" DISTRHO Cardinal","slug":"cardinal","author":"Filipe Coelho, aka falkTX","author_link":"https://falktx.berlin/","description":"Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.","tags":["Modular","FM","Poly"],"archive_link":null,"archive":false,"content":"Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.\\nIt is based on the popular VCV Rack but with a focus on being a fully self-contained plugin version.\\n\\nMore specifically, this is a DPF-based plugin wrapper around VCV Rack, using its code directly instead of forking the project, with the target of having a self-contained, fully free and open-source plugin version of Rack.\\nSee the why section below for the reasons Cardinal exists, also for frequently asked questions check this FAQ document.\\n\\nCardinal contains Rack, some 3rd-party modules and a few internal utilities all in a single binary.\\nAll \\"Core\\" modules from Rack have been replaced by Cardinal equivalents, simplified to better work for an audio plugin.\\n\\nCardinal does not load external modules and does not connect to the official Rack library/store.\\nAll VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues.\\n\\n## Why\\n\\nCardinal was created first and foremost as a way to have Rack as a proper open-source audio plugin.\\nA proper audio plugin should be self-contained as much as possible, as to not interfere with the DAW/Host. Loading external modules clearly goes against this idea.\\nNot to mention being open-source, otherwise we are at the mercy of the wishes of a company for what we can and cannot do, which is not something Cardinal's authors wish to abide by.\\n\\nA self-contained plugin can't be overstated, as DLL/shared-object symbol conflicts can trigger hard-to-debug crashes.\\nWhile Rack tries to mitigate this as much as possible, crashes due to conflicting modules have already been seen in v2 builds.\\nOn the other side, Cardinal redefines class and function names as needed to avoid as many conflicts as possible.\\n\\nSupport for ARM and non-mainstream platforms (for example BSD) has also always been missing from the official Rack since the start.\\nWhile we can patch the Rack free version to support these, same can't be done with Rack Pro with it being a closed-source product.\\nThe online library/store only supports a very specific set of platforms too, so non-supported platforms would need any 3rd-party modules to be manually compiled to make them usable.\\n\\nUnhappiness with the audio threading behaviour of Rack also plays a role.\\nBoth audio and MIDI should be locked to the host audio thread as to minimize (or even altogether remove) latency and jitter.\\nThe use of separate threads for MIDI is bad design, one that has been corrected in DAWs and JACK-MIDI for several years...\\nBut Rack's use of RtMidi requires separate threading, so Cardinal does not use it.","iframe":true,"cover":"dc7070e1-66fd-4f74-95d2-92d8388864e2","id":56,"sort":17,"clicks":5,"public":false,"is_new":true,"stats":[48]},{"url":"https://multiplayer-orchestra.com","date_created":"2024-04-23T08:07:22.796Z","title":"Multiplayer Orchestra","slug":"multiplayer-orchestra","author":"Mutli_Orchestra","author_link":"https://twitter.com/Mutli_Orchestra","description":"Play in real time with people from all around the world with more than 400 instruments.","tags":["Poly","MIDI","Keyboard","Collaborative","Online"],"archive_link":null,"archive":false,"content":"Multiplayer Orchestra ([https://www.multiplayer-orchestra.com/](https://www.multiplayer-orchestra.com/)) is a web application that allows you to virtually collaborate with musicians from around the world in real-time. Here are some key features:\\n\\n* **Large instrument selection:** Choose from over 400 instruments, including pianos, guitars, drums, and orchestral instruments.\\n* **Real-time collaboration:** Play music simultaneously with other users, creating a virtual orchestra.\\n* **Public and private rooms:** Join public rooms to jam with others or create private rooms with a password for specific collaborations.\\n* **Contests:** Participate in contests to win prizes like Amazon gift cards by recording solo performances.\\n\\n**It's important to note that the website seems to be in beta based on the version information listed (Beta 0.30).** ","iframe":true,"cover":"d743d9ea-d73f-4593-a70e-58a3e4deaa1b","id":55,"sort":18,"clicks":5,"public":false,"is_new":true,"stats":[47]},{"url":"https://touchpianist.com/","date_created":"2023-10-27T12:45:54.691Z","title":"Touch Pianist","slug":"touch-pianist","author":"EarSlap","author_link":null,"description":"Unleash your inner virtuoso with Touch Pianist. Experience the thrill of playing the piano with just your fingertips. Choose your favorite classical masterpiece and immerse yourself in the joy of creating beautiful music, all through the power of touch.","tags":["entertainment","piano"],"archive_link":null,"archive":false,"content":"Touch Pianist is a musical toy / instrument that allows the user to perform hard-to-play classical piano music favorites (from composers like Beethoven, Mozart, Bach, Satie, Debussy to name a few) just by tapping the rhythm of the piece's particular sound events on a computer keyboard or a touch screen.\\n\\nIt also provides live visualisation of the pieces that are being performed. There is no score keeping, the user is free to perform the music in any way they wish. The premise is that it is really fun to perform a piece you know well, exactly like you feel it with so little effort.\\n\\nTouch Pianist has CoreMIDI support so you can use your favorite piano / sound plug-in in your computer as a sound source if you wish.","iframe":false,"cover":"415deeeb-a843-4363-b6c9-78918aa688af","id":41,"sort":19,"clicks":177,"public":false,"is_new":false,"stats":[15]},{"url":"https://www.beepbox.co","date_created":"2024-03-21T02:43:35.749Z","title":"BeepBox","slug":"beepbox","author":"John Nesky","author_link":"https://johnnesky.com/","description":"BeepBox is an online tool for sketching and sharing instrumental music.\\n\\nAll song data is contained in the URL at the top of your browser. When you make changes to the song, the URL is updated to reflect your changes. When you are satisfied with your song, just copy and paste the URL to save and share your song!\\n\\nBeepBox is a passion project, and will always be free to use. ","tags":["Poly","Sequencer","FM"],"archive_link":null,"archive":false,"content":" BeepBox is developed by John Nesky.\\n\\nBeepBox does not claim ownership over songs created with it, so original songs belong to their authors.\\n\\nNeither John Nesky nor BeepBox assume responsibility for any copyrighted material played on BeepBox. No songs are ever received, recorded, or distributed by BeepBox's servers. All song data is contained in the URL after the hash (#) mark, and your song data will not leave your device unless you copy and share the URL. BeepBox does not collect, track, or share any user data. ","iframe":true,"cover":"dea37f5f-504c-443f-ba9a-3dff4d583506","id":54,"sort":20,"clicks":10,"public":false,"is_new":true,"stats":[46]},{"url":"https://roland50.studio/","date_created":"2023-11-25T05:42:57.573Z","title":"Roland 50 Studio","slug":"roland50","author":"Yuri Suzuki","author_link":"https://www.yurisuzuki.com/","description":"It's a professional sounding online musical interface, which records your masterpieces and allows you to share your creations through social media, messaging and also as a download.\\nOn top of the TR-808 drum machine and TB-303 bass synthesizer featured at the original 2020 release, now the sound of SH-101 synthesizer is added, and more sounds to come later in the year 2022, commemorating Roland's 50th anniversary.","tags":["drum machine","SP404","TR808","TB303","Step sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"3b5aec13-7e50-475c-9165-bc963872515d","id":45,"sort":21,"clicks":17,"public":false,"is_new":false,"stats":[16]},{"url":"https://www.disco-computer.com/synthesizer/synth.html","date_created":"2023-10-27T12:45:54.270Z","title":"Disco-computer","slug":"disco-computer","author":"Patrick Sawyer","author_link":null,"description":null,"tags":["polyphonic","fm","keyboard"],"archive_link":"/archive/synthescheisse/index.html","archive":true,"content":null,"iframe":true,"cover":"0d0183e6-8964-4246-a18c-a6ca0a0f2794","id":22,"sort":22,"clicks":269,"public":false,"is_new":false,"stats":[17]},{"url":"https://seeing-sound.netlify.app/","date_created":"2023-10-27T12:45:54.492Z","title":"Video Sampler","slug":"video-sampler","author":"Playtronica","author_link":"https://shop.playtronica.com","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b39cc546-2571-4402-84cd-f8497e27d0c9","id":31,"sort":23,"clicks":256,"public":false,"is_new":false,"stats":[18]},{"url":"https://bs.stranno.su/","date_created":"2024-08-21T10:02:11.468Z","title":"Binary Synth","slug":"binary-synth","author":"Max Alyokhin ","author_link":"https://github.com/MaxAlyokhin","description":"Audio synthesis from binary code of any file","tags":["FX","MIDI","Educational"],"archive_link":null,"archive":false,"content":"A web-synthesizer that generates sound from the binary code of any files. It can synthesize sound directly in the browser, or be a generator of MIDI messages to external devices or DAWs, turning any file into a score. All the application code is written in Javascript and along with everything you need is packed into a single .html file of about 750kb. The synthesizer doesn't need internet, it can be downloaded and run locally on any device with a browser.\\n\\nThe application reads the file sequentially, and due to the high speed of reading and random deviation of reading duration, we can get quite unpredictable generation of timbre nuances, and at certain settings we can switch to granular synthesis.","iframe":true,"cover":"b43984bd-bdca-4134-bb55-567306668935","id":62,"sort":25,"clicks":0,"public":false,"is_new":true,"stats":[54]},{"url":"https://www.stef.be/bassoontracker/","date_created":"2024-03-14T07:04:03.311Z","title":"Bassoon Tracker","slug":"bassoon","author":"Steffest","author_link":" https://www.stef.be","description":"Browser-based old-school Amiga Music Tracker in plain old JavaScript.","tags":["FM","tracker","8-bit","low-fi"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"70c9db80-8ef8-4aa5-9dcd-6b5c3c0da5b2","id":53,"sort":26,"clicks":10,"public":false,"is_new":true,"stats":[45]},{"url":"https://www.igorski.nl/experiment/websid","date_created":"2023-10-27T12:45:54.438Z","title":"WebSID Commodore 64","slug":"web-sid","author":"Igor Zinken","author_link":"https://www.igorski.nl/","description":null,"tags":["polyphonic","keyboard","midi","additive"],"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"932e0ae0-0048-4c6d-92bb-a4a17a8a4dd4","id":28,"sort":27,"clicks":156,"public":false,"is_new":false,"stats":[19]},{"url":"https://nicroto.github.io/viktor/","date_created":"2023-10-27T12:45:54.388Z","title":"Viktor NV-1","slug":"nv-1","author":"Nikolay Tsenkov ","author_link":"https://github.com/nicroto","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"ff3082ad-3c38-4880-ab23-35711c97ea71","id":27,"sort":28,"clicks":496,"public":false,"is_new":false,"stats":[20]},{"url":"https://virtualpiano.eu/","date_created":"2023-10-27T12:45:54.542Z","title":"VirtualPiano.eu","slug":"virtual-piano","author":"WebSyrup","author_link":"https://websyrup.net/","description":null,"tags":["midi","keyboard"],"archive_link":null,"archive":false,"content":"VirtualPiano.eu is the online synthesizer that allows you to play 128 musical instruments for free using your PC keyboard, the mouse or by connecting an external MIDI keyboard.\\n\\nYou can adjust Volume, Reverb, Loop and quality. Use the sustain and adjust the octaves, you can also select and set different channels including the one for the drums.\\n\\nCreate your own melodies, have fun playing or use VirtualPiano to learn how to play the Piano online on your own. ","iframe":true,"cover":"9a59eea5-c77f-483c-9443-1cd0727e6dcc","id":35,"sort":29,"clicks":282,"public":false,"is_new":false,"stats":[21]},{"url":"https://onlinesequencer.net/","date_created":"2023-10-27T12:45:54.565Z","title":"Online sequencer","slug":"online-sequencer","author":"Jacob Morgan and George Burdell","author_link":"https://github.com/buildist","description":null,"tags":["sequencer"],"archive_link":null,"archive":false,"content":"**Online Sequencer** is a web-based music sequencer that allows users to create music saved online, or on their computer. The piano roll is essential to the sequencer, which is on the left of the screen, with 72 notes from C2-B7 (labelled differently from a piano, C2 on the sequencer corresponds to C1 on a piano). In addition to several parameters which can be modified to change the sound of the music, additional functionality can be accessed via the console.\\n\\nUpon opening the site, users can begin composing and \\"drawing\\" notes on the grid, with the default instrument being Electric Piano. By default, a sequence's time signature is set to 4/4, and the grid spacing is set to 1/4 (16 notes per measure). The note lengths can be adjusted by dragging the dark tab on the right of each note, and precision can be afforded by changing the 'Grid' option to other note divisions. \\n\\n## History\\n\\nOnline Sequencer was created on January 2, 2013 by Jacob Morgan during a break at Georgia Tech.\\n\\nBeginning in the fall of 2013, accounts were available but were separate from the music portion of the site. They were only used in the forum and the website chat.\\n\\nIn 2015, accounts were linked to the main website and allowed songs to be saved under someone's username.\\n\\nThe World Update in 2018 added several new instruments and changed the landscape of sound design on the site. The \\"World Update Contest\\" was held for the update.\\n\\nStarting in late 2020, OS began to receive a variety of updates which vastly improved the functionality of the site. These updates introduced features like custom grid sizes, automation with markers, extra reverb options, detune, and distortion. In 2021, the \\"Space Race\\" contest was held, as to see who could work best with the changes.\\n\\nIn late 2022, newer, higher-quality instruments were added. Some of the instruments, such as Electric Piano, Grand Piano, Violin, and Cello got an updated sustained version, while the original versions still exist under the \\"classic\\" designation.\\n\\nCurrently, the 10-Year Anniversary Contest is being held.\\n\\n## Features\\n\\nWithin the editor, numerous user interface features allow for various changes which will impact the individual sequence on that page.\\n\\n### Basic features\\n\\nUI features include:\\n\\n- Tempo (10-999 BPM)\\n- Measure count or Time count (MM: SS.ssss)\\n- Time signature (2/4, 3/4, 4/4, 5/4)\\n- Grid size (This correlates to note divisions; 1/16, 1/12, 1/8, 1/6, 1/4, 1/3, 1/2)\\n- Auto Scroll (Fast, Smooth, Off; how the sequencer displays measures off-screen as a sequence plays)\\n- Add an Audio Track (This won't be saved to the sequence but will play alongside it for ease of transcription)\\n- Title input\\n- Draw, select, and erase\\n- Instrument dropdown, instrument options, and select instrument (selects all notes of the current instrument)\\n- Select all, Cut, Copy, and Paste\\n- Zoom options\\n- Export options\\n- Help\\n- Fullscreen\\n- Tooltips\\n\\n### Advanced features\\n\\nUsers can access more advanced features for use in their sequences by clicking the advanced tab on the instrument they wish to change. This menu contains options to change volume, panning, detune (-1200 to +1200), reverb, distortion, and an equalizer. This array lets users configure specific instruments to create specific sounds, and textures, or to accompany other instruments as a layer or development of the original sound.\\n\\nOS also allows for commands to be entered in the browser console to manipulate different options in specific ways, such as setting custom to detune values (0-infinity), custom grid sizes, note divisions, and sequence ID amongst other things. These options bring OS closer to that of classic Digital Audio Workstations (DAWs) but are still limited in terms of accessibility and availability.\\n\\n### Browser and device support\\n\\nOnline Sequencer supports Chrome and other Chromium-based browsers, such as Microsoft Edge, Opera, and Brave. Firefox is also supported, but often with limited functionality. Safari and Internet Explorer are not supported, due to engine issues.\\n\\nOther mobile browsers support sequence playback, but not editing. However, iOS users have the same problem with WebKit on macOS. However, unlike in macOS, all browsers (even Chromium-based browsers) use WebKit as the engine for iOS due to Apple prohibiting other engines for security reasons; iOS does not support Online Sequencer, other than chat and forums.\\n\\nThe website's user interface is formatted for proper use on desktops, but some pages such as the chat page, playlists, and forums should be formatted well on mobile devices. ","iframe":true,"cover":"ec08ba72-8157-4415-8b34-aea1fe686e09","id":36,"sort":30,"clicks":321,"public":false,"is_new":false,"stats":[22]},{"url":"https://sb.bitsnbites.eu/","date_created":"2023-10-27T12:45:54.625Z","title":"Sound Box","slug":"sound-box","author":"Bits'n'bites","author_link":"https://gitlab.com/mbitsnbites","description":null,"tags":["tracker"],"archive_link":null,"archive":false,"content":"https://github.com/mbitsnbites/soundbox","iframe":true,"cover":"f2f825f3-a084-408b-86d1-2b64cf822c3c","id":38,"sort":31,"clicks":209,"public":false,"is_new":false,"stats":[23]},{"url":"https://femurdesign.com/omni/","date_created":"2023-10-27T12:45:54.224Z","title":"Omni","slug":"omni","author":"Luke Phillips","author_link":"https://femurdesign.com/","description":null,"tags":["polyphonic","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"fbb1364f-53cf-4f71-8f29-d7f572308e78","id":20,"sort":32,"clicks":210,"public":false,"is_new":false,"stats":[24]},{"url":"https://www.g200kg.com/docs/webmodular/","date_created":"2023-10-27T12:45:54.252Z","title":"Web Modular","slug":"web-modular","author":"g200kg","author_link":"https://www.g200kg.com/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"48e0280c-f7ff-4308-bde3-973b7febe89c","id":21,"sort":33,"clicks":202,"public":false,"is_new":false,"stats":[25]},{"url":"https://errozero.co.uk/acid-machine/","date_created":"2023-10-27T12:45:54.333Z","title":"Acid Machine 2","slug":"acid-machine-2","author":"Errozero","author_link":"https://www.errozero.co.uk/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"031eab3e-2f21-442a-8fdc-9769907824e0","id":25,"sort":34,"clicks":166,"public":false,"is_new":false,"stats":[26]},{"url":"https://apps.musedlab.org/groovepizza/","date_created":"2023-11-21T04:30:41.565Z","title":"Groove Pizza","slug":"groove-pizza","author":"NYU Music Experience Design Lab","author_link":"https://musedlab.org/groovepizza/","description":"Groove Pizza is a circular rhythm app for creative music making and learning! It’s also a playful tool for creating grooves using math concepts like shapes, angles and patterns","tags":["drums","sequencer","Educational"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"50d7bc15-edd5-4261-bc2a-1b173b5a1547","id":44,"sort":35,"clicks":91,"public":false,"is_new":false,"stats":[27]},{"url":"https://ojack.github.io/PIXELSYNTH/","date_created":"2023-10-27T12:45:54.286Z","title":"PixelSynth","slug":"pixel-synth","author":"Olivia Jack","author_link":"https://ojack.xyz/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"77369c22-944c-4f6a-83b5-85e16fe43abc","id":24,"sort":36,"clicks":217,"public":false,"is_new":false,"stats":[28]},{"url":"https://neosynth.pro","date_created":"2024-07-22T08:19:41.905Z","title":"NeoSynth.pro","slug":"neosynth","author":"NeoSynth","author_link":null,"description":"More than just an online synthesizer – it's a comprehensive learning platform designed to help music enthusiasts of all levels master the art of sound synthesis. Whether you're a beginner looking to understand the basics or an experienced producer aiming to refine your skills, NeoSynth Pro provides the tools and knowledge you need to create amazing sounds.","tags":null,"archive_link":null,"archive":false,"content":"Features\\n\\n Interactive synthesizer with multiple waveforms and real-time parameter control\\n Comprehensive tutorials covering all aspects of sound synthesis\\n Preset system for quick access to popular sounds\\n Visual feedback with dynamic waveform display\\n Responsive design for seamless use on desktop and mobile devices\\n","iframe":true,"cover":"da587f71-e54d-4146-88e5-551ffb2e64f9","id":60,"sort":37,"clicks":2,"public":false,"is_new":true,"stats":[52]},{"url":"https://www.multiplayerpiano.org/","date_created":"2023-11-26T08:06:18.875Z","title":"Multiplayer Piano","slug":"multiplayer-piano","author":"Brandon Lockaby","author_link":"https://github.com/Multiplayer-Piano","description":"Online piano, that can be played by any site visitor together in a virtual room or alone.","tags":["Piano","MIDI","Poly","Multiplayer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"9c10771b-e38f-469f-b58b-c9e6bb91a072","id":49,"sort":38,"clicks":4,"public":false,"is_new":false,"stats":[29]},{"url":"https://webaudiodemos.appspot.com/midi-synth/index.html","date_created":"2023-10-27T12:45:53.963Z","title":"MIDI–driven Web Audio","slug":"midi-driven-web-audio","author":"Chris Wilson","author_link":"https://github.com/cwilso","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"0005a0c9-c7e7-4922-a1e5-49d4326d2f77","id":6,"sort":39,"clicks":127,"public":false,"is_new":false,"stats":[30]},{"url":"https://samplestitch.com.s3-website-us-east-1.amazonaws.com/","date_created":"2023-10-27T12:45:54.185Z","title":"Samplestich","slug":"sample-stich","author":"Matt Daniels","author_link":"https://mdaniels.com","description":null,"tags":["samples","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"89859f9f-0d45-44dc-93b6-98dfa2e7d799","id":18,"sort":40,"clicks":164,"public":false,"is_new":false,"stats":[31]},{"url":"https://www.audiotool.com/product/device/heisenberg/","date_created":"2023-10-27T12:45:53.983Z","title":"Meet the Heisenberg","slug":"meet-the-heisenberg","author":"AudioTool","author_link":"https://www.audiotool.com","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"a2397ce6-7712-40e5-b4e0-df95c7992662","id":8,"sort":41,"clicks":255,"public":false,"is_new":false,"stats":[32]},{"url":"https://www.gsn-lib.org/apps/cardboardsynth/index.html","date_created":"2023-10-27T12:45:54.002Z","title":"Cardboard Synth","slug":"cardboard-synth","author":" Thorsten Thormählen","author_link":"https://www.uni-marburg.de/en/fb12/research-groups/grafikmultimedia/thormae","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"29fe1fcc-ca85-41b3-ab1e-7f10770f2c1f","id":9,"sort":42,"clicks":184,"public":false,"is_new":false,"stats":[33]},{"url":"https://poly.ozieblowski.dev/","date_created":"2024-06-26T15:32:49.507Z","title":"Polyrhythm3","slug":"polyrhythm3","author":"Anagramme","author_link":"https://github.com/Angramme","description":"A new reworked release of polyrhythm generator / metronome. The UI is divided into blocks, the first block is the visualization block, here you can see your \\"sections\\" displayed in a midi-esque fashion. It allows you to do the following actions:\\n\\n- dd new sections with the add button to the right\\n- select the section that you are currently editing in the editor by clicking on it.\\n- swap two sections by dragging one section over another.\\n","tags":["polyrhythm","MIDI","Sequencer","metronome"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"48979a40-1009-4ad3-8363-8cde02abf2c0","id":58,"sort":43,"clicks":null,"public":false,"is_new":true,"stats":[50]},{"url":"https://tanguysynth.com/","date_created":"2023-10-27T12:45:54.036Z","title":"Tanguy synth","slug":"tanguy-synth","author":"Luke Teaford","author_link":"https://github.com/luketeaford","description":null,"tags":["monophonic","additive","keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"5471a71e-7c5b-4ea6-aee0-1b394873c381","id":11,"sort":44,"clicks":117,"public":false,"is_new":false,"stats":[34]},{"url":"https://www.blokdust.com/","date_created":"2023-11-25T06:31:23.261Z","title":"BlokDust","slug":"blokdust","author":"Luke Twyman, Luke Phillips, Edward Silverton","author_link":"https://wvnl.xyz/","description":"BlokDust is a creative visual drag and drop music exploration tool. Developed in Brighton UK and released in 2016, BlokDust uses the Web Audio API and makes use of Tone.js as an audio framework.","tags":["creative","sequencer"],"archive_link":null,"archive":false,"content":"Luke Twyman - project concept, design & Ul.\\nwhitevinyldesign.com\\n@whitevinylUK\\nLuke Phillips - audio development & musical interaction.\\nfemurdesign.com\\n@lukephills\\nEdward Silverton - client & server architecture & core development.\\nedsilv.com\\n@edsilv","iframe":true,"cover":"7e5bcda8-f37a-46c0-91d9-0a6ea501a101","id":47,"sort":45,"clicks":19,"public":false,"is_new":false,"stats":[35]},{"url":"https://billard.medusis.com/","date_created":"2024-06-26T16:11:33.298Z","title":"Billiard","slug":"biliard","author":"Carl-Leonard Von Fligenstein","author_link":"https://news.ycombinator.com/user?id=bambax","description":" Here's Billard. It combines music and physics into a unique creative tool, as I explore various unconventional methods for generating music.\\n\\nMost traditional music composition tools revolve around the idea of a repeatable pattern. Billard is a webapp that never repeats itself. It generates music automatically based on the collisions of balls in a 2D space. Collisions trigger notes (or chords) in a given key. One can add balls or move them (y-position is pitch); the app remembers its state between reloads; or it can be reset with the 'init' button on the top left. Gravity can be adjusted in real time to change the behavior of the balls.\\n\\nIt owes a lot of inspiration to Brian Eno and Erik Satie (inventor of musique d'ameublement, or \\"furniture music\\"). Some may think the lack of pattern makes it not musical enough -- but this lets it be listened to —and watched— for a while without boredom.\\n\\nThe webapp is made using plain JavaScript. (All SVG icons were made 'by hand'.) It uses Tone.js only for triggering piano samples. Beyond piano, it's MIDI-enabled and works well at slow speed with haunting, dark synth sounds.","tags":["MIDI","Poly","Physics","Sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"b56f4acb-b528-4d18-a3b5-405fb10cafa4","id":59,"sort":46,"clicks":2,"public":false,"is_new":true,"stats":[51]},{"url":"https://mod-synth.io/","date_created":"2023-10-27T12:45:54.052Z","title":"MOD synth","slug":"mod-synth","author":"André Venâncio ","author_link":"https://github.com/andrevenancio","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"31564bf3-fca9-41a4-b390-d78ccd848107","id":12,"sort":47,"clicks":146,"public":false,"is_new":false,"stats":[36]},{"url":"https://cync.app","date_created":"2024-08-25T05:00:42.506Z","title":"Cync","slug":"cync","author":"Jon Tiburzi","author_link":"https://github.com/tiburzi/cync","description":"A cyclic drum machine for experimenting with non-quantized grooves. ","tags":["Educational","sequencer","Percussion","Metronome"],"archive_link":null,"archive":false,"content":"Most drum sequencers are rectangular, organizing notes linearly in a quantized grid. However, there are many rhythms that are difficult or impossible to construct this way (such as traditional African, Indian, and Indonesian drumbeats). These rhythms rely on repeating patterns of different lengths, which can vary in arrangement and timing.\\n\\nRepresenting these grooves as overlapping cycles reveals their underlying patterns. This approach can also be used to explore and experiment with polyrhythms, syncopation, and beat construction.\\n","iframe":true,"cover":"8c7eac07-92d5-4c10-bb3f-e44d6a36a4af","id":63,"sort":48,"clicks":2,"public":false,"is_new":true,"stats":[55]},{"url":"https://perso.numericable.fr/olivier.friker/synth/O3-synth%20V1.3.html","date_created":"2023-10-27T12:45:54.069Z","title":"OLIF SY1K","slug":"olif-sy-1-k","author":"Olivier Friker","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"3b9a5e11-3de3-46fe-9cdc-e1668b152f31","id":13,"sort":49,"clicks":145,"public":false,"is_new":false,"stats":[37]},{"url":"http://www.noisesculptor.com/","date_created":"2023-10-27T12:45:54.104Z","title":"Note Sculptor","slug":"note-sculptor","author":"Ruin Technology","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"a01968d1-3f88-4522-9752-1c33d10d90d9","id":15,"sort":50,"clicks":129,"public":false,"is_new":false,"stats":[38]},{"url":"https://zya.github.io/granular/","date_created":"2024-07-29T17:37:33.497Z","title":"Multi-Touch Granular Sampler","slug":"granular","author":"Zya","author_link":"https://github.com/zya/","description":"The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.","tags":["Granular"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"f44fa962-37f0-487d-b69b-6880dd06dbd1","id":61,"sort":51,"clicks":1,"public":false,"is_new":false,"stats":[53]},{"url":"https://aikelab.net/websynthv2/","date_created":"2023-10-27T12:45:54.141Z","title":"WebAudioSynth V2","slug":"web-audio-synth-v2","author":"like","author_link":"https://github.com/aike/","description":null,"tags":null,"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"ac668fba-7226-43dc-a91f-bd21a31446e5","id":16,"sort":52,"clicks":305,"public":false,"is_new":false,"stats":[39]},{"url":"https://isleoftune.com/","date_created":"2023-11-25T06:22:15.184Z","title":"Isle of Tune","slug":"isleoftune","author":"Jim Hall","author_link":"https://twitter.com/isleoftune","description":"Draw an island, where everything plays music.","tags":["game","sequencer"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"6830c24f-c7bf-430f-abc1-3d7fbf5f2557","id":46,"sort":53,"clicks":15,"public":false,"is_new":false,"stats":[40]},{"url":"https://www.soundtrap.com/","date_created":"2023-10-27T12:45:54.155Z","title":"Sound Trap","slug":"sound-trap","author":"Soundtrap","author_link":"https://www.soundtrap.com/about","description":null,"tags":["daw"],"archive_link":null,"archive":false,"content":null,"iframe":false,"cover":"63ef832a-f7da-4536-851f-4964005a89f1","id":17,"sort":54,"clicks":124,"public":false,"is_new":false,"stats":[41]},{"url":"http://typedrummer.com/","date_created":"2023-11-25T06:34:10.166Z","title":"Type Drummer","slug":"typedrummer","author":"Kyle Stetz","author_link":"http://kylestetz.com/","description":"Type your drum loops","tags":["sequencer","drums","Keyboard"],"archive_link":null,"archive":false,"content":null,"iframe":true,"cover":"19454c82-7338-4144-9f1c-010c80a70a6e","id":48,"sort":55,"clicks":21,"public":false,"is_new":false,"stats":[42]}]`),at={class:"text-center line-height-loose text-md"},ot={class:"mx-auto max-w-75ch intro md-text-lg"},rt={class:"p-2 flex flex-col mt-8"},lt={class:"text-4xl font-bold"},ct=f("div",{class:"text-lg"},"web synths",-1),ut={class:"p-2 flex flex-col mt-8"},ht={class:"text-4xl font-bold"},dt=f("div",{class:"text-lg"},"web musicians",-1),pt={__name:"AboutCount",setup(t){const e=O(),s=O(0),n=O(0),i=pe(s),a=pe(n),o=Le(e);return Oe(o,async r=>{if(r){s.value=ne.length;const c=await(await fetch("https://dbs.chromatone.center/flows/trigger/0c0e8d82-8e12-44a6-867a-57ddeec9d774",{type:"GET",mode:"cors",headers:{"Content-Type":"application/json"}})).json();n.value=c.count}}),(r,l)=>(b(),y("div",at,[f("div",ot,[f("div",{class:"flex justify-center",ref_key:"counters",ref:e},[f("div",rt,[f("div",lt,L(M(i).toFixed()),1),ct]),f("div",ut,[f("div",ht,L(M(a).toFixed()||5e3)+"+",1),dt])],512)])]))}},ft={class:"flex flex-col text-center gap-4 bg-light-700 dark-bg-dark-200 dark-bg-opacity-20 p-4 rounded-lg shadow-lg mb-8"},mt=f("div",{class:"text-xl font-bold my-2"},"Suggest a new web-synth to the collection",-1),gt=["disabled"],bt={__name:"FormSynth",emits:["submitted"],setup(t,{emit:e}){const s=e,n=$e({url:"",text:""}),i=/[(http(s) ?): \/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/;function a(l){return i.test(l)}const o=O();async function r(){var l,c,u;try{const h=await fetch("https://dbs.chromatone.center/flows/trigger/dc8ca96f-76e6-4cac-b26c-10751746eb89",{method:"POST",mode:"cors",cache:"no-cache",credentials:"same-origin",headers:{"Content-Type":"application/json"},redirect:"follow",referrerPolicy:"no-referrer",body:JSON.stringify(n)});o.value=await(h==null?void 0:h.json()),n.url="",n.text="",setTimeout(()=>{s("submitted")},2e3)}catch(h){console.error(h,(c=(l=h==null?void 0:h.errors)==null?void 0:l[0])==null?void 0:c.message,(u=h==null?void 0:h.response)==null?void 0:u.status)}}return(l,c)=>(b(),y("div",ft,[o.value?(b(),y(j,{key:1},[U("Thanks for your suggestion!")],64)):(b(),y(j,{key:0},[mt,X(f("input",{class:"py-2 px-4 rounded bg-light-200 dark-bg-dark-200",type:"text",placeholder:"https://new.synth.url/","onUpdate:modelValue":c[0]||(c[0]=u=>n.url=u)},null,512),[[ee,n.url]]),X(f("textarea",{class:"py-2 px-4 rounded bg-light-200 dark-bg-dark-200",oninput:"this.style.height = ''; this.style.height = this.scrollHeight +'px'",placeholder:"Describe the web-app and how do you use it musically","onUpdate:modelValue":c[1]||(c[1]=u=>n.text=u)},null,512),[[ee,n.text]]),f("button",{class:"text-xl py-2 px-4 rounded bg-dark-100 text-light-200 dark-bg-light-700 dark-text-dark-500 shadow-lg disabled-opacity-20",disabled:!a(n.url),onClick:c[2]||(c[2]=u=>r())},L(a(n.url)?"Submit":"Please provide a valid URL"),9,gt)],64))]))}},_e=t=>(je("data-v-5f69066e"),t=t(),Ze(),t),yt={key:0,class:"px-2 py-1 bg-light-800 dark-bg-dark-800 rounded-xl transition text-sm select-none absolute bottom-2 left-2 text-center z-200 flex items-center gap-1 opacity-70 hover-opacity-100",title:"Since 28 Oct 2023"},vt=_e(()=>f("div",{class:"i-la-eye"},null,-1)),wt={class:"p-0 mt-2px"},kt={class:"p-4 flex flex-col items-start justify-between gap-2",style:{flex:"10 0 200px"}},_t={class:"flex items-center gap-2 flex-0 w-full"},xt={class:"transition text-xl select-none absolute top-4 left-4 text-center z-200 text-shadow-md"},St={class:"flex-auto"},Tt={class:"flex items-center gap-2"},Mt={class:"text-2xl font-bold"},It={key:0,class:"font-normal",title:"Archived locally by us"},At=_e(()=>f("div",{class:"i-ph-archive-duotone"},null,-1)),Ct=[At],Et={class:"flex-1"},Pt={key:1,class:"flex-1 flex items-end flex flex-wrap gap-2"},Dt=["href"],Lt={key:3,class:"text-xl p-2 absolute left-2 top-4 bg-yellow-600 rounded-xl shadow font-bold z-1000 transform -rotate-10"},Ot={__name:"SynthCard",props:{pos:{type:Number,default:0},sort:{type:Number,default:0},public:{type:Boolean,default:!1},title:{type:String,default:""},id:{type:Number,default:0},slug:{type:String,default:""},description:{type:String,default:""},cover:{type:String,default:""},url:{type:String,default:""},author:{type:String,default:""},author_link:{type:String,default:""},tags:{type:Array,default:()=>[]},archive:{type:Boolean,default:!1},archive_link:{type:String,default:""},iframe:{type:Boolean,default:null},clicks:{type:Number,default:0},stars:{type:Number,default:0},counter:{type:Number,default:0},is_new:{type:Boolean,default:null}},setup(t){const{isDark:e}=Re(),s=t,{isFormOpen:n,isAccessGranted:i}=ve(),{clicksCount:a,clickSynth:o}=Je(s.id);async function r(){!s.public&&!i.value?n.value=!n.value:(o(s.id),s.iframe?window.open(s.slug+"/","_self"):window.open(s.archive?s.archive_link:s.url,"_blank"))}return(l,c)=>{var d;const u=Ke,h=Be("ClientOnly");return b(),y("button",{class:"max-w-180 w-full flex flex-wrap items-stretch text-left relative bg-light-500 dark-bg-dark-300 -hover-translate-y-6px transition duration-200 hover-shadow-lg rounded-lg overflow-hidden relative border-1 border-dark-100 border-opacity-20 shadow-sm dark-border-light-800 dark-border-opacity-20",style:te({borderColor:M(Y)[t.id]?M(e)?"hsl(50deg,80%,35%)":"hsl(40deg,90%,80%)":null}),onClick:r},[f("div",{class:"cover min-h-50 bg-cover bg-center filter transition",style:te([{backgroundImage:`url(/cover/${t.slug}.webp)`},{flex:"1 1 280px"}])},[M(a)||t.counter?(b(),y("div",yt,[vt,f("div",wt,L(M(a)||t.counter),1)])):_("",!0)],4),f("div",kt,[f("div",_t,[f("div",xt,L(t.sort),1),f("div",St,[f("span",Tt,[f("div",Mt,L(t.title),1),t.archive?(b(),y("span",It,Ct)):_("",!0)])]),B(h,null,{default:G(()=>[B(u,{class:"text-xl mr-2 absolute z-200",id:t.id,stars:t.stars},null,8,["id","stars"])]),_:1})]),t.author?(b(),se(Ne(t.author_link?"a":"div"),{key:0,class:"p-0 text-md",href:t.author_link,target:"_blank"},{default:G(()=>[U("by "+L(t.author),1)]),_:1},8,["href"])):_("",!0),f("div",Et,[We(l.$slots,"default",{},void 0,!0)]),((d=t.tags)==null?void 0:d.length)>0?(b(),y("div",Pt,[(b(!0),y(j,null,ke(t.tags,g=>(b(),y("div",{class:"px-2 py-1 text-sm bg-light-800 dark-bg-dark-500 rounded-lg",key:g},L(g),1))),128))])):_("",!0),t.iframe?_("",!0):(b(),y("a",{key:2,class:"absolute bottom-4 right-4 i-la-external-link-square-alt text-lg opacity-40 transition transition hover-opacity-100",onClick:c[0]||(c[0]=Fe(()=>{},["stop"])),href:`/${t.slug}/`,title:"Opens in a new window"},null,8,Dt)),t.is_new?(b(),y("div",Lt,"NEW!")):_("",!0)])],4)}}},zt=we(Ot,[["__scopeId","data-v-5f69066e"]]);function D(t){return Array.isArray?Array.isArray(t):Te(t)==="[object Array]"}const $t=1/0;function Rt(t){if(typeof t=="string")return t;let e=t+"";return e=="0"&&1/t==-$t?"-0":e}function Bt(t){return t==null?"":Rt(t)}function E(t){return typeof t=="string"}function xe(t){return typeof t=="number"}function Nt(t){return t===!0||t===!1||Wt(t)&&Te(t)=="[object Boolean]"}function Se(t){return typeof t=="object"}function Wt(t){return Se(t)&&t!==null}function x(t){return t!=null}function Q(t){return!t.trim().length}function Te(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}const Ft="Incorrect 'index' type",jt=t=>`Invalid value for key ${t}`,Zt=t=>`Pattern length exceeds max of ${t}.`,qt=t=>`Missing ${t} property in key`,Vt=t=>`Property 'weight' in key '${t}' must be a positive integer`,fe=Object.prototype.hasOwnProperty;class Yt{constructor(e){this._keys=[],this._keyMap={};let s=0;e.forEach(n=>{let i=Me(n);this._keys.push(i),this._keyMap[i.id]=i,s+=i.weight}),this._keys.forEach(n=>{n.weight/=s})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function Me(t){let e=null,s=null,n=null,i=1,a=null;if(E(t)||D(t))n=t,e=me(t),s=ie(t);else{if(!fe.call(t,"name"))throw new Error(qt("name"));const o=t.name;if(n=o,fe.call(t,"weight")&&(i=t.weight,i<=0))throw new Error(Vt(o));e=me(o),s=ie(o),a=t.getFn}return{path:e,id:s,weight:i,src:n,getFn:a}}function me(t){return D(t)?t:t.split(".")}function ie(t){return D(t)?t.join("."):t}function Ut(t,e){let s=[],n=!1;const i=(a,o,r)=>{if(x(a))if(!o[r])s.push(a);else{let l=o[r];const c=a[l];if(!x(c))return;if(r===o.length-1&&(E(c)||xe(c)||Nt(c)))s.push(Bt(c));else if(D(c)){n=!0;for(let u=0,h=c.length;ut.score===e.score?t.idx{this._keysMap[s.id]=n})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,E(this.docs[0])?this.docs.forEach((e,s)=>{this._addString(e,s)}):this.docs.forEach((e,s)=>{this._addObject(e,s)}),this.norm.clear())}add(e){const s=this.size();E(e)?this._addString(e,s):this._addObject(e,s)}removeAt(e){this.records.splice(e,1);for(let s=e,n=this.size();s{let o=i.getFn?i.getFn(e):this.getFn(e,i.path);if(x(o)){if(D(o)){let r=[];const l=[{nestedArrIndex:-1,value:o}];for(;l.length;){const{nestedArrIndex:c,value:u}=l.pop();if(x(u))if(E(u)&&!Q(u)){let h={v:u,i:c,n:this.norm.get(u)};r.push(h)}else D(u)&&u.forEach((h,d)=>{l.push({nestedArrIndex:d,value:h})})}n.$[a]=r}else if(E(o)&&!Q(o)){let r={v:o,n:this.norm.get(o)};n.$[a]=r}}}),this.records.push(n)}toJSON(){return{keys:this.keys,records:this.records}}}function Ie(t,e,{getFn:s=p.getFn,fieldNormWeight:n=p.fieldNormWeight}={}){const i=new ue({getFn:s,fieldNormWeight:n});return i.setKeys(t.map(Me)),i.setSources(e),i.create(),i}function es(t,{getFn:e=p.getFn,fieldNormWeight:s=p.fieldNormWeight}={}){const{keys:n,records:i}=t,a=new ue({getFn:e,fieldNormWeight:s});return a.setKeys(n),a.setIndexRecords(i),a}function V(t,{errors:e=0,currentLocation:s=0,expectedLocation:n=0,distance:i=p.distance,ignoreLocation:a=p.ignoreLocation}={}){const o=e/t.length;if(a)return o;const r=Math.abs(n-s);return i?o+r/i:r?1:o}function ts(t=[],e=p.minMatchCharLength){let s=[],n=-1,i=-1,a=0;for(let o=t.length;a=e&&s.push([n,i]),n=-1)}return t[a-1]&&a-n>=e&&s.push([n,a-1]),s}const R=32;function ss(t,e,s,{location:n=p.location,distance:i=p.distance,threshold:a=p.threshold,findAllMatches:o=p.findAllMatches,minMatchCharLength:r=p.minMatchCharLength,includeMatches:l=p.includeMatches,ignoreLocation:c=p.ignoreLocation}={}){if(e.length>R)throw new Error(Zt(R));const u=e.length,h=t.length,d=Math.max(0,Math.min(n,h));let g=a,v=d;const m=r>1||l,S=m?Array(h):[];let T;for(;(T=t.indexOf(e,v))>-1;){let k=V(e,{currentLocation:T,expectedLocation:d,distance:i,ignoreLocation:c});if(g=Math.min(k,g),v=T+u,m){let I=0;for(;I=he;A-=1){let q=A-1,de=s[t.charAt(q)];if(m&&(S[q]=+!!de),W[A]=(W[A+1]<<1|1)&de,k&&(W[A]|=(P[A+1]|P[A])<<1|1|P[A+1]),W[A]&Z&&(C=V(e,{errors:k,currentLocation:q,expectedLocation:d,distance:i,ignoreLocation:c}),C<=g)){if(g=C,v=q,v<=d)break;he=Math.max(1,2*d-v)}}if(V(e,{errors:k+1,currentLocation:d,expectedLocation:d,distance:i,ignoreLocation:c})>g)break;P=W}const N={isMatch:v>=0,score:Math.max(.001,C)};if(m){const k=ts(S,r);k.length?l&&(N.indices=k):N.isMatch=!1}return N}function ns(t){let e={};for(let s=0,n=t.length;s{this.chunks.push({pattern:d,alphabet:ns(d),startIndex:g})},h=this.pattern.length;if(h>R){let d=0;const g=h%R,v=h-g;for(;d{const{isMatch:T,score:P,indices:C}=ss(e,v,m,{location:i+S,distance:a,threshold:o,findAllMatches:r,minMatchCharLength:l,includeMatches:n,ignoreLocation:c});T&&(d=!0),h+=P,T&&C&&(u=[...u,...C])});let g={isMatch:d,score:d?h/this.chunks.length:1};return d&&n&&(g.indices=u),g}}class z{constructor(e){this.pattern=e}static isMultiMatch(e){return ge(e,this.multiRegex)}static isSingleMatch(e){return ge(e,this.singleRegex)}search(){}}function ge(t,e){const s=t.match(e);return s?s[1]:null}class is extends z{constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const s=e===this.pattern;return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class as extends z{constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const n=e.indexOf(this.pattern)===-1;return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class os extends z{constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const s=e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,this.pattern.length-1]}}}class rs extends z{constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const s=!e.startsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class ls extends z{constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const s=e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}class cs extends z{constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const s=!e.endsWith(this.pattern);return{isMatch:s,score:s?0:1,indices:[0,e.length-1]}}}class Ce extends z{constructor(e,{location:s=p.location,threshold:n=p.threshold,distance:i=p.distance,includeMatches:a=p.includeMatches,findAllMatches:o=p.findAllMatches,minMatchCharLength:r=p.minMatchCharLength,isCaseSensitive:l=p.isCaseSensitive,ignoreLocation:c=p.ignoreLocation}={}){super(e),this._bitapSearch=new Ae(e,{location:s,threshold:n,distance:i,includeMatches:a,findAllMatches:o,minMatchCharLength:r,isCaseSensitive:l,ignoreLocation:c})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class Ee extends z{constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let s=0,n;const i=[],a=this.pattern.length;for(;(n=e.indexOf(this.pattern,s))>-1;)s=n+a,i.push([n,s-1]);const o=!!i.length;return{isMatch:o,score:o?0:1,indices:i}}}const ae=[is,Ee,os,rs,cs,ls,as,Ce],be=ae.length,us=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,hs="|";function ds(t,e={}){return t.split(hs).map(s=>{let n=s.trim().split(us).filter(a=>a&&!!a.trim()),i=[];for(let a=0,o=n.length;a!!(t[H.AND]||t[H.OR]),gs=t=>!!t[le.PATH],bs=t=>!D(t)&&Se(t)&&!ce(t),ye=t=>({[H.AND]:Object.keys(t).map(e=>({[e]:t[e]}))});function Pe(t,e,{auto:s=!0}={}){const n=i=>{let a=Object.keys(i);const o=gs(i);if(!o&&a.length>1&&!ce(i))return n(ye(i));if(bs(i)){const l=o?i[le.PATH]:a[0],c=o?i[le.PATTERN]:i[l];if(!E(c))throw new Error(jt(l));const u={keyId:ie(l),pattern:c};return s&&(u.searcher=re(c,e)),u}let r={children:[],operator:a[0]};return a.forEach(l=>{const c=i[l];D(c)&&c.forEach(u=>{r.children.push(n(u))})}),r};return ce(t)||(t=ye(t)),n(t)}function ys(t,{ignoreFieldNorm:e=p.ignoreFieldNorm}){t.forEach(s=>{let n=1;s.matches.forEach(({key:i,norm:a,score:o})=>{const r=i?i.weight:null;n*=Math.pow(o===0&&r?Number.EPSILON:o,(r||1)*(e?1:a))}),s.score=n})}function vs(t,e){const s=t.matches;e.matches=[],x(s)&&s.forEach(n=>{if(!x(n.indices)||!n.indices.length)return;const{indices:i,value:a}=n;let o={indices:i,value:a};n.key&&(o.key=n.key.src),n.idx>-1&&(o.refIndex=n.idx),e.matches.push(o)})}function ws(t,e){e.score=t.score}function ks(t,e,{includeMatches:s=p.includeMatches,includeScore:n=p.includeScore}={}){const i=[];return s&&i.push(vs),n&&i.push(ws),t.map(a=>{const{idx:o}=a,r={item:e[o],refIndex:o};return i.length&&i.forEach(l=>{l(a,r)}),r})}class F{constructor(e,s={},n){this.options={...p,...s},this.options.useExtendedSearch,this._keyStore=new Yt(this.options.keys),this.setCollection(e,n)}setCollection(e,s){if(this._docs=e,s&&!(s instanceof ue))throw new Error(Ft);this._myIndex=s||Ie(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){x(e)&&(this._docs.push(e),this._myIndex.add(e))}remove(e=()=>!1){const s=[];for(let n=0,i=this._docs.length;n-1&&(l=l.slice(0,s)),ks(l,this._docs,{includeMatches:n,includeScore:i})}_searchStringList(e){const s=re(e,this.options),{records:n}=this._myIndex,i=[];return n.forEach(({v:a,i:o,n:r})=>{if(!x(a))return;const{isMatch:l,score:c,indices:u}=s.searchIn(a);l&&i.push({item:a,idx:o,matches:[{score:c,value:a,norm:r,indices:u}]})}),i}_searchLogical(e){const s=Pe(e,this.options),n=(r,l,c)=>{if(!r.children){const{keyId:h,searcher:d}=r,g=this._findMatches({key:this._keyStore.get(h),value:this._myIndex.getValueForItemAtKeyId(l,h),searcher:d});return g&&g.length?[{idx:c,item:l,matches:g}]:[]}const u=[];for(let h=0,d=r.children.length;h{if(x(r)){let c=n(s,r,l);c.length&&(a[l]||(a[l]={idx:l,item:r,matches:[]},o.push(a[l])),c.forEach(({matches:u})=>{a[l].matches.push(...u)}))}}),o}_searchObjectList(e){const s=re(e,this.options),{keys:n,records:i}=this._myIndex,a=[];return i.forEach(({$:o,i:r})=>{if(!x(o))return;let l=[];n.forEach((c,u)=>{l.push(...this._findMatches({key:c,value:o[u],searcher:s}))}),l.length&&a.push({idx:r,item:o,matches:l})}),a}_findMatches({key:e,value:s,searcher:n}){if(!x(s))return[];let i=[];if(D(s))s.forEach(({v:a,i:o,n:r})=>{if(!x(a))return;const{isMatch:l,score:c,indices:u}=n.searchIn(a);l&&i.push({score:c,key:e,value:a,idx:o,norm:r,indices:u})});else{const{v:a,n:o}=s,{isMatch:r,score:l,indices:c}=n.searchIn(a);r&&i.push({score:l,key:e,value:a,norm:o,indices:c})}return i}}F.version="7.0.0";F.createIndex=Ie;F.parseIndex=es;F.config=p;F.parseQuery=Pe;ms(fs);const _s={class:"flex flex-col items-center mb-2 px-8 relative"},xs={class:"w-full max-w-110 flex items-center relative my-4 gap-2"},Ss=f("div",{class:"i-la-search absolute left-2 text-xl opacity-40"},null,-1),Ts=["title"],Ms={key:0,class:"i-la-star-solid"},Is={key:1,class:"i-la-star"},As={class:"flex flex-col items-center gap-8 p-2 max-w-160 mx-auto mb-12"},Cs=["index"],Es={class:"p-2",key:"nnn"},Ps={key:0,class:"animate-pulse text-center"},Ds={__name:"SynthList",setup(t){const{isAccessGranted:e}=ve(),s=O(ne),n=new F(ne,{includeScore:!0,ignoreLocation:!0,shouldSort:!0,keys:["title","slug","author"]}),i=ze("fav-filter",!1),a=O(""),o=O(!1),r=K(()=>n.search(a.value)),l=K(()=>r.value.filter(h=>h.score<.2).sort((h,d)=>h.score>d.score?1:0).map(h=>h.item.slug)),c=K(()=>s.value.filter(h=>a.value?l.value.includes(h.slug):i.value?Y.value[h.id]:!0)),u=O([]);return qe(async()=>{u.value=await Qe("synths",{fields:["id",{stats:["views","stars"]}]})}),Ve(Y,h=>{Object.values(h).filter(Boolean).length==0&&(i.value=!1)},{deep:!0,immediate:!0}),(h,d)=>{const g=zt,v=bt;return b(),y(j,null,[f("div",_s,[f("div",xs,[X(f("input",{class:"w-full focus text-xl py-2 pl-9 bg-light-50 bg-opacity-100 shadow-inner border-1 border-dark-100 border-opacity-10 rounded-lg dark-bg-dark-200 outline-none focus-border-opacity-90",placeholder:"Type to search...","onUpdate:modelValue":d[0]||(d[0]=m=>a.value=m)},null,512),[[ee,a.value]]),Ss,a.value?(b(),y("div",{key:0,class:"i-la-times absolute right-2 text-xl opacity-40 hover-opacity-80 transition cursor-pointer",onClick:d[1]||(d[1]=m=>a.value="")})):_("",!0),Object.values(M(Y)).filter(Boolean).length>0&&!a.value?(b(),y("button",{key:1,class:"transition p-2 shadow dark-bg-dark-200 dark-hover-bg-dark-100 bg-light-300 hover-bg-light-100 rounded-lg flex items-center gap-2 text-xl text-yellow",title:M(i)?"Only favourites are shown":"Show only favourites",onClick:d[2]||(d[2]=m=>i.value=!M(i))},[B(Ye,{name:"fade"},{default:G(()=>[M(i)?(b(),y("div",Ms)):(b(),y("div",Is))]),_:1})],8,Ts)):_("",!0),a.value?_("",!0):(b(),y("button",{key:2,class:"transition p-2 shadow dark-bg-dark-200 dark-hover-bg-dark-100 bg-light-300 hover-bg-light-100 rounded-lg flex items-center gap-2 text-xl",title:"Suggest a new link to the collection",onClick:d[3]||(d[3]=m=>o.value=!o.value)},[f("div",{class:Ue(["i-la-plus transform transition",{"rotate-45":o.value}])},null,2)]))])]),f("div",As,[o.value?_("",!0):(b(),se(He,{key:0,name:"fade"},{default:G(()=>[(b(!0),y(j,null,ke(c.value,(m,S)=>{var T,P,C,$,Z,N,k,I;return b(),y("div",{class:"flex w-full sticky",style:te([{top:`${10+S*4}px`,zIndex:S+10},{flex:"1 1 240px"}]),key:m.id,index:S},[(b(),se(g,Ge({pos:S,style:{filter:!m.public&&!M(e)?"contrast(70%) blur(2px) opacity(80%)":""},key:m.id,ref_for:!0},m,{counter:($=(C=(P=(T=u.value)==null?void 0:T.find(w=>(w==null?void 0:w.id)==(m==null?void 0:m.id)))==null?void 0:P.stats)==null?void 0:C[0])==null?void 0:$.views,stars:(I=(k=(N=(Z=u.value)==null?void 0:Z.find(w=>(w==null?void 0:w.id)==(m==null?void 0:m.id)))==null?void 0:N.stats)==null?void 0:k[0])==null?void 0:I.stars}),null,16,["pos","style","counter","stars"]))],12,Cs)}),128))]),_:1})),c.value.length==0||o.value?(b(),y("div",Es,[o.value?_("",!0):(b(),y("div",Ps,"We don't know such a web-app yet. ")),B(v,{class:"max-w-140 mx-auto mt-6",onSubmitted:d[4]||(d[4]=m=>o.value=!1)})])):_("",!0)])],64)}}},Ls="/click-logo.svg",Gs=JSON.parse('{"title":"Web synths","description":"Web synthesizers to play with MIDI controllers","frontmatter":{"title":"Web synths","description":"Web synthesizers to play with MIDI controllers","date":"2023-06-22T00:00:00.000Z","layout":"home"},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1724317618000}'),Os={name:"index.md"},zs=f("h1",{class:"text-center text-2xl sm-text-3xl font-bold mt-8",style:{padding:"0.1rem 1rem"}},"Online synthesizers and web piano apps",-1),$s=f("h2",{class:"text-xl sm-text-2xl text-center my-2",style:{padding:"0 1rem"}},"Curated collection of free music creation resources",-1),Rs={class:"px-4 text-lg text-center mb-8 max-w-150 mx-auto"},Bs=f("a",{class:"font-bold",href:"https://chromatone.center",target:"_blank",rel:"noopener"}," Chromatone",-1),Ns=f("a",{class:"font-bold",href:"https://playtronica.com",target:"_blank",rel:"noopener"}," Playtronica",-1),Ws=f("h3",{class:"font-bold text-xl"},"Welcome to the community of web-based musicians!",-1),Fs=f("h4",null,[f("a",{target:"_blank",href:"https://chromatone.center/"},[f("img",{src:Ls,class:"max-w-16 mx-auto"})])],-1);function js(t,e,s,n,i,a){const o=Ds,r=pt,l=it;return b(),y("div",null,[zs,$s,B(o),f("div",Rs,[Bs,U(" is an open source visual music language for education, research and performance. We develop a new universal way to communicate music. "),Ns,U(" is a digital playground that explores the possibilities of the material world through technology, creating gadgets that make the world musical. Together we share our passion for online music instruments. "),B(r),Ws,Fs,B(l)])])}const Hs=we(Os,[["render",js]]);export{Gs as __pageData,Hs as default}; diff --git a/assets/isleoftune_index.md.SXhjnOF6.js b/assets/isleoftune_index.md.BWgINDUK.js similarity index 94% rename from assets/isleoftune_index.md.SXhjnOF6.js rename to assets/isleoftune_index.md.BWgINDUK.js index 4b43f777..b337229a 100644 --- a/assets/isleoftune_index.md.SXhjnOF6.js +++ b/assets/isleoftune_index.md.BWgINDUK.js @@ -1 +1 @@ -import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as n,Q as i,R as o,u as l,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://isleoftune.com/","date_created":"2023-11-25T06:22:15.184Z","title":"Isle of Tune","slug":"isleoftune","author":"Jim Hall","author_link":"https://twitter.com/isleoftune","description":"Draw an island, where everything plays music.","tags":["game","sequencer"],"archive_link":null,"archive":false,"iframe":true,"cover":"6830c24f-c7bf-430f-abc1-3d7fbf5f2557","id":46,"sort":52,"clicks":15,"public":false,"is_new":false,"stats":[40]},"relativePath":"isleoftune/index.md","filePath":"isleoftune/index.md","lastUpdated":0}'),f={name:"isleoftune/index.md"},k=Object.assign(f,{setup(u){const{params:e,frontmatter:m}=s();return(p,d)=>{const t=a;return c(),r("div",null,[n(t,i(o(l(e))),null,16)])}}});export{b as __pageData,k as default}; +import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as n,Q as i,R as o,u as l,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://isleoftune.com/","date_created":"2023-11-25T06:22:15.184Z","title":"Isle of Tune","slug":"isleoftune","author":"Jim Hall","author_link":"https://twitter.com/isleoftune","description":"Draw an island, where everything plays music.","tags":["game","sequencer"],"archive_link":null,"archive":false,"iframe":true,"cover":"6830c24f-c7bf-430f-abc1-3d7fbf5f2557","id":46,"sort":53,"clicks":15,"public":false,"is_new":false,"stats":[40]},"relativePath":"isleoftune/index.md","filePath":"isleoftune/index.md","lastUpdated":0}'),f={name:"isleoftune/index.md"},k=Object.assign(f,{setup(u){const{params:e,frontmatter:m}=s();return(p,d)=>{const t=a;return c(),r("div",null,[n(t,i(o(l(e))),null,16)])}}});export{b as __pageData,k as default}; diff --git a/assets/isleoftune_index.md.SXhjnOF6.lean.js b/assets/isleoftune_index.md.BWgINDUK.lean.js similarity index 94% rename from assets/isleoftune_index.md.SXhjnOF6.lean.js rename to assets/isleoftune_index.md.BWgINDUK.lean.js index 4b43f777..b337229a 100644 --- a/assets/isleoftune_index.md.SXhjnOF6.lean.js +++ b/assets/isleoftune_index.md.BWgINDUK.lean.js @@ -1 +1 @@ -import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as n,Q as i,R as o,u as l,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://isleoftune.com/","date_created":"2023-11-25T06:22:15.184Z","title":"Isle of Tune","slug":"isleoftune","author":"Jim Hall","author_link":"https://twitter.com/isleoftune","description":"Draw an island, where everything plays music.","tags":["game","sequencer"],"archive_link":null,"archive":false,"iframe":true,"cover":"6830c24f-c7bf-430f-abc1-3d7fbf5f2557","id":46,"sort":52,"clicks":15,"public":false,"is_new":false,"stats":[40]},"relativePath":"isleoftune/index.md","filePath":"isleoftune/index.md","lastUpdated":0}'),f={name:"isleoftune/index.md"},k=Object.assign(f,{setup(u){const{params:e,frontmatter:m}=s();return(p,d)=>{const t=a;return c(),r("div",null,[n(t,i(o(l(e))),null,16)])}}});export{b as __pageData,k as default}; +import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as n,Q as i,R as o,u as l,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://isleoftune.com/","date_created":"2023-11-25T06:22:15.184Z","title":"Isle of Tune","slug":"isleoftune","author":"Jim Hall","author_link":"https://twitter.com/isleoftune","description":"Draw an island, where everything plays music.","tags":["game","sequencer"],"archive_link":null,"archive":false,"iframe":true,"cover":"6830c24f-c7bf-430f-abc1-3d7fbf5f2557","id":46,"sort":53,"clicks":15,"public":false,"is_new":false,"stats":[40]},"relativePath":"isleoftune/index.md","filePath":"isleoftune/index.md","lastUpdated":0}'),f={name:"isleoftune/index.md"},k=Object.assign(f,{setup(u){const{params:e,frontmatter:m}=s();return(p,d)=>{const t=a;return c(),r("div",null,[n(t,i(o(l(e))),null,16)])}}});export{b as __pageData,k as default}; diff --git a/assets/note-sculptor_index.md.bqwLgWuL.js b/assets/note-sculptor_index.md.Ct1oIJ59.js similarity index 93% rename from assets/note-sculptor_index.md.bqwLgWuL.js rename to assets/note-sculptor_index.md.Ct1oIJ59.js index 4546ca0e..77c98679 100644 --- a/assets/note-sculptor_index.md.bqwLgWuL.js +++ b/assets/note-sculptor_index.md.Ct1oIJ59.js @@ -1 +1 @@ -import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as o,Q as n,R as l,u as c,f as i}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"http://www.noisesculptor.com/","date_created":"2023-10-27T12:45:54.104Z","title":"Note Sculptor","slug":"note-sculptor","author":"Ruin Technology","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"iframe":false,"cover":"a01968d1-3f88-4522-9752-1c33d10d90d9","id":15,"sort":49,"clicks":129,"public":false,"is_new":false,"stats":[38]},"relativePath":"note-sculptor/index.md","filePath":"note-sculptor/index.md","lastUpdated":0}'),p={name:"note-sculptor/index.md"},y=Object.assign(p,{setup(u){const{params:t,frontmatter:d}=s();return(m,_)=>{const e=a;return i(),r("div",null,[o(e,n(l(c(t))),null,16)])}}});export{x as __pageData,y as default}; +import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as o,Q as n,R as l,u as c,f as i}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"http://www.noisesculptor.com/","date_created":"2023-10-27T12:45:54.104Z","title":"Note Sculptor","slug":"note-sculptor","author":"Ruin Technology","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"iframe":false,"cover":"a01968d1-3f88-4522-9752-1c33d10d90d9","id":15,"sort":50,"clicks":129,"public":false,"is_new":false,"stats":[38]},"relativePath":"note-sculptor/index.md","filePath":"note-sculptor/index.md","lastUpdated":0}'),p={name:"note-sculptor/index.md"},y=Object.assign(p,{setup(u){const{params:t,frontmatter:d}=s();return(m,_)=>{const e=a;return i(),r("div",null,[o(e,n(l(c(t))),null,16)])}}});export{x as __pageData,y as default}; diff --git a/assets/note-sculptor_index.md.bqwLgWuL.lean.js b/assets/note-sculptor_index.md.Ct1oIJ59.lean.js similarity index 93% rename from assets/note-sculptor_index.md.bqwLgWuL.lean.js rename to assets/note-sculptor_index.md.Ct1oIJ59.lean.js index 4546ca0e..77c98679 100644 --- a/assets/note-sculptor_index.md.bqwLgWuL.lean.js +++ b/assets/note-sculptor_index.md.Ct1oIJ59.lean.js @@ -1 +1 @@ -import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as o,Q as n,R as l,u as c,f as i}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"http://www.noisesculptor.com/","date_created":"2023-10-27T12:45:54.104Z","title":"Note Sculptor","slug":"note-sculptor","author":"Ruin Technology","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"iframe":false,"cover":"a01968d1-3f88-4522-9752-1c33d10d90d9","id":15,"sort":49,"clicks":129,"public":false,"is_new":false,"stats":[38]},"relativePath":"note-sculptor/index.md","filePath":"note-sculptor/index.md","lastUpdated":0}'),p={name:"note-sculptor/index.md"},y=Object.assign(p,{setup(u){const{params:t,frontmatter:d}=s();return(m,_)=>{const e=a;return i(),r("div",null,[o(e,n(l(c(t))),null,16)])}}});export{x as __pageData,y as default}; +import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as o,Q as n,R as l,u as c,f as i}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"http://www.noisesculptor.com/","date_created":"2023-10-27T12:45:54.104Z","title":"Note Sculptor","slug":"note-sculptor","author":"Ruin Technology","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"iframe":false,"cover":"a01968d1-3f88-4522-9752-1c33d10d90d9","id":15,"sort":50,"clicks":129,"public":false,"is_new":false,"stats":[38]},"relativePath":"note-sculptor/index.md","filePath":"note-sculptor/index.md","lastUpdated":0}'),p={name:"note-sculptor/index.md"},y=Object.assign(p,{setup(u){const{params:t,frontmatter:d}=s();return(m,_)=>{const e=a;return i(),r("div",null,[o(e,n(l(c(t))),null,16)])}}});export{x as __pageData,y as default}; diff --git a/assets/olif-sy-1-k_index.md.B8Nf7_YA.js b/assets/olif-sy-1-k_index.md.yXZ-Tx_6.js similarity index 94% rename from assets/olif-sy-1-k_index.md.B8Nf7_YA.js rename to assets/olif-sy-1-k_index.md.yXZ-Tx_6.js index 65515cd9..368d44ce 100644 --- a/assets/olif-sy-1-k_index.md.B8Nf7_YA.js +++ b/assets/olif-sy-1-k_index.md.yXZ-Tx_6.js @@ -1 +1 @@ -import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as r,h as s,D as i,Q as l,R as n,u as o,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://perso.numericable.fr/olivier.friker/synth/O3-synth%20V1.3.html","date_created":"2023-10-27T12:45:54.069Z","title":"OLIF SY1K","slug":"olif-sy-1-k","author":"Olivier Friker","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"iframe":true,"cover":"3b9a5e11-3de3-46fe-9cdc-e1668b152f31","id":13,"sort":48,"clicks":145,"public":false,"is_new":false,"stats":[37]},"relativePath":"olif-sy-1-k/index.md","filePath":"olif-sy-1-k/index.md","lastUpdated":0}'),p={name:"olif-sy-1-k/index.md"},b=Object.assign(p,{setup(f){const{params:e,frontmatter:m}=r();return(u,d)=>{const t=a;return c(),s("div",null,[i(t,l(n(o(e))),null,16)])}}});export{g as __pageData,b as default}; +import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as r,h as s,D as i,Q as l,R as n,u as o,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://perso.numericable.fr/olivier.friker/synth/O3-synth%20V1.3.html","date_created":"2023-10-27T12:45:54.069Z","title":"OLIF SY1K","slug":"olif-sy-1-k","author":"Olivier Friker","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"iframe":true,"cover":"3b9a5e11-3de3-46fe-9cdc-e1668b152f31","id":13,"sort":49,"clicks":145,"public":false,"is_new":false,"stats":[37]},"relativePath":"olif-sy-1-k/index.md","filePath":"olif-sy-1-k/index.md","lastUpdated":0}'),p={name:"olif-sy-1-k/index.md"},b=Object.assign(p,{setup(f){const{params:e,frontmatter:m}=r();return(u,d)=>{const t=a;return c(),s("div",null,[i(t,l(n(o(e))),null,16)])}}});export{g as __pageData,b as default}; diff --git a/assets/olif-sy-1-k_index.md.B8Nf7_YA.lean.js b/assets/olif-sy-1-k_index.md.yXZ-Tx_6.lean.js similarity index 94% rename from assets/olif-sy-1-k_index.md.B8Nf7_YA.lean.js rename to assets/olif-sy-1-k_index.md.yXZ-Tx_6.lean.js index 65515cd9..368d44ce 100644 --- a/assets/olif-sy-1-k_index.md.B8Nf7_YA.lean.js +++ b/assets/olif-sy-1-k_index.md.yXZ-Tx_6.lean.js @@ -1 +1 @@ -import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as r,h as s,D as i,Q as l,R as n,u as o,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://perso.numericable.fr/olivier.friker/synth/O3-synth%20V1.3.html","date_created":"2023-10-27T12:45:54.069Z","title":"OLIF SY1K","slug":"olif-sy-1-k","author":"Olivier Friker","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"iframe":true,"cover":"3b9a5e11-3de3-46fe-9cdc-e1668b152f31","id":13,"sort":48,"clicks":145,"public":false,"is_new":false,"stats":[37]},"relativePath":"olif-sy-1-k/index.md","filePath":"olif-sy-1-k/index.md","lastUpdated":0}'),p={name:"olif-sy-1-k/index.md"},b=Object.assign(p,{setup(f){const{params:e,frontmatter:m}=r();return(u,d)=>{const t=a;return c(),s("div",null,[i(t,l(n(o(e))),null,16)])}}});export{g as __pageData,b as default}; +import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as r,h as s,D as i,Q as l,R as n,u as o,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://perso.numericable.fr/olivier.friker/synth/O3-synth%20V1.3.html","date_created":"2023-10-27T12:45:54.069Z","title":"OLIF SY1K","slug":"olif-sy-1-k","author":"Olivier Friker","author_link":null,"description":null,"tags":null,"archive_link":null,"archive":false,"iframe":true,"cover":"3b9a5e11-3de3-46fe-9cdc-e1668b152f31","id":13,"sort":49,"clicks":145,"public":false,"is_new":false,"stats":[37]},"relativePath":"olif-sy-1-k/index.md","filePath":"olif-sy-1-k/index.md","lastUpdated":0}'),p={name:"olif-sy-1-k/index.md"},b=Object.assign(p,{setup(f){const{params:e,frontmatter:m}=r();return(u,d)=>{const t=a;return c(),s("div",null,[i(t,l(n(o(e))),null,16)])}}});export{g as __pageData,b as default}; diff --git a/assets/sound-trap_index.md.Bd-cTd-x.js b/assets/sound-trap_index.md.BD3xd7AA.js similarity index 94% rename from assets/sound-trap_index.md.Bd-cTd-x.js rename to assets/sound-trap_index.md.BD3xd7AA.js index 47a53c41..3ce949d5 100644 --- a/assets/sound-trap_index.md.Bd-cTd-x.js +++ b/assets/sound-trap_index.md.BD3xd7AA.js @@ -1 +1 @@ -import{_ as e}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as n,Q as o,R as p,u as i,f as d}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://www.soundtrap.com/","date_created":"2023-10-27T12:45:54.155Z","title":"Sound Trap","slug":"sound-trap","author":"Soundtrap","author_link":"https://www.soundtrap.com/about","description":null,"tags":["daw"],"archive_link":null,"archive":false,"iframe":false,"cover":"63ef832a-f7da-4536-851f-4964005a89f1","id":17,"sort":53,"clicks":124,"public":false,"is_new":false,"stats":[41]},"relativePath":"sound-trap/index.md","filePath":"sound-trap/index.md","lastUpdated":0}'),c={name:"sound-trap/index.md"},x=Object.assign(c,{setup(l){const{params:a,frontmatter:u}=s();return(m,_)=>{const t=e;return d(),r("div",null,[n(t,o(p(i(a))),null,16)])}}});export{k as __pageData,x as default}; +import{_ as e}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as n,Q as o,R as p,u as i,f as d}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://www.soundtrap.com/","date_created":"2023-10-27T12:45:54.155Z","title":"Sound Trap","slug":"sound-trap","author":"Soundtrap","author_link":"https://www.soundtrap.com/about","description":null,"tags":["daw"],"archive_link":null,"archive":false,"iframe":false,"cover":"63ef832a-f7da-4536-851f-4964005a89f1","id":17,"sort":54,"clicks":124,"public":false,"is_new":false,"stats":[41]},"relativePath":"sound-trap/index.md","filePath":"sound-trap/index.md","lastUpdated":0}'),c={name:"sound-trap/index.md"},x=Object.assign(c,{setup(l){const{params:a,frontmatter:u}=s();return(m,_)=>{const t=e;return d(),r("div",null,[n(t,o(p(i(a))),null,16)])}}});export{k as __pageData,x as default}; diff --git a/assets/sound-trap_index.md.Bd-cTd-x.lean.js b/assets/sound-trap_index.md.BD3xd7AA.lean.js similarity index 94% rename from assets/sound-trap_index.md.Bd-cTd-x.lean.js rename to assets/sound-trap_index.md.BD3xd7AA.lean.js index 47a53c41..3ce949d5 100644 --- a/assets/sound-trap_index.md.Bd-cTd-x.lean.js +++ b/assets/sound-trap_index.md.BD3xd7AA.lean.js @@ -1 +1 @@ -import{_ as e}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as n,Q as o,R as p,u as i,f as d}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://www.soundtrap.com/","date_created":"2023-10-27T12:45:54.155Z","title":"Sound Trap","slug":"sound-trap","author":"Soundtrap","author_link":"https://www.soundtrap.com/about","description":null,"tags":["daw"],"archive_link":null,"archive":false,"iframe":false,"cover":"63ef832a-f7da-4536-851f-4964005a89f1","id":17,"sort":53,"clicks":124,"public":false,"is_new":false,"stats":[41]},"relativePath":"sound-trap/index.md","filePath":"sound-trap/index.md","lastUpdated":0}'),c={name:"sound-trap/index.md"},x=Object.assign(c,{setup(l){const{params:a,frontmatter:u}=s();return(m,_)=>{const t=e;return d(),r("div",null,[n(t,o(p(i(a))),null,16)])}}});export{k as __pageData,x as default}; +import{_ as e}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as r,D as n,Q as o,R as p,u as i,f as d}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const k=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://www.soundtrap.com/","date_created":"2023-10-27T12:45:54.155Z","title":"Sound Trap","slug":"sound-trap","author":"Soundtrap","author_link":"https://www.soundtrap.com/about","description":null,"tags":["daw"],"archive_link":null,"archive":false,"iframe":false,"cover":"63ef832a-f7da-4536-851f-4964005a89f1","id":17,"sort":54,"clicks":124,"public":false,"is_new":false,"stats":[41]},"relativePath":"sound-trap/index.md","filePath":"sound-trap/index.md","lastUpdated":0}'),c={name:"sound-trap/index.md"},x=Object.assign(c,{setup(l){const{params:a,frontmatter:u}=s();return(m,_)=>{const t=e;return d(),r("div",null,[n(t,o(p(i(a))),null,16)])}}});export{k as __pageData,x as default}; diff --git a/assets/typedrummer_index.md.CL6Zrx1F.js b/assets/typedrummer_index.md.B_RnHU2v.js similarity index 94% rename from assets/typedrummer_index.md.CL6Zrx1F.js rename to assets/typedrummer_index.md.B_RnHU2v.js index 14b0f3ae..b4423ffd 100644 --- a/assets/typedrummer_index.md.CL6Zrx1F.js +++ b/assets/typedrummer_index.md.B_RnHU2v.js @@ -1 +1 @@ -import{_ as r}from"./chunks/SynthPage.CH5KmkC0.js";import{B as a,h as s,D as m,Q as o,R as n,u as p,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"http://typedrummer.com/","date_created":"2023-11-25T06:34:10.166Z","title":"Type Drummer","slug":"typedrummer","author":"Kyle Stetz","author_link":"http://kylestetz.com/","description":"Type your drum loops","tags":["sequencer","drums","Keyboard"],"archive_link":null,"archive":false,"iframe":true,"cover":"19454c82-7338-4144-9f1c-010c80a70a6e","id":48,"sort":54,"clicks":21,"public":false,"is_new":false,"stats":[42]},"relativePath":"typedrummer/index.md","filePath":"typedrummer/index.md","lastUpdated":0}'),i={name:"typedrummer/index.md"},x=Object.assign(i,{setup(l){const{params:e,frontmatter:u}=a();return(d,_)=>{const t=r;return c(),s("div",null,[m(t,o(n(p(e))),null,16)])}}});export{v as __pageData,x as default}; +import{_ as r}from"./chunks/SynthPage.CH5KmkC0.js";import{B as a,h as s,D as m,Q as o,R as n,u as p,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"http://typedrummer.com/","date_created":"2023-11-25T06:34:10.166Z","title":"Type Drummer","slug":"typedrummer","author":"Kyle Stetz","author_link":"http://kylestetz.com/","description":"Type your drum loops","tags":["sequencer","drums","Keyboard"],"archive_link":null,"archive":false,"iframe":true,"cover":"19454c82-7338-4144-9f1c-010c80a70a6e","id":48,"sort":55,"clicks":21,"public":false,"is_new":false,"stats":[42]},"relativePath":"typedrummer/index.md","filePath":"typedrummer/index.md","lastUpdated":0}'),i={name:"typedrummer/index.md"},x=Object.assign(i,{setup(l){const{params:e,frontmatter:u}=a();return(d,_)=>{const t=r;return c(),s("div",null,[m(t,o(n(p(e))),null,16)])}}});export{v as __pageData,x as default}; diff --git a/assets/typedrummer_index.md.CL6Zrx1F.lean.js b/assets/typedrummer_index.md.B_RnHU2v.lean.js similarity index 94% rename from assets/typedrummer_index.md.CL6Zrx1F.lean.js rename to assets/typedrummer_index.md.B_RnHU2v.lean.js index 14b0f3ae..b4423ffd 100644 --- a/assets/typedrummer_index.md.CL6Zrx1F.lean.js +++ b/assets/typedrummer_index.md.B_RnHU2v.lean.js @@ -1 +1 @@ -import{_ as r}from"./chunks/SynthPage.CH5KmkC0.js";import{B as a,h as s,D as m,Q as o,R as n,u as p,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"http://typedrummer.com/","date_created":"2023-11-25T06:34:10.166Z","title":"Type Drummer","slug":"typedrummer","author":"Kyle Stetz","author_link":"http://kylestetz.com/","description":"Type your drum loops","tags":["sequencer","drums","Keyboard"],"archive_link":null,"archive":false,"iframe":true,"cover":"19454c82-7338-4144-9f1c-010c80a70a6e","id":48,"sort":54,"clicks":21,"public":false,"is_new":false,"stats":[42]},"relativePath":"typedrummer/index.md","filePath":"typedrummer/index.md","lastUpdated":0}'),i={name:"typedrummer/index.md"},x=Object.assign(i,{setup(l){const{params:e,frontmatter:u}=a();return(d,_)=>{const t=r;return c(),s("div",null,[m(t,o(n(p(e))),null,16)])}}});export{v as __pageData,x as default}; +import{_ as r}from"./chunks/SynthPage.CH5KmkC0.js";import{B as a,h as s,D as m,Q as o,R as n,u as p,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"http://typedrummer.com/","date_created":"2023-11-25T06:34:10.166Z","title":"Type Drummer","slug":"typedrummer","author":"Kyle Stetz","author_link":"http://kylestetz.com/","description":"Type your drum loops","tags":["sequencer","drums","Keyboard"],"archive_link":null,"archive":false,"iframe":true,"cover":"19454c82-7338-4144-9f1c-010c80a70a6e","id":48,"sort":55,"clicks":21,"public":false,"is_new":false,"stats":[42]},"relativePath":"typedrummer/index.md","filePath":"typedrummer/index.md","lastUpdated":0}'),i={name:"typedrummer/index.md"},x=Object.assign(i,{setup(l){const{params:e,frontmatter:u}=a();return(d,_)=>{const t=r;return c(),s("div",null,[m(t,o(n(p(e))),null,16)])}}});export{v as __pageData,x as default}; diff --git a/assets/web-audio-synth-v2_index.md.DlrY1C9Q.js b/assets/web-audio-synth-v2_index.md.BGPWSY3f.js similarity index 94% rename from assets/web-audio-synth-v2_index.md.DlrY1C9Q.js rename to assets/web-audio-synth-v2_index.md.BGPWSY3f.js index 7026650b..55eca858 100644 --- a/assets/web-audio-synth-v2_index.md.DlrY1C9Q.js +++ b/assets/web-audio-synth-v2_index.md.BGPWSY3f.js @@ -1 +1 @@ -import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as n,D as r,Q as i,R as o,u as l,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://aikelab.net/websynthv2/","date_created":"2023-10-27T12:45:54.141Z","title":"WebAudioSynth V2","slug":"web-audio-synth-v2","author":"like","author_link":"https://github.com/aike/","description":null,"tags":null,"archive_link":null,"archive":false,"iframe":true,"cover":"ac668fba-7226-43dc-a91f-bd21a31446e5","id":16,"sort":51,"clicks":305,"public":false,"is_new":false,"stats":[39]},"relativePath":"web-audio-synth-v2/index.md","filePath":"web-audio-synth-v2/index.md","lastUpdated":0}'),d={name:"web-audio-synth-v2/index.md"},k=Object.assign(d,{setup(u){const{params:e,frontmatter:p}=s();return(m,_)=>{const t=a;return c(),n("div",null,[r(t,i(o(l(e))),null,16)])}}});export{g as __pageData,k as default}; +import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as n,D as r,Q as i,R as o,u as l,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://aikelab.net/websynthv2/","date_created":"2023-10-27T12:45:54.141Z","title":"WebAudioSynth V2","slug":"web-audio-synth-v2","author":"like","author_link":"https://github.com/aike/","description":null,"tags":null,"archive_link":null,"archive":false,"iframe":true,"cover":"ac668fba-7226-43dc-a91f-bd21a31446e5","id":16,"sort":52,"clicks":305,"public":false,"is_new":false,"stats":[39]},"relativePath":"web-audio-synth-v2/index.md","filePath":"web-audio-synth-v2/index.md","lastUpdated":0}'),d={name:"web-audio-synth-v2/index.md"},k=Object.assign(d,{setup(u){const{params:e,frontmatter:p}=s();return(m,_)=>{const t=a;return c(),n("div",null,[r(t,i(o(l(e))),null,16)])}}});export{g as __pageData,k as default}; diff --git a/assets/web-audio-synth-v2_index.md.DlrY1C9Q.lean.js b/assets/web-audio-synth-v2_index.md.BGPWSY3f.lean.js similarity index 94% rename from assets/web-audio-synth-v2_index.md.DlrY1C9Q.lean.js rename to assets/web-audio-synth-v2_index.md.BGPWSY3f.lean.js index 7026650b..55eca858 100644 --- a/assets/web-audio-synth-v2_index.md.DlrY1C9Q.lean.js +++ b/assets/web-audio-synth-v2_index.md.BGPWSY3f.lean.js @@ -1 +1 @@ -import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as n,D as r,Q as i,R as o,u as l,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://aikelab.net/websynthv2/","date_created":"2023-10-27T12:45:54.141Z","title":"WebAudioSynth V2","slug":"web-audio-synth-v2","author":"like","author_link":"https://github.com/aike/","description":null,"tags":null,"archive_link":null,"archive":false,"iframe":true,"cover":"ac668fba-7226-43dc-a91f-bd21a31446e5","id":16,"sort":51,"clicks":305,"public":false,"is_new":false,"stats":[39]},"relativePath":"web-audio-synth-v2/index.md","filePath":"web-audio-synth-v2/index.md","lastUpdated":0}'),d={name:"web-audio-synth-v2/index.md"},k=Object.assign(d,{setup(u){const{params:e,frontmatter:p}=s();return(m,_)=>{const t=a;return c(),n("div",null,[r(t,i(o(l(e))),null,16)])}}});export{g as __pageData,k as default}; +import{_ as a}from"./chunks/SynthPage.CH5KmkC0.js";import{B as s,h as n,D as r,Q as i,R as o,u as l,f as c}from"./chunks/framework.Ch2f3zJW.js";import"./chunks/useClicks.RkCdhX3B.js";import"./chunks/theme.DaoXcD6v.js";import"./chunks/index.CVGuM2cA.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{"dynamic":true,"page_type":"synth"},"headers":[],"params":{"url":"https://aikelab.net/websynthv2/","date_created":"2023-10-27T12:45:54.141Z","title":"WebAudioSynth V2","slug":"web-audio-synth-v2","author":"like","author_link":"https://github.com/aike/","description":null,"tags":null,"archive_link":null,"archive":false,"iframe":true,"cover":"ac668fba-7226-43dc-a91f-bd21a31446e5","id":16,"sort":52,"clicks":305,"public":false,"is_new":false,"stats":[39]},"relativePath":"web-audio-synth-v2/index.md","filePath":"web-audio-synth-v2/index.md","lastUpdated":0}'),d={name:"web-audio-synth-v2/index.md"},k=Object.assign(d,{setup(u){const{params:e,frontmatter:p}=s();return(m,_)=>{const t=a;return c(),n("div",null,[r(t,i(o(l(e))),null,16)])}}});export{g as __pageData,k as default}; diff --git a/auth.html b/auth.html index cc7a416e..372d22c9 100644 --- a/auth.html +++ b/auth.html @@ -42,7 +42,7 @@ - + \ No newline at end of file diff --git a/auth/accept.html b/auth/accept.html index 1236f091..6978c04d 100644 --- a/auth/accept.html +++ b/auth/accept.html @@ -42,7 +42,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone

ACCEPT INVITE PAGE

- + \ No newline at end of file diff --git a/auth/index.html b/auth/index.html index d40e8d8c..09a0689a 100644 --- a/auth/index.html +++ b/auth/index.html @@ -43,7 +43,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Login to your account
- + \ No newline at end of file diff --git a/auth/invite.html b/auth/invite.html index aa92c2c4..7035d20e 100644 --- a/auth/invite.html +++ b/auth/invite.html @@ -42,7 +42,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone

Invite a new user PAGE

- + \ No newline at end of file diff --git a/auth/logout.html b/auth/logout.html index 1518d90e..9620fbcf 100644 --- a/auth/logout.html +++ b/auth/logout.html @@ -42,7 +42,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone

LOGIN PAGE

- + \ No newline at end of file diff --git a/auth/reset.html b/auth/reset.html index 3ec83c15..7eb78ba4 100644 --- a/auth/reset.html +++ b/auth/reset.html @@ -42,7 +42,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone

PASSWORD RESET PAGE

- + \ No newline at end of file diff --git a/bassoon/index.html b/bassoon/index.html index 8cfd83ef..d844e0ce 100644 --- a/bassoon/index.html +++ b/bassoon/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Bassoon Tracker
by Steffest
FM
tracker
8-bit
low-fi
Browser-based old-school Amiga Music Tracker in plain old JavaScript.
- + \ No newline at end of file diff --git a/beepbox/index.html b/beepbox/index.html index ab729305..632b343a 100644 --- a/beepbox/index.html +++ b/beepbox/index.html @@ -57,7 +57,7 @@ All song data is contained in the URL at the top of your browser. When you make changes to the song, the URL is updated to reflect your changes. When you are satisfied with your song, just copy and paste the URL to save and share your song! BeepBox is a passion project, and will always be free to use.

BeepBox is developed by John Nesky.

BeepBox does not claim ownership over songs created with it, so original songs belong to their authors.

Neither John Nesky nor BeepBox assume responsibility for any copyrighted material played on BeepBox. No songs are ever received, recorded, or distributed by BeepBox's servers. All song data is contained in the URL after the hash (#) mark, and your song data will not leave your device unless you copy and share the URL. BeepBox does not collect, track, or share any user data.

- + \ No newline at end of file diff --git a/biliard/index.html b/biliard/index.html index 32833cf4..6691c56b 100644 --- a/biliard/index.html +++ b/biliard/index.html @@ -63,7 +63,7 @@ It owes a lot of inspiration to Brian Eno and Erik Satie (inventor of musique d'ameublement, or "furniture music"). Some may think the lack of pattern makes it not musical enough -- but this lets it be listened to —and watched— for a while without boredom. The webapp is made using plain JavaScript. (All SVG icons were made 'by hand'.) It uses Tone.js only for triggering piano samples. Beyond piano, it's MIDI-enabled and works well at slow speed with haunting, dark synth sounds. - + \ No newline at end of file diff --git a/binary-synth/index.html b/binary-synth/index.html index e0c88877..542e1031 100644 --- a/binary-synth/index.html +++ b/binary-synth/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Binary Synth
by Max Alyokhin
FX
MIDI
Educational
Audio synthesis from binary code of any file

A web-synthesizer that generates sound from the binary code of any files. It can synthesize sound directly in the browser, or be a generator of MIDI messages to external devices or DAWs, turning any file into a score. All the application code is written in Javascript and along with everything you need is packed into a single .html file of about 750kb. The synthesizer doesn't need internet, it can be downloaded and run locally on any device with a browser.

The application reads the file sequentially, and due to the high speed of reading and random deviation of reading duration, we can get quite unpredictable generation of timbre nuances, and at certain settings we can switch to granular synthesis.

- + \ No newline at end of file diff --git a/blokdust/index.html b/blokdust/index.html index f91939ac..f97b7a72 100644 --- a/blokdust/index.html +++ b/blokdust/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
creative
sequencer
BlokDust is a creative visual drag and drop music exploration tool. Developed in Brighton UK and released in 2016, BlokDust uses the Web Audio API and makes use of Tone.js as an audio framework.

Luke Twyman - project concept, design & Ul. whitevinyldesign.com @whitevinylUK Luke Phillips - audio development & musical interaction. femurdesign.com @lukephills Edward Silverton - client & server architecture & core development. edsilv.com @edsilv

- + \ No newline at end of file diff --git a/cardboard-synth/index.html b/cardboard-synth/index.html index b896ba22..0595e42f 100644 --- a/cardboard-synth/index.html +++ b/cardboard-synth/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/cardinal/index.html b/cardinal/index.html index 7eb29d89..3c1630ea 100644 --- a/cardinal/index.html +++ b/cardinal/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Modular
FM
Poly
Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web.

Cardinal is a free and open-source virtual modular synthesizer plugin, available in AudioUnit/CLAP/LV2/VST2/VST3 plugin formats and as a standalone app for FreeBSD, Linux, macOS, Windows and the Web. It is based on the popular VCV Rack but with a focus on being a fully self-contained plugin version.

More specifically, this is a DPF-based plugin wrapper around VCV Rack, using its code directly instead of forking the project, with the target of having a self-contained, fully free and open-source plugin version of Rack. See the why section below for the reasons Cardinal exists, also for frequently asked questions check this FAQ document.

Cardinal contains Rack, some 3rd-party modules and a few internal utilities all in a single binary. All "Core" modules from Rack have been replaced by Cardinal equivalents, simplified to better work for an audio plugin.

Cardinal does not load external modules and does not connect to the official Rack library/store. All VCV branding has been removed (to the best of our knowledge) in order to avoid any trademark issues.

Why

Cardinal was created first and foremost as a way to have Rack as a proper open-source audio plugin. A proper audio plugin should be self-contained as much as possible, as to not interfere with the DAW/Host. Loading external modules clearly goes against this idea. Not to mention being open-source, otherwise we are at the mercy of the wishes of a company for what we can and cannot do, which is not something Cardinal's authors wish to abide by.

A self-contained plugin can't be overstated, as DLL/shared-object symbol conflicts can trigger hard-to-debug crashes. While Rack tries to mitigate this as much as possible, crashes due to conflicting modules have already been seen in v2 builds. On the other side, Cardinal redefines class and function names as needed to avoid as many conflicts as possible.

Support for ARM and non-mainstream platforms (for example BSD) has also always been missing from the official Rack since the start. While we can patch the Rack free version to support these, same can't be done with Rack Pro with it being a closed-source product. The online library/store only supports a very specific set of platforms too, so non-supported platforms would need any 3rd-party modules to be manually compiled to make them usable.

Unhappiness with the audio threading behaviour of Rack also plays a role. Both audio and MIDI should be locked to the host audio thread as to minimize (or even altogether remove) latency and jitter. The use of separate threads for MIDI is bad design, one that has been corrected in DAWs and JACK-MIDI for several years... But Rack's use of RtMidi requires separate threading, so Cardinal does not use it.

- + \ No newline at end of file diff --git a/chrome-lab/index.html b/chrome-lab/index.html index 99be35da..713525f0 100644 --- a/chrome-lab/index.html +++ b/chrome-lab/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Chrome Music Lab
by Google
Educational
Keyboard
MIDI
Poly
Piano
Analysis
Mic
Visuals
Chrome Music Lab is a website that makes learning music more accessible through fun, hands-on experiments.

What can it be used for?

Many teachers have been using Chrome Music Lab as a tool in their classrooms to explore music and its connections to science, math, art, and more. They’ve been combining it with dance and live instruments. Here’s a collection of some uses we’ve found on Twitter.

Can I use it to make my own songs?

Yes. Check out the Song Maker experiment, which lets you make and share your own songs.

Do I need to make an account?

Nope. Just open any experiment and start playing.

How were these built?

All our experiments are all built with freely accessible web technology such as Web Audio API, WebMIDI, Tone.js, and more. These tools make it easier for coders to build new interactive music experiences. You can get the open-source code to lots of these experiments here on Github.

What devices do these work on?

You can play with these experiments across devices – phones, tablets, laptops – just by opening the site on a web browser such as Chrome.

- + \ No newline at end of file diff --git a/cover/cync.webp b/cover/cync.webp new file mode 100644 index 00000000..8375b143 Binary files /dev/null and b/cover/cync.webp differ diff --git a/cync/index.html b/cync/index.html new file mode 100644 index 00000000..0425f02c --- /dev/null +++ b/cync/index.html @@ -0,0 +1,51 @@ + + + + + + Web Synths Collection | Online web audio instruments playground + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Educational
sequencer
Percussion
Metronome
A cyclic drum machine for experimenting with non-quantized grooves.

Most drum sequencers are rectangular, organizing notes linearly in a quantized grid. However, there are many rhythms that are difficult or impossible to construct this way (such as traditional African, Indian, and Indonesian drumbeats). These rhythms rely on repeating patterns of different lengths, which can vary in arrangement and timing.

Representing these grooves as overlapping cycles reveals their underlying patterns. This approach can also be used to explore and experiment with polyrhythms, syncopation, and beat construction.

+ + + + \ No newline at end of file diff --git a/disco-computer/index.html b/disco-computer/index.html index 43cc6474..b4deae6f 100644 --- a/disco-computer/index.html +++ b/disco-computer/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Disco-computer
by Patrick Sawyer
polyphonic
fm
keyboard
- + \ No newline at end of file diff --git a/dotpiano/index.html b/dotpiano/index.html index 26b720bf..d65dd891 100644 --- a/dotpiano/index.html +++ b/dotpiano/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Dotpiano
by Alex Chen and Yotam Mann
polyphonic
midi
keyboard
Multiplayer
Dot Piano is an online musical instrument allowing users to play a digital piano using their computer keyboard. The interactive web app provides a simple and intuitive interface for creating and sharing music, making it accessible for both beginners and experienced musicians.
- + \ No newline at end of file diff --git a/dx7/index.html b/dx7/index.html index a811623a..3732c60e 100644 --- a/dx7/index.html +++ b/dx7/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
The DX7 Synth JS is an online emulator of the classic Yamaha DX7 synthesizer. This interactive web app replicates the iconic FM synthesis capabilities of the DX7, allowing users to create and manipulate sounds using various parameters such as algorithms, operators, and envelopes. The app supports MIDI devices and provides a user-friendly interface for sound design experimentation.
- + \ No newline at end of file diff --git a/elementary/index.html b/elementary/index.html index e75aaa51..09bad491 100644 --- a/elementary/index.html +++ b/elementary/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Elementary synth
by Chromatone
chromatone
polyphonic
keyboard
The Chromatone Elementary Synth is an interactive web-based synthesizer designed to provide a hands-on learning experience in sound synthesis. It features MIDI support and is built using the Elementary audio library. This synthesizer allows users to explore different synthesis techniques through a user-friendly interface, making it an excellent tool for both beginners and experienced musicians looking to experiment with sound design.
- + \ No newline at end of file diff --git a/granular/index.html b/granular/index.html index 915d643c..9096d394 100644 --- a/granular/index.html +++ b/granular/index.html @@ -14,7 +14,7 @@ - + @@ -44,8 +44,8 @@ -
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Multi-Touch Granular Sampler
by Zya
Granular
The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.
- +
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Multi-Touch Granular Sampler
by Zya
Granular
The demo is a granular synthesiser with multi-touch support which uses Web Audio API for sound sampling and Processing.js for drawing and interactivity.
+ \ No newline at end of file diff --git a/groove-pizza/index.html b/groove-pizza/index.html index 861e76a5..f8e2d0ff 100644 --- a/groove-pizza/index.html +++ b/groove-pizza/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
drums
sequencer
Educational
Groove Pizza is a circular rhythm app for creative music making and learning! It’s also a playful tool for creating grooves using math concepts like shapes, angles and patterns
- + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index c0be26a9..3e578e04 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"juno-106_index.md":"CttXbG04","video-sampler_index.md":"DGl1KLkc","muted-io_index.md":"D43Qeahz","auth_reset.md":"D4atnDLj","binary-synth_index.md":"DcZXnxhk","auth_invite.md":"DHhCTrJe","auth.md":"CB9uqvzU","touchme_index.md":"CWfXW_T_","chrome-lab_index.md":"B7y1x_CN","auth_accept.md":"R6ZamVlX","waveform_index.md":"DD7Ze0Le","theremin_index.md":"C5ujLYR9","midi-city_index.md":"DVcfycn_","dotpiano_index.md":"B10eDfL1","multiplayer-orchestra_index.md":"Bn1ZP0Le","ableton_index.md":"DczF5cM_","beepbox_index.md":"BFrttfbb","cardinal_index.md":"D4rwGYLn","touch-pianist_index.md":"Dg8XINaj","topos_index.md":"Bv0poAaW","soundfont_index.md":"BuDQHXOa","web-sid_index.md":"DrBhnxPl","nv-1_index.md":"Dlahz4z0","virtual-piano_index.md":"CK3tQKUU","online-sequencer_index.md":"DHtuOuyO","sample-stich_index.md":"C6HSWhk4","midi-driven-web-audio_index.md":"D5o01KIB","bassoon_index.md":"C_N9zORK","pixel-synth_index.md":"DRhl36ra","web-modular_index.md":"CzwIYdsp","elementary_index.md":"DdsqncAT","acid-machine-2_index.md":"C4UooCFo","dx7_index.md":"jYNa1wS1","auth_logout.md":"C7-RQ5eA","note-sculptor_index.md":"bqwLgWuL","cardboard-synth_index.md":"Csc5mlCx","meet-the-heisenberg_index.md":"m-zSoSCY","polyrhythm3_index.md":"5vdQPlmm","blokdust_index.md":"CvFAyX8H","biliard_index.md":"BhPgousJ","olif-sy-1-k_index.md":"B8Nf7_YA","mod-synth_index.md":"BWFZbtW3","granular_index.md":"D13yGB7o","isleoftune_index.md":"SXhjnOF6","web-audio-synth-v2_index.md":"DlrY1C9Q","sound-trap_index.md":"Bd-cTd-x","typedrummer_index.md":"CL6Zrx1F","tanguy-synth_index.md":"C2mPKMs8","neosynth_index.md":"Cl0lwbBL","groove-pizza_index.md":"B6khQlkH","disco-computer_index.md":"BozNG4Al","multiplayer-piano_index.md":"wlXWLto-","sound-box_index.md":"DMLjon_8","omni_index.md":"5QqUvQT_","sympathetic_index.md":"DLgRO4uJ","aqwertyon_index.md":"CZAWpKr8","readme.md":"0WYYXl0I","auth_index.md":"BVjxGfmo","roland50_index.md":"DNCo20Ad","microtonal_index.md":"BQr2kZLD","index.md":"MqSGm3kh"} +{"disco-computer_index.md":"BozNG4Al","auth_logout.md":"C7-RQ5eA","roland50_index.md":"DNCo20Ad","waveform_index.md":"DD7Ze0Le","elementary_index.md":"DdsqncAT","dx7_index.md":"jYNa1wS1","touch-pianist_index.md":"Dg8XINaj","binary-synth_index.md":"DcZXnxhk","topos_index.md":"Bv0poAaW","video-sampler_index.md":"DGl1KLkc","auth_reset.md":"D4atnDLj","auth.md":"CB9uqvzU","auth_accept.md":"R6ZamVlX","touchme_index.md":"CWfXW_T_","beepbox_index.md":"BFrttfbb","omni_index.md":"5QqUvQT_","juno-106_index.md":"CttXbG04","midi-city_index.md":"DVcfycn_","cardinal_index.md":"D4rwGYLn","aqwertyon_index.md":"CZAWpKr8","readme.md":"0WYYXl0I","muted-io_index.md":"D43Qeahz","soundfont_index.md":"BuDQHXOa","theremin_index.md":"C5ujLYR9","ableton_index.md":"DczF5cM_","microtonal_index.md":"BQr2kZLD","sympathetic_index.md":"DLgRO4uJ","virtual-piano_index.md":"CK3tQKUU","pixel-synth_index.md":"DRhl36ra","sound-box_index.md":"DMLjon_8","midi-driven-web-audio_index.md":"D5o01KIB","index.md":"CXVvb3vr","olif-sy-1-k_index.md":"yXZ-Tx_6","note-sculptor_index.md":"Ct1oIJ59","granular_index.md":"D7tQVXqv","web-audio-synth-v2_index.md":"BGPWSY3f","sound-trap_index.md":"BD3xd7AA","isleoftune_index.md":"BWgINDUK","multiplayer-piano_index.md":"wlXWLto-","typedrummer_index.md":"B_RnHU2v","meet-the-heisenberg_index.md":"m-zSoSCY","cardboard-synth_index.md":"Csc5mlCx","tanguy-synth_index.md":"C2mPKMs8","blokdust_index.md":"CvFAyX8H","polyrhythm3_index.md":"5vdQPlmm","dotpiano_index.md":"B10eDfL1","chrome-lab_index.md":"B7y1x_CN","biliard_index.md":"BhPgousJ","mod-synth_index.md":"BWFZbtW3","cync_index.md":"DHsYnHsR","auth_invite.md":"DHhCTrJe","web-modular_index.md":"CzwIYdsp","bassoon_index.md":"C_N9zORK","auth_index.md":"BVjxGfmo","nv-1_index.md":"Dlahz4z0","groove-pizza_index.md":"B6khQlkH","sample-stich_index.md":"C6HSWhk4","web-sid_index.md":"DrBhnxPl","multiplayer-orchestra_index.md":"Bn1ZP0Le","online-sequencer_index.md":"DHtuOuyO","neosynth_index.md":"Cl0lwbBL","acid-machine-2_index.md":"C4UooCFo"} diff --git a/index.html b/index.html index 5e475a9d..60b85e59 100644 --- a/index.html +++ b/index.html @@ -13,7 +13,7 @@ - + @@ -208,8 +208,11 @@ @lukephills Edward Silverton - client & server architecture & core development. edsilv.com -@edsilv" data-v-5f69066e>
Chromatone is an open source visual music language for education, research and performance. We develop a new universal way to communicate music. Playtronica is a digital playground that explores the possibilities of the material world through technology, creating gadgets that make the world musical. Together we share our passion for online music instruments.
0
web synths
0+
web musicians

Welcome to the community of web-based musicians!

- +@edsilv" data-v-5f69066e>
Chromatone is an open source visual music language for education, research and performance. We develop a new universal way to communicate music. Playtronica is a digital playground that explores the possibilities of the material world through technology, creating gadgets that make the world musical. Together we share our passion for online music instruments.
0
web synths
0+
web musicians

Welcome to the community of web-based musicians!

+ \ No newline at end of file diff --git a/isleoftune/index.html b/isleoftune/index.html index 42675d76..500e95e8 100644 --- a/isleoftune/index.html +++ b/isleoftune/index.html @@ -14,7 +14,7 @@ - + @@ -44,8 +44,8 @@ -
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Isle of Tune
by Jim Hall
game
sequencer
Draw an island, where everything plays music.
- +
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Isle of Tune
by Jim Hall
game
sequencer
Draw an island, where everything plays music.
+ \ No newline at end of file diff --git a/juno-106/index.html b/juno-106/index.html index f1f3be5a..e57bc7e1 100644 --- a/juno-106/index.html +++ b/juno-106/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
fm
midi
Online emulator of the classic Roland Juno-106 synthesizer. This interactive web app allows users to experiment with the iconic sounds of the Juno-106 directly from their browser. It features authentic recreations of the synth's controls and sound characteristics, making it a valuable tool for music enthusiasts and producers.
- + \ No newline at end of file diff --git a/meet-the-heisenberg/index.html b/meet-the-heisenberg/index.html index a999bfe9..7f068b86 100644 --- a/meet-the-heisenberg/index.html +++ b/meet-the-heisenberg/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/microtonal/index.html b/microtonal/index.html index e41b9167..181a345b 100644 --- a/microtonal/index.html +++ b/microtonal/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Websynths Microtonal
by WebSynths
The deepest internet synthesizer

WebSynths is a free resource for any musician with internet access! But, it is made possible by support from our patrons. Please consider helping if you can: patreon.com/WebSynths

  • You can use your QWERTY keyboard, mouse, mobile touch or MIDI keyboard to play the sounds.
  • You can change the tuning of the keys, or select a scale, by clicking the tuning button.
  • MIDI is a way to use an external physical instrument to play it. If you have a MIDI keyboard that you wish to use, hit the MIDI button to set it up.
  • If a note gets stuck, hit the panic button, it will stop all voices from playing.
  • You can use the arrows on your computer keyboard to scroll through the presets.

A simple explanation of Subtractive Synthesis:

  • Subtractive Synthesis works by taking one or more oscillators, setting the pitch of their oscillation (usually to the note of the key being pressed,) setting the shape of their oscillation to the desired timbre (Sine, Saw, Square or more complex shapes,) mixing them together and running them through a filter to change their EQ (usually filtering out the highest or lowest frequencies... this is why it is called "subtractive"), then running them through an envelope so the note can be heard on when a key is pressed down and is silenced when the key is released. In the case of WebSynths Microtonal, the sound is then sent through effects like delay, chorus and reverb and out to your speakers.
  • Oscillators are the voices. This synth has 3 of them in the left column. You can change the character of each voice by changing the parameters of them. The 'Shape' menu allows you to choose from different styles of voice for each oscillator. You can turn each voice on or off and mix them together.
  • The filter section applies equalization to your oscillators via the cutoff and emphasis controls. You can change the equalization filter type to 'low pass / high pass' and many more. You can use the LFOs and/or Envelopes to change how the filtration changes over time. An LFO is just a slow oscillator that is uses to automatically move a parameter over time.
  • The amplitude envelope changes how your sound is played, volume-wise, when you hit a note. For example, having a long release time will mean that once you let go of the note you are playing it will tail off until fading out. Having a slow attack will mean that your note will fade in instead of playing at full volume straight away.
  • The effects section allows you to add various effects to your overall sound. You can change the effects, mix them together and toggle them on or off too.
- + \ No newline at end of file diff --git a/midi-city/index.html b/midi-city/index.html index 9642af41..f2963b5f 100644 --- a/midi-city/index.html +++ b/midi-city/index.html @@ -51,7 +51,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
midi.city is a free online synthesizer, built by Jack. midi.city has over 128 different instruments including: Pianos, Saxophones, Drums, Trumpets, Synth Pads, Guitar, Violins and all other instruments defined in the General Midi specification.

midi.city has been created with the help of hundreds of different open-source projects and with contributions from many others.

  • Tone.js by Yotam Mann: the Web Audio API-based sound engine that implements a majority of nodes used in the audio graph. It powers many of the advanced features used such as Granular Synthesis, Reverb, and timing.
  • Groove Monkee: graciously provided the MIDI files that are used for the percussion loops.
  • Keenan Brand: created the midi.city logo and various icons used on the site.
  • Noun Project: various icons are used via a Pro license.
  • Google Material Design: various icons.
  • Compifont by Marcin Dziembor: the soundfont powering the samples and many the audio graph definitions, is originally . Several modifications have been made to adapt to midi.city and the Web Audio API.
- + \ No newline at end of file diff --git a/midi-driven-web-audio/index.html b/midi-driven-web-audio/index.html index f7b08546..af483dec 100644 --- a/midi-driven-web-audio/index.html +++ b/midi-driven-web-audio/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/mod-synth/index.html b/mod-synth/index.html index 76aba7d2..b13e27e1 100644 --- a/mod-synth/index.html +++ b/mod-synth/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/multiplayer-orchestra/index.html b/multiplayer-orchestra/index.html index 4d67a69e..2b123856 100644 --- a/multiplayer-orchestra/index.html +++ b/multiplayer-orchestra/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Multiplayer Orchestra
by Mutli_Orchestra
Poly
MIDI
Keyboard
Collaborative
Online
Play in real time with people from all around the world with more than 400 instruments.

Multiplayer Orchestra (https://www.multiplayer-orchestra.com/) is a web application that allows you to virtually collaborate with musicians from around the world in real-time. Here are some key features:

  • Large instrument selection: Choose from over 400 instruments, including pianos, guitars, drums, and orchestral instruments.
  • Real-time collaboration: Play music simultaneously with other users, creating a virtual orchestra.
  • Public and private rooms: Join public rooms to jam with others or create private rooms with a password for specific collaborations.
  • Contests: Participate in contests to win prizes like Amazon gift cards by recording solo performances.

It's important to note that the website seems to be in beta based on the version information listed (Beta 0.30).

- + \ No newline at end of file diff --git a/multiplayer-piano/index.html b/multiplayer-piano/index.html index e0e55885..440e8f28 100644 --- a/multiplayer-piano/index.html +++ b/multiplayer-piano/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Multiplayer Piano
by Brandon Lockaby
Piano
MIDI
Poly
Multiplayer
Online piano, that can be played by any site visitor together in a virtual room or alone.
- + \ No newline at end of file diff --git a/muted-io/index.html b/muted-io/index.html index 6c403f16..a3b8122e 100644 --- a/muted-io/index.html +++ b/muted-io/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
educational
midi
Muted.io offers a collection of interactive music theory tools designed for learning music online. These tools include a virtual piano, chord and scale references, a circle of fifths, tuners, and various visual aids to understand music theory concepts. The site is ideal for musicians looking to improve their knowledge and practice music in an engaging way.
- + \ No newline at end of file diff --git a/neosynth/index.html b/neosynth/index.html index ed688761..b19ea09d 100644 --- a/neosynth/index.html +++ b/neosynth/index.html @@ -50,7 +50,7 @@ Visual feedback with dynamic waveform display Responsive design for seamless use on desktop and mobile devices - + \ No newline at end of file diff --git a/note-sculptor/index.html b/note-sculptor/index.html index e743a810..40626a21 100644 --- a/note-sculptor/index.html +++ b/note-sculptor/index.html @@ -14,7 +14,7 @@ - + @@ -44,8 +44,8 @@ -
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Note Sculptor
by Ruin Technology
- +
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Note Sculptor
by Ruin Technology
+ \ No newline at end of file diff --git a/nv-1/index.html b/nv-1/index.html index 4a5bba74..8ce2d966 100644 --- a/nv-1/index.html +++ b/nv-1/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/olif-sy-1-k/index.html b/olif-sy-1-k/index.html index 0cd49054..4e3ff6c0 100644 --- a/olif-sy-1-k/index.html +++ b/olif-sy-1-k/index.html @@ -14,7 +14,7 @@ - + @@ -44,8 +44,8 @@ - - + + \ No newline at end of file diff --git a/omni/index.html b/omni/index.html index 8e146977..9b84361a 100644 --- a/omni/index.html +++ b/omni/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/online-sequencer/index.html b/online-sequencer/index.html index 568e88be..40a7502f 100644 --- a/online-sequencer/index.html +++ b/online-sequencer/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone

Online Sequencer is a web-based music sequencer that allows users to create music saved online, or on their computer. The piano roll is essential to the sequencer, which is on the left of the screen, with 72 notes from C2-B7 (labelled differently from a piano, C2 on the sequencer corresponds to C1 on a piano). In addition to several parameters which can be modified to change the sound of the music, additional functionality can be accessed via the console.

Upon opening the site, users can begin composing and "drawing" notes on the grid, with the default instrument being Electric Piano. By default, a sequence's time signature is set to 4/4, and the grid spacing is set to 1/4 (16 notes per measure). The note lengths can be adjusted by dragging the dark tab on the right of each note, and precision can be afforded by changing the 'Grid' option to other note divisions.

History

Online Sequencer was created on January 2, 2013 by Jacob Morgan during a break at Georgia Tech.

Beginning in the fall of 2013, accounts were available but were separate from the music portion of the site. They were only used in the forum and the website chat.

In 2015, accounts were linked to the main website and allowed songs to be saved under someone's username.

The World Update in 2018 added several new instruments and changed the landscape of sound design on the site. The "World Update Contest" was held for the update.

Starting in late 2020, OS began to receive a variety of updates which vastly improved the functionality of the site. These updates introduced features like custom grid sizes, automation with markers, extra reverb options, detune, and distortion. In 2021, the "Space Race" contest was held, as to see who could work best with the changes.

In late 2022, newer, higher-quality instruments were added. Some of the instruments, such as Electric Piano, Grand Piano, Violin, and Cello got an updated sustained version, while the original versions still exist under the "classic" designation.

Currently, the 10-Year Anniversary Contest is being held.

Features

Within the editor, numerous user interface features allow for various changes which will impact the individual sequence on that page.

Basic features

UI features include:

  • Tempo (10-999 BPM)
  • Measure count or Time count (MM: SS.ssss)
  • Time signature (2/4, 3/4, 4/4, 5/4)
  • Grid size (This correlates to note divisions; 1/16, 1/12, 1/8, 1/6, 1/4, 1/3, 1/2)
  • Auto Scroll (Fast, Smooth, Off; how the sequencer displays measures off-screen as a sequence plays)
  • Add an Audio Track (This won't be saved to the sequence but will play alongside it for ease of transcription)
  • Title input
  • Draw, select, and erase
  • Instrument dropdown, instrument options, and select instrument (selects all notes of the current instrument)
  • Select all, Cut, Copy, and Paste
  • Zoom options
  • Export options
  • Help
  • Fullscreen
  • Tooltips

Advanced features

Users can access more advanced features for use in their sequences by clicking the advanced tab on the instrument they wish to change. This menu contains options to change volume, panning, detune (-1200 to +1200), reverb, distortion, and an equalizer. This array lets users configure specific instruments to create specific sounds, and textures, or to accompany other instruments as a layer or development of the original sound.

OS also allows for commands to be entered in the browser console to manipulate different options in specific ways, such as setting custom to detune values (0-infinity), custom grid sizes, note divisions, and sequence ID amongst other things. These options bring OS closer to that of classic Digital Audio Workstations (DAWs) but are still limited in terms of accessibility and availability.

Browser and device support

Online Sequencer supports Chrome and other Chromium-based browsers, such as Microsoft Edge, Opera, and Brave. Firefox is also supported, but often with limited functionality. Safari and Internet Explorer are not supported, due to engine issues.

Other mobile browsers support sequence playback, but not editing. However, iOS users have the same problem with WebKit on macOS. However, unlike in macOS, all browsers (even Chromium-based browsers) use WebKit as the engine for iOS due to Apple prohibiting other engines for security reasons; iOS does not support Online Sequencer, other than chat and forums.

The website's user interface is formatted for proper use on desktops, but some pages such as the chat page, playlists, and forums should be formatted well on mobile devices.

- + \ No newline at end of file diff --git a/pixel-synth/index.html b/pixel-synth/index.html index c47c8bdc..c8054585 100644 --- a/pixel-synth/index.html +++ b/pixel-synth/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/polyrhythm3/index.html b/polyrhythm3/index.html index 42353e95..985429c2 100644 --- a/polyrhythm3/index.html +++ b/polyrhythm3/index.html @@ -60,7 +60,7 @@ - select the section that you are currently editing in the editor by clicking on it. - swap two sections by dragging one section over another. - + \ No newline at end of file diff --git a/roland50/index.html b/roland50/index.html index 5d5cfb1a..aec01194 100644 --- a/roland50/index.html +++ b/roland50/index.html @@ -48,7 +48,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Roland 50 Studio
by Yuri Suzuki
drum machine
SP404
TR808
TB303
Step sequencer
It's a professional sounding online musical interface, which records your masterpieces and allows you to share your creations through social media, messaging and also as a download. On top of the TR-808 drum machine and TB-303 bass synthesizer featured at the original 2020 release, now the sound of SH-101 synthesizer is added, and more sounds to come later in the year 2022, commemorating Roland's 50th anniversary.
- + \ No newline at end of file diff --git a/sample-stich/index.html b/sample-stich/index.html index c68b9f14..e68e5aac 100644 --- a/sample-stich/index.html +++ b/sample-stich/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 319a8075..c7e6c5de 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://synth.playtronica.com/README2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/accept2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/invite2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/logout2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/reset2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/dotpiano/https://synth.playtronica.com/waveform/https://synth.playtronica.com/juno-106/https://synth.playtronica.com/elementary/https://synth.playtronica.com/dx7/https://synth.playtronica.com/touchme/https://synth.playtronica.com/muted-io/https://synth.playtronica.com/soundfont/https://synth.playtronica.com/midi-city/https://synth.playtronica.com/aqwertyon/https://synth.playtronica.com/chrome-lab/https://synth.playtronica.com/topos/https://synth.playtronica.com/microtonal/https://synth.playtronica.com/sympathetic/https://synth.playtronica.com/ableton/https://synth.playtronica.com/theremin/https://synth.playtronica.com/cardinal/https://synth.playtronica.com/multiplayer-orchestra/https://synth.playtronica.com/touch-pianist/https://synth.playtronica.com/beepbox/https://synth.playtronica.com/roland50/https://synth.playtronica.com/disco-computer/https://synth.playtronica.com/video-sampler/https://synth.playtronica.com/binary-synth/https://synth.playtronica.com/bassoon/https://synth.playtronica.com/web-sid/https://synth.playtronica.com/nv-1/https://synth.playtronica.com/virtual-piano/https://synth.playtronica.com/online-sequencer/https://synth.playtronica.com/sound-box/https://synth.playtronica.com/omni/https://synth.playtronica.com/web-modular/https://synth.playtronica.com/acid-machine-2/https://synth.playtronica.com/groove-pizza/https://synth.playtronica.com/pixel-synth/https://synth.playtronica.com/neosynth/https://synth.playtronica.com/multiplayer-piano/https://synth.playtronica.com/midi-driven-web-audio/https://synth.playtronica.com/sample-stich/https://synth.playtronica.com/meet-the-heisenberg/https://synth.playtronica.com/cardboard-synth/https://synth.playtronica.com/polyrhythm3/https://synth.playtronica.com/tanguy-synth/https://synth.playtronica.com/blokdust/https://synth.playtronica.com/biliard/https://synth.playtronica.com/mod-synth/https://synth.playtronica.com/olif-sy-1-k/https://synth.playtronica.com/note-sculptor/https://synth.playtronica.com/granular/https://synth.playtronica.com/web-audio-synth-v2/https://synth.playtronica.com/isleoftune/https://synth.playtronica.com/sound-trap/https://synth.playtronica.com/typedrummer/ \ No newline at end of file +https://synth.playtronica.com/README2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/accept2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/invite2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/logout2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/auth/reset2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/2024-08-22T09:06:58.000Zhttps://synth.playtronica.com/dotpiano/https://synth.playtronica.com/waveform/https://synth.playtronica.com/juno-106/https://synth.playtronica.com/elementary/https://synth.playtronica.com/dx7/https://synth.playtronica.com/touchme/https://synth.playtronica.com/muted-io/https://synth.playtronica.com/soundfont/https://synth.playtronica.com/midi-city/https://synth.playtronica.com/aqwertyon/https://synth.playtronica.com/chrome-lab/https://synth.playtronica.com/topos/https://synth.playtronica.com/microtonal/https://synth.playtronica.com/sympathetic/https://synth.playtronica.com/ableton/https://synth.playtronica.com/theremin/https://synth.playtronica.com/cardinal/https://synth.playtronica.com/multiplayer-orchestra/https://synth.playtronica.com/touch-pianist/https://synth.playtronica.com/beepbox/https://synth.playtronica.com/roland50/https://synth.playtronica.com/disco-computer/https://synth.playtronica.com/video-sampler/https://synth.playtronica.com/binary-synth/https://synth.playtronica.com/bassoon/https://synth.playtronica.com/web-sid/https://synth.playtronica.com/nv-1/https://synth.playtronica.com/virtual-piano/https://synth.playtronica.com/online-sequencer/https://synth.playtronica.com/sound-box/https://synth.playtronica.com/omni/https://synth.playtronica.com/web-modular/https://synth.playtronica.com/acid-machine-2/https://synth.playtronica.com/groove-pizza/https://synth.playtronica.com/pixel-synth/https://synth.playtronica.com/neosynth/https://synth.playtronica.com/multiplayer-piano/https://synth.playtronica.com/midi-driven-web-audio/https://synth.playtronica.com/sample-stich/https://synth.playtronica.com/meet-the-heisenberg/https://synth.playtronica.com/cardboard-synth/https://synth.playtronica.com/polyrhythm3/https://synth.playtronica.com/tanguy-synth/https://synth.playtronica.com/blokdust/https://synth.playtronica.com/biliard/https://synth.playtronica.com/mod-synth/https://synth.playtronica.com/cync/https://synth.playtronica.com/olif-sy-1-k/https://synth.playtronica.com/note-sculptor/https://synth.playtronica.com/granular/https://synth.playtronica.com/web-audio-synth-v2/https://synth.playtronica.com/isleoftune/https://synth.playtronica.com/sound-trap/https://synth.playtronica.com/typedrummer/ \ No newline at end of file diff --git a/sound-box/index.html b/sound-box/index.html index 7e699216..ce69cad8 100644 --- a/sound-box/index.html +++ b/sound-box/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/sound-trap/index.html b/sound-trap/index.html index 33d929b9..21ea1a83 100644 --- a/sound-trap/index.html +++ b/sound-trap/index.html @@ -14,7 +14,7 @@ - + @@ -44,8 +44,8 @@ - - + + \ No newline at end of file diff --git a/soundfont/index.html b/soundfont/index.html index d7b22e91..5cb3488e 100644 --- a/soundfont/index.html +++ b/soundfont/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Soundfont Sampler Synth
by Chromatone
Poly
Keyboard
Sampler
MIDI
Free open source soundfont sampler online synthesizer. Very robust and hassle free way to play some straightforward sampled instruments like horns, xylophones and just piano sounds. Instantly playable instrument with about 90 presets out of the box.
- + \ No newline at end of file diff --git a/sw.js b/sw.js index 66e6b58d..91810c51 100644 --- a/sw.js +++ b/sw.js @@ -1 +1 @@ -if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()})).then((()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e})));self.define=(n,l)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let d={};const a=e=>i(e,r),o={module:{uri:r},exports:d,require:a};s[r]=Promise.all(n.map((e=>o[e]||a(e)))).then((e=>(l(...e),d)))}}define(["./workbox-f3e6b16a"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"404.html",revision:"10b8d522572198ac879c76fdd94c1235"},{url:"ableton/index.html",revision:"737e27a184aceea05895029df580324b"},{url:"acid-machine-2/index.html",revision:"2919a753a8bf40df0f0869c8345413bb"},{url:"aqwertyon/index.html",revision:"58539b9a8e36d440cdb1ca58ab5d64c3"},{url:"archive/synthescheisse/index.html",revision:"723c41e4238ba7b9cacdc5e4649a2dee"},{url:"archive/synthescheisse/SYNTHESCHEISSE_files/script.js",revision:"0f2f9610db3c70bf3ef8128066641621"},{url:"archive/synthescheisse/SYNTHESCHEISSE_files/style.css",revision:"4f047b48cc6fa6eac39a6b6026a8e350"},{url:"assets/ableton_index.md.DczF5cM_.js",revision:null},{url:"assets/ableton_index.md.DczF5cM_.lean.js",revision:null},{url:"assets/acid-machine-2_index.md.C4UooCFo.js",revision:null},{url:"assets/acid-machine-2_index.md.C4UooCFo.lean.js",revision:null},{url:"assets/app.Dm9Ji9U6.js",revision:null},{url:"assets/aqwertyon_index.md.CZAWpKr8.js",revision:null},{url:"assets/aqwertyon_index.md.CZAWpKr8.lean.js",revision:null},{url:"assets/auth_accept.md.R6ZamVlX.js",revision:null},{url:"assets/auth_accept.md.R6ZamVlX.lean.js",revision:null},{url:"assets/auth_index.md.BVjxGfmo.js",revision:null},{url:"assets/auth_index.md.BVjxGfmo.lean.js",revision:null},{url:"assets/auth_invite.md.DHhCTrJe.js",revision:null},{url:"assets/auth_invite.md.DHhCTrJe.lean.js",revision:null},{url:"assets/auth_logout.md.C7-RQ5eA.js",revision:null},{url:"assets/auth_logout.md.C7-RQ5eA.lean.js",revision:null},{url:"assets/auth_reset.md.D4atnDLj.js",revision:null},{url:"assets/auth_reset.md.D4atnDLj.lean.js",revision:null},{url:"assets/auth.md.CB9uqvzU.js",revision:null},{url:"assets/auth.md.CB9uqvzU.lean.js",revision:null},{url:"assets/bassoon_index.md.C_N9zORK.js",revision:null},{url:"assets/bassoon_index.md.C_N9zORK.lean.js",revision:null},{url:"assets/beepbox_index.md.BFrttfbb.js",revision:null},{url:"assets/beepbox_index.md.BFrttfbb.lean.js",revision:null},{url:"assets/biliard_index.md.BhPgousJ.js",revision:null},{url:"assets/biliard_index.md.BhPgousJ.lean.js",revision:null},{url:"assets/binary-synth_index.md.DcZXnxhk.js",revision:null},{url:"assets/binary-synth_index.md.DcZXnxhk.lean.js",revision:null},{url:"assets/blokdust_index.md.CvFAyX8H.js",revision:null},{url:"assets/blokdust_index.md.CvFAyX8H.lean.js",revision:null},{url:"assets/cardboard-synth_index.md.Csc5mlCx.js",revision:null},{url:"assets/cardboard-synth_index.md.Csc5mlCx.lean.js",revision:null},{url:"assets/cardinal_index.md.D4rwGYLn.js",revision:null},{url:"assets/cardinal_index.md.D4rwGYLn.lean.js",revision:null},{url:"assets/chrome-lab_index.md.B7y1x_CN.js",revision:null},{url:"assets/chrome-lab_index.md.B7y1x_CN.lean.js",revision:null},{url:"assets/chunks/framework.Ch2f3zJW.js",revision:null},{url:"assets/chunks/index.CVGuM2cA.js",revision:null},{url:"assets/chunks/SynthPage.CH5KmkC0.js",revision:null},{url:"assets/chunks/theme.DaoXcD6v.js",revision:null},{url:"assets/chunks/useClicks.RkCdhX3B.js",revision:null},{url:"assets/chunks/virtual_pwa-register.BritzuXO.js",revision:null},{url:"assets/chunks/workbox-window.prod.es5.D5gOYdM7.js",revision:null},{url:"assets/disco-computer_index.md.BozNG4Al.js",revision:null},{url:"assets/disco-computer_index.md.BozNG4Al.lean.js",revision:null},{url:"assets/dotpiano_index.md.B10eDfL1.js",revision:null},{url:"assets/dotpiano_index.md.B10eDfL1.lean.js",revision:null},{url:"assets/dx7_index.md.jYNa1wS1.js",revision:null},{url:"assets/dx7_index.md.jYNa1wS1.lean.js",revision:null},{url:"assets/elementary_index.md.DdsqncAT.js",revision:null},{url:"assets/elementary_index.md.DdsqncAT.lean.js",revision:null},{url:"assets/granular_index.md.D13yGB7o.js",revision:null},{url:"assets/granular_index.md.D13yGB7o.lean.js",revision:null},{url:"assets/groove-pizza_index.md.B6khQlkH.js",revision:null},{url:"assets/groove-pizza_index.md.B6khQlkH.lean.js",revision:null},{url:"assets/index.md.MqSGm3kh.js",revision:null},{url:"assets/index.md.MqSGm3kh.lean.js",revision:null},{url:"assets/isleoftune_index.md.SXhjnOF6.js",revision:null},{url:"assets/isleoftune_index.md.SXhjnOF6.lean.js",revision:null},{url:"assets/juno-106_index.md.CttXbG04.js",revision:null},{url:"assets/juno-106_index.md.CttXbG04.lean.js",revision:null},{url:"assets/meet-the-heisenberg_index.md.m-zSoSCY.js",revision:null},{url:"assets/meet-the-heisenberg_index.md.m-zSoSCY.lean.js",revision:null},{url:"assets/microtonal_index.md.BQr2kZLD.js",revision:null},{url:"assets/microtonal_index.md.BQr2kZLD.lean.js",revision:null},{url:"assets/midi-city_index.md.DVcfycn_.js",revision:null},{url:"assets/midi-city_index.md.DVcfycn_.lean.js",revision:null},{url:"assets/midi-driven-web-audio_index.md.D5o01KIB.js",revision:null},{url:"assets/midi-driven-web-audio_index.md.D5o01KIB.lean.js",revision:null},{url:"assets/mod-synth_index.md.BWFZbtW3.js",revision:null},{url:"assets/mod-synth_index.md.BWFZbtW3.lean.js",revision:null},{url:"assets/multiplayer-orchestra_index.md.Bn1ZP0Le.js",revision:null},{url:"assets/multiplayer-orchestra_index.md.Bn1ZP0Le.lean.js",revision:null},{url:"assets/multiplayer-piano_index.md.wlXWLto-.js",revision:null},{url:"assets/multiplayer-piano_index.md.wlXWLto-.lean.js",revision:null},{url:"assets/muted-io_index.md.D43Qeahz.js",revision:null},{url:"assets/muted-io_index.md.D43Qeahz.lean.js",revision:null},{url:"assets/neosynth_index.md.Cl0lwbBL.js",revision:null},{url:"assets/neosynth_index.md.Cl0lwbBL.lean.js",revision:null},{url:"assets/note-sculptor_index.md.bqwLgWuL.js",revision:null},{url:"assets/note-sculptor_index.md.bqwLgWuL.lean.js",revision:null},{url:"assets/nv-1_index.md.Dlahz4z0.js",revision:null},{url:"assets/nv-1_index.md.Dlahz4z0.lean.js",revision:null},{url:"assets/olif-sy-1-k_index.md.B8Nf7_YA.js",revision:null},{url:"assets/olif-sy-1-k_index.md.B8Nf7_YA.lean.js",revision:null},{url:"assets/omni_index.md.5QqUvQT_.js",revision:null},{url:"assets/omni_index.md.5QqUvQT_.lean.js",revision:null},{url:"assets/online-sequencer_index.md.DHtuOuyO.js",revision:null},{url:"assets/online-sequencer_index.md.DHtuOuyO.lean.js",revision:null},{url:"assets/pixel-synth_index.md.DRhl36ra.js",revision:null},{url:"assets/pixel-synth_index.md.DRhl36ra.lean.js",revision:null},{url:"assets/polyrhythm3_index.md.5vdQPlmm.js",revision:null},{url:"assets/polyrhythm3_index.md.5vdQPlmm.lean.js",revision:null},{url:"assets/README.md.0WYYXl0I.js",revision:null},{url:"assets/README.md.0WYYXl0I.lean.js",revision:null},{url:"assets/roland50_index.md.DNCo20Ad.js",revision:null},{url:"assets/roland50_index.md.DNCo20Ad.lean.js",revision:null},{url:"assets/sample-stich_index.md.C6HSWhk4.js",revision:null},{url:"assets/sample-stich_index.md.C6HSWhk4.lean.js",revision:null},{url:"assets/sound-box_index.md.DMLjon_8.js",revision:null},{url:"assets/sound-box_index.md.DMLjon_8.lean.js",revision:null},{url:"assets/sound-trap_index.md.Bd-cTd-x.js",revision:null},{url:"assets/sound-trap_index.md.Bd-cTd-x.lean.js",revision:null},{url:"assets/soundfont_index.md.BuDQHXOa.js",revision:null},{url:"assets/soundfont_index.md.BuDQHXOa.lean.js",revision:null},{url:"assets/style.CROUv_Sd.css",revision:null},{url:"assets/sympathetic_index.md.DLgRO4uJ.js",revision:null},{url:"assets/sympathetic_index.md.DLgRO4uJ.lean.js",revision:null},{url:"assets/tanguy-synth_index.md.C2mPKMs8.js",revision:null},{url:"assets/tanguy-synth_index.md.C2mPKMs8.lean.js",revision:null},{url:"assets/theremin_index.md.C5ujLYR9.js",revision:null},{url:"assets/theremin_index.md.C5ujLYR9.lean.js",revision:null},{url:"assets/topos_index.md.Bv0poAaW.js",revision:null},{url:"assets/topos_index.md.Bv0poAaW.lean.js",revision:null},{url:"assets/touch-pianist_index.md.Dg8XINaj.js",revision:null},{url:"assets/touch-pianist_index.md.Dg8XINaj.lean.js",revision:null},{url:"assets/touchme_index.md.CWfXW_T_.js",revision:null},{url:"assets/touchme_index.md.CWfXW_T_.lean.js",revision:null},{url:"assets/typedrummer_index.md.CL6Zrx1F.js",revision:null},{url:"assets/typedrummer_index.md.CL6Zrx1F.lean.js",revision:null},{url:"assets/video-sampler_index.md.DGl1KLkc.js",revision:null},{url:"assets/video-sampler_index.md.DGl1KLkc.lean.js",revision:null},{url:"assets/virtual-piano_index.md.CK3tQKUU.js",revision:null},{url:"assets/virtual-piano_index.md.CK3tQKUU.lean.js",revision:null},{url:"assets/waveform_index.md.DD7Ze0Le.js",revision:null},{url:"assets/waveform_index.md.DD7Ze0Le.lean.js",revision:null},{url:"assets/web-audio-synth-v2_index.md.DlrY1C9Q.js",revision:null},{url:"assets/web-audio-synth-v2_index.md.DlrY1C9Q.lean.js",revision:null},{url:"assets/web-modular_index.md.CzwIYdsp.js",revision:null},{url:"assets/web-modular_index.md.CzwIYdsp.lean.js",revision:null},{url:"assets/web-sid_index.md.DrBhnxPl.js",revision:null},{url:"assets/web-sid_index.md.DrBhnxPl.lean.js",revision:null},{url:"auth.html",revision:"00677943b5fd48af15717a2605fd8189"},{url:"auth/accept.html",revision:"522c2aefa4794fa49ca247b241a7a72c"},{url:"auth/index.html",revision:"4648c5980e7181144c2b92a93db64172"},{url:"auth/invite.html",revision:"1bd8a69add48aae491b498f285c8801f"},{url:"auth/logout.html",revision:"1f63eb83c712c672fa2235c5f6064fc2"},{url:"auth/reset.html",revision:"e81ad6adba9752a02e499b17faae96dc"},{url:"bassoon/index.html",revision:"005d5fef9586e3d5d5230971aa5e8881"},{url:"beepbox/index.html",revision:"22a8b7d5f545b23a3e0181e36a64b652"},{url:"biliard/index.html",revision:"99db7630128d8ca7643c54f64a4ab2c2"},{url:"binary-synth/index.html",revision:"97cf3fb2837856f3272f2e276de0dbe7"},{url:"blokdust/index.html",revision:"828d5ebca0f56903aee0a8a82cdde14e"},{url:"cardboard-synth/index.html",revision:"191b04d2a1d2108f50d71c352ac24809"},{url:"cardinal/index.html",revision:"a134965dac2772e99daa40cd785f21e1"},{url:"chrome-lab/index.html",revision:"e70c16aa98635d7e21958e96b8b5369b"},{url:"click-logo.svg",revision:"f15e71cb394926c5f8c08f64186d2d49"},{url:"cover/ableton.webp",revision:"ff3a22aa28084b93c0aad2e6569657e0"},{url:"cover/acid-machine-2.webp",revision:"29fcf6a6ce374dfc8391fe6544b5f08e"},{url:"cover/aqwertyon.webp",revision:"afab8d4bdeccf669a03617c5ce738fb7"},{url:"cover/bassoon.webp",revision:"68d4a434861c2f294623fe762e694ee6"},{url:"cover/beepbox.webp",revision:"e4f93e998951d212c5b678b425769537"},{url:"cover/biliard.webp",revision:"de153e95a72f67e8e2bc5b123ac1d50b"},{url:"cover/binary-synth.webp",revision:"30cff76fd2b6a32053a76622a54f1108"},{url:"cover/blokdust.webp",revision:"0613b83a920d709a268d9de2284a0354"},{url:"cover/cardboard-synth.webp",revision:"f93526fee97f6674940ca367cb841b58"},{url:"cover/cardinal.webp",revision:"1cf71dbecd04b9046aa68389b5a12dd0"},{url:"cover/chrome-lab.webp",revision:"d18ee6ca84364e4d175efa054a736fd9"},{url:"cover/disco-computer.webp",revision:"5dd18857caabf0cf1320d82537daa7d1"},{url:"cover/dotpiano.webp",revision:"c08549fc8ca38e2f4b6d1853b947ad3f"},{url:"cover/dx7.webp",revision:"a401e52d21c6d5e44240645b09d9f9c6"},{url:"cover/elementary.webp",revision:"6368b81c56ee656371254dd87bb421e8"},{url:"cover/granular.webp",revision:"b95f2781eb6c89580991d829f6c6dfa6"},{url:"cover/groove-pizza.webp",revision:"ace880a23d7a39082a02a011d15ef278"},{url:"cover/isleoftune.webp",revision:"4aa136591dee0383df4d60b551bb94d8"},{url:"cover/juno-106.webp",revision:"08c31646032ced1d4c48d295b9c0ca94"},{url:"cover/meet-the-heisenberg.webp",revision:"52318d42eb06e04073f209dd1f1e5c41"},{url:"cover/microtonal.webp",revision:"d4d2b2796350e9cd786b3b68e1b225ff"},{url:"cover/midi-city.webp",revision:"fecb8bf989aba90045bd17cfd0748576"},{url:"cover/midi-driven-web-audio.webp",revision:"897bbc54b77f1e0905ad454063a13189"},{url:"cover/mod-synth.webp",revision:"7d47cac35b80190a3bce223d47756ae0"},{url:"cover/multiplayer-orchestra.webp",revision:"de82211bb0cf8997437f9b263e1dd1b2"},{url:"cover/multiplayer-piano.webp",revision:"70e6eba35fc631046c89637286b57f29"},{url:"cover/muted-io.webp",revision:"d03f4b77e5d8cddc8adc45c0a67abd50"},{url:"cover/neosynth.webp",revision:"2e2d602c48a8d80d8a8bdb8000065807"},{url:"cover/note-sculptor.webp",revision:"67c78a7120358915332faa419a2e1f45"},{url:"cover/nv-1.webp",revision:"4c286383b8df97fae10976500d5456a9"},{url:"cover/olif-sy-1-k.webp",revision:"829a8b74f7a628fa5f319e39077687a2"},{url:"cover/omni.webp",revision:"413b121431478a3ea4aa3b3e26e19bc7"},{url:"cover/online-sequencer.webp",revision:"a5f83fc41f430f8ff6ddf9f45fbc57eb"},{url:"cover/pixel-synth.webp",revision:"f6457eb849297fbd07d5172a39573b4e"},{url:"cover/polyrhythm3.webp",revision:"3d8c7702e8181d85cb1875a1a8e51e0c"},{url:"cover/roland50.webp",revision:"1a9fe1ddb1dcd07cb42cd52567ca7173"},{url:"cover/sample-stich.webp",revision:"2019a72c6963aebca1eb7e73fc5d8737"},{url:"cover/sound-box.webp",revision:"9bc7cf72ec4b983786028af651bfb97a"},{url:"cover/sound-trap.webp",revision:"424d3e69d2cabbbd222fa63e03333693"},{url:"cover/soundfont.webp",revision:"c534fa79bd1c6f0c93244189778d400b"},{url:"cover/sympathetic.webp",revision:"3b98478cb9627398e816503b41ad91c8"},{url:"cover/tanguy-synth.webp",revision:"7dc2b96bdd88af09c835d1b3f6db0249"},{url:"cover/theremin.webp",revision:"fc256e4ea00b9e7d39fa76ef97677a55"},{url:"cover/topos.webp",revision:"43b64de4250b21fed95712b9bb5d0ad6"},{url:"cover/touch-pianist.webp",revision:"75cf9432de7a642fe1c71f3dab956857"},{url:"cover/touchme.webp",revision:"c64942d3fbdba893f09b720dac8ecf2f"},{url:"cover/typedrummer.webp",revision:"8d7be4a5046e7335cf6b91caea120e43"},{url:"cover/video-sampler.webp",revision:"d4b4af73791843f35f796824011cd4aa"},{url:"cover/virtual-piano.webp",revision:"ef9aacb9a39f6908c9d326c7ce588a8a"},{url:"cover/waveform.webp",revision:"fafd71aa1fb141d388d2df6d2e89b06e"},{url:"cover/web-audio-synth-v2.webp",revision:"14206290388166cf6cb7c4023c8b0503"},{url:"cover/web-modular.webp",revision:"ba22a1a127d07da1f494af6b4b1960bf"},{url:"cover/web-sid.webp",revision:"428998a4856ef3aff09ddd0e0d34bc7d"},{url:"disco-computer/index.html",revision:"fa4b4530474cb98c04280f3d1941da93"},{url:"dotpiano/index.html",revision:"d5059e7b7c0ce834db168f4e72951bb0"},{url:"dx7/index.html",revision:"62f7a12722b85052ac1a4df89a70bafc"},{url:"elementary/index.html",revision:"04309f2e02d869f2856d07aa78087238"},{url:"granular/index.html",revision:"84a72568a5ca9cce53c4bc1276a3dc20"},{url:"groove-pizza/index.html",revision:"dec10d8fdf95fef6d4caffb2f8855dc8"},{url:"icon.png",revision:"eb8e7369ba634f3bd1a96d889be50f7d"},{url:"index.html",revision:"67d120cb946157caffb0ea11f4f642b3"},{url:"isleoftune/index.html",revision:"a6727a6cf9cf18ae1ddbca8b94002064"},{url:"juno-106/index.html",revision:"f33ee693263cae165a1fee2a678cc9af"},{url:"line.svg",revision:"4866b853d0c5c97e9f654fa32580076a"},{url:"logo.svg",revision:"134c144f78e462c4672fc8f64e69df9e"},{url:"meet-the-heisenberg/index.html",revision:"b40d17b3e24a17e829945f943c0b3e12"},{url:"microtonal/index.html",revision:"b2f9466eb9817c6af9aad006918d8c8c"},{url:"midi-city/index.html",revision:"1e98178a32d1b72c8bbe19ff8ebaeae5"},{url:"midi-driven-web-audio/index.html",revision:"f17ac88244e9067de68d73e3bb21369a"},{url:"mod-synth/index.html",revision:"7dc7c9049e02a9282fcf51747ae7587e"},{url:"multiplayer-orchestra/index.html",revision:"a9f5a9b1af0475d1b4d39fefa39d14cf"},{url:"multiplayer-piano/index.html",revision:"975b8fe8b8c55c26593ed452cc6a0bff"},{url:"muted-io/index.html",revision:"5f016475a46761ca9bc8ca8a010ee0a3"},{url:"neosynth/index.html",revision:"bf49e9f5b9b9921e672c96a8648a28d4"},{url:"note-sculptor/index.html",revision:"20ce9c70d1a78d67725ea13fad988439"},{url:"nv-1/index.html",revision:"862ec2018585db3f74596f640260531f"},{url:"olif-sy-1-k/index.html",revision:"321b5ae1d82f54900347b857071bd006"},{url:"omni/index.html",revision:"12922cd4f5d7178b2825344f75efb33f"},{url:"online-sequencer/index.html",revision:"0f5d25568ba5a64e5a9f47a2e6f59cb2"},{url:"pixel-synth/index.html",revision:"3428417b14614bfbaafa6da92609d77c"},{url:"pl-logo.webp",revision:"9f0d66adf550fa40e8b2e03ff997eb34"},{url:"polyrhythm3/index.html",revision:"b9405ff52ed17ab0ced6673835055d46"},{url:"README.html",revision:"fd481300efe4ddcddf1dd7a37cd42a93"},{url:"roland50/index.html",revision:"a4faff4dd06cd4ba383cc8de8edc9962"},{url:"sample-stich/index.html",revision:"80a708b29f008beb03f04f063bd35c8a"},{url:"sound-box/index.html",revision:"d3e4c8639562dc7073af70baa710d53c"},{url:"sound-trap/index.html",revision:"c37b3712b080aa83fe20b93e119ed367"},{url:"soundfont/index.html",revision:"626b00d228cbd8772f432b6c1326c3c7"},{url:"sympathetic/index.html",revision:"822f497dd0d4dbc4aab3b56ff45e0f65"},{url:"tanguy-synth/index.html",revision:"5781d8105249fbcfeb257248cfc7bffa"},{url:"theremin/index.html",revision:"60dc7615c111e94321b73508ffe3362e"},{url:"topos/index.html",revision:"a2ffaa8ffd2e4d79ffb09346623c9bf7"},{url:"touch-pianist/index.html",revision:"8252f41af9944e561e6372764789b458"},{url:"touchme/index.html",revision:"18051bf9159affbfce0363d70fdb58a7"},{url:"typedrummer/index.html",revision:"530c8e2c1ab18bf2b617dc2a30919b97"},{url:"video-sampler/index.html",revision:"a5714ea30d7856287e6434f2582ddd3b"},{url:"virtual-piano/index.html",revision:"4c70117a60b5a2d7ff489c966659f25f"},{url:"waveform/index.html",revision:"290409d4ea378be1294be6058ba1dcf7"},{url:"web-audio-synth-v2/index.html",revision:"4845cbbf4ddf8ba804fb3eb8aa1fcc01"},{url:"web-modular/index.html",revision:"5dcbf9b35d59bfcd4a7c216b727440df"},{url:"web-sid/index.html",revision:"dba48c1d400f0ec1d1826c09cf7d3b85"},{url:"logo.svg",revision:"134c144f78e462c4672fc8f64e69df9e"},{url:"icon.png",revision:"eb8e7369ba634f3bd1a96d889be50f7d"},{url:"manifest.webmanifest",revision:"aee00a3fc5429948aa59c7d1c9d825cc"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))})); +if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()})).then((()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e})));self.define=(n,l)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let d={};const a=e=>i(e,r),o={module:{uri:r},exports:d,require:a};s[r]=Promise.all(n.map((e=>o[e]||a(e)))).then((e=>(l(...e),d)))}}define(["./workbox-f3e6b16a"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"404.html",revision:"58ced05613190ab6794eeba13cc01f5b"},{url:"ableton/index.html",revision:"5dca92fd52474534ef520c10acfc674c"},{url:"acid-machine-2/index.html",revision:"e321763ef72fcf10ec6af8bb433d4fcc"},{url:"aqwertyon/index.html",revision:"9624fe00566727062590bbffcf5f4c4e"},{url:"archive/synthescheisse/index.html",revision:"723c41e4238ba7b9cacdc5e4649a2dee"},{url:"archive/synthescheisse/SYNTHESCHEISSE_files/script.js",revision:"0f2f9610db3c70bf3ef8128066641621"},{url:"archive/synthescheisse/SYNTHESCHEISSE_files/style.css",revision:"4f047b48cc6fa6eac39a6b6026a8e350"},{url:"assets/ableton_index.md.DczF5cM_.js",revision:null},{url:"assets/ableton_index.md.DczF5cM_.lean.js",revision:null},{url:"assets/acid-machine-2_index.md.C4UooCFo.js",revision:null},{url:"assets/acid-machine-2_index.md.C4UooCFo.lean.js",revision:null},{url:"assets/app.Dm9Ji9U6.js",revision:null},{url:"assets/aqwertyon_index.md.CZAWpKr8.js",revision:null},{url:"assets/aqwertyon_index.md.CZAWpKr8.lean.js",revision:null},{url:"assets/auth_accept.md.R6ZamVlX.js",revision:null},{url:"assets/auth_accept.md.R6ZamVlX.lean.js",revision:null},{url:"assets/auth_index.md.BVjxGfmo.js",revision:null},{url:"assets/auth_index.md.BVjxGfmo.lean.js",revision:null},{url:"assets/auth_invite.md.DHhCTrJe.js",revision:null},{url:"assets/auth_invite.md.DHhCTrJe.lean.js",revision:null},{url:"assets/auth_logout.md.C7-RQ5eA.js",revision:null},{url:"assets/auth_logout.md.C7-RQ5eA.lean.js",revision:null},{url:"assets/auth_reset.md.D4atnDLj.js",revision:null},{url:"assets/auth_reset.md.D4atnDLj.lean.js",revision:null},{url:"assets/auth.md.CB9uqvzU.js",revision:null},{url:"assets/auth.md.CB9uqvzU.lean.js",revision:null},{url:"assets/bassoon_index.md.C_N9zORK.js",revision:null},{url:"assets/bassoon_index.md.C_N9zORK.lean.js",revision:null},{url:"assets/beepbox_index.md.BFrttfbb.js",revision:null},{url:"assets/beepbox_index.md.BFrttfbb.lean.js",revision:null},{url:"assets/biliard_index.md.BhPgousJ.js",revision:null},{url:"assets/biliard_index.md.BhPgousJ.lean.js",revision:null},{url:"assets/binary-synth_index.md.DcZXnxhk.js",revision:null},{url:"assets/binary-synth_index.md.DcZXnxhk.lean.js",revision:null},{url:"assets/blokdust_index.md.CvFAyX8H.js",revision:null},{url:"assets/blokdust_index.md.CvFAyX8H.lean.js",revision:null},{url:"assets/cardboard-synth_index.md.Csc5mlCx.js",revision:null},{url:"assets/cardboard-synth_index.md.Csc5mlCx.lean.js",revision:null},{url:"assets/cardinal_index.md.D4rwGYLn.js",revision:null},{url:"assets/cardinal_index.md.D4rwGYLn.lean.js",revision:null},{url:"assets/chrome-lab_index.md.B7y1x_CN.js",revision:null},{url:"assets/chrome-lab_index.md.B7y1x_CN.lean.js",revision:null},{url:"assets/chunks/framework.Ch2f3zJW.js",revision:null},{url:"assets/chunks/index.CVGuM2cA.js",revision:null},{url:"assets/chunks/SynthPage.CH5KmkC0.js",revision:null},{url:"assets/chunks/theme.DaoXcD6v.js",revision:null},{url:"assets/chunks/useClicks.RkCdhX3B.js",revision:null},{url:"assets/chunks/virtual_pwa-register.BritzuXO.js",revision:null},{url:"assets/chunks/workbox-window.prod.es5.D5gOYdM7.js",revision:null},{url:"assets/cync_index.md.DHsYnHsR.js",revision:null},{url:"assets/cync_index.md.DHsYnHsR.lean.js",revision:null},{url:"assets/disco-computer_index.md.BozNG4Al.js",revision:null},{url:"assets/disco-computer_index.md.BozNG4Al.lean.js",revision:null},{url:"assets/dotpiano_index.md.B10eDfL1.js",revision:null},{url:"assets/dotpiano_index.md.B10eDfL1.lean.js",revision:null},{url:"assets/dx7_index.md.jYNa1wS1.js",revision:null},{url:"assets/dx7_index.md.jYNa1wS1.lean.js",revision:null},{url:"assets/elementary_index.md.DdsqncAT.js",revision:null},{url:"assets/elementary_index.md.DdsqncAT.lean.js",revision:null},{url:"assets/granular_index.md.D7tQVXqv.js",revision:null},{url:"assets/granular_index.md.D7tQVXqv.lean.js",revision:null},{url:"assets/groove-pizza_index.md.B6khQlkH.js",revision:null},{url:"assets/groove-pizza_index.md.B6khQlkH.lean.js",revision:null},{url:"assets/index.md.CXVvb3vr.js",revision:null},{url:"assets/index.md.CXVvb3vr.lean.js",revision:null},{url:"assets/isleoftune_index.md.BWgINDUK.js",revision:null},{url:"assets/isleoftune_index.md.BWgINDUK.lean.js",revision:null},{url:"assets/juno-106_index.md.CttXbG04.js",revision:null},{url:"assets/juno-106_index.md.CttXbG04.lean.js",revision:null},{url:"assets/meet-the-heisenberg_index.md.m-zSoSCY.js",revision:null},{url:"assets/meet-the-heisenberg_index.md.m-zSoSCY.lean.js",revision:null},{url:"assets/microtonal_index.md.BQr2kZLD.js",revision:null},{url:"assets/microtonal_index.md.BQr2kZLD.lean.js",revision:null},{url:"assets/midi-city_index.md.DVcfycn_.js",revision:null},{url:"assets/midi-city_index.md.DVcfycn_.lean.js",revision:null},{url:"assets/midi-driven-web-audio_index.md.D5o01KIB.js",revision:null},{url:"assets/midi-driven-web-audio_index.md.D5o01KIB.lean.js",revision:null},{url:"assets/mod-synth_index.md.BWFZbtW3.js",revision:null},{url:"assets/mod-synth_index.md.BWFZbtW3.lean.js",revision:null},{url:"assets/multiplayer-orchestra_index.md.Bn1ZP0Le.js",revision:null},{url:"assets/multiplayer-orchestra_index.md.Bn1ZP0Le.lean.js",revision:null},{url:"assets/multiplayer-piano_index.md.wlXWLto-.js",revision:null},{url:"assets/multiplayer-piano_index.md.wlXWLto-.lean.js",revision:null},{url:"assets/muted-io_index.md.D43Qeahz.js",revision:null},{url:"assets/muted-io_index.md.D43Qeahz.lean.js",revision:null},{url:"assets/neosynth_index.md.Cl0lwbBL.js",revision:null},{url:"assets/neosynth_index.md.Cl0lwbBL.lean.js",revision:null},{url:"assets/note-sculptor_index.md.Ct1oIJ59.js",revision:null},{url:"assets/note-sculptor_index.md.Ct1oIJ59.lean.js",revision:null},{url:"assets/nv-1_index.md.Dlahz4z0.js",revision:null},{url:"assets/nv-1_index.md.Dlahz4z0.lean.js",revision:null},{url:"assets/olif-sy-1-k_index.md.yXZ-Tx_6.js",revision:null},{url:"assets/olif-sy-1-k_index.md.yXZ-Tx_6.lean.js",revision:null},{url:"assets/omni_index.md.5QqUvQT_.js",revision:null},{url:"assets/omni_index.md.5QqUvQT_.lean.js",revision:null},{url:"assets/online-sequencer_index.md.DHtuOuyO.js",revision:null},{url:"assets/online-sequencer_index.md.DHtuOuyO.lean.js",revision:null},{url:"assets/pixel-synth_index.md.DRhl36ra.js",revision:null},{url:"assets/pixel-synth_index.md.DRhl36ra.lean.js",revision:null},{url:"assets/polyrhythm3_index.md.5vdQPlmm.js",revision:null},{url:"assets/polyrhythm3_index.md.5vdQPlmm.lean.js",revision:null},{url:"assets/README.md.0WYYXl0I.js",revision:null},{url:"assets/README.md.0WYYXl0I.lean.js",revision:null},{url:"assets/roland50_index.md.DNCo20Ad.js",revision:null},{url:"assets/roland50_index.md.DNCo20Ad.lean.js",revision:null},{url:"assets/sample-stich_index.md.C6HSWhk4.js",revision:null},{url:"assets/sample-stich_index.md.C6HSWhk4.lean.js",revision:null},{url:"assets/sound-box_index.md.DMLjon_8.js",revision:null},{url:"assets/sound-box_index.md.DMLjon_8.lean.js",revision:null},{url:"assets/sound-trap_index.md.BD3xd7AA.js",revision:null},{url:"assets/sound-trap_index.md.BD3xd7AA.lean.js",revision:null},{url:"assets/soundfont_index.md.BuDQHXOa.js",revision:null},{url:"assets/soundfont_index.md.BuDQHXOa.lean.js",revision:null},{url:"assets/style.CROUv_Sd.css",revision:null},{url:"assets/sympathetic_index.md.DLgRO4uJ.js",revision:null},{url:"assets/sympathetic_index.md.DLgRO4uJ.lean.js",revision:null},{url:"assets/tanguy-synth_index.md.C2mPKMs8.js",revision:null},{url:"assets/tanguy-synth_index.md.C2mPKMs8.lean.js",revision:null},{url:"assets/theremin_index.md.C5ujLYR9.js",revision:null},{url:"assets/theremin_index.md.C5ujLYR9.lean.js",revision:null},{url:"assets/topos_index.md.Bv0poAaW.js",revision:null},{url:"assets/topos_index.md.Bv0poAaW.lean.js",revision:null},{url:"assets/touch-pianist_index.md.Dg8XINaj.js",revision:null},{url:"assets/touch-pianist_index.md.Dg8XINaj.lean.js",revision:null},{url:"assets/touchme_index.md.CWfXW_T_.js",revision:null},{url:"assets/touchme_index.md.CWfXW_T_.lean.js",revision:null},{url:"assets/typedrummer_index.md.B_RnHU2v.js",revision:null},{url:"assets/typedrummer_index.md.B_RnHU2v.lean.js",revision:null},{url:"assets/video-sampler_index.md.DGl1KLkc.js",revision:null},{url:"assets/video-sampler_index.md.DGl1KLkc.lean.js",revision:null},{url:"assets/virtual-piano_index.md.CK3tQKUU.js",revision:null},{url:"assets/virtual-piano_index.md.CK3tQKUU.lean.js",revision:null},{url:"assets/waveform_index.md.DD7Ze0Le.js",revision:null},{url:"assets/waveform_index.md.DD7Ze0Le.lean.js",revision:null},{url:"assets/web-audio-synth-v2_index.md.BGPWSY3f.js",revision:null},{url:"assets/web-audio-synth-v2_index.md.BGPWSY3f.lean.js",revision:null},{url:"assets/web-modular_index.md.CzwIYdsp.js",revision:null},{url:"assets/web-modular_index.md.CzwIYdsp.lean.js",revision:null},{url:"assets/web-sid_index.md.DrBhnxPl.js",revision:null},{url:"assets/web-sid_index.md.DrBhnxPl.lean.js",revision:null},{url:"auth.html",revision:"77a45b4ee1e6d1dac9611802739dd98d"},{url:"auth/accept.html",revision:"1ca97778ba6cbbd8c71e973293d9cf9b"},{url:"auth/index.html",revision:"cb7d458cd689d047463fde39fe9e8f58"},{url:"auth/invite.html",revision:"003736c3bf4ab7e768e94fd2198851c1"},{url:"auth/logout.html",revision:"2076dc0260d71875d64d92f5b37340eb"},{url:"auth/reset.html",revision:"e8e7c43e2dfe8a7548eb5a20d9b36111"},{url:"bassoon/index.html",revision:"0b7fe830b4a03d3f10780174965ab925"},{url:"beepbox/index.html",revision:"62e84d437fe0af89014498afc97694c4"},{url:"biliard/index.html",revision:"f54a98d02f2293de41bb2c06b17ae5c8"},{url:"binary-synth/index.html",revision:"98b0939be494b0aab94b8c9381095b15"},{url:"blokdust/index.html",revision:"dcdd6cc943926fcf6029e22c6ddb3c7b"},{url:"cardboard-synth/index.html",revision:"698e0100dc9bb945784c6fe7825ca609"},{url:"cardinal/index.html",revision:"d46cb6fdb302d02b7050785eedb1c406"},{url:"chrome-lab/index.html",revision:"465a58965fe8f57f8d24b94fa2a6567f"},{url:"click-logo.svg",revision:"f15e71cb394926c5f8c08f64186d2d49"},{url:"cover/ableton.webp",revision:"ff3a22aa28084b93c0aad2e6569657e0"},{url:"cover/acid-machine-2.webp",revision:"29fcf6a6ce374dfc8391fe6544b5f08e"},{url:"cover/aqwertyon.webp",revision:"afab8d4bdeccf669a03617c5ce738fb7"},{url:"cover/bassoon.webp",revision:"68d4a434861c2f294623fe762e694ee6"},{url:"cover/beepbox.webp",revision:"e4f93e998951d212c5b678b425769537"},{url:"cover/biliard.webp",revision:"de153e95a72f67e8e2bc5b123ac1d50b"},{url:"cover/binary-synth.webp",revision:"30cff76fd2b6a32053a76622a54f1108"},{url:"cover/blokdust.webp",revision:"0613b83a920d709a268d9de2284a0354"},{url:"cover/cardboard-synth.webp",revision:"f93526fee97f6674940ca367cb841b58"},{url:"cover/cardinal.webp",revision:"1cf71dbecd04b9046aa68389b5a12dd0"},{url:"cover/chrome-lab.webp",revision:"d18ee6ca84364e4d175efa054a736fd9"},{url:"cover/cync.webp",revision:"1e798224356d60eef4742ed3c5f27ef7"},{url:"cover/disco-computer.webp",revision:"5dd18857caabf0cf1320d82537daa7d1"},{url:"cover/dotpiano.webp",revision:"c08549fc8ca38e2f4b6d1853b947ad3f"},{url:"cover/dx7.webp",revision:"a401e52d21c6d5e44240645b09d9f9c6"},{url:"cover/elementary.webp",revision:"6368b81c56ee656371254dd87bb421e8"},{url:"cover/granular.webp",revision:"b95f2781eb6c89580991d829f6c6dfa6"},{url:"cover/groove-pizza.webp",revision:"ace880a23d7a39082a02a011d15ef278"},{url:"cover/isleoftune.webp",revision:"4aa136591dee0383df4d60b551bb94d8"},{url:"cover/juno-106.webp",revision:"08c31646032ced1d4c48d295b9c0ca94"},{url:"cover/meet-the-heisenberg.webp",revision:"52318d42eb06e04073f209dd1f1e5c41"},{url:"cover/microtonal.webp",revision:"d4d2b2796350e9cd786b3b68e1b225ff"},{url:"cover/midi-city.webp",revision:"fecb8bf989aba90045bd17cfd0748576"},{url:"cover/midi-driven-web-audio.webp",revision:"897bbc54b77f1e0905ad454063a13189"},{url:"cover/mod-synth.webp",revision:"7d47cac35b80190a3bce223d47756ae0"},{url:"cover/multiplayer-orchestra.webp",revision:"de82211bb0cf8997437f9b263e1dd1b2"},{url:"cover/multiplayer-piano.webp",revision:"70e6eba35fc631046c89637286b57f29"},{url:"cover/muted-io.webp",revision:"d03f4b77e5d8cddc8adc45c0a67abd50"},{url:"cover/neosynth.webp",revision:"2e2d602c48a8d80d8a8bdb8000065807"},{url:"cover/note-sculptor.webp",revision:"67c78a7120358915332faa419a2e1f45"},{url:"cover/nv-1.webp",revision:"4c286383b8df97fae10976500d5456a9"},{url:"cover/olif-sy-1-k.webp",revision:"829a8b74f7a628fa5f319e39077687a2"},{url:"cover/omni.webp",revision:"413b121431478a3ea4aa3b3e26e19bc7"},{url:"cover/online-sequencer.webp",revision:"a5f83fc41f430f8ff6ddf9f45fbc57eb"},{url:"cover/pixel-synth.webp",revision:"f6457eb849297fbd07d5172a39573b4e"},{url:"cover/polyrhythm3.webp",revision:"3d8c7702e8181d85cb1875a1a8e51e0c"},{url:"cover/roland50.webp",revision:"1a9fe1ddb1dcd07cb42cd52567ca7173"},{url:"cover/sample-stich.webp",revision:"2019a72c6963aebca1eb7e73fc5d8737"},{url:"cover/sound-box.webp",revision:"9bc7cf72ec4b983786028af651bfb97a"},{url:"cover/sound-trap.webp",revision:"424d3e69d2cabbbd222fa63e03333693"},{url:"cover/soundfont.webp",revision:"c534fa79bd1c6f0c93244189778d400b"},{url:"cover/sympathetic.webp",revision:"3b98478cb9627398e816503b41ad91c8"},{url:"cover/tanguy-synth.webp",revision:"7dc2b96bdd88af09c835d1b3f6db0249"},{url:"cover/theremin.webp",revision:"fc256e4ea00b9e7d39fa76ef97677a55"},{url:"cover/topos.webp",revision:"43b64de4250b21fed95712b9bb5d0ad6"},{url:"cover/touch-pianist.webp",revision:"75cf9432de7a642fe1c71f3dab956857"},{url:"cover/touchme.webp",revision:"c64942d3fbdba893f09b720dac8ecf2f"},{url:"cover/typedrummer.webp",revision:"8d7be4a5046e7335cf6b91caea120e43"},{url:"cover/video-sampler.webp",revision:"d4b4af73791843f35f796824011cd4aa"},{url:"cover/virtual-piano.webp",revision:"ef9aacb9a39f6908c9d326c7ce588a8a"},{url:"cover/waveform.webp",revision:"fafd71aa1fb141d388d2df6d2e89b06e"},{url:"cover/web-audio-synth-v2.webp",revision:"14206290388166cf6cb7c4023c8b0503"},{url:"cover/web-modular.webp",revision:"ba22a1a127d07da1f494af6b4b1960bf"},{url:"cover/web-sid.webp",revision:"428998a4856ef3aff09ddd0e0d34bc7d"},{url:"cync/index.html",revision:"5444b94ca2fc072d9bda7bfa2a4b671a"},{url:"disco-computer/index.html",revision:"65fdda664696404464ec3928c070e752"},{url:"dotpiano/index.html",revision:"79d7ba47323236276bb6304bdef887e6"},{url:"dx7/index.html",revision:"21769a267434ce665dd9a39192c91e1c"},{url:"elementary/index.html",revision:"6ee8de03231100e480a1086818106d01"},{url:"granular/index.html",revision:"2a57224b6697fe80fc624fb3c9b5b7b2"},{url:"groove-pizza/index.html",revision:"091469ae86e6abece0cfd68b95851612"},{url:"icon.png",revision:"eb8e7369ba634f3bd1a96d889be50f7d"},{url:"index.html",revision:"6f1096f99c89cc2e1b14da5acbc82aba"},{url:"isleoftune/index.html",revision:"493e8749f27268ef31152f472e9022b2"},{url:"juno-106/index.html",revision:"fbbe82834af46623926d5abcd88478d2"},{url:"line.svg",revision:"4866b853d0c5c97e9f654fa32580076a"},{url:"logo.svg",revision:"134c144f78e462c4672fc8f64e69df9e"},{url:"meet-the-heisenberg/index.html",revision:"413c2cfa3f6050910bae9425381233b0"},{url:"microtonal/index.html",revision:"6c9dad9637e1a691fa14b1e8e3dac5ee"},{url:"midi-city/index.html",revision:"73c8c3959038891be921c8ddf66fdd6b"},{url:"midi-driven-web-audio/index.html",revision:"bc43ccf0d8ad5905fa7ae1ba41606aa4"},{url:"mod-synth/index.html",revision:"c9a1b1690fdbbe6a97db3607b5f64d64"},{url:"multiplayer-orchestra/index.html",revision:"1492e587c16eb19b99a0e832bed18536"},{url:"multiplayer-piano/index.html",revision:"029caf107e198cf9801f899727b7a071"},{url:"muted-io/index.html",revision:"58173f543bfc7cd8af3c395be5b143e9"},{url:"neosynth/index.html",revision:"286c1ea28ee83decce735db1660fc46f"},{url:"note-sculptor/index.html",revision:"e8d0e4a6dc82c121867c2eae4c911835"},{url:"nv-1/index.html",revision:"d5c0e502fafa1203c5d31a7615457c33"},{url:"olif-sy-1-k/index.html",revision:"cf54d571a22f3ca103e2e287e084aaeb"},{url:"omni/index.html",revision:"67ca3dfdd9a25f96ab11da043fef08d8"},{url:"online-sequencer/index.html",revision:"0bb1fec8f3e3715f45ac3881618b8541"},{url:"pixel-synth/index.html",revision:"3079730a412b36ff9f5cb8fedf5f1f30"},{url:"pl-logo.webp",revision:"9f0d66adf550fa40e8b2e03ff997eb34"},{url:"polyrhythm3/index.html",revision:"509943702295f929c241cf0bb43feede"},{url:"README.html",revision:"b96042d6031685e0fd7194f1e26a7fa1"},{url:"roland50/index.html",revision:"5f36d1bfabf89ce03d50709681bbb03b"},{url:"sample-stich/index.html",revision:"45b69647e1ee250ec866a11d3eba1dfb"},{url:"sound-box/index.html",revision:"6ee3cfeac1c8536e28b321850ab608c4"},{url:"sound-trap/index.html",revision:"2c82dad2f75213443d78381b7faf80b2"},{url:"soundfont/index.html",revision:"e92082be284724f9b8018f188bf8aff5"},{url:"sympathetic/index.html",revision:"f975777516ff8de267387fac4169a278"},{url:"tanguy-synth/index.html",revision:"ae452a1f524431feb0ba59a0cc0969a6"},{url:"theremin/index.html",revision:"ed06ce1cd8a9089cdf29e8e43b6d2958"},{url:"topos/index.html",revision:"48b5aff6d528da596682d2989789fbda"},{url:"touch-pianist/index.html",revision:"02d22ef17e058ac9b587e17b52d700ff"},{url:"touchme/index.html",revision:"6f7b60c8756107b296f2d534615d4cca"},{url:"typedrummer/index.html",revision:"bf6e18d9fd2ac7a1d2e1138c27bf01bd"},{url:"video-sampler/index.html",revision:"0df5998322f6dec8197ba984099cd71b"},{url:"virtual-piano/index.html",revision:"747b28cfa35b8ed92ecb033a4ddf8e6c"},{url:"waveform/index.html",revision:"a9302b6237c2c93caf639b4775e4e875"},{url:"web-audio-synth-v2/index.html",revision:"42cff34aa5412e555174d04f34539024"},{url:"web-modular/index.html",revision:"25c51774cd69a4104eb97f79985cdfe7"},{url:"web-sid/index.html",revision:"262a7ae6fb3114807bc420e2831f6f2d"},{url:"logo.svg",revision:"134c144f78e462c4672fc8f64e69df9e"},{url:"icon.png",revision:"eb8e7369ba634f3bd1a96d889be50f7d"},{url:"manifest.webmanifest",revision:"aee00a3fc5429948aa59c7d1c9d825cc"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))})); diff --git a/sympathetic/index.html b/sympathetic/index.html index aee77deb..cf3ab579 100644 --- a/sympathetic/index.html +++ b/sympathetic/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Sympathetic Synthesizer System Mk 1
by Stuart Memo
keyboard
midi
additive
The Sympathetic Synthesizer System Mk 1 is an interactive web app that emulates a complex synthesizer. It features three oscillators with selectable waveforms, an LFO, filters with ADSR controls, and noise generation. The app allows users to explore sound design through various parameters, offering a detailed and hands-on synthesis experience. MIDI support is also included for enhanced control.
- + \ No newline at end of file diff --git a/tanguy-synth/index.html b/tanguy-synth/index.html index ce45fe6b..f960a47a 100644 --- a/tanguy-synth/index.html +++ b/tanguy-synth/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Tanguy synth
by Luke Teaford
monophonic
additive
keyboard
- + \ No newline at end of file diff --git a/theremin/index.html b/theremin/index.html index f042da54..e4391329 100644 --- a/theremin/index.html +++ b/theremin/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Theremin
by Femur
Experience the magic of the theremin with this interactive web-app by Femur Design. Harness the power of motion to create ethereal music without physical contact. Experiment with pitch and volume to craft haunting melodies right in your browser.
- + \ No newline at end of file diff --git a/topos/index.html b/topos/index.html index 85c5a477..0e97553c 100644 --- a/topos/index.html +++ b/topos/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Live coding
MIDI
Poly
Visuals
FM
Topos is an algorithmic sequencer. Topos is also a live coding environment. To sum it up, think: "making music in real time through code". Code used as an expressive medium for musical improvisation! Topos uses small algorithms to represent musical sequences and processes.

Topos is deeply inspired by the Monome Teletype. The Teletype is/was an open source hardware module for Eurorack synthesizers. While the Teletype was initially born as an hardware module, Topos aims to be a web-browser based cousin of it! It is a sequencer, a scriptable interface, a companion for algorithmic music-making. Topos wishes to fullfill the same goal as the Teletype, keeping the same spirit alive on the web. It is free, open-source, and made to be shared and used by everyone. Learn more about live coding on livecoding.fr.

- + \ No newline at end of file diff --git a/touch-pianist/index.html b/touch-pianist/index.html index 1ce1a5a8..f922cf83 100644 --- a/touch-pianist/index.html +++ b/touch-pianist/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Touch Pianist
by EarSlap
entertainment
piano
Unleash your inner virtuoso with Touch Pianist. Experience the thrill of playing the piano with just your fingertips. Choose your favorite classical masterpiece and immerse yourself in the joy of creating beautiful music, all through the power of touch.

Touch Pianist is a musical toy / instrument that allows the user to perform hard-to-play classical piano music favorites (from composers like Beethoven, Mozart, Bach, Satie, Debussy to name a few) just by tapping the rhythm of the piece's particular sound events on a computer keyboard or a touch screen.

It also provides live visualisation of the pieces that are being performed. There is no score keeping, the user is free to perform the music in any way they wish. The premise is that it is really fun to perform a piece you know well, exactly like you feel it with so little effort.

Touch Pianist has CoreMIDI support so you can use your favorite piano / sound plug-in in your computer as a sound source if you wish.

- + \ No newline at end of file diff --git a/touchme/index.html b/touchme/index.html index c3978747..1aec8c1f 100644 --- a/touchme/index.html +++ b/touchme/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
chromatone
playtronica
TouchMe Experience by Chromatone is an interactive audio-visual web app that transforms touch inputs into music and visual effects. It features MIDI support, multiple synth oscillators, and various quantize and BPM modes. Users can explore six interactive SVG scenes, switch between light and dark modes, and view basic session statistics. Designed for creative experimentation, it offers a unique way to engage with music and visuals.
- + \ No newline at end of file diff --git a/typedrummer/index.html b/typedrummer/index.html index 55297ffa..fd856477 100644 --- a/typedrummer/index.html +++ b/typedrummer/index.html @@ -14,7 +14,7 @@ - + @@ -44,8 +44,8 @@ -
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Type Drummer
by Kyle Stetz
sequencer
drums
Keyboard
Type your drum loops
- +
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Type Drummer
by Kyle Stetz
sequencer
drums
Keyboard
Type your drum loops
+ \ No newline at end of file diff --git a/video-sampler/index.html b/video-sampler/index.html index 0aeb3304..d7c68e53 100644 --- a/video-sampler/index.html +++ b/video-sampler/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/virtual-piano/index.html b/virtual-piano/index.html index 286e53de..19fbd964 100644 --- a/virtual-piano/index.html +++ b/virtual-piano/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
VirtualPiano.eu
by WebSyrup
midi
keyboard

VirtualPiano.eu is the online synthesizer that allows you to play 128 musical instruments for free using your PC keyboard, the mouse or by connecting an external MIDI keyboard.

You can adjust Volume, Reverb, Loop and quality. Use the sustain and adjust the octaves, you can also select and set different channels including the one for the drums.

Create your own melodies, have fun playing or use VirtualPiano to learn how to play the Piano online on your own.

- + \ No newline at end of file diff --git a/waveform/index.html b/waveform/index.html index faf811ec..22ae6d9d 100644 --- a/waveform/index.html +++ b/waveform/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
Waveform
by Qvantor
playtronica
polyphonic
midi
Polyphonic web synthesizer with simple yet capable interface.
- + \ No newline at end of file diff --git a/web-audio-synth-v2/index.html b/web-audio-synth-v2/index.html index 5ed1a115..fef1ce18 100644 --- a/web-audio-synth-v2/index.html +++ b/web-audio-synth-v2/index.html @@ -14,7 +14,7 @@ - + @@ -44,8 +44,8 @@ - - + + \ No newline at end of file diff --git a/web-modular/index.html b/web-modular/index.html index 9484d06a..5ecae4d7 100644 --- a/web-modular/index.html +++ b/web-modular/index.html @@ -45,7 +45,7 @@ - + \ No newline at end of file diff --git a/web-sid/index.html b/web-sid/index.html index 0cbce1f3..c6a4c25c 100644 --- a/web-sid/index.html +++ b/web-sid/index.html @@ -45,7 +45,7 @@
Curated with ❤️‍🔥 by
Playtronica & Chromatone
WebSID Commodore 64
by Igor Zinken
polyphonic
keyboard
midi
additive
- + \ No newline at end of file