From 0d04d91d916369dfa6343988500c2d9a04a08450 Mon Sep 17 00:00:00 2001 From: tmhglnd Date: Wed, 28 Aug 2024 14:39:57 +0200 Subject: [PATCH] Deploy website - based on c4962317e1459170d3ce5be3397a32f6b2546f27 --- 404.html | 6 ++--- assets/js/2bac5d97.25713b95.js | 1 + assets/js/2bac5d97.687e5572.js | 1 - assets/js/2c9d0a4b.68412810.js | 1 - assets/js/2c9d0a4b.c9d55568.js | 1 + ...5b0a2.92ec3ffb.js => 3025b0a2.e8871151.js} | 2 +- assets/js/54934235.01f82f4a.js | 1 - assets/js/54934235.aa4288f1.js | 1 + ...04682.d75356f7.js => 613c1710.8b6eeae8.js} | 2 +- assets/js/643a29c7.01f72472.js | 1 + assets/js/643a29c7.c2ddcbec.js | 1 - assets/js/6c1c1008.704bc95e.js | 1 + assets/js/8f7dbc55.4e774b3a.js | 1 + ...f2afb.b09fd47e.js => 935f2afb.bd83e6a6.js} | 2 +- assets/js/b096b7b7.4f31acf4.js | 1 - assets/js/b096b7b7.caf228a8.js | 1 + assets/js/ba4e2648.1d87bb77.js | 1 - assets/js/ba4e2648.525e3820.js | 1 + ...a2b71.85cb5295.js => bbca2b71.352773e9.js} | 2 +- assets/js/c4f5d8e4.70000c2d.js | 1 - assets/js/c4f5d8e4.940206e3.js | 1 + assets/js/c6a20f18.de183d46.js | 1 - assets/js/c6a20f18.eba7c0e1.js | 1 + assets/js/ceb5ae55.8adaa515.js | 1 - assets/js/d44737fc.2ecb7944.js | 1 - assets/js/d44737fc.5891da8c.js | 1 + assets/js/d589d3a7.1183e0e2.js | 1 - assets/js/d589d3a7.6186ee36.js | 1 + assets/js/da3fe09b.1163186f.js | 1 - ...cf459.82411ef5.js => e92cf459.fe096c80.js} | 2 +- assets/js/ebfee794.0eb9da97.js | 1 + assets/js/ebfee794.28c92be6.js | 1 - ...71318.df420c1f.js => f6471318.ad2c1413.js} | 2 +- assets/js/main.394613b1.js | 2 -- assets/js/main.bee7ebd6.js | 2 ++ ...CENSE.txt => main.bee7ebd6.js.LICENSE.txt} | 0 assets/js/runtime~main.62ae5143.js | 1 + assets/js/runtime~main.d415a69f.js | 1 - docs/about/about-mercury/index.html | 20 +++++++++++++++++ docs/about/features/index.html | 10 ++++----- docs/about/index.html | 17 +++++--------- docs/about/inspiration/index.html | 8 +++---- docs/about/vision/index.html | 8 +++---- docs/category/-about/index.html | 13 ----------- docs/category/-reference/index.html | 13 ----------- docs/category/-usage/index.html | 13 ----------- docs/collaborate/index.html | 8 +++---- docs/contribute/index.html | 8 +++---- docs/getting-started/index.html | 14 ++++++------ docs/{welcome => }/index.html | 10 ++++----- docs/reference/actions/index.html | 8 +++---- docs/reference/effects/index.html | 8 +++---- docs/reference/global/index.html | 8 +++---- docs/reference/index.html | 13 +++++++++++ docs/reference/instruments/index.html | 12 +++++----- docs/reference/list-functions/index.html | 10 ++++----- docs/reference/syntax/index.html | 8 +++---- docs/usage/coding/index.html | 10 ++++----- docs/usage/editors/index.html | 10 ++++----- docs/usage/embedding/index.html | 8 +++---- docs/usage/extending/index.html | 10 ++++----- docs/usage/howto/index.html | 8 +++---- docs/usage/index.html | 13 +++++++++++ docs/usage/mercury4max-overview/index.html | 8 +++---- docs/usage/playground-overview/index.html | 8 +++---- docs/usage/shortkeys/index.html | 8 +++---- docs/usage/sounds/index.html | 22 ++++++++----------- docs/usage/troubleshooting/index.html | 8 +++---- index.html | 6 ++--- markdown-page/index.html | 8 +++---- sitemap.xml | 2 +- 71 files changed, 192 insertions(+), 196 deletions(-) create mode 100644 assets/js/2bac5d97.25713b95.js delete mode 100644 assets/js/2bac5d97.687e5572.js delete mode 100644 assets/js/2c9d0a4b.68412810.js create mode 100644 assets/js/2c9d0a4b.c9d55568.js rename assets/js/{3025b0a2.92ec3ffb.js => 3025b0a2.e8871151.js} (62%) delete mode 100644 assets/js/54934235.01f82f4a.js create mode 100644 assets/js/54934235.aa4288f1.js rename assets/js/{f0204682.d75356f7.js => 613c1710.8b6eeae8.js} (65%) create mode 100644 assets/js/643a29c7.01f72472.js delete mode 100644 assets/js/643a29c7.c2ddcbec.js create mode 100644 assets/js/6c1c1008.704bc95e.js create mode 100644 assets/js/8f7dbc55.4e774b3a.js rename assets/js/{935f2afb.b09fd47e.js => 935f2afb.bd83e6a6.js} (70%) delete mode 100644 assets/js/b096b7b7.4f31acf4.js create mode 100644 assets/js/b096b7b7.caf228a8.js delete mode 100644 assets/js/ba4e2648.1d87bb77.js create mode 100644 assets/js/ba4e2648.525e3820.js rename assets/js/{bbca2b71.85cb5295.js => bbca2b71.352773e9.js} (99%) delete mode 100644 assets/js/c4f5d8e4.70000c2d.js create mode 100644 assets/js/c4f5d8e4.940206e3.js delete mode 100644 assets/js/c6a20f18.de183d46.js create mode 100644 assets/js/c6a20f18.eba7c0e1.js delete mode 100644 assets/js/ceb5ae55.8adaa515.js delete mode 100644 assets/js/d44737fc.2ecb7944.js create mode 100644 assets/js/d44737fc.5891da8c.js delete mode 100644 assets/js/d589d3a7.1183e0e2.js create mode 100644 assets/js/d589d3a7.6186ee36.js delete mode 100644 assets/js/da3fe09b.1163186f.js rename assets/js/{e92cf459.82411ef5.js => e92cf459.fe096c80.js} (75%) create mode 100644 assets/js/ebfee794.0eb9da97.js delete mode 100644 assets/js/ebfee794.28c92be6.js rename assets/js/{f6471318.df420c1f.js => f6471318.ad2c1413.js} (74%) delete mode 100644 assets/js/main.394613b1.js create mode 100644 assets/js/main.bee7ebd6.js rename assets/js/{main.394613b1.js.LICENSE.txt => main.bee7ebd6.js.LICENSE.txt} (100%) create mode 100644 assets/js/runtime~main.62ae5143.js delete mode 100644 assets/js/runtime~main.d415a69f.js create mode 100644 docs/about/about-mercury/index.html delete mode 100644 docs/category/-about/index.html delete mode 100644 docs/category/-reference/index.html delete mode 100644 docs/category/-usage/index.html rename docs/{welcome => }/index.html (52%) create mode 100644 docs/reference/index.html create mode 100644 docs/usage/index.html diff --git a/404.html b/404.html index 5d18934e..fa966fe1 100644 --- a/404.html +++ b/404.html @@ -4,10 +4,10 @@ Page Not Found | Mercury - - + + -
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

\ No newline at end of file diff --git a/assets/js/2bac5d97.25713b95.js b/assets/js/2bac5d97.25713b95.js new file mode 100644 index 00000000..6d905af5 --- /dev/null +++ b/assets/js/2bac5d97.25713b95.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[856],{9896:e=>{e.exports=JSON.parse('{"title":"\ud83d\udd79 Usage","description":"How to use Mercury","slug":"/usage","permalink":"/mercury/docs/usage","navigation":{"previous":{"title":"\ud83d\ude80 Getting Started","permalink":"/mercury/docs/getting-started"},"next":{"title":"\ud83e\udd13 Coding in Mercury","permalink":"/mercury/docs/usage/coding"}}}')}}]); \ No newline at end of file diff --git a/assets/js/2bac5d97.687e5572.js b/assets/js/2bac5d97.687e5572.js deleted file mode 100644 index fa6be1a3..00000000 --- a/assets/js/2bac5d97.687e5572.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[856],{9896:e=>{e.exports=JSON.parse('{"title":"\ud83d\udd79 Usage","description":"How to use Mercury","slug":"/category/-usage","permalink":"/mercury/docs/category/-usage","navigation":{"previous":{"title":"\ud83d\ude80 Getting Started","permalink":"/mercury/docs/getting-started"},"next":{"title":"\ud83e\udd13 Coding in Mercury","permalink":"/mercury/docs/usage/coding"}}}')}}]); \ No newline at end of file diff --git a/assets/js/2c9d0a4b.68412810.js b/assets/js/2c9d0a4b.68412810.js deleted file mode 100644 index b83911a3..00000000 --- a/assets/js/2c9d0a4b.68412810.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[258],{3986:(n,e,s)=>{s.r(e),s.d(e,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>a});var i=s(4848),r=s(8453);const t={sidebar_position:2},o="\ud83d\udd2d What can you do with Mercury?",c={id:"about/vision",title:"\ud83d\udd2d What can you do with Mercury?",description:"Are you not sure if Mercury is for you? Maybe after reading this you have a better idea:",source:"@site/docs/about/vision.md",sourceDirName:"about",slug:"/about/vision",permalink:"/mercury/docs/about/vision",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"\ud83e\udd14 What is Mercury?",permalink:"/mercury/docs/about/"},next:{title:"\ud83c\udfae Quick Features Overview",permalink:"/mercury/docs/about/features"}},l={},a=[];function d(n){const e={a:"a",h1:"h1",hr:"hr",li:"li",p:"p",ul:"ul",...(0,r.R)(),...n.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.h1,{id:"-what-can-you-do-with-mercury",children:"\ud83d\udd2d What can you do with Mercury?"}),"\n",(0,i.jsx)(e.p,{children:"Are you not sure if Mercury is for you? Maybe after reading this you have a better idea:"}),"\n",(0,i.jsx)(e.hr,{}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you a quick and hands-on coding environment/language to express, communicate and improvise livecoded works."}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you an environment to learn and/or teach:"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Introduction to (electronic) music"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Algorithmic composition techniques"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Sequencing and pattern generating"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Sound design"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Creative coding and live coding"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you a hands-on language to control realtime processes"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Code sound and music"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Code visuals and let them react to sound"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Control external processes of other software and hardware"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you an extensive library of algorithmic composition techniques"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["Released as a seperate package titled ",(0,i.jsx)(e.a,{href:"https://www.npmjs.com/package/total-serialism",children:"total-serialism"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you a multi-purpose non-linear-sequencer"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"use OSC-messages to communicate with other platforms"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"use MIDI-messages to communicate with other platforms and devices"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you a quick-to-use sampler/synthesizer for sounddesign and composing"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"use external OSC-messages to control parameters in the samplers/synthesizers"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"use external MIDI devices and messages to play the sampler/synthesizers (coming soon...)"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Allowing you to run the software directly in the browser"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Allowing you to collaborate in Mercury via the browser with Flok to code music together"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Allowing you to join the Mercury users-community of live coding enthousiasts that can help you with your journey"}),"\n"]}),"\n"]})]})}function u(n={}){const{wrapper:e}={...(0,r.R)(),...n.components};return e?(0,i.jsx)(e,{...n,children:(0,i.jsx)(d,{...n})}):d(n)}},8453:(n,e,s)=>{s.d(e,{R:()=>o,x:()=>c});var i=s(6540);const r={},t=i.createContext(r);function o(n){const e=i.useContext(t);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function c(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:o(n.components),i.createElement(t.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c9d0a4b.c9d55568.js b/assets/js/2c9d0a4b.c9d55568.js new file mode 100644 index 00000000..4e5f01a7 --- /dev/null +++ b/assets/js/2c9d0a4b.c9d55568.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[258],{3986:(n,e,s)=>{s.r(e),s.d(e,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>c,toc:()=>a});var i=s(4848),r=s(8453);const t={sidebar_position:2},o="\ud83d\udd2d What can you do with Mercury?",c={id:"about/vision",title:"\ud83d\udd2d What can you do with Mercury?",description:"Are you not sure if Mercury is for you? Maybe after reading this you have a better idea:",source:"@site/docs/about/vision.md",sourceDirName:"about",slug:"/about/vision",permalink:"/mercury/docs/about/vision",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"\ud83e\udd14 What is Mercury?",permalink:"/mercury/docs/about/about-mercury"},next:{title:"\ud83c\udfae Quick Features Overview",permalink:"/mercury/docs/about/features"}},l={},a=[];function d(n){const e={a:"a",h1:"h1",hr:"hr",li:"li",p:"p",ul:"ul",...(0,r.R)(),...n.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.h1,{id:"-what-can-you-do-with-mercury",children:"\ud83d\udd2d What can you do with Mercury?"}),"\n",(0,i.jsx)(e.p,{children:"Are you not sure if Mercury is for you? Maybe after reading this you have a better idea:"}),"\n",(0,i.jsx)(e.hr,{}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you a quick and hands-on coding environment/language to express, communicate and improvise livecoded works."}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you an environment to learn and/or teach:"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Introduction to (electronic) music"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Algorithmic composition techniques"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Sequencing and pattern generating"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Sound design"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Creative coding and live coding"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you a hands-on language to control realtime processes"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Code sound and music"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Code visuals and let them react to sound"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Control external processes of other software and hardware"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you an extensive library of algorithmic composition techniques"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["Released as a seperate package titled ",(0,i.jsx)(e.a,{href:"https://www.npmjs.com/package/total-serialism",children:"total-serialism"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you a multi-purpose non-linear-sequencer"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"use OSC-messages to communicate with other platforms"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"use MIDI-messages to communicate with other platforms and devices"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Giving you a quick-to-use sampler/synthesizer for sounddesign and composing"}),"\n",(0,i.jsxs)(e.ul,{children:["\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"use external OSC-messages to control parameters in the samplers/synthesizers"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"use external MIDI devices and messages to play the sampler/synthesizers (coming soon...)"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Allowing you to run the software directly in the browser"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Allowing you to collaborate in Mercury via the browser with Flok to code music together"}),"\n"]}),"\n",(0,i.jsxs)(e.li,{children:["\n",(0,i.jsx)(e.p,{children:"Allowing you to join the Mercury users-community of live coding enthousiasts that can help you with your journey"}),"\n"]}),"\n"]})]})}function u(n={}){const{wrapper:e}={...(0,r.R)(),...n.components};return e?(0,i.jsx)(e,{...n,children:(0,i.jsx)(d,{...n})}):d(n)}},8453:(n,e,s)=>{s.d(e,{R:()=>o,x:()=>c});var i=s(6540);const r={},t=i.createContext(r);function o(n){const e=i.useContext(t);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function c(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:o(n.components),i.createElement(t.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/3025b0a2.92ec3ffb.js b/assets/js/3025b0a2.e8871151.js similarity index 62% rename from assets/js/3025b0a2.92ec3ffb.js rename to assets/js/3025b0a2.e8871151.js index d44ea175..c2f2723a 100644 --- a/assets/js/3025b0a2.92ec3ffb.js +++ b/assets/js/3025b0a2.e8871151.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[866],{7428:(e,s,l)=>{l.r(s),l.d(s,{assets:()=>o,contentTitle:()=>d,default:()=>a,frontMatter:()=>i,metadata:()=>h,toc:()=>c});var n=l(4848),r=l(8453);const i={sidebar_position:0,id:"sounds"},d="\ud83d\udce2 Sounds in Mercury",h={id:"usage/sounds",title:"\ud83d\udce2 Sounds in Mercury",description:"Most of the sounds in Mercury are from freesound.org and are licensed with Creative Commons Attribution or Creative Commons 0 licenses. If not downloaded from freesound it is made sure that the license allows you to redistribute the sounds via the Mercury environment and that you can use them in your projects. All the sounds are listed below with their original source, license and credits.",source:"@site/docs/usage/sounds.md",sourceDirName:"usage",slug:"/usage/sounds",permalink:"/mercury/docs/usage/sounds",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,id:"sounds"},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udcda How To's",permalink:"/mercury/docs/usage/howto"},next:{title:"\ud83d\udedd MercuryPlayground Overview",permalink:"/mercury/docs/usage/playground-overview"}},o={},c=[{value:"One-shots",id:"one-shots",level:2},{value:"Drums",id:"drums",level:3},{value:"snare_909",id:"snare_909",level:5},{value:"snare_909_short",id:"snare_909_short",level:5},{value:"kick_909_long",id:"kick_909_long",level:5},{value:"kick_909",id:"kick_909",level:5},{value:"kick_909_dist",id:"kick_909_dist",level:5},{value:"kick_909_dist_long",id:"kick_909_dist_long",level:5},{value:"hat_909",id:"hat_909",level:5},{value:"hat_909_short",id:"hat_909_short",level:5},{value:"hat_909_open",id:"hat_909_open",level:5},{value:"hat_909_half",id:"hat_909_half",level:5},{value:"clap_909",id:"clap_909",level:5},{value:"kick_min",id:"kick_min",level:5},{value:"kick_sub",id:"kick_sub",level:5},{value:"kick_dub",id:"kick_dub",level:5},{value:"kick_vintage",id:"kick_vintage",level:5},{value:"hat_min",id:"hat_min",level:5},{value:"hat_dub",id:"hat_dub",level:5},{value:"hat_min_open",id:"hat_min_open",level:5},{value:"hat_click",id:"hat_click",level:5},{value:"snare_min",id:"snare_min",level:5},{value:"snare_dub",id:"snare_dub",level:5},{value:"snare_hvy",id:"snare_hvy",level:5},{value:"clap_min",id:"clap_min",level:5},{value:"tom_hi",id:"tom_hi",level:5},{value:"tom_lo",id:"tom_lo",level:5},{value:"tom_mid",id:"tom_mid",level:5},{value:"snare_fat",id:"snare_fat",level:5},{value:"snare_ac",id:"snare_ac",level:5},{value:"snare_step",id:"snare_step",level:5},{value:"snare_dnb",id:"snare_dnb",level:5},{value:"snare_rock",id:"snare_rock",level:5},{value:"kick_ua",id:"kick_ua",level:5},{value:"kick_house",id:"kick_house",level:5},{value:"kick_deep",id:"kick_deep",level:5},{value:"tom_808",id:"tom_808",level:5},{value:"hat_808_semi",id:"hat_808_semi",level:5},{value:"hat_808_open",id:"hat_808_open",level:5},{value:"hat_808",id:"hat_808",level:5},{value:"clap_808_short",id:"clap_808_short",level:5},{value:"clap_808",id:"clap_808",level:5},{value:"snare_808",id:"snare_808",level:5},{value:"kick_808",id:"kick_808",level:5},{value:"kick_808_dist",id:"kick_808_dist",level:5},{value:"Nord Mini Kit",id:"nord-mini-kit",level:3},{value:"wood_nord_lo",id:"wood_nord_lo",level:5},{value:"wood_nord_mid",id:"wood_nord_mid",level:5},{value:"wood_nord_hi",id:"wood_nord_hi",level:5},{value:"tom_nord_lo",id:"tom_nord_lo",level:5},{value:"clap_nord",id:"clap_nord",level:5},{value:"hat_nord_open",id:"hat_nord_open",level:5},{value:"hat_nord",id:"hat_nord",level:5},{value:"tom_nord_hi",id:"tom_nord_hi",level:5},{value:"snare_nord_hi",id:"snare_nord_hi",level:5},{value:"snare_nord",id:"snare_nord",level:5},{value:"kick_nord_long",id:"kick_nord_long",level:5},{value:"kick_nord",id:"kick_nord",level:5},{value:"Percussion",id:"percussion",level:3},{value:"maracas_808",id:"maracas_808",level:5},{value:"clave_808",id:"clave_808",level:5},{value:"cowbell_808",id:"cowbell_808",level:5},{value:"cymbal_808",id:"cymbal_808",level:5},{value:"block",id:"block",level:5},{value:"block_lo",id:"block_lo",level:5},{value:"bongo",id:"bongo",level:4},{value:"bongo",id:"bongo-1",level:5},{value:"bongo_lo",id:"bongo_lo",level:5},{value:"tabla",id:"tabla",level:4},{value:"tabla_01",id:"tabla_01",level:5},{value:"tabla_02",id:"tabla_02",level:5},{value:"tabla_03",id:"tabla_03",level:5},{value:"tabla_hi_long",id:"tabla_hi_long",level:5},{value:"tabla_hi_short",id:"tabla_hi_short",level:5},{value:"tabla_hi",id:"tabla_hi",level:5},{value:"tabla_lo_long",id:"tabla_lo_long",level:5},{value:"tabla_lo_short",id:"tabla_lo_short",level:5},{value:"tabla_lo",id:"tabla_lo",level:5},{value:"tabla_mid_long",id:"tabla_mid_long",level:5},{value:"tabla_mid_short",id:"tabla_mid_short",level:5},{value:"tabla_mid",id:"tabla_mid",level:5},{value:"Strings",id:"strings",level:3},{value:"harp",id:"harp",level:4},{value:"harp_down",id:"harp_down",level:5},{value:"harp_up",id:"harp_up",level:5},{value:"harp_g5",id:"harp_g5",level:5},{value:"harp_g3",id:"harp_g3",level:5},{value:"harp_f4",id:"harp_f4",level:5},{value:"harp_e5",id:"harp_e5",level:5},{value:"harp_e3",id:"harp_e3",level:5},{value:"harp_d4",id:"harp_d4",level:5},{value:"harp_c5",id:"harp_c5",level:5},{value:"harp_c3",id:"harp_c3",level:5},{value:"harp_b5",id:"harp_b5",level:5},{value:"harp_b3",id:"harp_b3",level:5},{value:"harp_a4",id:"harp_a4",level:5},{value:"harp_a2",id:"harp_a2",level:5},{value:"violin",id:"violin",level:4},{value:"violin_g",id:"violin_g",level:5},{value:"violin_f",id:"violin_f",level:5},{value:"violin_e",id:"violin_e",level:5},{value:"violin_d",id:"violin_d",level:5},{value:"violin_c",id:"violin_c",level:5},{value:"violin_b",id:"violin_b",level:5},{value:"violin_a",id:"violin_a",level:5},{value:"pluck",id:"pluck",level:4},{value:"pluck_g",id:"pluck_g",level:5},{value:"pluck_f",id:"pluck_f",level:5},{value:"pluck_e",id:"pluck_e",level:5},{value:"pluck_d",id:"pluck_d",level:5},{value:"pluck_c",id:"pluck_c",level:5},{value:"pluck_b",id:"pluck_b",level:5},{value:"pluck_a",id:"pluck_a",level:5},{value:"Keys",id:"keys",level:3},{value:"piano",id:"piano",level:4},{value:"piano_g",id:"piano_g",level:5},{value:"piano_e",id:"piano_e",level:5},{value:"piano_f",id:"piano_f",level:5},{value:"piano_d",id:"piano_d",level:5},{value:"piano_a",id:"piano_a",level:5},{value:"piano_b",id:"piano_b",level:5},{value:"piano_c",id:"piano_c",level:5},{value:"rhodes",id:"rhodes",level:4},{value:"rhodes_8bit",id:"rhodes_8bit",level:5},{value:"Woodwinds / Flutes",id:"woodwinds--flutes",level:3},{value:"flute",id:"flute",level:4},{value:"flute_e4",id:"flute_e4",level:5},{value:"flute_e3",id:"flute_e3",level:5},{value:"flute_c5",id:"flute_c5",level:5},{value:"flute_c4",id:"flute_c4",level:5},{value:"flute_c3",id:"flute_c3",level:5},{value:"flute_a4",id:"flute_a4",level:5},{value:"flute_a3",id:"flute_a3",level:5},{value:"oboe",id:"oboe",level:4},{value:"oboe_f4",id:"oboe_f4",level:5},{value:"oboe_f3",id:"oboe_f3",level:5},{value:"oboe_d4",id:"oboe_d4",level:5},{value:"oboe_d3",id:"oboe_d3",level:5},{value:"oboe_a3",id:"oboe_a3",level:5},{value:"oboe_a2",id:"oboe_a2",level:5},{value:"clarinet",id:"clarinet",level:4},{value:"clarinet_f3",id:"clarinet_f3",level:5},{value:"clarinet_f2",id:"clarinet_f2",level:5},{value:"clarinet_d3",id:"clarinet_d3",level:5},{value:"clarinet_d2",id:"clarinet_d2",level:5},{value:"clarinet_a3",id:"clarinet_a3",level:5},{value:"clarinet_a2",id:"clarinet_a2",level:5},{value:"Idiophonic",id:"idiophonic",level:3},{value:"marimba",id:"marimba",level:4},{value:"marimba_g4",id:"marimba_g4",level:5},{value:"marimba_g2",id:"marimba_g2",level:5},{value:"marimba_f3",id:"marimba_f3",level:5},{value:"marimba_c4",id:"marimba_c4",level:5},{value:"marimba_c2",id:"marimba_c2",level:5},{value:"marimba_b2",id:"marimba_b2",level:5},{value:"kalimba",id:"kalimba",level:4},{value:"kalimba_ab",id:"kalimba_ab",level:5},{value:"kalimba_g",id:"kalimba_g",level:5},{value:"kalimba_e",id:"kalimba_e",level:5},{value:"kalimba_cis",id:"kalimba_cis",level:5},{value:"kalimba_a",id:"kalimba_a",level:5},{value:"bamboo",id:"bamboo",level:4},{value:"bamboo_g",id:"bamboo_g",level:5},{value:"bamboo_a",id:"bamboo_a",level:5},{value:"bamboo_c",id:"bamboo_c",level:5},{value:"bamboo_f",id:"bamboo_f",level:5},{value:"singing bowl",id:"singing-bowl",level:4},{value:"bowl_hi",id:"bowl_hi",level:5},{value:"bowl_lo",id:"bowl_lo",level:5},{value:"bowl_mid",id:"bowl_mid",level:5},{value:"chimes",id:"chimes",level:4},{value:"chimes_chord",id:"chimes_chord",level:5},{value:"chimes_chord_01",id:"chimes_chord_01",level:5},{value:"chimes_chord_02",id:"chimes_chord_02",level:5},{value:"chimes",id:"chimes-1",level:5},{value:"chimes_hi",id:"chimes_hi",level:5},{value:"bell",id:"bell",level:5},{value:"gong_hi",id:"gong_hi",level:5},{value:"gong_lo",id:"gong_lo",level:5},{value:"tubular bell",id:"tubular-bell",level:4},{value:"bell_g4",id:"bell_g4",level:5},{value:"bell_c5",id:"bell_c5",level:5},{value:"bell_c4",id:"bell_c4",level:5},{value:"bell_f5",id:"bell_f5",level:5},{value:"xylophone",id:"xylophone",level:4},{value:"xylo_g5",id:"xylo_g5",level:5},{value:"xylo_g4",id:"xylo_g4",level:5},{value:"xylo_g3",id:"xylo_g3",level:5},{value:"xylo_c6",id:"xylo_c6",level:5},{value:"xylo_c5",id:"xylo_c5",level:5},{value:"xylo_c4",id:"xylo_c4",level:5},{value:"glockenspiel",id:"glockenspiel",level:4},{value:"glock_g5",id:"glock_g5",level:5},{value:"glock_g4",id:"glock_g4",level:5},{value:"glock_c6",id:"glock_c6",level:5},{value:"glock_c5",id:"glock_c5",level:5},{value:"music box",id:"music-box",level:4},{value:"box_g5",id:"box_g5",level:5},{value:"box_g3",id:"box_g3",level:5},{value:"box_d6",id:"box_d6",level:5},{value:"box_d5",id:"box_d5",level:5},{value:"box_c5",id:"box_c5",level:5},{value:"box_b4",id:"box_b4",level:5},{value:"box_b5",id:"box_b5",level:5},{value:"Vocal",id:"vocal",level:3},{value:"choir",id:"choir",level:4},{value:"choir_o",id:"choir_o",level:5},{value:"choir_01",id:"choir_01",level:5},{value:"choir_02",id:"choir_02",level:5},{value:"choir_03",id:"choir_03",level:5},{value:"Foley",id:"foley",level:3},{value:"wood_hit",id:"wood_hit",level:5},{value:"wood_metal",id:"wood_metal",level:5},{value:"wood_plate",id:"wood_plate",level:5},{value:"scrape",id:"scrape",level:5},{value:"scrape_01",id:"scrape_01",level:5},{value:"door",id:"door",level:5},{value:"shatter",id:"shatter",level:5},{value:"tongue",id:"tongue",level:5},{value:"tongue_lo",id:"tongue_lo",level:5},{value:"metal",id:"metal",level:5},{value:"metal_lo",id:"metal_lo",level:5},{value:"wobble",id:"wobble",level:5},{value:"wobble_02",id:"wobble_02",level:5},{value:"Ambient",id:"ambient",level:3},{value:"drone_cymbal",id:"drone_cymbal",level:5},{value:"drone_cymbal_01",id:"drone_cymbal_01",level:5},{value:"noise_a",id:"noise_a",level:5},{value:"Loops",id:"loops",level:2},{value:"Breakbeats",id:"breakbeats",level:3},{value:"amen",id:"amen",level:5},{value:"amen_alt",id:"amen_alt",level:5},{value:"amen_fill",id:"amen_fill",level:5},{value:"amen_break",id:"amen_break",level:5},{value:"house",id:"house",level:5},{value:"Idiophonic",id:"idiophonic-1",level:3},{value:"chimes_l",id:"chimes_l",level:5},{value:"Foley",id:"foley-1",level:3},{value:"wood_l",id:"wood_l",level:5},{value:"wood_l_01",id:"wood_l_01",level:5},{value:"wiper",id:"wiper",level:5},{value:"wiper_out",id:"wiper_out",level:5},{value:"Noise",id:"noise",level:3},{value:"noise_c",id:"noise_c",level:5},{value:"noise_e",id:"noise_e",level:5},{value:"noise_e_01",id:"noise_e_01",level:5},{value:"noise_mw",id:"noise_mw",level:5},{value:"noise_p",id:"noise_p",level:5},{value:"noise_r",id:"noise_r",level:5},{value:"Sample Credits",id:"sample-credits",level:2},{value:"Waveforms",id:"waveforms",level:2},{value:"sine",id:"sine",level:4},{value:"saw",id:"saw",level:4},{value:"square",id:"square",level:4},{value:"triangle",id:"triangle",level:4},{value:"altosax",id:"altosax",level:4},{value:"bit",id:"bit",level:4},{value:"bit_1",id:"bit_1",level:5},{value:"bit_2",id:"bit_2",level:5},{value:"bit_3",id:"bit_3",level:5},{value:"blend",id:"blend",level:4},{value:"cello",id:"cello",level:4},{value:"cello_1",id:"cello_1",level:5},{value:"cello_2",id:"cello_2",level:5},{value:"dbass",id:"dbass",level:4},{value:"dbass_1",id:"dbass_1",level:5},{value:"dbass_2",id:"dbass_2",level:5},{value:"distorted",id:"distorted",level:4},{value:"distorted_1",id:"distorted_1",level:5},{value:"distorted_2",id:"distorted_2",level:5},{value:"ebass",id:"ebass",level:4},{value:"ebass_1",id:"ebass_1",level:5},{value:"ebass_2",id:"ebass_2",level:5},{value:"eorgan",id:"eorgan",level:4},{value:"eorgan_1",id:"eorgan_1",level:5},{value:"eorgan_2",id:"eorgan_2",level:5},{value:"eorgan_3",id:"eorgan_3",level:5},{value:"guitar",id:"guitar",level:4},{value:"raw",id:"raw",level:4},{value:"raw_1",id:"raw_1",level:5},{value:"raw_2",id:"raw_2",level:5},{value:"saw_1",id:"saw_1",level:5},{value:"saw_2",id:"saw_2",level:5},{value:"square",id:"square-1",level:4},{value:"square_1",id:"square_1",level:5},{value:"square_2",id:"square_2",level:5},{value:"voice",id:"voice",level:4},{value:"voice_a",id:"voice_a",level:5},{value:"voice_i",id:"voice_i",level:5},{value:"voice_eu",id:"voice_eu",level:5},{value:"voice_o",id:"voice_o",level:5}];function t(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"-sounds-in-mercury",children:"\ud83d\udce2 Sounds in Mercury"}),"\n",(0,n.jsxs)(s.p,{children:["Most of the sounds in Mercury are from ",(0,n.jsx)(s.a,{href:"http://www.freesound.org",children:"freesound.org"})," and are licensed with Creative Commons Attribution or Creative Commons 0 licenses. If not downloaded from freesound it is made sure that the license allows you to redistribute the sounds via the Mercury environment and that you can use them in your projects. All the sounds are listed below with their original source, license and credits."]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"#credits",children:"Credits"})}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#one-shots",children:"One-shots"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#drums",children:"Drums"})," (kick, snare, hat, ...)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#nord-mini-kit",children:"Nord Mini Kit"})," (kick, snare, hat, ...)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#percussion",children:"Percussion"})," (cowbell, bongo, tabla, ...)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#strings",children:"Strings"})," (harp, pluck, violin)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#keys",children:"Keys"})," (piano, rhodes)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#idiophonic",children:"Idiophonic"})," (marimba, singing bowl, xylophone, glockenspiel, ...)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#woodwinds-flutes",children:"Woodwinds/Fluts"})," (flute, oboe, clarinet)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#vocal",children:"Vocal"})," (choir)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#foley",children:"Foley"})," (wood, metal, glas, body)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#ambient",children:"Ambient"})," (cymbal, noise)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#loops",children:"Loops"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#breakbeats",children:"Breakbeats"})," (amen, house)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#idiophonic-1",children:"Idiophonic"})," (chimes)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#foley-1",children:"Foley"})," (wood, wiper)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#noise-1",children:"Noise"})," (noise)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"#credits",children:"Credits"})}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#waveforms",children:"Waveforms"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"#overview",children:"Overview"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"one-shots",children:"One-shots"}),"\n",(0,n.jsxs)(s.p,{children:["One-shots are samples best used for triggering once with ",(0,n.jsx)(s.code,{children:"new sample"})," or ",(0,n.jsx)(s.code,{children:"new polySample"}),". But they can be used with ",(0,n.jsx)(s.code,{children:"new loop"})," too!"]}),"\n",(0,n.jsx)(s.h3,{id:"drums",children:"Drums"}),"\n",(0,n.jsx)(s.h5,{id:"snare_909",children:"snare_909"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3728__NoiseCollector__909_snare2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3728/",children:"https://freesound.org/s/3728/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_909_short",children:"snare_909_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3727__NoiseCollector__909_snare.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3727/",children:"https://freesound.org/s/3727/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_909_long",children:"kick_909_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3726__NoiseCollector__909_kick3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3726/",children:"https://freesound.org/s/3726/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_909",children:"kick_909"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3725__NoiseCollector__909_kick2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3725/",children:"https://freesound.org/s/3725/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_909_dist",children:"kick_909_dist"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3724__NoiseCollector__909_kick.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3724/",children:"https://freesound.org/s/3724/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_909_dist_long",children:"kick_909_dist_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3723__NoiseCollector__909_kick_long.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3723/",children:"https://freesound.org/s/3723/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_909",children:"hat_909"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3722__NoiseCollector__909_hat2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3722/",children:"https://freesound.org/s/3722/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_909_short",children:"hat_909_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3721__NoiseCollector__909_hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3721/",children:"https://freesound.org/s/3721/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_909_open",children:"hat_909_open"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3720__NoiseCollector__909_hat_open2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3720/",children:"https://freesound.org/s/3720/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_909_half",children:"hat_909_half"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3719__NoiseCollector__909_hat_open.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3719/",children:"https://freesound.org/s/3719/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_909",children:"clap_909"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3718__NoiseCollector__909_clap.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3718/",children:"https://freesound.org/s/3718/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_min",children:"kick_min"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"117491__ZeSoundResearchInc.__Kick_23_Minimal.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/117491/",children:"https://freesound.org/s/117491/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_sub",children:"kick_sub"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"117493__ZeSoundResearchInc.__Kick_28_Subwoofer_Test.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/117493/",children:"https://freesound.org/s/117493/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_dub",children:"kick_dub"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"171104__dwsd__kick-gettinglaid.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/171104/",children:"https://freesound.org/s/171104/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_vintage",children:"kick_vintage"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"171103__dwsd__kick-dw-vintagehouse.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/171103/",children:"https://freesound.org/s/171103/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_min",children:"hat_min"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"197237__oceanictrancer__custom-hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/197237/",children:"https://freesound.org/s/197237/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_dub",children:"hat_dub"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"250530__oceanictrancer__hi-hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/250530/",children:"https://freesound.org/s/250530/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_min_open",children:"hat_min_open"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"250531__oceanictrancer__shaker-hi-hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/250531/",children:"https://freesound.org/s/250531/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_click",children:"hat_click"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"250537__oceanictrancer__short-click-hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/250537/",children:"https://freesound.org/s/250537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_min",children:"snare_min"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"207928__altemark__snare-8.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/207928/",children:"https://freesound.org/s/207928/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_dub",children:"snare_dub"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"207927__altemark__snare-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/207927/",children:"https://freesound.org/s/207927/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_hvy",children:"snare_hvy"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"207921__altemark__heavy-electro-snare.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/207921/",children:"https://freesound.org/s/207921/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_min",children:"clap_min"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"207913__altemark__bandpass-snap.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/207913/",children:"https://freesound.org/s/207913/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_hi",children:"tom_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209879__veiler__mid-tom.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209879/",children:"https://freesound.org/s/209879/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_lo",children:"tom_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209877__veiler__floor-tom.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209877/",children:"https://freesound.org/s/209877/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_mid",children:"tom_mid"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209875__veiler__lo-tom.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209875/",children:"https://freesound.org/s/209875/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_fat",children:"snare_fat"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209886__veiler__snare-2-fat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209886/",children:"https://freesound.org/s/209886/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_ac",children:"snare_ac"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209883__veiler__ez-bfd-mix-snare.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209883/",children:"https://freesound.org/s/209883/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_step",children:"snare_step"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"238003__alexthegr81__00-hardsnare.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/238003/",children:"https://freesound.org/s/238003/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_dnb",children:"snare_dnb"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"238001__alexthegr81__00-hardsnare-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/238001/",children:"https://freesound.org/s/238001/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_rock",children:"snare_rock"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"493026__veiler__snarefat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/493026/",children:"https://freesound.org/s/493026/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_ua",children:"kick_ua"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"147997__dwsd__kick-ua.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/147997/",children:"https://freesound.org/s/147997/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_house",children:"kick_house"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"147995__dwsd__kick-pretunedhousebd.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/147995/",children:"https://freesound.org/s/147995/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_deep",children:"kick_deep"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"147994__dwsd__deep-house-kick.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/147994/",children:"https://freesound.org/s/147994/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_808",children:"tom_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191637__dwsd__jhd-prc-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191637/",children:"https://freesound.org/s/191637/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_808_semi",children:"hat_808_semi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191632__dwsd__jhd-hat-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191632/",children:"https://freesound.org/s/191632/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_808_open",children:"hat_808_open"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191631__dwsd__jhd-hat-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191631/",children:"https://freesound.org/s/191631/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_808",children:"hat_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191630__dwsd__jhd-hat-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191630/",children:"https://freesound.org/s/191630/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_808_short",children:"clap_808_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191623__dwsd__jhd-clp-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191623/",children:"https://freesound.org/s/191623/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_808",children:"clap_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191621__dwsd__jhd-clp-28.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191621/",children:"https://freesound.org/s/191621/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_808",children:"snare_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191620__dwsd__jhd-clp-37.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191620/",children:"https://freesound.org/s/191620/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_808",children:"kick_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191617__dwsd__jhd-bd-35.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191617/",children:"https://freesound.org/s/191617/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_808_dist",children:"kick_808_dist"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191610__dwsd__jhd-bd-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191610/",children:"https://freesound.org/s/191610/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"nord-mini-kit",children:"Nord Mini Kit"}),"\n",(0,n.jsx)(s.h5,{id:"wood_nord_lo",children:"wood_nord_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167803__menegass__nord-drum-wood-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167803/",children:"https://freesound.org/s/167803/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_nord_mid",children:"wood_nord_mid"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167800__menegass__nord-drum-wood-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167800/",children:"https://freesound.org/s/167800/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_nord_hi",children:"wood_nord_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167798__menegass__nord-drum-wood-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167798/",children:"https://freesound.org/s/167798/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_nord_lo",children:"tom_nord_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167797__menegass__nord-drum-tom-6.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167797/",children:"https://freesound.org/s/167797/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_nord",children:"clap_nord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167791__menegass__nord-drum-clap-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167791/",children:"https://freesound.org/s/167791/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_nord_open",children:"hat_nord_open"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167789__menegass__nord-drum-oh-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167789/",children:"https://freesound.org/s/167789/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_nord",children:"hat_nord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167787__menegass__nord-drum-cc-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167787/",children:"https://freesound.org/s/167787/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_nord_hi",children:"tom_nord_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167783__menegass__nord-drum-tom-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167783/",children:"https://freesound.org/s/167783/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_nord_hi",children:"snare_nord_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167782__menegass__nord-drum-sd-5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167782/",children:"https://freesound.org/s/167782/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_nord",children:"snare_nord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167778__menegass__nord-drum-sd-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167778/",children:"https://freesound.org/s/167778/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_nord_long",children:"kick_nord_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167767__menegass__nord-drum-bd-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167767/",children:"https://freesound.org/s/167767/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_nord",children:"kick_nord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167764__menegass__nord-drum-bd-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167764/",children:"https://freesound.org/s/167764/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"percussion",children:"Percussion"}),"\n",(0,n.jsx)(s.h5,{id:"maracas_808",children:"maracas_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191638__dwsd__jhd-shk-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191638/",children:"https://freesound.org/s/191638/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clave_808",children:"clave_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191636__dwsd__jhd-prc-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191636/",children:"https://freesound.org/s/191636/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"cowbell_808",children:"cowbell_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191635__dwsd__jhd-prc-5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191635/",children:"https://freesound.org/s/191635/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"cymbal_808",children:"cymbal_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191633__dwsd__jhd-cym-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191633/",children:"https://freesound.org/s/191633/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"block",children:"block"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"219158__jagadamba__frogblock04.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/219158/",children:"https://freesound.org/s/219158/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"block_lo",children:"block_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"219159__jagadamba__frogblock03.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/219159/",children:"https://freesound.org/s/219159/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"bongo",children:"bongo"}),"\n",(0,n.jsx)(s.h5,{id:"bongo-1",children:"bongo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"219154__jagadamba__bongo04.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/219154/",children:"https://freesound.org/s/219154/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bongo_lo",children:"bongo_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"219156__jagadamba__bongo02.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/219156/",children:"https://freesound.org/s/219156/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"tabla",children:"tabla"}),"\n",(0,n.jsx)(s.h5,{id:"tabla_01",children:"tabla_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130407__dio-333__dhec.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130407/",children:"https://freesound.org/s/130407/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_02",children:"tabla_02"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130414__dio-333__ghe-8.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130414/",children:"https://freesound.org/s/130414/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_03",children:"tabla_03"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130405__dio-333__ghe-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130405/",children:"https://freesound.org/s/130405/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_hi_long",children:"tabla_hi_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130422__dio-333__na-open.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130422/",children:"https://freesound.org/s/130422/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_hi_short",children:"tabla_hi_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130428__dio-333__na-sharp.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130428/",children:"https://freesound.org/s/130428/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_hi",children:"tabla_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130421__dio-333__na.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130421/",children:"https://freesound.org/s/130421/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_lo_long",children:"tabla_lo_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130409__dio-333__ghe-6.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130409/",children:"https://freesound.org/s/130409/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_lo_short",children:"tabla_lo_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130413__dio-333__ke.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130413/",children:"https://freesound.org/s/130413/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_lo",children:"tabla_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130411__dio-333__ghe-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130411/",children:"https://freesound.org/s/130411/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_mid_long",children:"tabla_mid_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130416__dio-333__tun.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130416/",children:"https://freesound.org/s/130416/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_mid_short",children:"tabla_mid_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130424__dio-333__ke-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130424/",children:"https://freesound.org/s/130424/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_mid",children:"tabla_mid"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130417__dio-333__te-ne.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130417/",children:"https://freesound.org/s/130417/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"strings",children:"Strings"}),"\n",(0,n.jsx)(s.h4,{id:"harp",children:"harp"}),"\n",(0,n.jsx)(s.h5,{id:"harp_down",children:"harp_down"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"436129__cunningar0807__harp-glissando-down.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/436129/",children:"https://freesound.org/s/436129/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_up",children:"harp_up"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"436128__cunningar0807__harp-glissando-up.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/436128/",children:"https://freesound.org/s/436128/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_g5",children:"harp_g5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373573__samulis__harp-f-5-ksharp-g5-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373573/",children:"https://freesound.org/s/373573/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_g3",children:"harp_g3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373572__samulis__harp-f-3-ksharp-g3-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373572/",children:"https://freesound.org/s/373572/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_f4",children:"harp_f4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373570__samulis__harp-e-4-ksharp-f4-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373570/",children:"https://freesound.org/s/373570/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_e5",children:"harp_e5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373568__samulis__harp-e5-ksharp-e5-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373568/",children:"https://freesound.org/s/373568/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_e3",children:"harp_e3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373567__samulis__harp-e3-ksharp-e3-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373567/",children:"https://freesound.org/s/373567/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_d4",children:"harp_d4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373565__samulis__harp-d4-ksharp-d4-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373565/",children:"https://freesound.org/s/373565/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_c5",children:"harp_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373563__samulis__harp-c5-ksharp-c5-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373563/",children:"https://freesound.org/s/373563/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_c3",children:"harp_c3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373562__samulis__harp-c3-ksharp-c3-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373562/",children:"https://freesound.org/s/373562/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_b5",children:"harp_b5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373560__samulis__harp-b5-ksharp-b5-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373560/",children:"https://freesound.org/s/373560/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_b3",children:"harp_b3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373559__samulis__harp-b3-ksharp-b3-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373559/",children:"https://freesound.org/s/373559/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_a4",children:"harp_a4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373556__samulis__harp-a4-ksharp-a4-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373556/",children:"https://freesound.org/s/373556/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_a2",children:"harp_a2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373555__samulis__harp-a2-ksharp-a2-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373555/",children:"https://freesound.org/s/373555/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"violin",children:"violin"}),"\n",(0,n.jsx)(s.h5,{id:"violin_g",children:"violin_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56225__ldk1609__violin_spiccato_G2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56225/",children:"https://freesound.org/s/56225/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_f",children:"violin_f"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56218__ldk1609__violin_spiccato_F3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56218/",children:"https://freesound.org/s/56218/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_e",children:"violin_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56212__ldk1609__violin_spiccato_E3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56212/",children:"https://freesound.org/s/56212/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_d",children:"violin_d"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56209__ldk1609__violin_spiccato_D3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56209/",children:"https://freesound.org/s/56209/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_c",children:"violin_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56203__ldk1609__violin_spiccato_C3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56203/",children:"https://freesound.org/s/56203/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_b",children:"violin_b"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56196__ldk1609__violin_spiccato_B2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56196/",children:"https://freesound.org/s/56196/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_a",children:"violin_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56192__ldk1609__violin_spiccato_A2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56192/",children:"https://freesound.org/s/56192/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"pluck",children:"pluck"}),"\n",(0,n.jsx)(s.h5,{id:"pluck_g",children:"pluck_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55992__ldk1609__violin_pizz_non_vib_G2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55992/",children:"https://freesound.org/s/55992/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_f",children:"pluck_f"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55985__ldk1609__violin_pizz_non_vib_F3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55985/",children:"https://freesound.org/s/55985/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_e",children:"pluck_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55979__ldk1609__violin_pizz_non_vib_E3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55979/",children:"https://freesound.org/s/55979/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_d",children:"pluck_d"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55976__ldk1609__violin_pizz_non_vib_D3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55976/",children:"https://freesound.org/s/55976/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_c",children:"pluck_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55970__ldk1609__violin_pizz_non_vib_C3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55970/",children:"https://freesound.org/s/55970/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_b",children:"pluck_b"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55963__ldk1609__violin_pizz_non_vib_B2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55963/",children:"https://freesound.org/s/55963/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_a",children:"pluck_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55959__ldk1609__violin_pizz_non_vib_A2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55959/",children:"https://freesound.org/s/55959/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"keys",children:"Keys"}),"\n",(0,n.jsx)(s.h4,{id:"piano",children:"piano"}),"\n",(0,n.jsx)(s.h5,{id:"piano_g",children:"piano_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562761__ion__g3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562761/",children:"https://freesound.org/s/562761/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_e",children:"piano_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562760__ion__e3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562760/",children:"https://freesound.org/s/562760/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_f",children:"piano_f"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562759__ion__f3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562759/",children:"https://freesound.org/s/562759/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_d",children:"piano_d"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562756__ion__d3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562756/",children:"https://freesound.org/s/562756/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_a",children:"piano_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562754__ion__a3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562754/",children:"https://freesound.org/s/562754/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_b",children:"piano_b"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562752__ion__b3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562752/",children:"https://freesound.org/s/562752/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_c",children:"piano_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562751__ion__c3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562751/",children:"https://freesound.org/s/562751/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"rhodes",children:"rhodes"}),"\n",(0,n.jsx)(s.h5,{id:"rhodes_8bit",children:"rhodes_8bit"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"147998__dwsd__g-126-8bitrhod-rhde.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/147998/",children:"https://freesound.org/s/147998/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution Noncommercial"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"woodwinds--flutes",children:"Woodwinds / Flutes"}),"\n",(0,n.jsx)(s.h4,{id:"flute",children:"flute"}),"\n",(0,n.jsx)(s.h5,{id:"flute_e4",children:"flute_e4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373313__samulis__flute-expressive-sustain-e5-ldflute-expvib-e4-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373313/",children:"https://freesound.org/s/373313/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_e3",children:"flute_e3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373311__samulis__flute-expressive-sustain-e4-ldflute-expvib-e3-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373311/",children:"https://freesound.org/s/373311/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_c5",children:"flute_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373307__samulis__flute-expressive-sustain-c6-ldflute-expvib-c5-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373307/",children:"https://freesound.org/s/373307/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_c4",children:"flute_c4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373306__samulis__flute-expressive-sustain-c5-ldflute-expvib-c4-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373306/",children:"https://freesound.org/s/373306/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_c3",children:"flute_c3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373305__samulis__flute-expressive-sustain-c4-ldflute-expvib-c3-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373305/",children:"https://freesound.org/s/373305/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_a4",children:"flute_a4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373303__samulis__flute-expressive-sustain-a5-ldflute-expvib-a4-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373303/",children:"https://freesound.org/s/373303/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_a3",children:"flute_a3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373302__samulis__flute-expressive-sustain-a4-ldflute-expvib-a3-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373302/",children:"https://freesound.org/s/373302/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"oboe",children:"oboe"}),"\n",(0,n.jsx)(s.h5,{id:"oboe_f4",children:"oboe_f4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373672__samulis__oboe-vibrato-e-5-oboe-vib-f4-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373672/",children:"https://freesound.org/s/373672/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_f3",children:"oboe_f3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373671__samulis__oboe-vibrato-e-4-oboe-vib-f3-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373671/",children:"https://freesound.org/s/373671/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_d4",children:"oboe_d4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373669__samulis__oboe-vibrato-d5-oboe-vib-d4-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373669/",children:"https://freesound.org/s/373669/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_d3",children:"oboe_d3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373668__samulis__oboe-vibrato-d4-oboe-vib-d3-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373668/",children:"https://freesound.org/s/373668/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_a3",children:"oboe_a3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373666__samulis__oboe-vibrato-a-4-oboe-vib-a-3-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373666/",children:"https://freesound.org/s/373666/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_a2",children:"oboe_a2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373665__samulis__oboe-vibrato-a-3-oboe-vib-a-2-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373665/",children:"https://freesound.org/s/373665/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"clarinet",children:"clarinet"}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_f3",children:"clarinet_f3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372952__samulis__clarinet-long-sustain-e-4-dcclar-suslong-f3-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372952/",children:"https://freesound.org/s/372952/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_f2",children:"clarinet_f2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372951__samulis__clarinet-long-sustain-e-3-dcclar-suslong-f2-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372951/",children:"https://freesound.org/s/372951/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_d3",children:"clarinet_d3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372947__samulis__clarinet-long-sustain-d4-dcclar-suslong-d3-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372947/",children:"https://freesound.org/s/372947/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_d2",children:"clarinet_d2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372946__samulis__clarinet-long-sustain-d3-dcclar-suslong-d2-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372946/",children:"https://freesound.org/s/372946/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_a3",children:"clarinet_a3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372944__samulis__clarinet-long-sustain-a-4-dcclar-suslong-a-3-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372944/",children:"https://freesound.org/s/372944/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_a2",children:"clarinet_a2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372943__samulis__clarinet-long-sustain-a-3-dcclar-suslong-a-2-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372943/",children:"https://freesound.org/s/372943/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"idiophonic",children:"Idiophonic"}),"\n",(0,n.jsx)(s.h4,{id:"marimba",children:"marimba"}),"\n",(0,n.jsx)(s.h5,{id:"marimba_g4",children:"marimba_g4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373586__samulis__marimba-f-5-marimba-hit-outrigger-g4-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373586/",children:"https://freesound.org/s/373586/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_g2",children:"marimba_g2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373585__samulis__marimba-f-3-marimba-hit-outrigger-g2-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373585/",children:"https://freesound.org/s/373585/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_f3",children:"marimba_f3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373583__samulis__marimba-e-4-marimba-hit-outrigger-f3-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373583/",children:"https://freesound.org/s/373583/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_c4",children:"marimba_c4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373580__samulis__marimba-c5-marimba-hit-outrigger-c4-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373580/",children:"https://freesound.org/s/373580/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_c2",children:"marimba_c2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373579__samulis__marimba-c3-marimba-hit-outrigger-c2-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373579/",children:"https://freesound.org/s/373579/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_b2",children:"marimba_b2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373577__samulis__marimba-b3-marimba-hit-outrigger-b2-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373577/",children:"https://freesound.org/s/373577/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"kalimba",children:"kalimba"}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_ab",children:"kalimba_ab"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175582__sergeeo__kalimba-note-g.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175582/",children:"https://freesound.org/s/175582/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_g",children:"kalimba_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175579__sergeeo__kalimba-note-g.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175579/",children:"https://freesound.org/s/175579/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_e",children:"kalimba_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175570__sergeeo__kalimba-note-e.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175570/",children:"https://freesound.org/s/175570/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_cis",children:"kalimba_cis"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175568__sergeeo__note-c.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175568/",children:"https://freesound.org/s/175568/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_a",children:"kalimba_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175562__sergeeo__kalimba-note-a.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175562/",children:"https://freesound.org/s/175562/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"bamboo",children:"bamboo"}),"\n",(0,n.jsx)(s.h5,{id:"bamboo_g",children:"bamboo_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130533__stomachache__g2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130533/",children:"https://freesound.org/s/130533/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bamboo_a",children:"bamboo_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130529__stomachache__a2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130529/",children:"https://freesound.org/s/130529/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bamboo_c",children:"bamboo_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130527__stomachache__c-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130527/",children:"https://freesound.org/s/130527/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bamboo_f",children:"bamboo_f"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130523__stomachache__f-low-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130523/",children:"https://freesound.org/s/130523/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"singing-bowl",children:"singing bowl"}),"\n",(0,n.jsx)(s.h5,{id:"bowl_hi",children:"bowl_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"122650__juskiddink__Singing_bowl.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/122650/",children:"https://freesound.org/s/122650/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bowl_lo",children:"bowl_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"59534__juskiddink__Bell1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/59534/",children:"https://freesound.org/s/59534/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bowl_mid",children:"bowl_mid"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"122647__juskiddink__Singing_bowl_2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/122647/",children:"https://freesound.org/s/122647/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"chimes",children:"chimes"}),"\n",(0,n.jsx)(s.h5,{id:"chimes_chord",children:"chimes_chord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"131977__juskiddink__three-chord-chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/131977/",children:"https://freesound.org/s/131977/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"chimes_chord_01",children:"chimes_chord_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"131977__juskiddink__three-chord-chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/131977/",children:"https://freesound.org/s/131977/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"chimes_chord_02",children:"chimes_chord_02"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"131977__juskiddink__three-chord-chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/131977/",children:"https://freesound.org/s/131977/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"chimes-1",children:"chimes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"86277__juskiddink__Chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/86277/",children:"https://freesound.org/s/86277/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"chimes_hi",children:"chimes_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"257555__jagadamba__bar-chimes-v6-aluminium-8mm-wind.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/257555/",children:"https://freesound.org/s/257555/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bell",children:"bell"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"254756__jagadamba__ceramic-bell-02.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/254756/",children:"https://freesound.org/s/254756/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"gong_hi",children:"gong_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"86773__juskiddink__Gong.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/86773/",children:"https://freesound.org/s/86773/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"gong_lo",children:"gong_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"122681__juskiddink__Gong_3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/122681/",children:"https://freesound.org/s/122681/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"tubular-bell",children:"tubular bell"}),"\n",(0,n.jsx)(s.h5,{id:"bell_g4",children:"bell_g4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374275__samulis__tubular-bells-f-4-tb-hit-g4-v4-rr1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374275/",children:"https://freesound.org/s/374275/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bell_c5",children:"bell_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374274__samulis__tubular-bells-c5-tb-hit-c5-v4-rr1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374274/",children:"https://freesound.org/s/374274/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bell_c4",children:"bell_c4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374273__samulis__tubular-bells-c4-tb-hit-c4-v4-rr1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374273/",children:"https://freesound.org/s/374273/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bell_f5",children:"bell_f5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374272__samulis__tubular-bells-e-5-tb-hit-f5-v3-rr1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374272/",children:"https://freesound.org/s/374272/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"xylophone",children:"xylophone"}),"\n",(0,n.jsx)(s.h5,{id:"xylo_g5",children:"xylo_g5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374705__samulis__xylophone-f-5-xylo-medium-g5-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374705/",children:"https://freesound.org/s/374705/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_g4",children:"xylo_g4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374704__samulis__xylophone-f-4-xylo-medium-g4-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374704/",children:"https://freesound.org/s/374704/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_g3",children:"xylo_g3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374703__samulis__xylophone-f-3-xylo-medium-g3-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374703/",children:"https://freesound.org/s/374703/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_c6",children:"xylo_c6"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374701__samulis__xylophone-c6-xylo-medium-c6-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374701/",children:"https://freesound.org/s/374701/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_c5",children:"xylo_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374700__samulis__xylophone-c5-xylo-medium-c5-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374700/",children:"https://freesound.org/s/374700/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_c4",children:"xylo_c4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374699__samulis__xylophone-c4-xylo-medium-c4-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374699/",children:"https://freesound.org/s/374699/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"glockenspiel",children:"glockenspiel"}),"\n",(0,n.jsx)(s.h5,{id:"glock_g5",children:"glock_g5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373368__samulis__glockenspiel-f-5-glock-medium-g5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373368/",children:"https://freesound.org/s/373368/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"glock_g4",children:"glock_g4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373367__samulis__glockenspiel-f-4-glock-medium-g4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373367/",children:"https://freesound.org/s/373367/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"glock_c6",children:"glock_c6"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373365__samulis__glockenspiel-c6-glock-medium-c6.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373365/",children:"https://freesound.org/s/373365/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"glock_c5",children:"glock_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373364__samulis__glockenspiel-c5-glock-medium-c5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373364/",children:"https://freesound.org/s/373364/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"music-box",children:"music box"}),"\n",(0,n.jsx)(s.h5,{id:"box_g5",children:"box_g5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28160__CommanderRobot__clean_sol_4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28160/",children:"https://freesound.org/s/28160/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_g3",children:"box_g3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28159__CommanderRobot__clean_sol_3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28159/",children:"https://freesound.org/s/28159/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_d6",children:"box_d6"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28155__CommanderRobot__clean_re_2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28155/",children:"https://freesound.org/s/28155/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_d5",children:"box_d5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28154__CommanderRobot__clean_re_1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28154/",children:"https://freesound.org/s/28154/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_c5",children:"box_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28144__CommanderRobot__clean_do_1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28144/",children:"https://freesound.org/s/28144/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_b4",children:"box_b4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28141__CommanderRobot__clean_ci_3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28141/",children:"https://freesound.org/s/28141/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_b5",children:"box_b5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28140__CommanderRobot__clean_ci_2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28140/",children:"https://freesound.org/s/28140/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"vocal",children:"Vocal"}),"\n",(0,n.jsx)(s.h4,{id:"choir",children:"choir"}),"\n",(0,n.jsx)(s.h5,{id:"choir_o",children:"choir_o"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"65195__uair01__chamber_choir_chord_o.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/65195/",children:"https://freesound.org/s/65195/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"choir_01",children:"choir_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"117891__dobroide__20110409.choir.01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/117891/",children:"https://freesound.org/s/117891/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"choir_02",children:"choir_02"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"192691__klankbeeld__choir-nec-invenit-requiem-130525-14.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/192691/",children:"https://freesound.org/s/192691/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"choir_03",children:"choir_03"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"69311__uair01__LS100422_choir_rehearsal_Utrecht_01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/69311/",children:"https://freesound.org/s/69311/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"foley",children:"Foley"}),"\n",(0,n.jsx)(s.h5,{id:"wood_hit",children:"wood_hit"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"103997__rutgermuller__Wood_Hit_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/103997/",children:"https://freesound.org/s/103997/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_metal",children:"wood_metal"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104003__rutgermuller__Wood_Metal_Chain_Smash_Hall_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104003/",children:"https://freesound.org/s/104003/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_plate",children:"wood_plate"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"103996__rutgermuller__Jumping_On_Wooden_Plate_Hall_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/103996/",children:"https://freesound.org/s/103996/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"scrape",children:"scrape"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104007__rutgermuller__Wood_Scraping_6_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104007/",children:"https://freesound.org/s/104007/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"scrape_01",children:"scrape_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104010__rutgermuller__Wood_Scraping_Close_3_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104010/",children:"https://freesound.org/s/104010/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"door",children:"door"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104103__rutgermuller__Door_Squeaks_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104103/",children:"https://freesound.org/s/104103/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"shatter",children:"shatter"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"221528__unfa__glass-break.flac"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/221528/",children:"https://freesound.org/s/221528/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tongue",children:"tongue"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"387793__jagadamba__tongue-mouth-pop-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/387793/",children:"https://freesound.org/s/387793/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tongue_lo",children:"tongue_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"387797__jagadamba__tongue-mouth-pop-7.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/387797/",children:"https://freesound.org/s/387797/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"metal",children:"metal"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"387724__jagadamba__metal-drum-8.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/387724/",children:"https://freesound.org/s/387724/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"metal_lo",children:"metal_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"387727__jagadamba__metal-drum-5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/387727/",children:"https://freesound.org/s/387727/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wobble",children:"wobble"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"254396__jagadamba__wobble-board.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/254396/",children:"https://freesound.org/s/254396/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wobble_02",children:"wobble_02"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"254401__jagadamba__wobble-board.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/254401/",children:"https://freesound.org/s/254401/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"ambient",children:"Ambient"}),"\n",(0,n.jsx)(s.h5,{id:"drone_cymbal",children:"drone_cymbal"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104092__rutgermuller__Cymbal_Close_3_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104092/",children:"https://freesound.org/s/104092/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"drone_cymbal_01",children:"drone_cymbal_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104090__rutgermuller__Cymbal_Close_1_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104090/",children:"https://freesound.org/s/104090/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_a",children:"noise_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50695__rutgermuller__Analogue_Glitches_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50695/",children:"https://freesound.org/s/50695/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"loops",children:"Loops"}),"\n",(0,n.jsxs)(s.p,{children:["Loops are samples best used for stretching to a full bar and looping with ",(0,n.jsx)(s.code,{children:"new loop"}),". But they can be used with ",(0,n.jsx)(s.code,{children:"new sample"})," too!"]}),"\n",(0,n.jsx)(s.h3,{id:"breakbeats",children:"Breakbeats"}),"\n",(0,n.jsx)(s.h5,{id:"amen",children:"amen"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"202537__gowers__140-bpm-amen-break-original-processed.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/202537/",children:"https://freesound.org/s/202537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"amen_alt",children:"amen_alt"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"202537__gowers__140-bpm-amen-break-original-processed.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/202537/",children:"https://freesound.org/s/202537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"amen_fill",children:"amen_fill"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"202537__gowers__140-bpm-amen-break-original-processed.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/202537/",children:"https://freesound.org/s/202537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"amen_break",children:"amen_break"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"202537__gowers__140-bpm-amen-break-original-processed.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/202537/",children:"https://freesound.org/s/202537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"house",children:"house"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"148005__dwsd__drumloop126-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/148005/",children:"https://freesound.org/s/148005/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution Noncommercial"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"idiophonic-1",children:"Idiophonic"}),"\n",(0,n.jsx)(s.h5,{id:"chimes_l",children:"chimes_l"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"131979__juskiddink__chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/131979/",children:"https://freesound.org/s/131979/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"foley-1",children:"Foley"}),"\n",(0,n.jsx)(s.h5,{id:"wood_l",children:"wood_l"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104011__rutgermuller__Wood_Scraping_Hall_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104011/",children:"https://freesound.org/s/104011/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_l_01",children:"wood_l_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104009__rutgermuller__Wood_Scraping_Close_2_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104009/",children:"https://freesound.org/s/104009/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wiper",children:"wiper"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50768__rutgermuller__Windshield_Wiper_In_Car_www.rutgermuller.nl_.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50768/",children:"https://freesound.org/s/50768/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wiper_out",children:"wiper_out"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50770__rutgermuller__Windshield_Wiper_Outside_2_www.rutgermuller.nl_.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50770/",children:"https://freesound.org/s/50770/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"noise",children:"Noise"}),"\n",(0,n.jsx)(s.h5,{id:"noise_c",children:"noise_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"411461__rutgermuller__cablenoise.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/411461/",children:"https://freesound.org/s/411461/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_e",children:"noise_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104080__rutgermuller__Electrical_Noises_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104080/",children:"https://freesound.org/s/104080/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_e_01",children:"noise_e_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50909__rutgermuller__electric_noise_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50909/",children:"https://freesound.org/s/50909/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_mw",children:"noise_mw"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50749__rutgermuller__Microwave_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50749/",children:"https://freesound.org/s/50749/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_p",children:"noise_p"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50726__rutgermuller__Harsh_Noise_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50726/",children:"https://freesound.org/s/50726/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_r",children:"noise_r"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50750__rutgermuller__Radio_Noise_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50750/",children:"https://freesound.org/s/50750/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"sample-credits",children:"Sample Credits"}),"\n",(0,n.jsx)(s.p,{children:"This pack of sounds contains sounds by the following users:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["NoiseCollector ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/NoiseCollector/",children:"https://freesound.org/people/NoiseCollector/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["ZeSoundResearchInc. ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/ZeSoundResearchInc./",children:"https://freesound.org/people/ZeSoundResearchInc./"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["DWSD ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/",children:"https://freesound.org/people/DWSD/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["waveplay_old ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/waveplay_old/",children:"https://freesound.org/people/waveplay_old/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["altemark ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/altemark/",children:"https://freesound.org/people/altemark/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["Veiler ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/Veiler/",children:"https://freesound.org/people/Veiler/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["alexthegr81 ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/alexthegr81/",children:"https://freesound.org/people/alexthegr81/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["stomachache ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/stomachache/",children:"https://freesound.org/people/stomachache/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["uair01 ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/uair01/",children:"https://freesound.org/people/uair01/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["dobroide ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/dobroide/",children:"https://freesound.org/people/dobroide/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["klankbeeld ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/klankbeeld/",children:"https://freesound.org/people/klankbeeld/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["RutgerMuller ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/",children:"https://freesound.org/people/RutgerMuller/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["juskiddink ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/juskiddink/",children:"https://freesound.org/people/juskiddink/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["unfa ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/unfa/",children:"https://freesound.org/people/unfa/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["Cunningar0807 ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/Cunningar0807/",children:"https://freesound.org/people/Cunningar0807/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["mmiron ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/mmiron/",children:"https://freesound.org/people/mmiron/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["ldk1609 ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/ldk1609/",children:"https://freesound.org/people/ldk1609/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["gowers ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/gowers/",children:"https://freesound.org/people/gowers/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["ion_ ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/ion_/",children:"https://freesound.org/people/ion_/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["Jagadamba ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/Jagadamba/",children:"https://freesound.org/people/Jagadamba/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["sergeeo ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/sergeeo/",children:"https://freesound.org/people/sergeeo/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["menegass ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/menegass/",children:"https://freesound.org/people/menegass/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["Samulis ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/",children:"https://freesound.org/people/Samulis/"})," )"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"You can find the packs online at:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/NoiseCollector/packs/219/",children:"https://freesound.org/people/NoiseCollector/packs/219/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/ZeSoundResearchInc./packs/7375/",children:"https://freesound.org/people/ZeSoundResearchInc./packs/7375/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/packs/10679/",children:"https://freesound.org/people/DWSD/packs/10679/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/waveplay_old/packs/12570/",children:"https://freesound.org/people/waveplay_old/packs/12570/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/altemark/packs/13232/",children:"https://freesound.org/people/altemark/packs/13232/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Veiler/packs/13344/",children:"https://freesound.org/people/Veiler/packs/13344/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Veiler/packs/13345/",children:"https://freesound.org/people/Veiler/packs/13345/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/alexthegr81/packs/14600/",children:"https://freesound.org/people/alexthegr81/packs/14600/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/stomachache/packs/8170/",children:"https://freesound.org/people/stomachache/packs/8170/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/uair01/packs/4311/",children:"https://freesound.org/people/uair01/packs/4311/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/dobroide/packs/7573/",children:"https://freesound.org/people/dobroide/packs/7573/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/klankbeeld/packs/10770/",children:"https://freesound.org/people/klankbeeld/packs/10770/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/3273/",children:"https://freesound.org/people/RutgerMuller/packs/3273/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/juskiddink/packs/5069/",children:"https://freesound.org/people/juskiddink/packs/5069/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/6618/",children:"https://freesound.org/people/RutgerMuller/packs/6618/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/3254/",children:"https://freesound.org/people/RutgerMuller/packs/3254/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/3283/",children:"https://freesound.org/people/RutgerMuller/packs/3283/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/3268/",children:"https://freesound.org/people/RutgerMuller/packs/3268/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/unfa/packs/14014/",children:"https://freesound.org/people/unfa/packs/14014/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Cunningar0807/packs/24779/",children:"https://freesound.org/people/Cunningar0807/packs/24779/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/mmiron/packs/8162/",children:"https://freesound.org/people/mmiron/packs/8162/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/ldk1609/packs/3578/",children:"https://freesound.org/people/ldk1609/packs/3578/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/ldk1609/packs/3561/",children:"https://freesound.org/people/ldk1609/packs/3561/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/packs/9115/",children:"https://freesound.org/people/DWSD/packs/9115/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/gowers/packs/12911/",children:"https://freesound.org/people/gowers/packs/12911/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/packs/9116/",children:"https://freesound.org/people/DWSD/packs/9116/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/packs/12146/",children:"https://freesound.org/people/DWSD/packs/12146/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/ion_/packs/31585/",children:"https://freesound.org/people/ion_/packs/31585/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Jagadamba/packs/13878/",children:"https://freesound.org/people/Jagadamba/packs/13878/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/sergeeo/packs/11046/",children:"https://freesound.org/people/sergeeo/packs/11046/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/menegass/packs/10430/",children:"https://freesound.org/people/menegass/packs/10430/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21033/",children:"https://freesound.org/people/Samulis/packs/21033/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21025/",children:"https://freesound.org/people/Samulis/packs/21025/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21013/",children:"https://freesound.org/people/Samulis/packs/21013/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21054/",children:"https://freesound.org/people/Samulis/packs/21054/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21029/",children:"https://freesound.org/people/Samulis/packs/21029/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21065/",children:"https://freesound.org/people/Samulis/packs/21065/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21030/",children:"https://freesound.org/people/Samulis/packs/21030/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21027/",children:"https://freesound.org/people/Samulis/packs/21027/"})}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.em,{children:"Note: Audiofiles may have been editted slightly to fit the Mercury Live Coding environment better"})}),"\n",(0,n.jsx)(s.h2,{id:"waveforms",children:"Waveforms"}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.mdxAdmonitionTitle,{children:["Single Cycle Waveforms are only used in Mercury4Max, MercuryPlayground only uses the basic waveforms ",(0,n.jsx)(s.code,{children:"sine"}),", ",(0,n.jsx)(s.code,{children:"saw"})," ",(0,n.jsx)(s.code,{children:"square"}),", ",(0,n.jsx)(s.code,{children:"triangle"})]})}),"\n",(0,n.jsx)(s.p,{children:"All single cycle waveforms thanks to the amazing AWKF pack. AKWF or Adventure Kid Waveforms is a collection of one cycle waveforms to be used within synthesizers or other kinds of sound generators."}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-"})}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"sine",children:"sine"}),"\n",(0,n.jsx)(s.p,{children:"Part of the basic waveforms"}),"\n",(0,n.jsx)(s.h4,{id:"saw",children:"saw"}),"\n",(0,n.jsx)(s.p,{children:"Part of the basic waveforms"}),"\n",(0,n.jsx)(s.h4,{id:"square",children:"square"}),"\n",(0,n.jsx)(s.p,{children:"Part of the basic waveforms"}),"\n",(0,n.jsx)(s.h4,{id:"triangle",children:"triangle"}),"\n",(0,n.jsx)(s.p,{children:"Part of the basic waveforms"}),"\n",(0,n.jsx)(s.h4,{id:"altosax",children:"altosax"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_altosax_0025.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"bit",children:"bit"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_bitreduced_0013.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bit_1",children:"bit_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_bitreduced_0011.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bit_2",children:"bit_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_bitreduced_0016.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bit_3",children:"bit_3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_bitreduced_0038.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"blend",children:"blend"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_blended_0058.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"cello",children:"cello"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_cello_0015.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"cello_1",children:"cello_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_cello_0007.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"cello_2",children:"cello_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_cello_0008.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"dbass",children:"dbass"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_dbass_0003.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"dbass_1",children:"dbass_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_dbass_0008.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"dbass_2",children:"dbass_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_dbass_0013.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"distorted",children:"distorted"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_distorted_0013.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"distorted_1",children:"distorted_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_distorted_0011.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"distorted_2",children:"distorted_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_distorted_0019.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"ebass",children:"ebass"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_ebass_0009.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"ebass_1",children:"ebass_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_ebass_0001.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"ebass_2",children:"ebass_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_ebass_0005.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"eorgan",children:"eorgan"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_eorgan_0018.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"eorgan_1",children:"eorgan_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_eorgan_0026.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"eorgan_2",children:"eorgan_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_eorgan_0059.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"eorgan_3",children:"eorgan_3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_eorgan_0083.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"guitar",children:"guitar"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_aguitar_0002.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"raw",children:"raw"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_raw_0009.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"raw_1",children:"raw_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_raw_0005.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"raw_2",children:"raw_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_raw_0012.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"saw_1",children:"saw_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_R_asym_saw_10.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"saw_2",children:"saw_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_saw_0002.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"square-1",children:"square"}),"\n",(0,n.jsx)(s.h5,{id:"square_1",children:"square_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_rSymSqu_06.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"square_2",children:"square_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_squ_0006.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"voice",children:"voice"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0044.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"voice_a",children:"voice_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0010.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"voice_i",children:"voice_i"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0012.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"voice_eu",children:"voice_eu"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0031.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"voice_o",children:"voice_o"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0036.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]})]})}function a(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(t,{...e})}):t(e)}},8453:(e,s,l)=>{l.d(s,{R:()=>d,x:()=>h});var n=l(6540);const r={},i=n.createContext(r);function d(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[866],{7428:(e,s,l)=>{l.r(s),l.d(s,{assets:()=>o,contentTitle:()=>d,default:()=>a,frontMatter:()=>i,metadata:()=>h,toc:()=>c});var n=l(4848),r=l(8453);const i={sidebar_position:0,id:"sounds"},d="\ud83d\udce2 Sounds in Mercury",h={id:"usage/sounds",title:"\ud83d\udce2 Sounds in Mercury",description:"Most of the sounds in Mercury are from freesound.org and are licensed with Creative Commons Attribution or Creative Commons 0 licenses. If not downloaded from freesound it is made sure that the license allows you to redistribute the sounds via the Mercury environment and that you can use them in your projects. All the sounds are listed below with their original source, license and credits.",source:"@site/docs/usage/sounds.md",sourceDirName:"usage",slug:"/usage/sounds",permalink:"/mercury/docs/usage/sounds",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0,id:"sounds"},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udcda How To's",permalink:"/mercury/docs/usage/howto"},next:{title:"\ud83d\udedd MercuryPlayground Overview",permalink:"/mercury/docs/usage/playground-overview"}},o={},c=[{value:"One-shots",id:"one-shots",level:2},{value:"Drums",id:"drums",level:3},{value:"snare_909",id:"snare_909",level:5},{value:"snare_909_short",id:"snare_909_short",level:5},{value:"kick_909_long",id:"kick_909_long",level:5},{value:"kick_909",id:"kick_909",level:5},{value:"kick_909_dist",id:"kick_909_dist",level:5},{value:"kick_909_dist_long",id:"kick_909_dist_long",level:5},{value:"hat_909",id:"hat_909",level:5},{value:"hat_909_short",id:"hat_909_short",level:5},{value:"hat_909_open",id:"hat_909_open",level:5},{value:"hat_909_half",id:"hat_909_half",level:5},{value:"clap_909",id:"clap_909",level:5},{value:"kick_min",id:"kick_min",level:5},{value:"kick_sub",id:"kick_sub",level:5},{value:"kick_dub",id:"kick_dub",level:5},{value:"kick_vintage",id:"kick_vintage",level:5},{value:"hat_min",id:"hat_min",level:5},{value:"hat_dub",id:"hat_dub",level:5},{value:"hat_min_open",id:"hat_min_open",level:5},{value:"hat_click",id:"hat_click",level:5},{value:"snare_min",id:"snare_min",level:5},{value:"snare_dub",id:"snare_dub",level:5},{value:"snare_hvy",id:"snare_hvy",level:5},{value:"clap_min",id:"clap_min",level:5},{value:"tom_hi",id:"tom_hi",level:5},{value:"tom_lo",id:"tom_lo",level:5},{value:"tom_mid",id:"tom_mid",level:5},{value:"snare_fat",id:"snare_fat",level:5},{value:"snare_ac",id:"snare_ac",level:5},{value:"snare_step",id:"snare_step",level:5},{value:"snare_dnb",id:"snare_dnb",level:5},{value:"snare_rock",id:"snare_rock",level:5},{value:"kick_ua",id:"kick_ua",level:5},{value:"kick_house",id:"kick_house",level:5},{value:"kick_deep",id:"kick_deep",level:5},{value:"tom_808",id:"tom_808",level:5},{value:"hat_808_semi",id:"hat_808_semi",level:5},{value:"hat_808_open",id:"hat_808_open",level:5},{value:"hat_808",id:"hat_808",level:5},{value:"clap_808_short",id:"clap_808_short",level:5},{value:"clap_808",id:"clap_808",level:5},{value:"snare_808",id:"snare_808",level:5},{value:"kick_808",id:"kick_808",level:5},{value:"kick_808_dist",id:"kick_808_dist",level:5},{value:"Nord Mini Kit",id:"nord-mini-kit",level:3},{value:"wood_nord_lo",id:"wood_nord_lo",level:5},{value:"wood_nord_mid",id:"wood_nord_mid",level:5},{value:"wood_nord_hi",id:"wood_nord_hi",level:5},{value:"tom_nord_lo",id:"tom_nord_lo",level:5},{value:"clap_nord",id:"clap_nord",level:5},{value:"hat_nord_open",id:"hat_nord_open",level:5},{value:"hat_nord",id:"hat_nord",level:5},{value:"tom_nord_hi",id:"tom_nord_hi",level:5},{value:"snare_nord_hi",id:"snare_nord_hi",level:5},{value:"snare_nord",id:"snare_nord",level:5},{value:"kick_nord_long",id:"kick_nord_long",level:5},{value:"kick_nord",id:"kick_nord",level:5},{value:"Percussion",id:"percussion",level:3},{value:"maracas_808",id:"maracas_808",level:5},{value:"clave_808",id:"clave_808",level:5},{value:"cowbell_808",id:"cowbell_808",level:5},{value:"cymbal_808",id:"cymbal_808",level:5},{value:"block",id:"block",level:5},{value:"block_lo",id:"block_lo",level:5},{value:"bongo",id:"bongo",level:4},{value:"bongo",id:"bongo-1",level:5},{value:"bongo_lo",id:"bongo_lo",level:5},{value:"tabla",id:"tabla",level:4},{value:"tabla_01",id:"tabla_01",level:5},{value:"tabla_02",id:"tabla_02",level:5},{value:"tabla_03",id:"tabla_03",level:5},{value:"tabla_hi_long",id:"tabla_hi_long",level:5},{value:"tabla_hi_short",id:"tabla_hi_short",level:5},{value:"tabla_hi",id:"tabla_hi",level:5},{value:"tabla_lo_long",id:"tabla_lo_long",level:5},{value:"tabla_lo_short",id:"tabla_lo_short",level:5},{value:"tabla_lo",id:"tabla_lo",level:5},{value:"tabla_mid_long",id:"tabla_mid_long",level:5},{value:"tabla_mid_short",id:"tabla_mid_short",level:5},{value:"tabla_mid",id:"tabla_mid",level:5},{value:"Strings",id:"strings",level:3},{value:"harp",id:"harp",level:4},{value:"harp_down",id:"harp_down",level:5},{value:"harp_up",id:"harp_up",level:5},{value:"harp_g5",id:"harp_g5",level:5},{value:"harp_g3",id:"harp_g3",level:5},{value:"harp_f4",id:"harp_f4",level:5},{value:"harp_e5",id:"harp_e5",level:5},{value:"harp_e3",id:"harp_e3",level:5},{value:"harp_d4",id:"harp_d4",level:5},{value:"harp_c5",id:"harp_c5",level:5},{value:"harp_c3",id:"harp_c3",level:5},{value:"harp_b5",id:"harp_b5",level:5},{value:"harp_b3",id:"harp_b3",level:5},{value:"harp_a4",id:"harp_a4",level:5},{value:"harp_a2",id:"harp_a2",level:5},{value:"violin",id:"violin",level:4},{value:"violin_g",id:"violin_g",level:5},{value:"violin_f",id:"violin_f",level:5},{value:"violin_e",id:"violin_e",level:5},{value:"violin_d",id:"violin_d",level:5},{value:"violin_c",id:"violin_c",level:5},{value:"violin_b",id:"violin_b",level:5},{value:"violin_a",id:"violin_a",level:5},{value:"pluck",id:"pluck",level:4},{value:"pluck_g",id:"pluck_g",level:5},{value:"pluck_f",id:"pluck_f",level:5},{value:"pluck_e",id:"pluck_e",level:5},{value:"pluck_d",id:"pluck_d",level:5},{value:"pluck_c",id:"pluck_c",level:5},{value:"pluck_b",id:"pluck_b",level:5},{value:"pluck_a",id:"pluck_a",level:5},{value:"Keys",id:"keys",level:3},{value:"piano",id:"piano",level:4},{value:"piano_g",id:"piano_g",level:5},{value:"piano_e",id:"piano_e",level:5},{value:"piano_f",id:"piano_f",level:5},{value:"piano_d",id:"piano_d",level:5},{value:"piano_a",id:"piano_a",level:5},{value:"piano_b",id:"piano_b",level:5},{value:"piano_c",id:"piano_c",level:5},{value:"rhodes",id:"rhodes",level:4},{value:"rhodes_8bit",id:"rhodes_8bit",level:5},{value:"Woodwinds Flutes",id:"woodwinds-flutes",level:3},{value:"flute",id:"flute",level:4},{value:"flute_e4",id:"flute_e4",level:5},{value:"flute_e3",id:"flute_e3",level:5},{value:"flute_c5",id:"flute_c5",level:5},{value:"flute_c4",id:"flute_c4",level:5},{value:"flute_c3",id:"flute_c3",level:5},{value:"flute_a4",id:"flute_a4",level:5},{value:"flute_a3",id:"flute_a3",level:5},{value:"oboe",id:"oboe",level:4},{value:"oboe_f4",id:"oboe_f4",level:5},{value:"oboe_f3",id:"oboe_f3",level:5},{value:"oboe_d4",id:"oboe_d4",level:5},{value:"oboe_d3",id:"oboe_d3",level:5},{value:"oboe_a3",id:"oboe_a3",level:5},{value:"oboe_a2",id:"oboe_a2",level:5},{value:"clarinet",id:"clarinet",level:4},{value:"clarinet_f3",id:"clarinet_f3",level:5},{value:"clarinet_f2",id:"clarinet_f2",level:5},{value:"clarinet_d3",id:"clarinet_d3",level:5},{value:"clarinet_d2",id:"clarinet_d2",level:5},{value:"clarinet_a3",id:"clarinet_a3",level:5},{value:"clarinet_a2",id:"clarinet_a2",level:5},{value:"Idiophonic",id:"idiophonic",level:3},{value:"marimba",id:"marimba",level:4},{value:"marimba_g4",id:"marimba_g4",level:5},{value:"marimba_g2",id:"marimba_g2",level:5},{value:"marimba_f3",id:"marimba_f3",level:5},{value:"marimba_c4",id:"marimba_c4",level:5},{value:"marimba_c2",id:"marimba_c2",level:5},{value:"marimba_b2",id:"marimba_b2",level:5},{value:"kalimba",id:"kalimba",level:4},{value:"kalimba_ab",id:"kalimba_ab",level:5},{value:"kalimba_g",id:"kalimba_g",level:5},{value:"kalimba_e",id:"kalimba_e",level:5},{value:"kalimba_cis",id:"kalimba_cis",level:5},{value:"kalimba_a",id:"kalimba_a",level:5},{value:"bamboo",id:"bamboo",level:4},{value:"bamboo_g",id:"bamboo_g",level:5},{value:"bamboo_a",id:"bamboo_a",level:5},{value:"bamboo_c",id:"bamboo_c",level:5},{value:"bamboo_f",id:"bamboo_f",level:5},{value:"singing bowl",id:"singing-bowl",level:4},{value:"bowl_hi",id:"bowl_hi",level:5},{value:"bowl_lo",id:"bowl_lo",level:5},{value:"bowl_mid",id:"bowl_mid",level:5},{value:"chimes",id:"chimes",level:4},{value:"chimes_chord",id:"chimes_chord",level:5},{value:"chimes_chord_01",id:"chimes_chord_01",level:5},{value:"chimes_chord_02",id:"chimes_chord_02",level:5},{value:"chimes",id:"chimes-1",level:5},{value:"chimes_hi",id:"chimes_hi",level:5},{value:"bell",id:"bell",level:5},{value:"gong_hi",id:"gong_hi",level:5},{value:"gong_lo",id:"gong_lo",level:5},{value:"tubular bell",id:"tubular-bell",level:4},{value:"bell_g4",id:"bell_g4",level:5},{value:"bell_c5",id:"bell_c5",level:5},{value:"bell_c4",id:"bell_c4",level:5},{value:"bell_f5",id:"bell_f5",level:5},{value:"xylophone",id:"xylophone",level:4},{value:"xylo_g5",id:"xylo_g5",level:5},{value:"xylo_g4",id:"xylo_g4",level:5},{value:"xylo_g3",id:"xylo_g3",level:5},{value:"xylo_c6",id:"xylo_c6",level:5},{value:"xylo_c5",id:"xylo_c5",level:5},{value:"xylo_c4",id:"xylo_c4",level:5},{value:"glockenspiel",id:"glockenspiel",level:4},{value:"glock_g5",id:"glock_g5",level:5},{value:"glock_g4",id:"glock_g4",level:5},{value:"glock_c6",id:"glock_c6",level:5},{value:"glock_c5",id:"glock_c5",level:5},{value:"music box",id:"music-box",level:4},{value:"box_g5",id:"box_g5",level:5},{value:"box_g3",id:"box_g3",level:5},{value:"box_d6",id:"box_d6",level:5},{value:"box_d5",id:"box_d5",level:5},{value:"box_c5",id:"box_c5",level:5},{value:"box_b4",id:"box_b4",level:5},{value:"box_b5",id:"box_b5",level:5},{value:"Vocal",id:"vocal",level:3},{value:"choir",id:"choir",level:4},{value:"choir_o",id:"choir_o",level:5},{value:"choir_01",id:"choir_01",level:5},{value:"choir_02",id:"choir_02",level:5},{value:"choir_03",id:"choir_03",level:5},{value:"Foley",id:"foley",level:3},{value:"wood_hit",id:"wood_hit",level:5},{value:"wood_metal",id:"wood_metal",level:5},{value:"wood_plate",id:"wood_plate",level:5},{value:"scrape",id:"scrape",level:5},{value:"scrape_01",id:"scrape_01",level:5},{value:"door",id:"door",level:5},{value:"shatter",id:"shatter",level:5},{value:"tongue",id:"tongue",level:5},{value:"tongue_lo",id:"tongue_lo",level:5},{value:"metal",id:"metal",level:5},{value:"metal_lo",id:"metal_lo",level:5},{value:"wobble",id:"wobble",level:5},{value:"wobble_02",id:"wobble_02",level:5},{value:"Ambient",id:"ambient",level:3},{value:"drone_cymbal",id:"drone_cymbal",level:5},{value:"drone_cymbal_01",id:"drone_cymbal_01",level:5},{value:"noise_a",id:"noise_a",level:5},{value:"Loops",id:"loops",level:2},{value:"Breakbeats",id:"breakbeats",level:3},{value:"amen",id:"amen",level:5},{value:"amen_alt",id:"amen_alt",level:5},{value:"amen_fill",id:"amen_fill",level:5},{value:"amen_break",id:"amen_break",level:5},{value:"house",id:"house",level:5},{value:"Idiophonic",id:"idiophonic-1",level:3},{value:"chimes_l",id:"chimes_l",level:5},{value:"Foley",id:"foley-1",level:3},{value:"wood_l",id:"wood_l",level:5},{value:"wood_l_01",id:"wood_l_01",level:5},{value:"wiper",id:"wiper",level:5},{value:"wiper_out",id:"wiper_out",level:5},{value:"Noise",id:"noise",level:3},{value:"noise_c",id:"noise_c",level:5},{value:"noise_e",id:"noise_e",level:5},{value:"noise_e_01",id:"noise_e_01",level:5},{value:"noise_mw",id:"noise_mw",level:5},{value:"noise_p",id:"noise_p",level:5},{value:"noise_r",id:"noise_r",level:5},{value:"Sample Credits",id:"sample-credits",level:2},{value:"Waveforms",id:"waveforms",level:2},{value:"sine",id:"sine",level:4},{value:"saw",id:"saw",level:4},{value:"square",id:"square",level:4},{value:"triangle",id:"triangle",level:4},{value:"altosax",id:"altosax",level:4},{value:"bit",id:"bit",level:4},{value:"bit_1",id:"bit_1",level:5},{value:"bit_2",id:"bit_2",level:5},{value:"bit_3",id:"bit_3",level:5},{value:"blend",id:"blend",level:4},{value:"cello",id:"cello",level:4},{value:"cello_1",id:"cello_1",level:5},{value:"cello_2",id:"cello_2",level:5},{value:"dbass",id:"dbass",level:4},{value:"dbass_1",id:"dbass_1",level:5},{value:"dbass_2",id:"dbass_2",level:5},{value:"distorted",id:"distorted",level:4},{value:"distorted_1",id:"distorted_1",level:5},{value:"distorted_2",id:"distorted_2",level:5},{value:"ebass",id:"ebass",level:4},{value:"ebass_1",id:"ebass_1",level:5},{value:"ebass_2",id:"ebass_2",level:5},{value:"eorgan",id:"eorgan",level:4},{value:"eorgan_1",id:"eorgan_1",level:5},{value:"eorgan_2",id:"eorgan_2",level:5},{value:"eorgan_3",id:"eorgan_3",level:5},{value:"guitar",id:"guitar",level:4},{value:"raw",id:"raw",level:4},{value:"raw_1",id:"raw_1",level:5},{value:"raw_2",id:"raw_2",level:5},{value:"saw_1",id:"saw_1",level:5},{value:"saw_2",id:"saw_2",level:5},{value:"square",id:"square-1",level:4},{value:"square_1",id:"square_1",level:5},{value:"square_2",id:"square_2",level:5},{value:"voice",id:"voice",level:4},{value:"voice_a",id:"voice_a",level:5},{value:"voice_i",id:"voice_i",level:5},{value:"voice_eu",id:"voice_eu",level:5},{value:"voice_o",id:"voice_o",level:5}];function t(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"-sounds-in-mercury",children:"\ud83d\udce2 Sounds in Mercury"}),"\n",(0,n.jsxs)(s.p,{children:["Most of the sounds in Mercury are from ",(0,n.jsx)(s.a,{href:"http://www.freesound.org",children:"freesound.org"})," and are licensed with Creative Commons Attribution or Creative Commons 0 licenses. If not downloaded from freesound it is made sure that the license allows you to redistribute the sounds via the Mercury environment and that you can use them in your projects. All the sounds are listed below with their original source, license and credits."]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"#sample-credits",children:"Credits"})}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#one-shots",children:"One-shots"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#drums",children:"Drums"})," (kick, snare, hat, ...)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#nord-mini-kit",children:"Nord Mini Kit"})," (kick, snare, hat, ...)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#percussion",children:"Percussion"})," (cowbell, bongo, tabla, ...)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#strings",children:"Strings"})," (harp, pluck, violin)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#keys",children:"Keys"})," (piano, rhodes)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#idiophonic",children:"Idiophonic"})," (marimba, singing bowl, xylophone, glockenspiel, ...)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#woodwinds-flutes",children:"Woodwinds/Fluts"})," (flute, oboe, clarinet)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#vocal",children:"Vocal"})," (choir)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#foley",children:"Foley"})," (wood, metal, glas, body)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#ambient",children:"Ambient"})," (cymbal, noise)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#loops",children:"Loops"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#breakbeats",children:"Breakbeats"})," (amen, house)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#idiophonic-1",children:"Idiophonic"})," (chimes)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#foley-1",children:"Foley"})," (wood, wiper)"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.a,{href:"#noise",children:"Noise"})," (noise)"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"#sample-credits",children:"Credits"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"#waveforms",children:"Waveforms"})}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"one-shots",children:"One-shots"}),"\n",(0,n.jsxs)(s.p,{children:["One-shots are samples best used for triggering once with ",(0,n.jsx)(s.code,{children:"new sample"})," or ",(0,n.jsx)(s.code,{children:"new polySample"}),". But they can be used with ",(0,n.jsx)(s.code,{children:"new loop"})," too!"]}),"\n",(0,n.jsx)(s.h3,{id:"drums",children:"Drums"}),"\n",(0,n.jsx)(s.h5,{id:"snare_909",children:"snare_909"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3728__NoiseCollector__909_snare2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3728/",children:"https://freesound.org/s/3728/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_909_short",children:"snare_909_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3727__NoiseCollector__909_snare.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3727/",children:"https://freesound.org/s/3727/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_909_long",children:"kick_909_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3726__NoiseCollector__909_kick3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3726/",children:"https://freesound.org/s/3726/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_909",children:"kick_909"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3725__NoiseCollector__909_kick2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3725/",children:"https://freesound.org/s/3725/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_909_dist",children:"kick_909_dist"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3724__NoiseCollector__909_kick.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3724/",children:"https://freesound.org/s/3724/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_909_dist_long",children:"kick_909_dist_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3723__NoiseCollector__909_kick_long.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3723/",children:"https://freesound.org/s/3723/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_909",children:"hat_909"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3722__NoiseCollector__909_hat2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3722/",children:"https://freesound.org/s/3722/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_909_short",children:"hat_909_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3721__NoiseCollector__909_hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3721/",children:"https://freesound.org/s/3721/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_909_open",children:"hat_909_open"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3720__NoiseCollector__909_hat_open2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3720/",children:"https://freesound.org/s/3720/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_909_half",children:"hat_909_half"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3719__NoiseCollector__909_hat_open.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3719/",children:"https://freesound.org/s/3719/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_909",children:"clap_909"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"3718__NoiseCollector__909_clap.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/3718/",children:"https://freesound.org/s/3718/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_min",children:"kick_min"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"117491__ZeSoundResearchInc.__Kick_23_Minimal.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/117491/",children:"https://freesound.org/s/117491/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_sub",children:"kick_sub"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"117493__ZeSoundResearchInc.__Kick_28_Subwoofer_Test.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/117493/",children:"https://freesound.org/s/117493/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_dub",children:"kick_dub"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"171104__dwsd__kick-gettinglaid.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/171104/",children:"https://freesound.org/s/171104/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_vintage",children:"kick_vintage"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"171103__dwsd__kick-dw-vintagehouse.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/171103/",children:"https://freesound.org/s/171103/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_min",children:"hat_min"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"197237__oceanictrancer__custom-hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/197237/",children:"https://freesound.org/s/197237/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_dub",children:"hat_dub"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"250530__oceanictrancer__hi-hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/250530/",children:"https://freesound.org/s/250530/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_min_open",children:"hat_min_open"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"250531__oceanictrancer__shaker-hi-hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/250531/",children:"https://freesound.org/s/250531/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_click",children:"hat_click"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"250537__oceanictrancer__short-click-hat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/250537/",children:"https://freesound.org/s/250537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_min",children:"snare_min"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"207928__altemark__snare-8.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/207928/",children:"https://freesound.org/s/207928/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_dub",children:"snare_dub"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"207927__altemark__snare-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/207927/",children:"https://freesound.org/s/207927/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_hvy",children:"snare_hvy"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"207921__altemark__heavy-electro-snare.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/207921/",children:"https://freesound.org/s/207921/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_min",children:"clap_min"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"207913__altemark__bandpass-snap.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/207913/",children:"https://freesound.org/s/207913/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_hi",children:"tom_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209879__veiler__mid-tom.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209879/",children:"https://freesound.org/s/209879/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_lo",children:"tom_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209877__veiler__floor-tom.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209877/",children:"https://freesound.org/s/209877/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_mid",children:"tom_mid"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209875__veiler__lo-tom.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209875/",children:"https://freesound.org/s/209875/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_fat",children:"snare_fat"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209886__veiler__snare-2-fat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209886/",children:"https://freesound.org/s/209886/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_ac",children:"snare_ac"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"209883__veiler__ez-bfd-mix-snare.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/209883/",children:"https://freesound.org/s/209883/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_step",children:"snare_step"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"238003__alexthegr81__00-hardsnare.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/238003/",children:"https://freesound.org/s/238003/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_dnb",children:"snare_dnb"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"238001__alexthegr81__00-hardsnare-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/238001/",children:"https://freesound.org/s/238001/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_rock",children:"snare_rock"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"493026__veiler__snarefat.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/493026/",children:"https://freesound.org/s/493026/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_ua",children:"kick_ua"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"147997__dwsd__kick-ua.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/147997/",children:"https://freesound.org/s/147997/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_house",children:"kick_house"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"147995__dwsd__kick-pretunedhousebd.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/147995/",children:"https://freesound.org/s/147995/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_deep",children:"kick_deep"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"147994__dwsd__deep-house-kick.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/147994/",children:"https://freesound.org/s/147994/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_808",children:"tom_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191637__dwsd__jhd-prc-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191637/",children:"https://freesound.org/s/191637/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_808_semi",children:"hat_808_semi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191632__dwsd__jhd-hat-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191632/",children:"https://freesound.org/s/191632/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_808_open",children:"hat_808_open"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191631__dwsd__jhd-hat-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191631/",children:"https://freesound.org/s/191631/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_808",children:"hat_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191630__dwsd__jhd-hat-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191630/",children:"https://freesound.org/s/191630/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_808_short",children:"clap_808_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191623__dwsd__jhd-clp-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191623/",children:"https://freesound.org/s/191623/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_808",children:"clap_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191621__dwsd__jhd-clp-28.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191621/",children:"https://freesound.org/s/191621/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_808",children:"snare_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191620__dwsd__jhd-clp-37.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191620/",children:"https://freesound.org/s/191620/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_808",children:"kick_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191617__dwsd__jhd-bd-35.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191617/",children:"https://freesound.org/s/191617/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_808_dist",children:"kick_808_dist"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191610__dwsd__jhd-bd-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191610/",children:"https://freesound.org/s/191610/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"nord-mini-kit",children:"Nord Mini Kit"}),"\n",(0,n.jsx)(s.h5,{id:"wood_nord_lo",children:"wood_nord_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167803__menegass__nord-drum-wood-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167803/",children:"https://freesound.org/s/167803/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_nord_mid",children:"wood_nord_mid"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167800__menegass__nord-drum-wood-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167800/",children:"https://freesound.org/s/167800/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_nord_hi",children:"wood_nord_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167798__menegass__nord-drum-wood-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167798/",children:"https://freesound.org/s/167798/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_nord_lo",children:"tom_nord_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167797__menegass__nord-drum-tom-6.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167797/",children:"https://freesound.org/s/167797/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clap_nord",children:"clap_nord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167791__menegass__nord-drum-clap-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167791/",children:"https://freesound.org/s/167791/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_nord_open",children:"hat_nord_open"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167789__menegass__nord-drum-oh-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167789/",children:"https://freesound.org/s/167789/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"hat_nord",children:"hat_nord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167787__menegass__nord-drum-cc-3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167787/",children:"https://freesound.org/s/167787/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tom_nord_hi",children:"tom_nord_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167783__menegass__nord-drum-tom-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167783/",children:"https://freesound.org/s/167783/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_nord_hi",children:"snare_nord_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167782__menegass__nord-drum-sd-5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167782/",children:"https://freesound.org/s/167782/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"snare_nord",children:"snare_nord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167778__menegass__nord-drum-sd-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167778/",children:"https://freesound.org/s/167778/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_nord_long",children:"kick_nord_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167767__menegass__nord-drum-bd-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167767/",children:"https://freesound.org/s/167767/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kick_nord",children:"kick_nord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"167764__menegass__nord-drum-bd-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/167764/",children:"https://freesound.org/s/167764/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"percussion",children:"Percussion"}),"\n",(0,n.jsx)(s.h5,{id:"maracas_808",children:"maracas_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191638__dwsd__jhd-shk-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191638/",children:"https://freesound.org/s/191638/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clave_808",children:"clave_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191636__dwsd__jhd-prc-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191636/",children:"https://freesound.org/s/191636/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"cowbell_808",children:"cowbell_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191635__dwsd__jhd-prc-5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191635/",children:"https://freesound.org/s/191635/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"cymbal_808",children:"cymbal_808"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"191633__dwsd__jhd-cym-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/191633/",children:"https://freesound.org/s/191633/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"block",children:"block"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"219158__jagadamba__frogblock04.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/219158/",children:"https://freesound.org/s/219158/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"block_lo",children:"block_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"219159__jagadamba__frogblock03.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/219159/",children:"https://freesound.org/s/219159/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"bongo",children:"bongo"}),"\n",(0,n.jsx)(s.h5,{id:"bongo-1",children:"bongo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"219154__jagadamba__bongo04.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/219154/",children:"https://freesound.org/s/219154/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bongo_lo",children:"bongo_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"219156__jagadamba__bongo02.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/219156/",children:"https://freesound.org/s/219156/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"tabla",children:"tabla"}),"\n",(0,n.jsx)(s.h5,{id:"tabla_01",children:"tabla_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130407__dio-333__dhec.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130407/",children:"https://freesound.org/s/130407/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_02",children:"tabla_02"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130414__dio-333__ghe-8.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130414/",children:"https://freesound.org/s/130414/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_03",children:"tabla_03"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130405__dio-333__ghe-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130405/",children:"https://freesound.org/s/130405/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_hi_long",children:"tabla_hi_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130422__dio-333__na-open.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130422/",children:"https://freesound.org/s/130422/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_hi_short",children:"tabla_hi_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130428__dio-333__na-sharp.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130428/",children:"https://freesound.org/s/130428/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_hi",children:"tabla_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130421__dio-333__na.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130421/",children:"https://freesound.org/s/130421/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_lo_long",children:"tabla_lo_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130409__dio-333__ghe-6.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130409/",children:"https://freesound.org/s/130409/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_lo_short",children:"tabla_lo_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130413__dio-333__ke.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130413/",children:"https://freesound.org/s/130413/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_lo",children:"tabla_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130411__dio-333__ghe-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130411/",children:"https://freesound.org/s/130411/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_mid_long",children:"tabla_mid_long"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130416__dio-333__tun.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130416/",children:"https://freesound.org/s/130416/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_mid_short",children:"tabla_mid_short"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130424__dio-333__ke-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130424/",children:"https://freesound.org/s/130424/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tabla_mid",children:"tabla_mid"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130417__dio-333__te-ne.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130417/",children:"https://freesound.org/s/130417/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"strings",children:"Strings"}),"\n",(0,n.jsx)(s.h4,{id:"harp",children:"harp"}),"\n",(0,n.jsx)(s.h5,{id:"harp_down",children:"harp_down"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"436129__cunningar0807__harp-glissando-down.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/436129/",children:"https://freesound.org/s/436129/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_up",children:"harp_up"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"436128__cunningar0807__harp-glissando-up.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/436128/",children:"https://freesound.org/s/436128/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_g5",children:"harp_g5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373573__samulis__harp-f-5-ksharp-g5-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373573/",children:"https://freesound.org/s/373573/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_g3",children:"harp_g3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373572__samulis__harp-f-3-ksharp-g3-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373572/",children:"https://freesound.org/s/373572/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_f4",children:"harp_f4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373570__samulis__harp-e-4-ksharp-f4-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373570/",children:"https://freesound.org/s/373570/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_e5",children:"harp_e5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373568__samulis__harp-e5-ksharp-e5-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373568/",children:"https://freesound.org/s/373568/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_e3",children:"harp_e3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373567__samulis__harp-e3-ksharp-e3-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373567/",children:"https://freesound.org/s/373567/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_d4",children:"harp_d4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373565__samulis__harp-d4-ksharp-d4-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373565/",children:"https://freesound.org/s/373565/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_c5",children:"harp_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373563__samulis__harp-c5-ksharp-c5-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373563/",children:"https://freesound.org/s/373563/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_c3",children:"harp_c3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373562__samulis__harp-c3-ksharp-c3-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373562/",children:"https://freesound.org/s/373562/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_b5",children:"harp_b5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373560__samulis__harp-b5-ksharp-b5-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373560/",children:"https://freesound.org/s/373560/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_b3",children:"harp_b3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373559__samulis__harp-b3-ksharp-b3-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373559/",children:"https://freesound.org/s/373559/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_a4",children:"harp_a4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373556__samulis__harp-a4-ksharp-a4-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373556/",children:"https://freesound.org/s/373556/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"harp_a2",children:"harp_a2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373555__samulis__harp-a2-ksharp-a2-mf.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373555/",children:"https://freesound.org/s/373555/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"violin",children:"violin"}),"\n",(0,n.jsx)(s.h5,{id:"violin_g",children:"violin_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56225__ldk1609__violin_spiccato_G2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56225/",children:"https://freesound.org/s/56225/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_f",children:"violin_f"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56218__ldk1609__violin_spiccato_F3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56218/",children:"https://freesound.org/s/56218/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_e",children:"violin_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56212__ldk1609__violin_spiccato_E3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56212/",children:"https://freesound.org/s/56212/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_d",children:"violin_d"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56209__ldk1609__violin_spiccato_D3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56209/",children:"https://freesound.org/s/56209/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_c",children:"violin_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56203__ldk1609__violin_spiccato_C3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56203/",children:"https://freesound.org/s/56203/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_b",children:"violin_b"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56196__ldk1609__violin_spiccato_B2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56196/",children:"https://freesound.org/s/56196/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"violin_a",children:"violin_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"56192__ldk1609__violin_spiccato_A2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/56192/",children:"https://freesound.org/s/56192/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"pluck",children:"pluck"}),"\n",(0,n.jsx)(s.h5,{id:"pluck_g",children:"pluck_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55992__ldk1609__violin_pizz_non_vib_G2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55992/",children:"https://freesound.org/s/55992/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_f",children:"pluck_f"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55985__ldk1609__violin_pizz_non_vib_F3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55985/",children:"https://freesound.org/s/55985/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_e",children:"pluck_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55979__ldk1609__violin_pizz_non_vib_E3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55979/",children:"https://freesound.org/s/55979/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_d",children:"pluck_d"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55976__ldk1609__violin_pizz_non_vib_D3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55976/",children:"https://freesound.org/s/55976/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_c",children:"pluck_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55970__ldk1609__violin_pizz_non_vib_C3.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55970/",children:"https://freesound.org/s/55970/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_b",children:"pluck_b"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55963__ldk1609__violin_pizz_non_vib_B2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55963/",children:"https://freesound.org/s/55963/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"pluck_a",children:"pluck_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"55959__ldk1609__violin_pizz_non_vib_A2.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/55959/",children:"https://freesound.org/s/55959/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"keys",children:"Keys"}),"\n",(0,n.jsx)(s.h4,{id:"piano",children:"piano"}),"\n",(0,n.jsx)(s.h5,{id:"piano_g",children:"piano_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562761__ion__g3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562761/",children:"https://freesound.org/s/562761/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_e",children:"piano_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562760__ion__e3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562760/",children:"https://freesound.org/s/562760/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_f",children:"piano_f"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562759__ion__f3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562759/",children:"https://freesound.org/s/562759/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_d",children:"piano_d"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562756__ion__d3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562756/",children:"https://freesound.org/s/562756/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_a",children:"piano_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562754__ion__a3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562754/",children:"https://freesound.org/s/562754/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_b",children:"piano_b"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562752__ion__b3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562752/",children:"https://freesound.org/s/562752/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"piano_c",children:"piano_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"562751__ion__c3.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/562751/",children:"https://freesound.org/s/562751/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"rhodes",children:"rhodes"}),"\n",(0,n.jsx)(s.h5,{id:"rhodes_8bit",children:"rhodes_8bit"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"147998__dwsd__g-126-8bitrhod-rhde.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/147998/",children:"https://freesound.org/s/147998/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution Noncommercial"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"woodwinds-flutes",children:"Woodwinds Flutes"}),"\n",(0,n.jsx)(s.h4,{id:"flute",children:"flute"}),"\n",(0,n.jsx)(s.h5,{id:"flute_e4",children:"flute_e4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373313__samulis__flute-expressive-sustain-e5-ldflute-expvib-e4-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373313/",children:"https://freesound.org/s/373313/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_e3",children:"flute_e3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373311__samulis__flute-expressive-sustain-e4-ldflute-expvib-e3-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373311/",children:"https://freesound.org/s/373311/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_c5",children:"flute_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373307__samulis__flute-expressive-sustain-c6-ldflute-expvib-c5-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373307/",children:"https://freesound.org/s/373307/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_c4",children:"flute_c4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373306__samulis__flute-expressive-sustain-c5-ldflute-expvib-c4-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373306/",children:"https://freesound.org/s/373306/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_c3",children:"flute_c3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373305__samulis__flute-expressive-sustain-c4-ldflute-expvib-c3-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373305/",children:"https://freesound.org/s/373305/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_a4",children:"flute_a4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373303__samulis__flute-expressive-sustain-a5-ldflute-expvib-a4-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373303/",children:"https://freesound.org/s/373303/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"flute_a3",children:"flute_a3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373302__samulis__flute-expressive-sustain-a4-ldflute-expvib-a3-v1-1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373302/",children:"https://freesound.org/s/373302/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"oboe",children:"oboe"}),"\n",(0,n.jsx)(s.h5,{id:"oboe_f4",children:"oboe_f4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373672__samulis__oboe-vibrato-e-5-oboe-vib-f4-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373672/",children:"https://freesound.org/s/373672/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_f3",children:"oboe_f3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373671__samulis__oboe-vibrato-e-4-oboe-vib-f3-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373671/",children:"https://freesound.org/s/373671/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_d4",children:"oboe_d4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373669__samulis__oboe-vibrato-d5-oboe-vib-d4-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373669/",children:"https://freesound.org/s/373669/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_d3",children:"oboe_d3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373668__samulis__oboe-vibrato-d4-oboe-vib-d3-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373668/",children:"https://freesound.org/s/373668/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_a3",children:"oboe_a3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373666__samulis__oboe-vibrato-a-4-oboe-vib-a-3-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373666/",children:"https://freesound.org/s/373666/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"oboe_a2",children:"oboe_a2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373665__samulis__oboe-vibrato-a-3-oboe-vib-a-2-v3-main.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373665/",children:"https://freesound.org/s/373665/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"clarinet",children:"clarinet"}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_f3",children:"clarinet_f3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372952__samulis__clarinet-long-sustain-e-4-dcclar-suslong-f3-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372952/",children:"https://freesound.org/s/372952/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_f2",children:"clarinet_f2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372951__samulis__clarinet-long-sustain-e-3-dcclar-suslong-f2-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372951/",children:"https://freesound.org/s/372951/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_d3",children:"clarinet_d3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372947__samulis__clarinet-long-sustain-d4-dcclar-suslong-d3-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372947/",children:"https://freesound.org/s/372947/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_d2",children:"clarinet_d2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372946__samulis__clarinet-long-sustain-d3-dcclar-suslong-d2-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372946/",children:"https://freesound.org/s/372946/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_a3",children:"clarinet_a3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372944__samulis__clarinet-long-sustain-a-4-dcclar-suslong-a-3-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372944/",children:"https://freesound.org/s/372944/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"clarinet_a2",children:"clarinet_a2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"372943__samulis__clarinet-long-sustain-a-3-dcclar-suslong-a-2-v3-rr1-sum.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/372943/",children:"https://freesound.org/s/372943/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"idiophonic",children:"Idiophonic"}),"\n",(0,n.jsx)(s.h4,{id:"marimba",children:"marimba"}),"\n",(0,n.jsx)(s.h5,{id:"marimba_g4",children:"marimba_g4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373586__samulis__marimba-f-5-marimba-hit-outrigger-g4-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373586/",children:"https://freesound.org/s/373586/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_g2",children:"marimba_g2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373585__samulis__marimba-f-3-marimba-hit-outrigger-g2-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373585/",children:"https://freesound.org/s/373585/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_f3",children:"marimba_f3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373583__samulis__marimba-e-4-marimba-hit-outrigger-f3-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373583/",children:"https://freesound.org/s/373583/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_c4",children:"marimba_c4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373580__samulis__marimba-c5-marimba-hit-outrigger-c4-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373580/",children:"https://freesound.org/s/373580/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_c2",children:"marimba_c2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373579__samulis__marimba-c3-marimba-hit-outrigger-c2-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373579/",children:"https://freesound.org/s/373579/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"marimba_b2",children:"marimba_b2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373577__samulis__marimba-b3-marimba-hit-outrigger-b2-loud-01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373577/",children:"https://freesound.org/s/373577/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"kalimba",children:"kalimba"}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_ab",children:"kalimba_ab"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175582__sergeeo__kalimba-note-g.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175582/",children:"https://freesound.org/s/175582/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_g",children:"kalimba_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175579__sergeeo__kalimba-note-g.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175579/",children:"https://freesound.org/s/175579/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_e",children:"kalimba_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175570__sergeeo__kalimba-note-e.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175570/",children:"https://freesound.org/s/175570/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_cis",children:"kalimba_cis"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175568__sergeeo__note-c.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175568/",children:"https://freesound.org/s/175568/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"kalimba_a",children:"kalimba_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"175562__sergeeo__kalimba-note-a.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/175562/",children:"https://freesound.org/s/175562/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"bamboo",children:"bamboo"}),"\n",(0,n.jsx)(s.h5,{id:"bamboo_g",children:"bamboo_g"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130533__stomachache__g2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130533/",children:"https://freesound.org/s/130533/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bamboo_a",children:"bamboo_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130529__stomachache__a2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130529/",children:"https://freesound.org/s/130529/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bamboo_c",children:"bamboo_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130527__stomachache__c-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130527/",children:"https://freesound.org/s/130527/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bamboo_f",children:"bamboo_f"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"130523__stomachache__f-low-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/130523/",children:"https://freesound.org/s/130523/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"singing-bowl",children:"singing bowl"}),"\n",(0,n.jsx)(s.h5,{id:"bowl_hi",children:"bowl_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"122650__juskiddink__Singing_bowl.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/122650/",children:"https://freesound.org/s/122650/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bowl_lo",children:"bowl_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"59534__juskiddink__Bell1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/59534/",children:"https://freesound.org/s/59534/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bowl_mid",children:"bowl_mid"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"122647__juskiddink__Singing_bowl_2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/122647/",children:"https://freesound.org/s/122647/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"chimes",children:"chimes"}),"\n",(0,n.jsx)(s.h5,{id:"chimes_chord",children:"chimes_chord"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"131977__juskiddink__three-chord-chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/131977/",children:"https://freesound.org/s/131977/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"chimes_chord_01",children:"chimes_chord_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"131977__juskiddink__three-chord-chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/131977/",children:"https://freesound.org/s/131977/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"chimes_chord_02",children:"chimes_chord_02"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"131977__juskiddink__three-chord-chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/131977/",children:"https://freesound.org/s/131977/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"chimes-1",children:"chimes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"86277__juskiddink__Chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/86277/",children:"https://freesound.org/s/86277/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"chimes_hi",children:"chimes_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"257555__jagadamba__bar-chimes-v6-aluminium-8mm-wind.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/257555/",children:"https://freesound.org/s/257555/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bell",children:"bell"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"254756__jagadamba__ceramic-bell-02.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/254756/",children:"https://freesound.org/s/254756/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"gong_hi",children:"gong_hi"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"86773__juskiddink__Gong.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/86773/",children:"https://freesound.org/s/86773/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"gong_lo",children:"gong_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"122681__juskiddink__Gong_3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/122681/",children:"https://freesound.org/s/122681/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"tubular-bell",children:"tubular bell"}),"\n",(0,n.jsx)(s.h5,{id:"bell_g4",children:"bell_g4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374275__samulis__tubular-bells-f-4-tb-hit-g4-v4-rr1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374275/",children:"https://freesound.org/s/374275/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bell_c5",children:"bell_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374274__samulis__tubular-bells-c5-tb-hit-c5-v4-rr1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374274/",children:"https://freesound.org/s/374274/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bell_c4",children:"bell_c4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374273__samulis__tubular-bells-c4-tb-hit-c4-v4-rr1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374273/",children:"https://freesound.org/s/374273/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bell_f5",children:"bell_f5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374272__samulis__tubular-bells-e-5-tb-hit-f5-v3-rr1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374272/",children:"https://freesound.org/s/374272/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"xylophone",children:"xylophone"}),"\n",(0,n.jsx)(s.h5,{id:"xylo_g5",children:"xylo_g5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374705__samulis__xylophone-f-5-xylo-medium-g5-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374705/",children:"https://freesound.org/s/374705/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_g4",children:"xylo_g4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374704__samulis__xylophone-f-4-xylo-medium-g4-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374704/",children:"https://freesound.org/s/374704/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_g3",children:"xylo_g3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374703__samulis__xylophone-f-3-xylo-medium-g3-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374703/",children:"https://freesound.org/s/374703/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_c6",children:"xylo_c6"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374701__samulis__xylophone-c6-xylo-medium-c6-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374701/",children:"https://freesound.org/s/374701/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_c5",children:"xylo_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374700__samulis__xylophone-c5-xylo-medium-c5-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374700/",children:"https://freesound.org/s/374700/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"xylo_c4",children:"xylo_c4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"374699__samulis__xylophone-c4-xylo-medium-c4-ff-01-far.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/374699/",children:"https://freesound.org/s/374699/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"glockenspiel",children:"glockenspiel"}),"\n",(0,n.jsx)(s.h5,{id:"glock_g5",children:"glock_g5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373368__samulis__glockenspiel-f-5-glock-medium-g5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373368/",children:"https://freesound.org/s/373368/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"glock_g4",children:"glock_g4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373367__samulis__glockenspiel-f-4-glock-medium-g4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373367/",children:"https://freesound.org/s/373367/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"glock_c6",children:"glock_c6"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373365__samulis__glockenspiel-c6-glock-medium-c6.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373365/",children:"https://freesound.org/s/373365/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"glock_c5",children:"glock_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"373364__samulis__glockenspiel-c5-glock-medium-c5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/373364/",children:"https://freesound.org/s/373364/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"music-box",children:"music box"}),"\n",(0,n.jsx)(s.h5,{id:"box_g5",children:"box_g5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28160__CommanderRobot__clean_sol_4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28160/",children:"https://freesound.org/s/28160/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_g3",children:"box_g3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28159__CommanderRobot__clean_sol_3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28159/",children:"https://freesound.org/s/28159/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_d6",children:"box_d6"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28155__CommanderRobot__clean_re_2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28155/",children:"https://freesound.org/s/28155/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_d5",children:"box_d5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28154__CommanderRobot__clean_re_1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28154/",children:"https://freesound.org/s/28154/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_c5",children:"box_c5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28144__CommanderRobot__clean_do_1.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28144/",children:"https://freesound.org/s/28144/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_b4",children:"box_b4"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28141__CommanderRobot__clean_ci_3.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28141/",children:"https://freesound.org/s/28141/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"box_b5",children:"box_b5"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"28140__CommanderRobot__clean_ci_2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/28140/",children:"https://freesound.org/s/28140/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"vocal",children:"Vocal"}),"\n",(0,n.jsx)(s.h4,{id:"choir",children:"choir"}),"\n",(0,n.jsx)(s.h5,{id:"choir_o",children:"choir_o"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"65195__uair01__chamber_choir_chord_o.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/65195/",children:"https://freesound.org/s/65195/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"choir_01",children:"choir_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"117891__dobroide__20110409.choir.01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/117891/",children:"https://freesound.org/s/117891/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"choir_02",children:"choir_02"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"192691__klankbeeld__choir-nec-invenit-requiem-130525-14.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/192691/",children:"https://freesound.org/s/192691/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"choir_03",children:"choir_03"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"69311__uair01__LS100422_choir_rehearsal_Utrecht_01.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/69311/",children:"https://freesound.org/s/69311/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"foley",children:"Foley"}),"\n",(0,n.jsx)(s.h5,{id:"wood_hit",children:"wood_hit"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"103997__rutgermuller__Wood_Hit_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/103997/",children:"https://freesound.org/s/103997/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_metal",children:"wood_metal"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104003__rutgermuller__Wood_Metal_Chain_Smash_Hall_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104003/",children:"https://freesound.org/s/104003/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_plate",children:"wood_plate"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"103996__rutgermuller__Jumping_On_Wooden_Plate_Hall_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/103996/",children:"https://freesound.org/s/103996/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"scrape",children:"scrape"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104007__rutgermuller__Wood_Scraping_6_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104007/",children:"https://freesound.org/s/104007/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"scrape_01",children:"scrape_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104010__rutgermuller__Wood_Scraping_Close_3_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104010/",children:"https://freesound.org/s/104010/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"door",children:"door"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104103__rutgermuller__Door_Squeaks_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104103/",children:"https://freesound.org/s/104103/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"shatter",children:"shatter"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"221528__unfa__glass-break.flac"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/221528/",children:"https://freesound.org/s/221528/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tongue",children:"tongue"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"387793__jagadamba__tongue-mouth-pop-4.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/387793/",children:"https://freesound.org/s/387793/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"tongue_lo",children:"tongue_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"387797__jagadamba__tongue-mouth-pop-7.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/387797/",children:"https://freesound.org/s/387797/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"metal",children:"metal"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"387724__jagadamba__metal-drum-8.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/387724/",children:"https://freesound.org/s/387724/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"metal_lo",children:"metal_lo"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"387727__jagadamba__metal-drum-5.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/387727/",children:"https://freesound.org/s/387727/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wobble",children:"wobble"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"254396__jagadamba__wobble-board.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/254396/",children:"https://freesound.org/s/254396/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wobble_02",children:"wobble_02"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"254401__jagadamba__wobble-board.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/254401/",children:"https://freesound.org/s/254401/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"ambient",children:"Ambient"}),"\n",(0,n.jsx)(s.h5,{id:"drone_cymbal",children:"drone_cymbal"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104092__rutgermuller__Cymbal_Close_3_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104092/",children:"https://freesound.org/s/104092/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"drone_cymbal_01",children:"drone_cymbal_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104090__rutgermuller__Cymbal_Close_1_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104090/",children:"https://freesound.org/s/104090/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_a",children:"noise_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50695__rutgermuller__Analogue_Glitches_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50695/",children:"https://freesound.org/s/50695/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"loops",children:"Loops"}),"\n",(0,n.jsxs)(s.p,{children:["Loops are samples best used for stretching to a full bar and looping with ",(0,n.jsx)(s.code,{children:"new loop"}),". But they can be used with ",(0,n.jsx)(s.code,{children:"new sample"})," too!"]}),"\n",(0,n.jsx)(s.h3,{id:"breakbeats",children:"Breakbeats"}),"\n",(0,n.jsx)(s.h5,{id:"amen",children:"amen"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"202537__gowers__140-bpm-amen-break-original-processed.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/202537/",children:"https://freesound.org/s/202537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"amen_alt",children:"amen_alt"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"202537__gowers__140-bpm-amen-break-original-processed.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/202537/",children:"https://freesound.org/s/202537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"amen_fill",children:"amen_fill"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"202537__gowers__140-bpm-amen-break-original-processed.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/202537/",children:"https://freesound.org/s/202537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"amen_break",children:"amen_break"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"202537__gowers__140-bpm-amen-break-original-processed.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/202537/",children:"https://freesound.org/s/202537/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"house",children:"house"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"148005__dwsd__drumloop126-2.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/148005/",children:"https://freesound.org/s/148005/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution Noncommercial"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"idiophonic-1",children:"Idiophonic"}),"\n",(0,n.jsx)(s.h5,{id:"chimes_l",children:"chimes_l"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"131979__juskiddink__chimes.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/131979/",children:"https://freesound.org/s/131979/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Attribution"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"foley-1",children:"Foley"}),"\n",(0,n.jsx)(s.h5,{id:"wood_l",children:"wood_l"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104011__rutgermuller__Wood_Scraping_Hall_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104011/",children:"https://freesound.org/s/104011/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wood_l_01",children:"wood_l_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104009__rutgermuller__Wood_Scraping_Close_2_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104009/",children:"https://freesound.org/s/104009/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wiper",children:"wiper"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50768__rutgermuller__Windshield_Wiper_In_Car_www.rutgermuller.nl_.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50768/",children:"https://freesound.org/s/50768/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"wiper_out",children:"wiper_out"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50770__rutgermuller__Windshield_Wiper_Outside_2_www.rutgermuller.nl_.mp3"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50770/",children:"https://freesound.org/s/50770/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"noise",children:"Noise"}),"\n",(0,n.jsx)(s.h5,{id:"noise_c",children:"noise_c"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"411461__rutgermuller__cablenoise.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/411461/",children:"https://freesound.org/s/411461/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_e",children:"noise_e"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"104080__rutgermuller__Electrical_Noises_www.rutgermuller.nl_.aiff"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/104080/",children:"https://freesound.org/s/104080/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_e_01",children:"noise_e_01"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50909__rutgermuller__electric_noise_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50909/",children:"https://freesound.org/s/50909/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_mw",children:"noise_mw"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50749__rutgermuller__Microwave_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50749/",children:"https://freesound.org/s/50749/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_p",children:"noise_p"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50726__rutgermuller__Harsh_Noise_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50726/",children:"https://freesound.org/s/50726/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"noise_r",children:"noise_r"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"50750__rutgermuller__Radio_Noise_www.rutgermuller.nl_.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://freesound.org/s/50750/",children:"https://freesound.org/s/50750/"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"sample-credits",children:"Sample Credits"}),"\n",(0,n.jsx)(s.p,{children:"This pack of sounds contains sounds by the following users:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["NoiseCollector ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/NoiseCollector/",children:"https://freesound.org/people/NoiseCollector/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["ZeSoundResearchInc. ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/ZeSoundResearchInc./",children:"https://freesound.org/people/ZeSoundResearchInc./"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["DWSD ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/",children:"https://freesound.org/people/DWSD/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["waveplay_old ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/waveplay_old/",children:"https://freesound.org/people/waveplay_old/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["altemark ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/altemark/",children:"https://freesound.org/people/altemark/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["Veiler ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/Veiler/",children:"https://freesound.org/people/Veiler/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["alexthegr81 ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/alexthegr81/",children:"https://freesound.org/people/alexthegr81/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["stomachache ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/stomachache/",children:"https://freesound.org/people/stomachache/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["uair01 ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/uair01/",children:"https://freesound.org/people/uair01/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["dobroide ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/dobroide/",children:"https://freesound.org/people/dobroide/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["klankbeeld ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/klankbeeld/",children:"https://freesound.org/people/klankbeeld/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["RutgerMuller ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/",children:"https://freesound.org/people/RutgerMuller/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["juskiddink ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/juskiddink/",children:"https://freesound.org/people/juskiddink/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["unfa ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/unfa/",children:"https://freesound.org/people/unfa/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["Cunningar0807 ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/Cunningar0807/",children:"https://freesound.org/people/Cunningar0807/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["mmiron ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/mmiron/",children:"https://freesound.org/people/mmiron/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["ldk1609 ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/ldk1609/",children:"https://freesound.org/people/ldk1609/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["gowers ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/gowers/",children:"https://freesound.org/people/gowers/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["ion_ ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/ion_/",children:"https://freesound.org/people/ion_/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["Jagadamba ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/Jagadamba/",children:"https://freesound.org/people/Jagadamba/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["sergeeo ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/sergeeo/",children:"https://freesound.org/people/sergeeo/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["menegass ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/menegass/",children:"https://freesound.org/people/menegass/"})," )"]}),"\n",(0,n.jsxs)(s.li,{children:["Samulis ( ",(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/",children:"https://freesound.org/people/Samulis/"})," )"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"You can find the packs online at:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/NoiseCollector/packs/219/",children:"https://freesound.org/people/NoiseCollector/packs/219/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/ZeSoundResearchInc./packs/7375/",children:"https://freesound.org/people/ZeSoundResearchInc./packs/7375/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/packs/10679/",children:"https://freesound.org/people/DWSD/packs/10679/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/waveplay_old/packs/12570/",children:"https://freesound.org/people/waveplay_old/packs/12570/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/altemark/packs/13232/",children:"https://freesound.org/people/altemark/packs/13232/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Veiler/packs/13344/",children:"https://freesound.org/people/Veiler/packs/13344/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Veiler/packs/13345/",children:"https://freesound.org/people/Veiler/packs/13345/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/alexthegr81/packs/14600/",children:"https://freesound.org/people/alexthegr81/packs/14600/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/stomachache/packs/8170/",children:"https://freesound.org/people/stomachache/packs/8170/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/uair01/packs/4311/",children:"https://freesound.org/people/uair01/packs/4311/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/dobroide/packs/7573/",children:"https://freesound.org/people/dobroide/packs/7573/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/klankbeeld/packs/10770/",children:"https://freesound.org/people/klankbeeld/packs/10770/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/3273/",children:"https://freesound.org/people/RutgerMuller/packs/3273/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/juskiddink/packs/5069/",children:"https://freesound.org/people/juskiddink/packs/5069/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/6618/",children:"https://freesound.org/people/RutgerMuller/packs/6618/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/3254/",children:"https://freesound.org/people/RutgerMuller/packs/3254/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/3283/",children:"https://freesound.org/people/RutgerMuller/packs/3283/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/RutgerMuller/packs/3268/",children:"https://freesound.org/people/RutgerMuller/packs/3268/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/unfa/packs/14014/",children:"https://freesound.org/people/unfa/packs/14014/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Cunningar0807/packs/24779/",children:"https://freesound.org/people/Cunningar0807/packs/24779/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/mmiron/packs/8162/",children:"https://freesound.org/people/mmiron/packs/8162/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/ldk1609/packs/3578/",children:"https://freesound.org/people/ldk1609/packs/3578/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/ldk1609/packs/3561/",children:"https://freesound.org/people/ldk1609/packs/3561/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/packs/9115/",children:"https://freesound.org/people/DWSD/packs/9115/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/gowers/packs/12911/",children:"https://freesound.org/people/gowers/packs/12911/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/packs/9116/",children:"https://freesound.org/people/DWSD/packs/9116/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/DWSD/packs/12146/",children:"https://freesound.org/people/DWSD/packs/12146/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/ion_/packs/31585/",children:"https://freesound.org/people/ion_/packs/31585/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Jagadamba/packs/13878/",children:"https://freesound.org/people/Jagadamba/packs/13878/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/sergeeo/packs/11046/",children:"https://freesound.org/people/sergeeo/packs/11046/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/menegass/packs/10430/",children:"https://freesound.org/people/menegass/packs/10430/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21033/",children:"https://freesound.org/people/Samulis/packs/21033/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21025/",children:"https://freesound.org/people/Samulis/packs/21025/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21013/",children:"https://freesound.org/people/Samulis/packs/21013/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21054/",children:"https://freesound.org/people/Samulis/packs/21054/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21029/",children:"https://freesound.org/people/Samulis/packs/21029/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21065/",children:"https://freesound.org/people/Samulis/packs/21065/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21030/",children:"https://freesound.org/people/Samulis/packs/21030/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://freesound.org/people/Samulis/packs/21027/",children:"https://freesound.org/people/Samulis/packs/21027/"})}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.em,{children:"Note: Audiofiles may have been editted slightly to fit the Mercury Live Coding environment better"})}),"\n",(0,n.jsx)(s.h2,{id:"waveforms",children:"Waveforms"}),"\n",(0,n.jsx)(s.admonition,{type:"warning",children:(0,n.jsxs)(s.mdxAdmonitionTitle,{children:["Single Cycle Waveforms are only used in Mercury4Max, MercuryPlayground only uses the basic waveforms ",(0,n.jsx)(s.code,{children:"sine"}),", ",(0,n.jsx)(s.code,{children:"saw"})," ",(0,n.jsx)(s.code,{children:"square"}),", ",(0,n.jsx)(s.code,{children:"triangle"})]})}),"\n",(0,n.jsx)(s.p,{children:"All single cycle waveforms thanks to the amazing AWKF pack. AKWF or Adventure Kid Waveforms is a collection of one cycle waveforms to be used within synthesizers or other kinds of sound generators."}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-"})}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"sine",children:"sine"}),"\n",(0,n.jsx)(s.p,{children:"Part of the basic waveforms"}),"\n",(0,n.jsx)(s.h4,{id:"saw",children:"saw"}),"\n",(0,n.jsx)(s.p,{children:"Part of the basic waveforms"}),"\n",(0,n.jsx)(s.h4,{id:"square",children:"square"}),"\n",(0,n.jsx)(s.p,{children:"Part of the basic waveforms"}),"\n",(0,n.jsx)(s.h4,{id:"triangle",children:"triangle"}),"\n",(0,n.jsx)(s.p,{children:"Part of the basic waveforms"}),"\n",(0,n.jsx)(s.h4,{id:"altosax",children:"altosax"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_altosax_0025.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"bit",children:"bit"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_bitreduced_0013.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bit_1",children:"bit_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_bitreduced_0011.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bit_2",children:"bit_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_bitreduced_0016.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"bit_3",children:"bit_3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_bitreduced_0038.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"blend",children:"blend"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_blended_0058.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"cello",children:"cello"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_cello_0015.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"cello_1",children:"cello_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_cello_0007.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"cello_2",children:"cello_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_cello_0008.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"dbass",children:"dbass"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_dbass_0003.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"dbass_1",children:"dbass_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_dbass_0008.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"dbass_2",children:"dbass_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_dbass_0013.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"distorted",children:"distorted"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_distorted_0013.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"distorted_1",children:"distorted_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_distorted_0011.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"distorted_2",children:"distorted_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_distorted_0019.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"ebass",children:"ebass"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_ebass_0009.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"ebass_1",children:"ebass_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_ebass_0001.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"ebass_2",children:"ebass_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_ebass_0005.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"eorgan",children:"eorgan"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_eorgan_0018.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"eorgan_1",children:"eorgan_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_eorgan_0026.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"eorgan_2",children:"eorgan_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_eorgan_0059.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"eorgan_3",children:"eorgan_3"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_eorgan_0083.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"guitar",children:"guitar"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_aguitar_0002.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"raw",children:"raw"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_raw_0009.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"raw_1",children:"raw_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_raw_0005.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"raw_2",children:"raw_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_raw_0012.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"saw_1",children:"saw_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_R_asym_saw_10.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"saw_2",children:"saw_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_saw_0002.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"square-1",children:"square"}),"\n",(0,n.jsx)(s.h5,{id:"square_1",children:"square_1"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_rSymSqu_06.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"square_2",children:"square_2"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_squ_0006.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h4,{id:"voice",children:"voice"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0044.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"voice_a",children:"voice_a"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0010.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"voice_i",children:"voice_i"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0012.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"voice_eu",children:"voice_eu"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0031.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]}),"\n",(0,n.jsx)(s.h5,{id:"voice_o",children:"voice_o"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"AKWF_hvoice_0036.wav"}),"\n",(0,n.jsxs)(s.li,{children:["url: ",(0,n.jsx)(s.a,{href:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF",children:"https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE/tree/master/AKWF"})]}),"\n",(0,n.jsx)(s.li,{children:"license: Creative Commons 0"}),"\n"]})]})}function a(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(t,{...e})}):t(e)}},8453:(e,s,l)=>{l.d(s,{R:()=>d,x:()=>h});var n=l(6540);const r={},i=n.createContext(r);function d(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function h(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/54934235.01f82f4a.js b/assets/js/54934235.01f82f4a.js deleted file mode 100644 index 25850828..00000000 --- a/assets/js/54934235.01f82f4a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[410],{4912:e=>{e.exports=JSON.parse('{"title":"\ud83d\udcdf About","description":"What is Mercury and What can you do with Mercury?","slug":"/category/-about","permalink":"/mercury/docs/category/-about","navigation":{"previous":{"title":"\ud83d\udc4b Welcome","permalink":"/mercury/docs/welcome"},"next":{"title":"\ud83e\udd14 What is Mercury?","permalink":"/mercury/docs/about/"}}}')}}]); \ No newline at end of file diff --git a/assets/js/54934235.aa4288f1.js b/assets/js/54934235.aa4288f1.js new file mode 100644 index 00000000..d4242290 --- /dev/null +++ b/assets/js/54934235.aa4288f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[410],{4912:e=>{e.exports=JSON.parse('{"title":"\ud83d\udcdf About","description":"What is Mercury and What can you do with Mercury?","slug":"/about","permalink":"/mercury/docs/about","navigation":{"previous":{"title":"\ud83d\udc4b Welcome","permalink":"/mercury/docs/"},"next":{"title":"\ud83e\udd14 What is Mercury?","permalink":"/mercury/docs/about/about-mercury"}}}')}}]); \ No newline at end of file diff --git a/assets/js/f0204682.d75356f7.js b/assets/js/613c1710.8b6eeae8.js similarity index 65% rename from assets/js/f0204682.d75356f7.js rename to assets/js/613c1710.8b6eeae8.js index 7d328ef5..b5cca12c 100644 --- a/assets/js/f0204682.d75356f7.js +++ b/assets/js/613c1710.8b6eeae8.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[131],{1966:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[957],{1966:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/643a29c7.01f72472.js b/assets/js/643a29c7.01f72472.js new file mode 100644 index 00000000..64599001 --- /dev/null +++ b/assets/js/643a29c7.01f72472.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[452],{8586:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=t(4848),o=t(8453);const s={sidebar_position:6},i="\ud83d\udee0 Extending Mercury",c={id:"usage/extending",title:"\ud83d\udee0 Extending Mercury",description:"In this page you can find help on how to create your own synths for Mercury4Max or the MercuryPlayground in the engine. For this you will work with Max8 or with JavaScript. It is currently not possible to code new synths with the Mercury language itself.",source:"@site/docs/usage/extending.md",sourceDirName:"usage",slug:"/usage/extending",permalink:"/mercury/docs/usage/extending",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udce6 Add Mercury in your Site",permalink:"/mercury/docs/usage/embedding"},next:{title:"\ud83d\udcd6 Reference",permalink:"/mercury/docs/reference"}},a={},d=[{value:"Create a synth for Mercury4Max",id:"create-a-synth-for-mercury4max",level:2},{value:"Create the patch",id:"create-the-patch",level:3},{value:"I/O",id:"io",level:3},{value:"Muting",id:"muting",level:3},{value:"Functions",id:"functions",level:3},{value:"Trigger",id:"trigger",level:3},{value:"noteCount",id:"notecount",level:3},{value:"argListLookup",id:"arglistlookup",level:3},{value:"Example Patcher",id:"example-patcher",level:3},{value:"Create a Synth for MercuryPlayground",id:"create-a-synth-for-mercuryplayground",level:2},{value:"Setup",id:"setup",level:3},{value:"Create an Instrument Class",id:"create-an-instrument-class",level:3},{value:"Add to the language",id:"add-to-the-language",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"-extending-mercury",children:"\ud83d\udee0 Extending Mercury"}),"\n",(0,r.jsx)(n.p,{children:"In this page you can find help on how to create your own synths for Mercury4Max or the MercuryPlayground in the engine. For this you will work with Max8 or with JavaScript. It is currently not possible to code new synths with the Mercury language itself."}),"\n",(0,r.jsx)(n.admonition,{title:"EXPERIMENTAL",type:"warning",children:(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"These features are still experimental and in the future things might change!"})})}),"\n",(0,r.jsx)(n.h2,{id:"create-a-synth-for-mercury4max",children:"Create a synth for Mercury4Max"}),"\n",(0,r.jsx)(n.p,{children:"You can extend Mercury4Max with custom synths and other sound designing patches programmed in Max8. This requires knowledge/experience with the MaxMSP programming paradigm. It also requires you to have a Max8 license so you can edit and save the patches. Follow the steps below to setup your own patch. You can also copy-paste the compressed code on the bottom of the page."}),"\n",(0,r.jsx)(n.h3,{id:"create-the-patch",children:"Create the patch"}),"\n",(0,r.jsxs)(n.p,{children:["Create a new patch for your custom sound design. Save the patch in ",(0,r.jsx)(n.code,{children:"~/Documents/Mercury/Library/Sound"}),", if you do not have this folder you should create it. Give the patch an appropriate name, this will also be the name used in the live coding environment. For example: if you name the patch ",(0,r.jsx)(n.code,{children:"myCustomSynth.maxpat"}),", then in Mercury you will type ",(0,r.jsx)(n.code,{children:"new synth myCustomSynth"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Don't give your synth a filename with spaces! Instead I recommend using programming conventions such as ",(0,r.jsx)(n.code,{children:"camelCase"}),", ",(0,r.jsx)(n.code,{children:"PascalCase"})," or ",(0,r.jsx)(n.code,{children:"snake_case"}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"io",children:"I/O"}),"\n",(0,r.jsxs)(n.p,{children:["The patch will be loaded inside a ",(0,r.jsx)(n.code,{children:"poly~"})," object. Therefore it is required to use an ",(0,r.jsx)(n.code,{children:"[in 1]"})," object to receive incoming messages and an ",(0,r.jsx)(n.code,{children:"[out~ 1]"})," object to send a signal out."]}),"\n",(0,r.jsx)(n.h3,{id:"muting",children:"Muting"}),"\n",(0,r.jsxs)(n.p,{children:["Make sure you include a ",(0,r.jsx)(n.code,{children:"[thispoly~]"})," and send it a ",(0,r.jsx)(n.code,{children:"[loadmess mute 1]"})," to make sure the patcher is muted on initialization of Mercury. This prevents high cpu load and unwanted sound when not using the synth."]}),"\n",(0,r.jsx)(n.h3,{id:"functions",children:"Functions"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"[route]"})," object to route arguments from functions to parts of the patcher that you want to be able to control with the code. For example typing ",(0,r.jsx)(n.code,{children:"new synth myCustomSynth freq(100)"})," will allow you to use ",(0,r.jsx)(n.code,{children:"[route freq]"})," and retrieve the value ",(0,r.jsx)(n.code,{children:"100"}),". This functiong routing has to come after the ",(0,r.jsx)(n.code,{children:"[route method]"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"trigger",children:"Trigger"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"[route bang]"})," object to send a trigger to for example a ",(0,r.jsx)(n.code,{children:"[line~]"})," or ",(0,r.jsx)(n.code,{children:"[adsr~]"})," object in parts of the patcher that need to start the sound. The bang is send based on the combined results of the ",(0,r.jsx)(n.code,{children:"time()"}),", ",(0,r.jsx)(n.code,{children:"play()"}),", ",(0,r.jsx)(n.code,{children:"warp()"})," and ",(0,r.jsx)(n.code,{children:"ratchet()"})," methods."]}),"\n",(0,r.jsx)(n.h3,{id:"notecount",children:"noteCount"}),"\n",(0,r.jsxs)(n.p,{children:["Send a bang to ",(0,r.jsx)(n.code,{children:"[pv noteCount]"})," to retrieve the current count the instrument is at. This count increments based on the rhythm of the combined results of the ",(0,r.jsx)(n.code,{children:"time()"}),", ",(0,r.jsx)(n.code,{children:"play()"})," and ",(0,r.jsx)(n.code,{children:"warp()"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"arglistlookup",children:"argListLookup"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"[argListLookup]"})," abstraction to allow Mercury to lookup values from a ",(0,r.jsx)(n.code,{children:"list"})," created in the code. ",(0,r.jsx)(n.code,{children:"[argListLookup]"})," expects the ",(0,r.jsx)(n.code,{children:"value"})," or ",(0,r.jsx)(n.code,{children:"name"})," on the left inlet, and the ",(0,r.jsx)(n.code,{children:"[pv noteCount]"})," on the right inlet to index the correct value from the ",(0,r.jsx)(n.code,{children:"list"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["While coding in Max it could be that you can't create the ",(0,r.jsx)(n.code,{children:"[argListLookup]"}),' object because it is not recognized. To fix this you can add the Mercury folder to the searchpath, or you can save the patcher first and open it when Mercury is open. Another "hack" is to create a ',(0,r.jsx)(n.code,{children:"[join 2]"})," object, make all the connections, than replace the text for ",(0,r.jsx)(n.code,{children:"argListLookup"}),". The connections will stay even tho the object turns orange."]})}),"\n",(0,r.jsx)(n.h3,{id:"example-patcher",children:"Example Patcher"}),"\n",(0,r.jsx)(n.p,{children:"Below is copy-compressed code of an example patcher that generates a short sinewave beep with different envelope release times."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"
\n----------begin_max5_patcher----------\n1673.3oc2ZE0biZCD94jeEpLcllzw0EDfAm25z45SWaenWeJNyMxfrMW.INg\n3Rbu4xu8tRB6.mchUB3KYtGhwRVnUe6t5a2UJe9zSblyukV4ft.cI5jS97om\nbhtKUGmzz9DmBxsI4jJ8vbR3EETlzYj42jzak59+q+9cu4BjbEEcIQr7sYUx\n2x4WWWdEpHa4JIJGZgxytlhxj+TEhwkna3hqyXKQmIno+JWPXKomOBlBhDkU\nglSSH0UTzZdMZE4STjjipzOAYTRjIqPYLciDtPPSjnE77Tp.QXoptYnJIQHQ\n+IUjTKVuYAmmwnI7ZldUGzzIqtHikSkZH50zYVpFX74e3W7Cctej7Z4lg51z\nqd4.P48p0gQa5O0cr6Hje3T0CbXn5wDnOzUMuzBNStfjPUiGq55Kmdp5iQVZ\nIlWKkblisPv2Y6hUPJnRp38TFYdNsMP5BuMSioK45RpAaNyAakyVfrGz6g03\n0KVqDvAa9Dc0y.nL5M.B1wiqia1dUC3cUC3.mmFTebXNUCSeO8iXCLwuFfo2\nPBy3iOJEvJhhVHneDo1gtWb5uKNmreX5+fvbTyeGFt3.suaLtWv8gnKgUVYs\nlmifJ3LfZKaIije2OX69YO+mLkjmuFXgdZf4EZLjODkj2.h12sB.ZohMFdB7\nuzpJhXshQGn9qS.J7xZDP6qYru2KuCWsukJFr6SVwf80ph.CmE1S2HZXcvy4\njzB.2nBkitmsl4oCJckYGbCNccOFajkfotjmu9NaQH9ItENS4e04gEPNx34O\noWHtjvn4Vu+L5wcCmyEPxJI7btvrR0Vi6+vq01x8gKv5EBbxlw56oZDia8Nl\n4uc3gBdZmX8PLbSvebjZVZdskcVR3Qc9n0RRvK4BYFj.hZJGGNfrEAiQ+akI\nOOUhFPTAdAZlSJmQm4nHMjhrkKUY5gfkghLAQVHUsyy0uEDxrVMyP+BJRsyi\nl1ONkmc9eAlnHdQQ8hT4gTU9iQpbjur7SpLpo+tBXWAIDWLGfYJ5lL4pcxGG\nTfyAcDj4m5qpWOG90pMYSunlknrqfxq5dM4XzevEH5sjhxb5EyXyXpWBs3in\nKAWQHJhK3K5d0LFPKfpVy.4Vr9ezOUA0OawGOeuVfI1tc5YaALd2ax.Odfo0\naq3slZXXSAMpc1JtGkrUviQ+ldG1LGnxgU7TXenptrDBCYxbivVu0yQ+S2PX\nRk+EIMUukE7rztEcbjLI7oSBZ6Kqq+SMwfS5MhLoDpjaagdoTcMjWXbpBccg\nBFU06o7orXdz0epF6Y3P286PFZKkf+y0gzaRXKGxnfA1V4MF8NPWMSWjFXm.\nsREETQZVTkVTlUPO6bjwPhNqKYQYNY8YfR8FhnDFjR2JTHgJgVmOioHlyjsI\ngkJTtk8vTXtVOunkcln052gftHoUh6F2qxww3mqtep6NUiOfp92rwqVibvgK\nUc7FMG.gQ+RPI0URvRn2LPqx9OHH89zEXaISBd1glBaEYx2eX4EgUxc1mk6S\nGCwsKkI.eLxjE7nsF.9CIkdPqrzwwGups0IW0PCnRtZufMXOtbOPQIAGrp6Q\nVgbuvlrZmdLv9OemsGhh2SMPsoFdaNwn.rgHZpJu8mMBU0SRVR2MD.BibQ+n\nm0.08XbnXFiY3QYuoNZhsvKd+nCe.y3HaNmyFrF0.4WVG1ng2e0vyFzjxR+b\nWe.7krNIGRM.JgvVbFdrvYiO6j9cNAJj08v4WkYBp6rMTOcIIYsZfaK21amx\nfezfOcJT2ybrAQwwX+P02BhbCii6dJBcjlp3d+fot5x5+5uz9sZGjy8oeEBG\n7jXO3A3DD09lDb24LKmSRtdIDPik1I17RFGlj7rjqa2sdbT8Hmb+gdz2i8bf\nL39u1L33ou.F7l5088+92fie0YvieAL3lXmXyMF9cs816UGit2Kf81uyof7M\n0dqkgN4wu5+4A8xTewicbBp30hjM3aSoOPx0aVpozJYFir4Xvu79qZG8PoNX\nqjl.yg2ADj5xr6sf7LywgEz8qlsWsfauj7lk+iJZUsI8FiXa.Y32Jko29Uld\n81ewJI2aHN0BOyICff7sw6X5PgnCJogPPtVHn3gPP13GFYri8RPgVJm9BnHK\njyPPFFaimf2wfLzZI6NzLG138i2Q2ZBkRJK+DUT0LXsHfLm9fIij3Q5lYLSS\n8Mq3HneJay3iz8PDPFBRH8fZgdY4b6DSou5arVvpyZvH.NPj5rxXPxJUkMQ3\n0Iuc5WN8+AHUt1FO\n-----------end_max5_patcher-----------\n
\n"})}),"\n",(0,r.jsx)(n.h2,{id:"create-a-synth-for-mercuryplayground",children:"Create a Synth for MercuryPlayground"}),"\n",(0,r.jsxs)(n.p,{children:["The Mercury Playground uses the ",(0,r.jsx)(n.a,{href:"https://tonejs.github.io/",children:(0,r.jsx)(n.strong,{children:"ToneJS"})})," framework for creating the Transport, Sequencer, Synths, Sampler and almost everything WebAudio related. It also uses ",(0,r.jsx)(n.a,{href:"https://webmidijs.org/",children:(0,r.jsx)(n.strong,{children:"WebMidiJS"})})," for the MIDI related instruments and ",(0,r.jsx)(n.a,{href:"https://socket.io/",children:(0,r.jsx)(n.strong,{children:"SocketIO"})})," for the OSC related functionalities. Extending the engine with your own synths requires knowledge/experience with JavaScript programming."]}),"\n",(0,r.jsx)(n.h3,{id:"setup",children:"Setup"}),"\n",(0,r.jsxs)(n.p,{children:["First clone the project from ",(0,r.jsx)(n.code,{children:"https://github.com/tmhglnd/mercury-playground"})," so you can run it locally. Follow the steps in the ",(0,r.jsx)(n.a,{href:"/mercury/docs/getting-started#-without-internet",children:"Getting Started"})]}),"\n",(0,r.jsx)(n.h3,{id:"create-an-instrument-class",children:"Create an Instrument Class"}),"\n",(0,r.jsxs)(n.p,{children:["You can create a new ",(0,r.jsx)(n.code,{children:"Class"})," for your instrument. Depending on what you want the instrument to do (Sound, MIDI, Sample, OSC, Polyphonic) you can ",(0,r.jsx)(n.code,{children:"extend"})," your class from the ",(0,r.jsx)(n.code,{children:"Sequencer"}),", the ",(0,r.jsx)(n.code,{children:"Instrument"})," or the ",(0,r.jsx)(n.code,{children:"PolyInstrument"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"class MyCustomInstrument extends Sequencer {\n\t...\n}\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"class MyCustomSynth extends Instrument {\n\t...\n}\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"class MyCustomPoly extends PolyInstrument {\n\t...\n}\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"You can use the other instrument class files (such as MonoSynth.js) as an example or starting point for making your own"})}),"\n",(0,r.jsx)(n.h3,{id:"add-to-the-language",children:"Add to the language"}),"\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.code,{children:"worker.js"})," file you can add your instrument to the language so the parser knows what ",(0,r.jsx)(n.code,{children:"Class"})," to use when you type:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"new mySynth function()\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Add the instrument to the ",(0,r.jsx)(n.code,{children:"objectMap"})," like so:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"const objectMap = {\n\t...,\n\t'mySynth' : (obj) => {\n\t\tlet type = obj.type;\n\t\tlet args = obj.functions;\t\t\t\n\t\tlet inst = new MyCustomSynth(engine, type, canvas);\n\n\t\tobjectMap.applyFunctions(args, inst, type);\n\t\treturn inst;\n\t},\n\t...\n}\n"})})]})}function l(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var r=t(6540);const o={},s=r.createContext(o);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/643a29c7.c2ddcbec.js b/assets/js/643a29c7.c2ddcbec.js deleted file mode 100644 index 8084c9f6..00000000 --- a/assets/js/643a29c7.c2ddcbec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[452],{8586:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=t(4848),o=t(8453);const s={sidebar_position:6},i="\ud83d\udee0 Extending Mercury",c={id:"usage/extending",title:"\ud83d\udee0 Extending Mercury",description:"In this page you can find help on how to create your own synths for Mercury4Max or the MercuryPlayground in the engine. For this you will work with Max8 or with JavaScript. It is currently not possible to code new synths with the Mercury language itself.",source:"@site/docs/usage/extending.md",sourceDirName:"usage",slug:"/usage/extending",permalink:"/mercury/docs/usage/extending",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udce6 Add Mercury in your Site",permalink:"/mercury/docs/usage/embedding"},next:{title:"\ud83d\udcd6 Reference",permalink:"/mercury/docs/category/-reference"}},a={},d=[{value:"Create a synth for Mercury4Max",id:"create-a-synth-for-mercury4max",level:2},{value:"Create the patch",id:"create-the-patch",level:3},{value:"I/O",id:"io",level:3},{value:"Muting",id:"muting",level:3},{value:"Functions",id:"functions",level:3},{value:"Trigger",id:"trigger",level:3},{value:"noteCount",id:"notecount",level:3},{value:"argListLookup",id:"arglistlookup",level:3},{value:"Example Patcher",id:"example-patcher",level:3},{value:"Create a Synth for MercuryPlayground",id:"create-a-synth-for-mercuryplayground",level:2},{value:"Setup",id:"setup",level:3},{value:"Create an Instrument Class",id:"create-an-instrument-class",level:3},{value:"Add to the language",id:"add-to-the-language",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"-extending-mercury",children:"\ud83d\udee0 Extending Mercury"}),"\n",(0,r.jsx)(n.p,{children:"In this page you can find help on how to create your own synths for Mercury4Max or the MercuryPlayground in the engine. For this you will work with Max8 or with JavaScript. It is currently not possible to code new synths with the Mercury language itself."}),"\n",(0,r.jsx)(n.admonition,{title:"EXPERIMENTAL",type:"warning",children:(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"These features are still experimental and in the future things might change!"})})}),"\n",(0,r.jsx)(n.h2,{id:"create-a-synth-for-mercury4max",children:"Create a synth for Mercury4Max"}),"\n",(0,r.jsx)(n.p,{children:"You can extend Mercury4Max with custom synths and other sound designing patches programmed in Max8. This requires knowledge/experience with the MaxMSP programming paradigm. It also requires you to have a Max8 license so you can edit and save the patches. Follow the steps below to setup your own patch. You can also copy-paste the compressed code on the bottom of the page."}),"\n",(0,r.jsx)(n.h3,{id:"create-the-patch",children:"Create the patch"}),"\n",(0,r.jsxs)(n.p,{children:["Create a new patch for your custom sound design. Save the patch in ",(0,r.jsx)(n.code,{children:"~/Documents/Mercury/Library/Sound"}),", if you do not have this folder you should create it. Give the patch an appropriate name, this will also be the name used in the live coding environment. For example: if you name the patch ",(0,r.jsx)(n.code,{children:"myCustomSynth.maxpat"}),", then in Mercury you will type ",(0,r.jsx)(n.code,{children:"new synth myCustomSynth"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsxs)(n.p,{children:["Don't give your synth a filename with spaces! Instead I recommend using programming conventions such as ",(0,r.jsx)(n.code,{children:"camelCase"}),", ",(0,r.jsx)(n.code,{children:"PascalCase"})," or ",(0,r.jsx)(n.code,{children:"snake_case"}),"."]})}),"\n",(0,r.jsx)(n.h3,{id:"io",children:"I/O"}),"\n",(0,r.jsxs)(n.p,{children:["The patch will be loaded inside a ",(0,r.jsx)(n.code,{children:"poly~"})," object. Therefore it is required to use an ",(0,r.jsx)(n.code,{children:"[in 1]"})," object to receive incoming messages and an ",(0,r.jsx)(n.code,{children:"[out~ 1]"})," object to send a signal out."]}),"\n",(0,r.jsx)(n.h3,{id:"muting",children:"Muting"}),"\n",(0,r.jsxs)(n.p,{children:["Make sure you include a ",(0,r.jsx)(n.code,{children:"[thispoly~]"})," and send it a ",(0,r.jsx)(n.code,{children:"[loadmess mute 1]"})," to make sure the patcher is muted on initialization of Mercury. This prevents high cpu load and unwanted sound when not using the synth."]}),"\n",(0,r.jsx)(n.h3,{id:"functions",children:"Functions"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"[route]"})," object to route arguments from functions to parts of the patcher that you want to be able to control with the code. For example typing ",(0,r.jsx)(n.code,{children:"new synth myCustomSynth freq(100)"})," will allow you to use ",(0,r.jsx)(n.code,{children:"[route freq]"})," and retrieve the value ",(0,r.jsx)(n.code,{children:"100"}),". This functiong routing has to come after the ",(0,r.jsx)(n.code,{children:"[route method]"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"trigger",children:"Trigger"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"[route bang]"})," object to send a trigger to for example a ",(0,r.jsx)(n.code,{children:"[line~]"})," or ",(0,r.jsx)(n.code,{children:"[adsr~]"})," object in parts of the patcher that need to start the sound. The bang is send based on the combined results of the ",(0,r.jsx)(n.code,{children:"time()"}),", ",(0,r.jsx)(n.code,{children:"play()"}),", ",(0,r.jsx)(n.code,{children:"warp()"})," and ",(0,r.jsx)(n.code,{children:"ratchet()"})," methods."]}),"\n",(0,r.jsx)(n.h3,{id:"notecount",children:"noteCount"}),"\n",(0,r.jsxs)(n.p,{children:["Send a bang to ",(0,r.jsx)(n.code,{children:"[pv noteCount]"})," to retrieve the current count the instrument is at. This count increments based on the rhythm of the combined results of the ",(0,r.jsx)(n.code,{children:"time()"}),", ",(0,r.jsx)(n.code,{children:"play()"})," and ",(0,r.jsx)(n.code,{children:"warp()"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"arglistlookup",children:"argListLookup"}),"\n",(0,r.jsxs)(n.p,{children:["Use the ",(0,r.jsx)(n.code,{children:"[argListLookup]"})," abstraction to allow Mercury to lookup values from a ",(0,r.jsx)(n.code,{children:"list"})," created in the code. ",(0,r.jsx)(n.code,{children:"[argListLookup]"})," expects the ",(0,r.jsx)(n.code,{children:"value"})," or ",(0,r.jsx)(n.code,{children:"name"})," on the left inlet, and the ",(0,r.jsx)(n.code,{children:"[pv noteCount]"})," on the right inlet to index the correct value from the ",(0,r.jsx)(n.code,{children:"list"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["While coding in Max it could be that you can't create the ",(0,r.jsx)(n.code,{children:"[argListLookup]"}),' object because it is not recognized. To fix this you can add the Mercury folder to the searchpath, or you can save the patcher first and open it when Mercury is open. Another "hack" is to create a ',(0,r.jsx)(n.code,{children:"[join 2]"})," object, make all the connections, than replace the text for ",(0,r.jsx)(n.code,{children:"argListLookup"}),". The connections will stay even tho the object turns orange."]})}),"\n",(0,r.jsx)(n.h3,{id:"example-patcher",children:"Example Patcher"}),"\n",(0,r.jsx)(n.p,{children:"Below is copy-compressed code of an example patcher that generates a short sinewave beep with different envelope release times."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"
\n----------begin_max5_patcher----------\n1673.3oc2ZE0biZCD94jeEpLcllzw0EDfAm25z45SWaenWeJNyMxfrMW.INg\n3Rbu4xu8tRB6.mchUB3KYtGhwRVnUe6t5a2UJe9zSblyukV4ft.cI5jS97om\nbhtKUGmzz9DmBxsI4jJ8vbR3EETlzYj42jzak59+q+9cu4BjbEEcIQr7sYUx\n2x4WWWdEpHa4JIJGZgxytlhxj+TEhwkna3hqyXKQmIno+JWPXKomOBlBhDkU\nglSSH0UTzZdMZE4STjjipzOAYTRjIqPYLciDtPPSjnE77Tp.QXoptYnJIQHQ\n+IUjTKVuYAmmwnI7ZldUGzzIqtHikSkZH50zYVpFX74e3W7Cctej7Z4lg51z\nqd4.P48p0gQa5O0cr6Hje3T0CbXn5wDnOzUMuzBNStfjPUiGq55Kmdp5iQVZ\nIlWKkblisPv2Y6hUPJnRp38TFYdNsMP5BuMSioK45RpAaNyAakyVfrGz6g03\n0KVqDvAa9Dc0y.nL5M.B1wiqia1dUC3cUC3.mmFTebXNUCSeO8iXCLwuFfo2\nPBy3iOJEvJhhVHneDo1gtWb5uKNmreX5+fvbTyeGFt3.suaLtWv8gnKgUVYs\nlmifJ3LfZKaIije2OX69YO+mLkjmuFXgdZf4EZLjODkj2.h12sB.ZohMFdB7\nuzpJhXshQGn9qS.J7xZDP6qYru2KuCWsukJFr6SVwf80ph.CmE1S2HZXcvy4\njzB.2nBkitmsl4oCJckYGbCNccOFajkfotjmu9NaQH9ItENS4e04gEPNx34O\noWHtjvn4Vu+L5wcCmyEPxJI7btvrR0Vi6+vq01x8gKv5EBbxlw56oZDia8Nl\n4uc3gBdZmX8PLbSvebjZVZdskcVR3Qc9n0RRvK4BYFj.hZJGGNfrEAiQ+akI\nOOUhFPTAdAZlSJmQm4nHMjhrkKUY5gfkghLAQVHUsyy0uEDxrVMyP+BJRsyi\nl1ONkmc9eAlnHdQQ8hT4gTU9iQpbjur7SpLpo+tBXWAIDWLGfYJ5lL4pcxGG\nTfyAcDj4m5qpWOG90pMYSunlknrqfxq5dM4XzevEH5sjhxb5EyXyXpWBs3in\nKAWQHJhK3K5d0LFPKfpVy.4Vr9ezOUA0OawGOeuVfI1tc5YaALd2ax.Odfo0\naq3slZXXSAMpc1JtGkrUviQ+ldG1LGnxgU7TXenptrDBCYxbivVu0yQ+S2PX\nRk+EIMUukE7rztEcbjLI7oSBZ6Kqq+SMwfS5MhLoDpjaagdoTcMjWXbpBccg\nBFU06o7orXdz0epF6Y3P286PFZKkf+y0gzaRXKGxnfA1V4MF8NPWMSWjFXm.\nsREETQZVTkVTlUPO6bjwPhNqKYQYNY8YfR8FhnDFjR2JTHgJgVmOioHlyjsI\ngkJTtk8vTXtVOunkcln052gftHoUh6F2qxww3mqtep6NUiOfp92rwqVibvgK\nUc7FMG.gQ+RPI0URvRn2LPqx9OHH89zEXaISBd1glBaEYx2eX4EgUxc1mk6S\nGCwsKkI.eLxjE7nsF.9CIkdPqrzwwGups0IW0PCnRtZufMXOtbOPQIAGrp6Q\nVgbuvlrZmdLv9OemsGhh2SMPsoFdaNwn.rgHZpJu8mMBU0SRVR2MD.BibQ+n\nm0.08XbnXFiY3QYuoNZhsvKd+nCe.y3HaNmyFrF0.4WVG1ng2e0vyFzjxR+b\nWe.7krNIGRM.JgvVbFdrvYiO6j9cNAJj08v4WkYBp6rMTOcIIYsZfaK21amx\nfezfOcJT2ybrAQwwX+P02BhbCii6dJBcjlp3d+fot5x5+5uz9sZGjy8oeEBG\n7jXO3A3DD09lDb24LKmSRtdIDPik1I17RFGlj7rjqa2sdbT8Hmb+gdz2i8bf\nL39u1L33ou.F7l5088+92fie0YvieAL3lXmXyMF9cs816UGit2Kf81uyof7M\n0dqkgN4wu5+4A8xTewicbBp30hjM3aSoOPx0aVpozJYFir4Xvu79qZG8PoNX\nqjl.yg2ADj5xr6sf7LywgEz8qlsWsfauj7lk+iJZUsI8FiXa.Y32Jko29Uld\n81ewJI2aHN0BOyICff7sw6X5PgnCJogPPtVHn3gPP13GFYri8RPgVJm9BnHK\njyPPFFaimf2wfLzZI6NzLG138i2Q2ZBkRJK+DUT0LXsHfLm9fIij3Q5lYLSS\n8Mq3HneJay3iz8PDPFBRH8fZgdY4b6DSou5arVvpyZvH.NPj5rxXPxJUkMQ3\n0Iuc5WN8+AHUt1FO\n-----------end_max5_patcher-----------\n
\n"})}),"\n",(0,r.jsx)(n.h2,{id:"create-a-synth-for-mercuryplayground",children:"Create a Synth for MercuryPlayground"}),"\n",(0,r.jsxs)(n.p,{children:["The Mercury Playground uses the ",(0,r.jsx)(n.a,{href:"https://tonejs.github.io/",children:(0,r.jsx)(n.strong,{children:"ToneJS"})})," framework for creating the Transport, Sequencer, Synths, Sampler and almost everything WebAudio related. It also uses ",(0,r.jsx)(n.a,{href:"https://webmidijs.org/",children:(0,r.jsx)(n.strong,{children:"WebMidiJS"})})," for the MIDI related instruments and ",(0,r.jsx)(n.a,{href:"https://socket.io/",children:(0,r.jsx)(n.strong,{children:"SocketIO"})})," for the OSC related functionalities. Extending the engine with your own synths requires knowledge/experience with JavaScript programming."]}),"\n",(0,r.jsx)(n.h3,{id:"setup",children:"Setup"}),"\n",(0,r.jsxs)(n.p,{children:["First clone the project from ",(0,r.jsx)(n.code,{children:"https://github.com/tmhglnd/mercury-playground"})," so you can run it locally. Follow the steps in the ",(0,r.jsx)(n.a,{href:"/mercury/docs/getting-started#%F0%9F%8C%91-without-internet",children:"Getting Started"})]}),"\n",(0,r.jsx)(n.h3,{id:"create-an-instrument-class",children:"Create an Instrument Class"}),"\n",(0,r.jsxs)(n.p,{children:["You can create a new ",(0,r.jsx)(n.code,{children:"Class"})," for your instrument. Depending on what you want the instrument to do (Sound, MIDI, Sample, OSC, Polyphonic) you can ",(0,r.jsx)(n.code,{children:"extend"})," your class from the ",(0,r.jsx)(n.code,{children:"Sequencer"}),", the ",(0,r.jsx)(n.code,{children:"Instrument"})," or the ",(0,r.jsx)(n.code,{children:"PolyInstrument"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"class MyCustomInstrument extends Sequencer {\n\t...\n}\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"class MyCustomSynth extends Instrument {\n\t...\n}\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"class MyCustomPoly extends PolyInstrument {\n\t...\n}\n"})}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"You can use the other instrument class files (such as MonoSynth.js) as an example or starting point for making your own"})}),"\n",(0,r.jsx)(n.h3,{id:"add-to-the-language",children:"Add to the language"}),"\n",(0,r.jsxs)(n.p,{children:["In the ",(0,r.jsx)(n.code,{children:"worker.js"})," file you can add your instrument to the language so the parser knows what ",(0,r.jsx)(n.code,{children:"Class"})," to use when you type:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"new mySynth function()\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Add the instrument to the ",(0,r.jsx)(n.code,{children:"objectMap"})," like so:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"const objectMap = {\n\t...,\n\t'mySynth' : (obj) => {\n\t\tlet type = obj.type;\n\t\tlet args = obj.functions;\t\t\t\n\t\tlet inst = new MyCustomSynth(engine, type, canvas);\n\n\t\tobjectMap.applyFunctions(args, inst, type);\n\t\treturn inst;\n\t},\n\t...\n}\n"})})]})}function l(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>c});var r=t(6540);const o={},s=r.createContext(o);function i(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6c1c1008.704bc95e.js b/assets/js/6c1c1008.704bc95e.js new file mode 100644 index 00000000..2dfae941 --- /dev/null +++ b/assets/js/6c1c1008.704bc95e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[385],{2077:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var r=n(4848),s=n(8453);const i={sidebar_position:1},o="\ud83e\udd14 What is Mercury?",a={id:"about/about-mercury",title:"\ud83e\udd14 What is Mercury?",description:"All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals.",source:"@site/docs/about/about-mercury.md",sourceDirName:"about",slug:"/about/about-mercury",permalink:"/mercury/docs/about/about-mercury",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udcdf About",permalink:"/mercury/docs/about"},next:{title:"\ud83d\udd2d What can you do with Mercury?",permalink:"/mercury/docs/about/vision"}},c={},l=[];function u(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",p:"p",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"-what-is-mercury",children:"\ud83e\udd14 What is Mercury?"}),"\n",(0,r.jsx)(t.admonition,{title:"Mercury is a free/open-source, beginner-friendly, minimal and human-readable language for the live coding of algorithmic electronic music",type:"note"}),"\n",(0,r.jsx)(t.p,{children:"All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals."}),"\n",(0,r.jsx)(t.admonition,{title:"about the name \u263f",type:"note",children:(0,r.jsx)(t.p,{children:"The language is named after te planet Mercury. In astrology Mercury rules the creation and expression of our mental processes. The planet implores us to express ourselves. Mercury is about a quick wit, quick thinking. It lets us move from one thing to the next."})}),"\n",(0,r.jsxs)(t.p,{children:["Mercury was first programmed by ",(0,r.jsx)(t.a,{href:"https://www.timohoogland.com",children:"Timo Hoogland"})," in 2018 with the Cycling'74 Max8 node-based creative coding environment, as an abstracted layer on the Max/MSP audio engine and with the use of Node4Max for parsing, lexing and generative algorithms and Jitter/OpenGL for the visuals and the responsive texteditor. Later Mercury was also ported to a browser based version using WebAudio and the ToneJS framework. The original version was designed around a limitation of writing no more than 30 lines of code. This limitation is still present in the Mercury4Max version, but is not in use when using the browser or external editor."]}),"\n",(0,r.jsxs)(t.p,{children:["Mercury finds its roots in the concept of ",(0,r.jsx)(t.em,{children:"Serialism"}),", a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a ",(0,r.jsx)(t.code,{children:"list"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["Every instance of an instrument has an internal counter. This counter increments (0, 1, 2, 3,... etc) when an instrument triggers an event based on the time-interval from ",(0,r.jsx)(t.code,{children:"time()"}),". This is also called a step-sequencer. When a ",(0,r.jsx)(t.code,{children:"list"})," is added as argument to an ",(0,r.jsx)(t.code,{children:"instrument-function"})," the instrument uses its count as a lookup-position (index) taking the corresponding value from the list. As soon as the index is higher then the amount of values in the ",(0,r.jsx)(t.code,{children:"list"})," it will return to the beginning and start over, therefore the ",(0,r.jsx)(t.code,{children:"list"})," is circular/looping."]}),"\n",(0,r.jsxs)(t.p,{children:["Mercury makes use of the ",(0,r.jsx)(t.a,{href:"https://www.npmjs.com/package/total-serialism",children:(0,r.jsx)(t.code,{children:"total-serialism"})})," NodeJS Package to generate and transform numbersequences that are used for melodies, rhythms, parameters and basically anything that can be sequenced in the environment. ",(0,r.jsx)(t.code,{children:"total-serialism"})," is a set of functions used for procedurally generating and transforming lists. This library is mainly designed with algorithmic composition of music in mind, but can be useful for other purposes that involve generating and manipulating lists and numbers."]})]})}function d(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var r=n(6540);const s={},i=r.createContext(s);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8f7dbc55.4e774b3a.js b/assets/js/8f7dbc55.4e774b3a.js new file mode 100644 index 00000000..4f79f04f --- /dev/null +++ b/assets/js/8f7dbc55.4e774b3a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[163],{4061:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.b09fd47e.js b/assets/js/935f2afb.bd83e6a6.js similarity index 70% rename from assets/js/935f2afb.b09fd47e.js rename to assets/js/935f2afb.bd83e6a6.js index 9fbcb98b..ecda6e33 100644 --- a/assets/js/935f2afb.b09fd47e.js +++ b/assets/js/935f2afb.bd83e6a6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"\ud83d\udc4b Welcome","href":"/mercury/docs/welcome","docId":"welcome","unlisted":false},{"type":"category","label":"\ud83d\udcdf About","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83e\udd14 What is Mercury?","href":"/mercury/docs/about/","docId":"about/about","unlisted":false},{"type":"link","label":"\ud83d\udd2d What can you do with Mercury?","href":"/mercury/docs/about/vision","docId":"about/vision","unlisted":false},{"type":"link","label":"\ud83c\udfae Quick Features Overview","href":"/mercury/docs/about/features","docId":"about/features","unlisted":false},{"type":"link","label":"\ud83d\udc7e Made with Mercury","href":"/mercury/docs/about/inspiration","docId":"about/inspiration","unlisted":false}],"href":"/mercury/docs/category/-about"},{"type":"link","label":"\ud83d\ude80 Getting Started","href":"/mercury/docs/getting-started","docId":"getting-started","unlisted":false},{"type":"category","label":"\ud83d\udd79 Usage","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83e\udd13 Coding in Mercury","href":"/mercury/docs/usage/coding","docId":"usage/coding","unlisted":false},{"type":"link","label":"\ud83d\udcda How To\'s","href":"/mercury/docs/usage/howto","docId":"usage/howto","unlisted":false},{"type":"link","label":"\ud83d\udce2 Sounds in Mercury","href":"/mercury/docs/usage/sounds","docId":"usage/sounds","unlisted":false},{"type":"link","label":"\ud83d\udedd MercuryPlayground Overview","href":"/mercury/docs/usage/playground-overview","docId":"usage/playground-overview","unlisted":false},{"type":"link","label":"\ud83c\udfd4 Mercury4Max Overview","href":"/mercury/docs/usage/mercury4max-overview","docId":"usage/mercury4max-overview","unlisted":false},{"type":"link","label":"\ud83e\ude73 Short-keys","href":"/mercury/docs/usage/shortkeys","docId":"usage/shortkeys","unlisted":false},{"type":"link","label":"\u2328\ufe0f External Editors","href":"/mercury/docs/usage/editors","docId":"usage/editors","unlisted":false},{"type":"link","label":"\ud83d\udea7 Troubleshooting","href":"/mercury/docs/usage/troubleshooting","docId":"usage/troubleshooting","unlisted":false},{"type":"link","label":"\ud83d\udce6 Add Mercury in your Site","href":"/mercury/docs/usage/embedding","docId":"usage/embedding","unlisted":false},{"type":"link","label":"\ud83d\udee0 Extending Mercury","href":"/mercury/docs/usage/extending","docId":"usage/extending","unlisted":false}],"href":"/mercury/docs/category/-usage"},{"type":"category","label":"\ud83d\udcd6 Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Syntax Overview","href":"/mercury/docs/reference/syntax","docId":"reference/syntax","unlisted":false},{"type":"link","label":"Actions","href":"/mercury/docs/reference/actions","docId":"reference/actions","unlisted":false},{"type":"link","label":"Global Settings","href":"/mercury/docs/reference/global","docId":"reference/global","unlisted":false},{"type":"link","label":"Instrument Functions","href":"/mercury/docs/reference/instruments","docId":"reference/instruments","unlisted":false},{"type":"link","label":"Instrument Effects","href":"/mercury/docs/reference/effects","docId":"reference/effects","unlisted":false},{"type":"link","label":"List Functions","href":"/mercury/docs/reference/list-functions","docId":"reference/list-functions","unlisted":false}],"href":"/mercury/docs/category/-reference"},{"type":"link","label":"\ud83d\udc69\u200d\ud83d\udcbb\ud83d\udc68\u200d\ud83d\udcbb Collaborative Coding","href":"/mercury/docs/collaborate","docId":"collaborate","unlisted":false},{"type":"link","label":"\ud83d\udcdd Contribute","href":"/mercury/docs/contribute","docId":"contribute","unlisted":false}]},"docs":{"about/about":{"id":"about/about","title":"\ud83e\udd14 What is Mercury?","description":"All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals.","sidebar":"tutorialSidebar"},"about/features":{"id":"about/features","title":"\ud83c\udfae Quick Features Overview","description":"Below is a brief overview of several things you can do with Mercury. But this is of course just scratching the surface!","sidebar":"tutorialSidebar"},"about/inspiration":{"id":"about/inspiration","title":"\ud83d\udc7e Made with Mercury","description":"Below is some inspiration of awesome things made by the Mercury community.","sidebar":"tutorialSidebar"},"about/vision":{"id":"about/vision","title":"\ud83d\udd2d What can you do with Mercury?","description":"Are you not sure if Mercury is for you? Maybe after reading this you have a better idea:","sidebar":"tutorialSidebar"},"collaborate":{"id":"collaborate","title":"\ud83d\udc69\u200d\ud83d\udcbb\ud83d\udc68\u200d\ud83d\udcbb Collaborative Coding","description":"You can code together in Mercury by using the amazing Flok live coding environment for the browser developed by Dami\xe1n Silvani (a.k.a. Munshkr). Flok is a web-based P2P collaborative editor for live coding music and graphics. Similar to Etherpad, but focused on code evaluation for livecoding.","sidebar":"tutorialSidebar"},"contribute":{"id":"contribute","title":"\ud83d\udcdd Contribute","description":"Contributions to the Mercury environment are very much appreciated in whatever form they come! You can contribute in any of the following ways:","sidebar":"tutorialSidebar"},"getting-started":{"id":"getting-started","title":"\ud83d\ude80 Getting Started","description":"Hello, World! Welcome to the Getting Started guide for Mercury. The various chapters in this guide will get you up and running in no time! Before we get started it is good to know that Mercury currently has 2 versions:","sidebar":"tutorialSidebar"},"reference/actions":{"id":"reference/actions","title":"Actions","description":"The action keywords are used to start a line of Mercury code with. Only lines starting with these keywords are valid. The keywords are: new, list, set, print and silence.","sidebar":"tutorialSidebar"},"reference/effects":{"id":"reference/effects","title":"Instrument Effects","description":"You can add one ore multiple effects to the sound of the instrument to manipulate the sounds timbre in different ways. The first argument is always the effect-name. The arguments that follow depend on the selected effect. fx() can be used as an alias to reduce some typing. For ease of use some arguments can be skipped to access the most used arguments. How this works is explained per effect if applicable.","sidebar":"tutorialSidebar"},"reference/global":{"id":"reference/global","title":"Global Settings","description":"A global setting is a parameter that applies to the entire Mercury environment and all the instruments that are created within it. The global settings are adjust with the set keyword.","sidebar":"tutorialSidebar"},"reference/instruments":{"id":"reference/instruments","title":"Instrument Functions","description":"An instrument is the main sound or sequencing source in Mercury. Instruments can produce sounds natively in Mercury by means of synthesis or sampling, but can also send out MIDI or OSC-messages to trigger external devices or plugins, and are able to take input from for example your microphone. The following functions apply to all the types of instruments such as synth, sample, loop, polySynth, polySample, midi, osc and input.","sidebar":"tutorialSidebar"},"reference/list-functions":{"id":"reference/list-functions","title":"List Functions","description":"Mercury finds its roots in the concept of Serialism, a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a list.","sidebar":"tutorialSidebar"},"reference/syntax":{"id":"reference/syntax","title":"Syntax Overview","description":"Mercury is a minimal and human-readable language for the live coding of algorithmic electronic music. All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals.","sidebar":"tutorialSidebar"},"usage/coding":{"id":"usage/coding","title":"\ud83e\udd13 Coding in Mercury","description":"Now that you got everything setup and are ready to start coding you\'re probably wondering: \\"How does this actually work?\\"","sidebar":"tutorialSidebar"},"usage/editors":{"id":"usage/editors","title":"\u2328\ufe0f External Editors","description":"Instead of using the built-in editor that comes with Mercury4Max (an editor that is running with OpenGL in the Jitter visual environment) or the CodeMirror editor that is running in the MercuryPlayground, you can also work with external code editors and just use Mercury4Max as the sound engine.","sidebar":"tutorialSidebar"},"usage/embedding":{"id":"usage/embedding","title":"\ud83d\udce6 Add Mercury in your Site","description":"It is also possible to include Mercury in your own website. This is done with the mercury-engine. The engine is available as a package on npmjs.com or via unpkg.com.","sidebar":"tutorialSidebar"},"usage/extending":{"id":"usage/extending","title":"\ud83d\udee0 Extending Mercury","description":"In this page you can find help on how to create your own synths for Mercury4Max or the MercuryPlayground in the engine. For this you will work with Max8 or with JavaScript. It is currently not possible to code new synths with the Mercury language itself.","sidebar":"tutorialSidebar"},"usage/howto":{"id":"usage/howto","title":"\ud83d\udcda How To\'s","description":"This page will contain various Tips \'n Tricks, How to?\'s and Did You Know?\'s.","sidebar":"tutorialSidebar"},"usage/mercury4max-overview":{"id":"usage/mercury4max-overview","title":"\ud83c\udfd4 Mercury4Max Overview","description":"This chapter gives an overview of the features in the user interface of Mercury4Max","sidebar":"tutorialSidebar"},"usage/playground-overview":{"id":"usage/playground-overview","title":"\ud83d\udedd MercuryPlayground Overview","description":"This chapter gives an overview of the features in the user interface of the MercuryPlayground. The settings are described from left-right from top-bottom on the page.","sidebar":"tutorialSidebar"},"usage/shortkeys":{"id":"usage/shortkeys","title":"\ud83e\ude73 Short-keys","description":"Mercury has various shortkeys that help you navigate the editor more quickly during live performances, both in the Mercury4Max as in the MercuryPlayground versions.","sidebar":"tutorialSidebar"},"usage/sounds":{"id":"usage/sounds","title":"\ud83d\udce2 Sounds in Mercury","description":"Most of the sounds in Mercury are from freesound.org and are licensed with Creative Commons Attribution or Creative Commons 0 licenses. If not downloaded from freesound it is made sure that the license allows you to redistribute the sounds via the Mercury environment and that you can use them in your projects. All the sounds are listed below with their original source, license and credits.","sidebar":"tutorialSidebar"},"usage/troubleshooting":{"id":"usage/troubleshooting","title":"\ud83d\udea7 Troubleshooting","description":"If you are having issues please follow the steps below:","sidebar":"tutorialSidebar"},"welcome":{"id":"welcome","title":"\ud83d\udc4b Welcome","description":"Welcome to Mercury! \u270c\ufe0f \u262e\ufe0f Make Music, Not War! \u262e\ufe0f \u270c\ufe0f","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"\ud83d\udc4b Welcome","href":"/mercury/docs/","docId":"welcome","unlisted":false},{"type":"category","label":"\ud83d\udcdf About","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83e\udd14 What is Mercury?","href":"/mercury/docs/about/about-mercury","docId":"about/about-mercury","unlisted":false},{"type":"link","label":"\ud83d\udd2d What can you do with Mercury?","href":"/mercury/docs/about/vision","docId":"about/vision","unlisted":false},{"type":"link","label":"\ud83c\udfae Quick Features Overview","href":"/mercury/docs/about/features","docId":"about/features","unlisted":false},{"type":"link","label":"\ud83d\udc7e Made with Mercury","href":"/mercury/docs/about/inspiration","docId":"about/inspiration","unlisted":false}],"href":"/mercury/docs/about"},{"type":"link","label":"\ud83d\ude80 Getting Started","href":"/mercury/docs/getting-started","docId":"getting-started","unlisted":false},{"type":"category","label":"\ud83d\udd79 Usage","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"\ud83e\udd13 Coding in Mercury","href":"/mercury/docs/usage/coding","docId":"usage/coding","unlisted":false},{"type":"link","label":"\ud83d\udcda How To\'s","href":"/mercury/docs/usage/howto","docId":"usage/howto","unlisted":false},{"type":"link","label":"\ud83d\udce2 Sounds in Mercury","href":"/mercury/docs/usage/sounds","docId":"usage/sounds","unlisted":false},{"type":"link","label":"\ud83d\udedd MercuryPlayground Overview","href":"/mercury/docs/usage/playground-overview","docId":"usage/playground-overview","unlisted":false},{"type":"link","label":"\ud83c\udfd4 Mercury4Max Overview","href":"/mercury/docs/usage/mercury4max-overview","docId":"usage/mercury4max-overview","unlisted":false},{"type":"link","label":"\ud83e\ude73 Short-keys","href":"/mercury/docs/usage/shortkeys","docId":"usage/shortkeys","unlisted":false},{"type":"link","label":"\u2328\ufe0f External Editors","href":"/mercury/docs/usage/editors","docId":"usage/editors","unlisted":false},{"type":"link","label":"\ud83d\udea7 Troubleshooting","href":"/mercury/docs/usage/troubleshooting","docId":"usage/troubleshooting","unlisted":false},{"type":"link","label":"\ud83d\udce6 Add Mercury in your Site","href":"/mercury/docs/usage/embedding","docId":"usage/embedding","unlisted":false},{"type":"link","label":"\ud83d\udee0 Extending Mercury","href":"/mercury/docs/usage/extending","docId":"usage/extending","unlisted":false}],"href":"/mercury/docs/usage"},{"type":"category","label":"\ud83d\udcd6 Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Syntax Overview","href":"/mercury/docs/reference/syntax","docId":"reference/syntax","unlisted":false},{"type":"link","label":"Actions","href":"/mercury/docs/reference/actions","docId":"reference/actions","unlisted":false},{"type":"link","label":"Global Settings","href":"/mercury/docs/reference/global","docId":"reference/global","unlisted":false},{"type":"link","label":"Instrument Functions","href":"/mercury/docs/reference/instruments","docId":"reference/instruments","unlisted":false},{"type":"link","label":"Instrument Effects","href":"/mercury/docs/reference/effects","docId":"reference/effects","unlisted":false},{"type":"link","label":"List Functions","href":"/mercury/docs/reference/list-functions","docId":"reference/list-functions","unlisted":false}],"href":"/mercury/docs/reference"},{"type":"link","label":"\ud83d\udc69\u200d\ud83d\udcbb\ud83d\udc68\u200d\ud83d\udcbb Collaborative Coding","href":"/mercury/docs/collaborate","docId":"collaborate","unlisted":false},{"type":"link","label":"\ud83d\udcdd Contribute","href":"/mercury/docs/contribute","docId":"contribute","unlisted":false}]},"docs":{"about/about-mercury":{"id":"about/about-mercury","title":"\ud83e\udd14 What is Mercury?","description":"All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals.","sidebar":"tutorialSidebar"},"about/features":{"id":"about/features","title":"\ud83c\udfae Quick Features Overview","description":"Below is a brief overview of several things you can do with Mercury. But this is of course just scratching the surface!","sidebar":"tutorialSidebar"},"about/inspiration":{"id":"about/inspiration","title":"\ud83d\udc7e Made with Mercury","description":"Below is some inspiration of awesome things made by the Mercury community.","sidebar":"tutorialSidebar"},"about/vision":{"id":"about/vision","title":"\ud83d\udd2d What can you do with Mercury?","description":"Are you not sure if Mercury is for you? Maybe after reading this you have a better idea:","sidebar":"tutorialSidebar"},"collaborate":{"id":"collaborate","title":"\ud83d\udc69\u200d\ud83d\udcbb\ud83d\udc68\u200d\ud83d\udcbb Collaborative Coding","description":"You can code together in Mercury by using the amazing Flok live coding environment for the browser developed by Dami\xe1n Silvani (a.k.a. Munshkr). Flok is a web-based P2P collaborative editor for live coding music and graphics. Similar to Etherpad, but focused on code evaluation for livecoding.","sidebar":"tutorialSidebar"},"contribute":{"id":"contribute","title":"\ud83d\udcdd Contribute","description":"Contributions to the Mercury environment are very much appreciated in whatever form they come! You can contribute in any of the following ways:","sidebar":"tutorialSidebar"},"getting-started":{"id":"getting-started","title":"\ud83d\ude80 Getting Started","description":"Hello, World! Welcome to the Getting Started guide for Mercury. The various chapters in this guide will get you up and running in no time! Before we get started it is good to know that Mercury currently has 2 versions:","sidebar":"tutorialSidebar"},"reference/actions":{"id":"reference/actions","title":"Actions","description":"The action keywords are used to start a line of Mercury code with. Only lines starting with these keywords are valid. The keywords are: new, list, set, print and silence.","sidebar":"tutorialSidebar"},"reference/effects":{"id":"reference/effects","title":"Instrument Effects","description":"You can add one ore multiple effects to the sound of the instrument to manipulate the sounds timbre in different ways. The first argument is always the effect-name. The arguments that follow depend on the selected effect. fx() can be used as an alias to reduce some typing. For ease of use some arguments can be skipped to access the most used arguments. How this works is explained per effect if applicable.","sidebar":"tutorialSidebar"},"reference/global":{"id":"reference/global","title":"Global Settings","description":"A global setting is a parameter that applies to the entire Mercury environment and all the instruments that are created within it. The global settings are adjust with the set keyword.","sidebar":"tutorialSidebar"},"reference/instruments":{"id":"reference/instruments","title":"Instrument Functions","description":"An instrument is the main sound or sequencing source in Mercury. Instruments can produce sounds natively in Mercury by means of synthesis or sampling, but can also send out MIDI or OSC-messages to trigger external devices or plugins, and are able to take input from for example your microphone. The following functions apply to all the types of instruments such as synth, sample, loop, polySynth, polySample, midi, osc and input.","sidebar":"tutorialSidebar"},"reference/list-functions":{"id":"reference/list-functions","title":"List Functions","description":"Mercury finds its roots in the concept of Serialism, a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a list.","sidebar":"tutorialSidebar"},"reference/syntax":{"id":"reference/syntax","title":"Syntax Overview","description":"Mercury is a minimal and human-readable language for the live coding of algorithmic electronic music. All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals.","sidebar":"tutorialSidebar"},"usage/coding":{"id":"usage/coding","title":"\ud83e\udd13 Coding in Mercury","description":"Now that you got everything setup and are ready to start coding you\'re probably wondering: \\"How does this actually work?\\"","sidebar":"tutorialSidebar"},"usage/editors":{"id":"usage/editors","title":"\u2328\ufe0f External Editors","description":"Instead of using the built-in editor that comes with Mercury4Max (an editor that is running with OpenGL in the Jitter visual environment) or the CodeMirror editor that is running in the MercuryPlayground, you can also work with external code editors and just use Mercury4Max as the sound engine.","sidebar":"tutorialSidebar"},"usage/embedding":{"id":"usage/embedding","title":"\ud83d\udce6 Add Mercury in your Site","description":"It is also possible to include Mercury in your own website. This is done with the mercury-engine. The engine is available as a package on npmjs.com or via unpkg.com.","sidebar":"tutorialSidebar"},"usage/extending":{"id":"usage/extending","title":"\ud83d\udee0 Extending Mercury","description":"In this page you can find help on how to create your own synths for Mercury4Max or the MercuryPlayground in the engine. For this you will work with Max8 or with JavaScript. It is currently not possible to code new synths with the Mercury language itself.","sidebar":"tutorialSidebar"},"usage/howto":{"id":"usage/howto","title":"\ud83d\udcda How To\'s","description":"This page will contain various Tips \'n Tricks, How to?\'s and Did You Know?\'s.","sidebar":"tutorialSidebar"},"usage/mercury4max-overview":{"id":"usage/mercury4max-overview","title":"\ud83c\udfd4 Mercury4Max Overview","description":"This chapter gives an overview of the features in the user interface of Mercury4Max","sidebar":"tutorialSidebar"},"usage/playground-overview":{"id":"usage/playground-overview","title":"\ud83d\udedd MercuryPlayground Overview","description":"This chapter gives an overview of the features in the user interface of the MercuryPlayground. The settings are described from left-right from top-bottom on the page.","sidebar":"tutorialSidebar"},"usage/shortkeys":{"id":"usage/shortkeys","title":"\ud83e\ude73 Short-keys","description":"Mercury has various shortkeys that help you navigate the editor more quickly during live performances, both in the Mercury4Max as in the MercuryPlayground versions.","sidebar":"tutorialSidebar"},"usage/sounds":{"id":"usage/sounds","title":"\ud83d\udce2 Sounds in Mercury","description":"Most of the sounds in Mercury are from freesound.org and are licensed with Creative Commons Attribution or Creative Commons 0 licenses. If not downloaded from freesound it is made sure that the license allows you to redistribute the sounds via the Mercury environment and that you can use them in your projects. All the sounds are listed below with their original source, license and credits.","sidebar":"tutorialSidebar"},"usage/troubleshooting":{"id":"usage/troubleshooting","title":"\ud83d\udea7 Troubleshooting","description":"If you are having issues please follow the steps below:","sidebar":"tutorialSidebar"},"welcome":{"id":"welcome","title":"\ud83d\udc4b Welcome","description":"Welcome to Mercury! \u270c\ufe0f \u262e\ufe0f Make Music, Not War! \u262e\ufe0f \u270c\ufe0f","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/b096b7b7.4f31acf4.js b/assets/js/b096b7b7.4f31acf4.js deleted file mode 100644 index cba27d4f..00000000 --- a/assets/js/b096b7b7.4f31acf4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[464],{1818:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var t=s(4848),i=s(8453);const o={sidebar_position:-1},a="\ud83e\udd13 Coding in Mercury",r={id:"usage/coding",title:"\ud83e\udd13 Coding in Mercury",description:'Now that you got everything setup and are ready to start coding you\'re probably wondering: "How does this actually work?"',source:"@site/docs/usage/coding.md",sourceDirName:"usage",slug:"/usage/coding",permalink:"/mercury/docs/usage/coding",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:-1,frontMatter:{sidebar_position:-1},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udd79 Usage",permalink:"/mercury/docs/category/-usage"},next:{title:"\ud83d\udcda How To's",permalink:"/mercury/docs/usage/howto"}},h={},l=[{value:"\ud83d\udc69\ud83c\udffd\u200d\ud83d\udcbb\ud83d\udc68\ud83c\udffb\u200d\ud83d\udcbb\ud83d\udc68\ud83c\udffe\u200d\ud83d\udcbb\ud83d\udc69\ud83c\udffc\u200d\ud83d\udcbb Live Coding",id:"-live-coding",level:2},{value:"\ud83d\udcbe Playing a sample",id:"-playing-a-sample",level:2},{value:"One sample",id:"one-sample",level:3},{value:"What's the time()?",id:"whats-the-time",level:3},{value:"Other sounds",id:"other-sounds",level:3},{value:"Changing tempo",id:"changing-tempo",level:3},{value:"play() and list",id:"play-and-list",level:3},{value:"The list",id:"the-list",level:3},{value:"To play(1) or not to play(0)",id:"to-play1-or-not-to-play0",level:3},{value:"Combining rhythms",id:"combining-rhythms",level:3},{value:"Linear beats",id:"linear-beats",level:3},{value:"\ud83c\udfb9 The Synth",id:"-the-synth",level:2},{value:"Play the synth",id:"play-the-synth",level:3},{value:"A note()",id:"a-note",level:3},{value:"12-TET system",id:"12-tet-system",level:4},{value:"The Mercury Notation System",id:"the-mercury-notation-system",level:4},{value:"A melody",id:"a-melody",level:3},{value:"Set a scale",id:"set-a-scale",level:3},{value:"Harmony",id:"harmony",level:3},{value:"shape-ing the sound",id:"shape-ing-the-sound",level:3},{value:"\ud83c\udfb2 Power of Algorithms",id:"-power-of-algorithms",level:2},{value:"randomising rhythms and melodies",id:"randomising-rhythms-and-melodies",level:3},{value:"Predicting Randomness",id:"predicting-randomness",level:3},{value:"\ud83c\udf08 Coloring your sounds",id:"-coloring-your-sounds",level:2},{value:"\ud83c\udfbc Composition Strategies",id:"-composition-strategies",level:2}];function c(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"-coding-in-mercury",children:"\ud83e\udd13 Coding in Mercury"}),"\n",(0,t.jsx)(n.p,{children:'Now that you got everything setup and are ready to start coding you\'re probably wondering: "How does this actually work?"'}),"\n",(0,t.jsxs)(n.p,{children:["This short introduction will help you to get started with coding your first sounds and music. The guide will explain the Mercury ",(0,t.jsx)(n.em,{children:"syntax"}),", some basics in (western) ",(0,t.jsx)(n.em,{children:"music theory"}),", the concept of ",(0,t.jsx)(n.em,{children:"serialism"})," in music and ",(0,t.jsx)(n.em,{children:"algorithmic composition"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["First we will look briefly at what ",(0,t.jsx)(n.em,{children:"Live Coding"})," is and how this works in Mercury. Then we will make a sampler to play a basic sound, changing the timing, changing the tempo, play more samples together and make a rhythm. We'll look at how we can create these rhythms with functions too to make the compisition ",(0,t.jsx)(n.em,{children:"algorithmic"}),". After that we will focus on creating a synthesizer that allows us to play melodies. We'll see how we can make a melody with a list of numbers and apply a scale. We can also play chords and adjust the sound to our liking by changing the waveform, changing the length of the sound and applying different effects such as a filter, a echo and a reverb. If you run into an issue please see the ",(0,t.jsx)(n.a,{href:"troubleshooting",children:(0,t.jsx)(n.strong,{children:"Troubleshooting"})})," page."]}),"\n",(0,t.jsx)(n.admonition,{title:"More tutorials",type:"tip",children:(0,t.jsx)(n.p,{children:(0,t.jsxs)(n.strong,{children:["You can find many more bite-sized tutorials in the ",(0,t.jsx)(n.a,{href:"https://mercury-playground.pages.dev/",children:"Mercury Playground"})," in the bottom left corner drop down menu."]})})}),"\n",(0,t.jsx)(n.h2,{id:"-live-coding",children:"\ud83d\udc69\ud83c\udffd\u200d\ud83d\udcbb\ud83d\udc68\ud83c\udffb\u200d\ud83d\udcbb\ud83d\udc68\ud83c\udffe\u200d\ud83d\udcbb\ud83d\udc69\ud83c\udffc\u200d\ud83d\udcbb Live Coding"}),"\n",(0,t.jsxs)(n.p,{children:["Live coding is about making software live, sometimes called ",(0,t.jsx)(n.em,{children:"on-the-fly"})," or ",(0,t.jsx)(n.em,{children:"just-in-time"})," programming. It is a form of peformance art where the artist is typing code on stage, this code is interpreted by the computer in real time and translated to sound or visuals (or sometimes even something else completely, like controlling robots). Live coding is not a specific genre, but can be applied across many art disciplines. There are dance events where live coding is used to create electronic music, these are usually called Algorave's. Live coding is also about openness, inclusion and accessibility, showing your code to the audience via a projection and thinking and improvising with it publically. Creating a welcoming environment where people can try and fail collectively. Sharing your code and knowledge and learning from others. And after all this live coding is still much more. You can read all about it in the book: ",(0,t.jsx)(n.a,{href:"https://livecodingbook.toplap.org/",children:'"Live Coding, A user\'s manual"'}),", openly available as pdf and epub."]}),"\n",(0,t.jsx)(n.p,{children:"There are more people involved in live coding around the world! You can find them here:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["TOPLAP Home: ",(0,t.jsx)(n.a,{href:"https://blog.toplap.org/",children:"https://blog.toplap.org/"})]}),"\n",(0,t.jsxs)(n.li,{children:["Algorave Site: ",(0,t.jsx)(n.a,{href:"https://algorave.com/",children:"https://algorave.com/"})]}),"\n",(0,t.jsxs)(n.li,{children:["Eulerroom Youtube Livestreams: ",(0,t.jsx)(n.a,{href:"https://www.youtube.com/eulerroom",children:"https://www.youtube.com/eulerroom"})]}),"\n",(0,t.jsxs)(n.li,{children:["Mercury Discord Server: ",(0,t.jsx)(n.a,{href:"https://discord.gg/vt59NYU",children:"https://discord.gg/vt59NYU"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Live coding is not necessarily easy, but just like with playing an instrument such as guitar or drums, you can learn it by trying and practicing often. By following tutorials, visiting events, watching videos, listening music, you name it, you can find inspiration and ideas to make your own code and sounds."}),"\n",(0,t.jsx)(n.p,{children:"Mercury was made with the idea to abstract away some more difficult parts of coding electronic music, and provide you (the artist/performer) with functions that get you to make music quickly."}),"\n",(0,t.jsx)(n.h2,{id:"-playing-a-sample",children:"\ud83d\udcbe Playing a sample"}),"\n",(0,t.jsx)(n.p,{children:"A big part of electronic music (but for sure also in many other music genres) is the use of samples. The word sample can have different meanings accross various musical contexts. A sample can be a recording of a note of an instrument, or a small portion of a larger recording, or a snippet of an original song."}),"\n",(0,t.jsxs)(n.h3,{id:"one-sample",children:["One ",(0,t.jsx)(n.code,{children:"sample"})]}),"\n",(0,t.jsxs)(n.p,{children:["Empty the editor and type the following code and press ",(0,t.jsx)(n.code,{children:"play"})," or use the shortkey ",(0,t.jsx)(n.code,{children:"Alt + Enter"}),". Mercury will evaluate your code and start making sound (if there aren't any errors)."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:['Be aware of the spaces "',(0,t.jsx)(n.code,{children:" "}),'" in the code between words, these are important!']})}),"\n",(0,t.jsxs)(n.p,{children:["Because Mercury is made for live coding you will hear this sample and it is already playing repeatedly by default for you! This repetition is also called a ",(0,t.jsx)(n.em,{children:"loop"}),". A cool feature is that all the instruments are always immediately ",(0,t.jsx)(n.em,{children:"looping"})," \ud83d\udd01."]}),"\n",(0,t.jsxs)(n.p,{children:["You don't have to stop the sound when you make adjustments to the code. You can keep typing and every time just hit ",(0,t.jsx)(n.em,{children:"evaluate"}),". The old sound will be replaced by the new sound automatically \ud83c\udf89. For example add some other sounds on the lines below, evaluate, and hear the sounds play together. Mercury evaluates code ",(0,t.jsx)(n.code,{children:"line-per-line"}),', so you have to start a new line with a new "action".']}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house\nnew sample hat_min\nnew sample snare_808\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["You can comment ",(0,t.jsx)(n.code,{children:"//"}),' a line to "mute" the instrument. Comments are parts of text in the code that are not evaluated when you click play. This is useful during live performances if you want to stop a sound from playing without removing the code.']}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house\n// the hihat is removed from the code\n// new sample hat_min \nnew sample snare_808\n"})})]}),"\n",(0,t.jsxs)(n.h3,{id:"whats-the-time",children:["What's the ",(0,t.jsx)(n.code,{children:"time()"}),"?"]}),"\n",(0,t.jsxs)(n.p,{children:["By default every instrument will play its sound once per measure. In most western pop music a measure has four counts (1, 2, 3, 4, 1, 2, 3, 4, 1, etc.). If we want to play this sample four times per measure we use an ",(0,t.jsx)(n.code,{children:"instrument-function"})," named ",(0,t.jsx)(n.code,{children:"time()"}),". The argument for the function will be the ",(0,t.jsx)(n.code,{children:"fraction"})," we want to count, in this case ",(0,t.jsx)(n.code,{children:"1/4"})," if we want four counts in 1 measure. We can apply this function for the different samples to create a beat. The most basic beat (or groove) has a kick 4 times per measure (called ",(0,t.jsx)(n.em,{children:"four-on-the-floor"}),"), a snare 2 times and a hihat 8 times."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house time(1/4)\nnew sample hat_min time(1/8)\nnew sample snare_808 time(1/2)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Now you hear a basic drumbeat that you are likely familiar with. Try making it more interesting by changing any of the ",(0,t.jsx)(n.code,{children:"time()"})," arguments to different ",(0,t.jsx)(n.code,{children:"fraction"}),"'s."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house time(1/4)\nnew sample hat_min time(3/16)\nnew sample snare_808 time(5/8)\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["You can use a second argument in ",(0,t.jsx)(n.code,{children:"time()"})," to apply an offset, a short delay of the sound."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house time(1/4)\n// the hihat's time is 1/4, the same the kick, but the offset is 1/8\n// so you'll hear exactly between every kick sound\nnew sample hat_min time(1/4 1/8)\n"})})]}),"\n",(0,t.jsx)(n.h3,{id:"other-sounds",children:"Other sounds"}),"\n",(0,t.jsxs)(n.p,{children:["You can of course also try other samples that are included in Mercury! A full list of samples is available in ",(0,t.jsx)(n.a,{href:"sounds",children:(0,t.jsx)(n.strong,{children:"Sounds in Mercury"})}),". Try for example: ",(0,t.jsx)(n.code,{children:"bamboo_g"}),", ",(0,t.jsx)(n.code,{children:"shatter"}),", ",(0,t.jsx)(n.code,{children:"tabla_mid"}),"."]}),"\n",(0,t.jsxs)(n.h3,{id:"changing-tempo",children:["Changing ",(0,t.jsx)(n.code,{children:"tempo"})]}),"\n",(0,t.jsxs)(n.p,{children:["When you hear this beat it might sound great, but maybe you want it to play faster or slower all together. You can change the overall (",(0,t.jsx)(n.em,{children:"global"}),") tempo of the environment with a ",(0,t.jsx)(n.code,{children:"set"})," action."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 80\n\nnew sample kick_house time(1/4)\nnew sample hat_min time(3/16)\nnew sample snare_808 time(5/8)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Try a tempo of ",(0,t.jsx)(n.code,{children:"110"}),", ",(0,t.jsx)(n.code,{children:"140"}),", ",(0,t.jsx)(n.code,{children:"180"}),", and even ",(0,t.jsx)(n.code,{children:"300"}),"! All the different tempos give the groove a different feeling as well and may change your perception on rhythm of all the instruments combined. This perception is called a ",(0,t.jsx)(n.em,{children:"composite rhythm"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The tempo is definited in BPM, or ",(0,t.jsx)(n.em,{children:"Beats Per Minute"})," on a quarter note (",(0,t.jsx)(n.code,{children:"1/4"}),"). This means that when the tempo is ",(0,t.jsx)(n.code,{children:"100"}),", you can fit 100 quarter notes in one minute. The time between these notes will therefore be ",(0,t.jsx)(n.code,{children:"60000 ms / 100 beats = 600 ms"}),". When the tempo goes higher (read faster) the time between notes will get shorter. Eg. the time-interval with a tempo of ",(0,t.jsx)(n.code,{children:"140"})," is ",(0,t.jsx)(n.code,{children:"60000 ms / 150 beats = 400 ms"})]}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"set"})," command is a command that allows you to change parameters of global settings such as the tempo. Later on we'll see how to use it for instruments as well."]}),"\n"]}),"\n",(0,t.jsxs)(n.h3,{id:"play-and-list",children:[(0,t.jsx)(n.code,{children:"play()"})," and ",(0,t.jsx)(n.code,{children:"list"})]}),"\n",(0,t.jsxs)(n.p,{children:["After a short while of playing the tempo and time you maybe think to yourself: ",(0,t.jsx)(n.em,{children:'"Is it also possible to play this sample in the same tempo and timing, but maybe with a different rhythm?"'})]}),"\n",(0,t.jsxs)(n.p,{children:["This is where we will introduce ",(0,t.jsx)(n.code,{children:"list"}),"'s as arguments to functions and the ",(0,t.jsx)(n.code,{children:"play()"})," function. But before we start making rhythms, let's first have a quick look at various forms of music notation systems."]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"A brief history on Musical Notation Systems"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(n.p,{children:["Maybe you are familiar with the modern western ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Musical_notation",children:"music notation"}),". A notation system consisting of five horizontal lines stretching over the paper. At the beginning of the lines a so called clef is drawn, denoting the position of the note G or F depending on the type of clef. From that point onwards notes can be written down by using various symbols on the paper (usually oval shaped), where the vertical position of the symbol (on or between the lines) determines the pitch (how high or low is the note), the horizontal position together with the symbol itself determines the timing and length of the note (when is it played and for how long)."]}),(0,t.jsxs)(n.p,{children:["This western notation system is a form of musical representation originating from ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Neume",children:"Neume"})," in 800 CE. But other parts of the world like ",(0,t.jsx)(n.a,{href:"https://www.google.com/search?q=india+traditional+musical+notation&tbm=isch&ved=2ahUKEwiA95P_ht7qAhX3wAIHHW8DBmsQ2-cCegQIABAA&oq=india+traditional+musical+notation&gs_lcp=CgNpbWcQA1DvA1jvA2DqBWgAcAB4AIABLogBLpIBATGYAQCgAQGqAQtnd3Mtd2l6LWltZ8ABAQ&sclient=img&ei=cbgWX8D6KveBi-gP74aY2AY&bih=821&biw=1440",children:"India"}),", ",(0,t.jsx)(n.a,{href:"https://www.google.com/search?q=russian+musical+notation&tbm=isch&ved=2ahUKEwjxtMDoht7qAhUGG-wKHTtuDFoQ2-cCegQIABAA&oq=russian+musical+notation&gs_lcp=CgNpbWcQAzIECAAQGDoGCAAQBxAeOggIABAIEAcQHlD_Z1j1bGDVbmgAcAB4AIABQ4gB7AKSAQE3mAEAoAEBqgELZ3dzLXdpei1pbWfAAQE&sclient=img&ei=QrgWX_GLDIa2sAe73LHQBQ&bih=821&biw=1440",children:"Russia"})," and ",(0,t.jsx)(n.a,{href:"https://www.google.com/search?q=chinese+traditional+musical+notation&tbm=isch&ved=2ahUKEwiJ9u31ht7qAhXaOewKHbbZBCYQ2-cCegQIABAA&oq=chinese+traditional+musical+notation&gs_lcp=CgNpbWcQA1CqEFiTIWDfImgBcAB4AIABSIgBgQWSAQIxM5gBAKABAaoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=XrgWX4nPDNrzsAe2s5OwAg&bih=821&biw=1440",children:"China"})," developed there own notations over the centuries. In the 50's and later many composers have been experimenting with other forms of notation as well, named ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Graphic_notation_(music)",children:"graphic notation"}),", to find new ways of capturing musical expression that does not work in the modern western notation. Have a look at some of these ",(0,t.jsx)(n.a,{href:"https://www.google.com/search?q=graphical+music+notation&tbm=isch&ved=2ahUKEwiFwM6Oh97qAhUFt6QKHZ4uCloQ2-cCegQIABAA&oq=graphical+music+notation&gs_lcp=CgNpbWcQAzoCCAA6BggAEAUQHjoGCAAQCBAeOgQIABAYOgYIABAKEBg6CAgAEAgQBxAeUKEOWPAuYP8vaAFwAHgAgAE4iAHNA5IBAjEwmAEAoAEBqgELZ3dzLXdpei1pbWfAAQE&sclient=img&ei=krgWX4WvB4XukgWe3ajQBQ&bih=821&biw=1440",children:"graphical notations"}),". They are already a piece of art even without the musical output."]}),(0,t.jsxs)(n.p,{children:["Around 1920 a new form of composition technique, ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Serialism",children:(0,t.jsx)(n.em,{children:"Serialism"})})," was described by Josef Hauer and used avidly by composer Arnold Schoenberg. Serialism uses series (or sequences) of values to describe various musical parameters. A series could hold for example pitch information (such as note names c e g f), but could also have rhythmical information. In this way all components (pitch, length, dynamics, articulation and more) of a note can be captured in a series and used to compose with. More on this will be discussed in the section ",(0,t.jsx)(n.a,{href:"#algorithmic-composition",children:"Algorithmic Composition"})]})]})]}),"\n",(0,t.jsxs)(n.h3,{id:"the-list",children:["The ",(0,t.jsx)(n.code,{children:"list"})]}),"\n",(0,t.jsxs)(n.p,{children:["Mercury finds its roots in the concept of ",(0,t.jsx)(n.em,{children:"Serialism"}),", a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a ",(0,t.jsx)(n.code,{children:"list"}),". Every instance of an instrument has an internal counter. This counter increments (0, 1, 2, 3,... etc) when an instrument triggers an event based on the time-interval from ",(0,t.jsx)(n.code,{children:"time()"}),". This is also called a step-sequencer. When a ",(0,t.jsx)(n.code,{children:"list"})," is added as argument to an ",(0,t.jsx)(n.code,{children:"instrument-function"})," the instrument uses its count as a lookup-position (index) taking the corresponding value from the list. As soon as the index is higher then the amount of values in the ",(0,t.jsx)(n.code,{children:"list"})," it will return to the beginning and start over, therefore the ",(0,t.jsx)(n.code,{children:"list"})," is circular/looping."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"list [ value0 value1 ... value-n ]\nlist function()\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The line starts with the code ",(0,t.jsx)(n.code,{children:"list"}),", followed by the ",(0,t.jsx)(n.code,{children:"name"})," of the list. The name can be any 3 or more characters you like. All values between the ",(0,t.jsx)(n.code,{children:"["})," and ",(0,t.jsx)(n.code,{children:"]"}),' (square brackets) are part of the list. Every value must be separated by a space "',(0,t.jsx)(n.code,{children:" "}),'".']}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsx)(n.mdxAdmonitionTitle,{}),(0,t.jsxs)(n.p,{children:["Lists have to be created on a line ",(0,t.jsx)(n.strong,{children:"before"})," they are used, because the code is evaluated from top to bottom."]})]}),"\n",(0,t.jsxs)(n.h3,{id:"to-play1-or-not-to-play0",children:["To ",(0,t.jsx)(n.code,{children:"play(1)"})," or not to ",(0,t.jsx)(n.code,{children:"play(0)"})]}),"\n",(0,t.jsxs)(n.p,{children:["In order to create a rhythm for an instrument we can make a list consisting of zeroes and ones. The ",(0,t.jsx)(n.code,{children:"1"})," represents a ",(0,t.jsx)(n.code,{children:"true"}),"/",(0,t.jsx)(n.code,{children:"on"})," value, resulting in the triggering of the sound, the ",(0,t.jsx)(n.code,{children:"0"})," a ",(0,t.jsx)(n.code,{children:"false"}),"/",(0,t.jsx)(n.code,{children:"off"})," value that will not play. Let's put this into practice."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nnew sample hat_min time(1/16) play(1)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This sounds the same to what we heard before. This is because the ",(0,t.jsx)(n.code,{children:"play()"})," function only has a single ",(0,t.jsx)(n.code,{children:"1"})," as argument, which means all notes are played. This is the ",(0,t.jsx)(n.em,{children:"default"})," and was already the case in the code above. But let's now create a list with ",(0,t.jsx)(n.code,{children:"0"}),"s and ",(0,t.jsx)(n.code,{children:"1"}),"s and apply the name of the list as argument in the function."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nlist hatBeat [1 0 0 1 0 1 1 0]\n\nnew sample hat_min time(1/16) play(hatBeat)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You can hear how the rhythm is applied to the sample. Every 16th note (",(0,t.jsx)(n.code,{children:"1/16"}),") the internal counter from that instrument looks up a value from the ",(0,t.jsx)(n.code,{children:"list hatBeat"}),". When it is a ",(0,t.jsx)(n.code,{children:"1"})," it is played, when it is a ",(0,t.jsx)(n.code,{children:"0"})," it is not. Try some different rhythms of different lengths, for example: ",(0,t.jsx)(n.code,{children:"[0 1 0 0 1]"}),", ",(0,t.jsx)(n.code,{children:"[1 1 0 1 1 0 0]"}),", ",(0,t.jsx)(n.code,{children:"[1 1 1 0]"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{title:"kick with a chance of hat",type:"tip",children:[(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"1"})," or ",(0,t.jsx)(n.code,{children:"0"})," in ",(0,t.jsx)(n.code,{children:"play()"})," is actually not a binairy value but a percentage where 0=0% and 1=100%. You can add some chance to your instruments by choosing for example ",(0,t.jsx)(n.code,{children:"0.5"})," (50%) or ",(0,t.jsx)(n.code,{children:"0.9"})," (90%) of playing"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house time(1/4) play(0.9) // play 90% of the time\nnew sample hat_min time(1/16) play(0.5) // play 50% of the time\n"})})]}),"\n",(0,t.jsx)(n.h3,{id:"combining-rhythms",children:"Combining rhythms"}),"\n",(0,t.jsxs)(n.p,{children:["In order to make more complex rhythms we can go back to our pop beat, but instead of using different ",(0,t.jsx)(n.code,{children:"time()"})," arguments to make a rhythm, we will use the power of ",(0,t.jsx)(n.code,{children:"list"}),"'s to look up a ",(0,t.jsx)(n.code,{children:"1"})," or ",(0,t.jsx)(n.code,{children:"0"})," to let it play the sound or not. First we make sure that all instruments play in the same time of 1/16th notes."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\n\nnew sample kick_house time(1/16) play(1)\nnew sample snare_fat time(1/16) play(1)\nnew sample hat_click time(1/16) play(1)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Execute this code and you will hear all samples play all 16th notes. Now we add lists for the different instruments. Note the lists don't have to be the same length. They will each ",(0,t.jsx)(n.em,{children:"loop"})," individually. This allows you to quickly create quite complex rhythms that phase over time with just a few lines of code!"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\n\nlist kickBeat [1 0 0]\nlist snareBeat [0 0 0 0 1 0 1 0]\nlist hatBeat [1 1 0 1 1 0 1]\n\nnew sample kick_house time(1/16) play(kickBeat)\nnew sample snare_808 time(1/16) play(snareBeat)\nnew sample hat_min time(1/16) play(hatBeat)\n"})}),"\n",(0,t.jsx)(n.h3,{id:"linear-beats",children:"Linear beats"}),"\n",(0,t.jsxs)(n.p,{children:["Instead of using multiple instruments to create our beat, we can also use one sampler and let it play different sounds sequentially. For this we need to create a list with the names of the samples in the order we want to play them. The playing of samples without any overlap or playing at the same time is sometimes called a ",(0,t.jsx)(n.em,{children:"linear beat"}),". For example we want to play kick, hat, snare, hat. Now our code will look like this:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nlist drumSounds [kick_house hat_click snare_fat hat_click]\n\nnew sample drumSounds time(1/8)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Now to make this a bit more interesting we can combine this technique with another list that has some zeroes and ones to play a rhythm at a time of ",(0,t.jsx)(n.code,{children:"1/16"}),". For example:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nlist theSounds [kick_house hat_click snare_fat hat_click]\nlist rhythm [1 0 1 0 0 1 0 1]\n\nnew sample theSounds time(1/16) play(rhythm)\n"})}),"\n",(0,t.jsx)(n.p,{children:"Give yourself some time to experiment with all the code so far to get comfortable with the different functions and their arguments and making of lists. Try some different rhythms in various lengths, try some different samples in different orders as well. Have fun!"}),"\n",(0,t.jsx)(n.p,{children:"There is still so much to do with just the sampler, but for now we'll first introduce another instrument in Mercury: the Synthesizer."}),"\n",(0,t.jsx)(n.h2,{id:"-the-synth",children:"\ud83c\udfb9 The Synth"}),"\n",(0,t.jsx)(n.p,{children:"A synthesizer generates its sound through an electrical circuit or a digital chip running some computer code. This code produces a periodic waveshape, an oscillator. The amplitude value of the oscillator controls the motion of your speaker. The synth can therefore be used to create sounds in many different ways and control the pitch to play melodies, basslines, chords and more."}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"What is a synthesizer and synthesis?"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(n.p,{children:["A synthesizer is an electronic musical instrument that generates its sound through analog electrical circuits or in a digital manner through chips and computer code. Generating sounds in these ways is called synthesis. The first instrument that was defined as a synthesizer (",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Moog_synthesizer",children:"the Moog"}),") was introduced in 1964, but before that there were already other electrical instruments available such as the ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Theremin",children:"Theremin"})," (1928) and the ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Hammond_organ",children:"Hammond Organ"})," (1935)."]}),(0,t.jsxs)(n.p,{children:["The basic building blocks needed to do synthesis are one or multiple oscillators (audio signal generators), methods to add or multiply signals and filters to remove parts of a signal. By combining these in different ways you can perform a wide variety of synthesis techniques, such as ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Additive_synthesis",children:"additive synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Subtractive_synthesis",children:"subtractive synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Amplitude_modulation",children:"amplitude modulation synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Ring_modulation",children:"ring modulation synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Frequency_modulation",children:"frequency modulation synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Physical_modelling_synthesis",children:"physical modelling synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Vocoder",children:"analyse synthesis"})," (or resynthesis), ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Wavetable_synthesis",children:"wavetable synthesis"})," and ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Sample-based_synthesis",children:"sample-based synthesis"}),". On top of that different techniques can of course be combined to generate even more sounds."]}),(0,t.jsxs)(n.p,{children:["An oscillator is a signal generator that produces a periodic wave. This periodic wave is what drives your speaker (move it back and forth) and produces airpressure differences that you will perceive as sound. The four most common ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Waveform",children:"waveforms"})," are a sine-, sawtooth-, square- and triangle-wave. The name describes the shape of the wave if you would plot it in a graph of time against amplitude. The sinewave is a pure tone consisting of a single frequency. The pitch (how high or low does it sound) is called the Frequency and is expressed in Hertz (Hz). The other waveforms have a richer sound because they consist of more frequencies called harmonics. ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Harmonic",children:"Harmonics"})," can be defined as a range of stacked sinewaves of different frequencies on top of the ",(0,t.jsxs)(n.a,{href:"https://en.wikipedia.org/wiki/Fundamental_frequency",children:[(0,t.jsx)(n.em,{children:"fundamental"})," frequency"]}),". The relationship between these frequencies is different between the three waves (saw, square and triangle) and determines the ",(0,t.jsx)(n.em,{children:"color"})," of the sound (also called ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Timbre",children:(0,t.jsx)(n.em,{children:"timbre"})}),"). The timbre is that what makes an instrument sound like a flute, violin, guitar or voice, even if they play or sing the same note."]})]})]}),"\n",(0,t.jsxs)(n.h3,{id:"play-the-synth",children:["Play the ",(0,t.jsx)(n.code,{children:"synth"})]}),"\n",(0,t.jsx)(n.p,{children:"Lets create our first synthesizer. For this we type the following code and execute it:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth saw\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You will hear the sawtooth waveform play a note. The default ",(0,t.jsx)(n.code,{children:"time()"})," for the synth is ",(0,t.jsx)(n.code,{children:"1"}),", the same as with the ",(0,t.jsx)(n.code,{children:"sample"}),". Now try the other waveforms as well: ",(0,t.jsx)(n.code,{children:"square"}),", ",(0,t.jsx)(n.code,{children:"triangle"}),", ",(0,t.jsx)(n.code,{children:"sine"}),". Notice that the triangle sounds a bit darker, this is because its overtones (harmonics) aren't as loud as with the square and the saw. Also notice that the sine is almost impossible to hear (depending on your headphones or speakers). This is because the sine is only a single frequency, no overtones. And the default frequency for the synth is quite low."]}),"\n",(0,t.jsxs)(n.h3,{id:"a-note",children:["A ",(0,t.jsx)(n.code,{children:"note()"})]}),"\n",(0,t.jsxs)(n.p,{children:["For now lets stick with the ",(0,t.jsx)(n.code,{children:"sine"})," oscillator for a while and try to make some different pitches. In a moment we will look into how the notes work in Mercury, but first let's try some different values to get a feeling of what happens to the sound."]}),"\n",(0,t.jsx)(n.p,{children:"Try these following code snippets and hear how the pitch changes, you can try as many other values as you want of course:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth sine note(0 1)\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth sine note(7 1)\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth sine note(0 2)\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth sine note(7 2)\n"})}),"\n",(0,t.jsx)(n.h4,{id:"12-tet-system",children:"12-TET system"}),"\n",(0,t.jsx)(n.p,{children:"In western music the most common tuning system is the so called 12-Tone Equal Temperament, or 12-TET. This means that we divide a full octave (an octave is a range of one frequency to the doubling of that frequency, for example 200 to 400 Hz) into 12 equal steps: C, C#/Db, D, D#/Eb, E, F, F#/Gb, G, G#/Ab, A, A#/Bb, B, C (octave higher)"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Pythagorean tuning"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(n.p,{children:["You've maybe heard of ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Pythagoras",children:"Pythagoras"}),", a greek philospher and mathematician famous for the pythagorean theorem. He discoverd around 500 BCE that when you take a string (like a guitar) and make another string with half the distance, that string sounds twice as high in pitch. This doubling of pitch is called an Octave. This means that if you have a string with a frequency of 200 Hz, a string that is half that long will have a pitch of 400 Hz. Phytagoras took this idea and expanded it by taking a third of that string, a fourth, a fifth and so on. This let to the discovery of the harmonic series (for example 100 Hz, 200, 300, 400, 500...)."]}),(0,t.jsxs)(n.p,{children:["The distance of an octave is quite big, and we can fit more pitches of different intervals in between two octaves. Pythagoras build its ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Pythagorean_tuning",children:"tuning system"})," based on stacking perfect fifths (ratio 3:2) and scaling down octaves to fit in one octave. This system had a slight problem that the octaves were slightly out of tune though."]})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Scales in the 12-TET system"}),(0,t.jsxs)("div",{children:[(0,t.jsx)(n.p,{children:"Our current note name system - C D E F G A B - started out around the 12th century. At that time there was not really a notation system and scales (a ascending sequence of notes). The different scales were referred to as modes and all ended and started at a different note. These were later on defined as do, re, mi, fa, sol, la, ti and do again. Later on these became A up till G. The do's are both the same note only an octave higher, so they need to have the same name. In the past this was notated as A, a, aa for three octaves. Sometimes when the mode starts on a different letter, some notes are supposed to sound higher or lower. This is where the accidentals came in to play. If a not is made a bit lower, it is called flat (b) and a bit higher it is called sharp (#). This completed the 12 tone system that we know now. C, C#/Db, D D#/Eb, E, F, F#/Gb, G, G#/Ab, A, A#/Bb, B. You will notice that some notes don't have a sharp or flat note in between (E-F and B-C), this is because these notes are already a half-step apart, while all the other notes are actually a whole-step apart."}),(0,t.jsxs)(n.p,{children:["Since the 18th century the ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Equal_temperament",children:"12-Tone Equal Temperament"})," is used. In this system all the octaves are completely consonant over the entire range of the keyboard, and all the notes in between are at an equal distance from eachother. Because of this manner of tuning some notes are every so slightly out of tune when compared with the harmonic series ratios, but the system allows for quick switching between scales and tonal centre, and therefore it is still used mostly today. There are other tuning systems in the world as well, for example ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Slendro",children:"Slendro"})," is a 5-TET tuning system from Indonesia."]}),(0,t.jsxs)(n.p,{children:["From our tuning-system we can make various scales. The scale that has all the notes is called the ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Chromatic_scale",children:(0,t.jsx)(n.em,{children:"chromatic"})})," scale. Other scales usually consist of 7 notes picked from those 12 (originating from the modes). The distances between the 12 tones in the chromatic scale are called semitones (half steps). Most scales have a combination of tones and semitones (full and half steps). This is what is called a Diatonic scale. The most famous scales are the major and minor scale. The major scale when starting from C has no accidentals (C D E F G A B, with steps W W H W W W H), but when starting this same series from A you get a minor scale (A B C D E F G, with steps W H W W H W)."]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"the-mercury-notation-system",children:"The Mercury Notation System"}),"\n",(0,t.jsxs)(n.p,{children:["Now let's go back to our coding of notes. In Mercury the notes are not written down as letters, but as numbers. These numbers are added as arguments to the ",(0,t.jsx)(n.code,{children:"note()"})," method. The arguments consist of 2 numbers, the first number is the tone-step (semitone) in the chromatic 12-TET system, the second number is an octave-step. Later on we'll see how we can work with ",(0,t.jsx)(n.code,{children:"scale"}),"s and changing the root (tonal centre) as well."]}),"\n",(0,t.jsxs)(n.p,{children:["By default Mercury works with ",(0,t.jsx)(n.code,{children:"C"})," as the root and ",(0,t.jsx)(n.code,{children:"chromatic"})," as the scale used. This means that the ",(0,t.jsx)(n.code,{children:"note(0 0)"})," corresponds to the 1st note (counting starts at 0) in the 12-TET system (which is ",(0,t.jsx)(n.code,{children:"C"}),") and the second ",(0,t.jsx)(n.code,{children:"0"})," is the default octave. ",(0,t.jsx)(n.code,{children:"note(0 0)"})," therefore corresponds with MIDI-note ",(0,t.jsx)(n.code,{children:"36"}),". Now a ",(0,t.jsx)(n.code,{children:"note(0 2)"})," would also be a ",(0,t.jsx)(n.code,{children:"C"}),", only 2 octaves higher. A ",(0,t.jsx)(n.code,{children:"note(7 1)"})," would be the 8th note in the 12-TET system starting at ",(0,t.jsx)(n.code,{children:"C"}),", one octave higher, resulting in ",(0,t.jsx)(n.code,{children:"G"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"a-melody",children:"A melody"}),"\n",(0,t.jsxs)(n.p,{children:["Now that we know which numbers make up which notes we can make a melody. By putting the numbers in a list and giving the name of the list as argument to the ",(0,t.jsx)(n.code,{children:"note()"})," function. You can try different numbers to hear which ones sound nice and which ones don't. You can also try different octaves as well or different waveforms of course. Maybe add a rhythm too? It's all up to you! \ud83c\udfb6"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"list myMelody [0 4 7 5 7 9 4 5]\n\nnew synth sine note(myMelody 2) time(1/8)\n"})}),"\n",(0,t.jsxs)(n.h3,{id:"set-a-scale",children:["Set a ",(0,t.jsx)(n.code,{children:"scale"})]}),"\n",(0,t.jsxs)(n.p,{children:["It can be tough to know all the various scales that can be used and which numbers belong to these scales. In order to help you code melodies and harmonies that fit within a specific scale you can specify the global ",(0,t.jsx)(n.code,{children:"scale"})," via the ",(0,t.jsx)(n.code,{children:"set"})," action. Applying a scale to the entire environment will force all numbers that don't fit in a scale to be replaced by a number that is closest to them. This happens at runtime (so when the note gets played). The content of the list doesn't change. Some scale names are for example: ",(0,t.jsx)(n.code,{children:"major"}),", ",(0,t.jsx)(n.code,{children:"minor"}),", ",(0,t.jsx)(n.code,{children:"dorian"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set scale minor c\n\nlist myMelody [0 1 2 3 4 5 6 7 8 9 10 11 12]\nnew synth sine note(myMelody 2) time(1/8)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["As you can see and hear in the example above there is a list of all the 12 notes in an octave. But when you play it you will hear some notes double. This is because some numbers are not part of the ",(0,t.jsx)(n.code,{children:"minor"})," scale. For example ",(0,t.jsx)(n.code,{children:"1"})," and ",(0,t.jsx)(n.code,{children:"4"})," are not part of this scale, therefore they are mapped to a number closest that does fit, like ",(0,t.jsx)(n.code,{children:"2"})," and ",(0,t.jsx)(n.code,{children:"3"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["By changing the ",(0,t.jsx)(n.em,{children:"root"})," behind the name of the scale it is possible to offset what the ",(0,t.jsx)(n.code,{children:"0"})," means in the ",(0,t.jsx)(n.code,{children:"note(0)"}),". By default the ",(0,t.jsx)(n.code,{children:"0"})," corresponds with the ",(0,t.jsx)(n.code,{children:"c"}),". But if we set the scale to for example ",(0,t.jsx)(n.code,{children:"e"}),", the ",(0,t.jsx)(n.code,{children:"note(0 0)"})," will correspond with ",(0,t.jsx)(n.code,{children:"e"}),", 4 semitons higher, MIDI-note ",(0,t.jsx)(n.code,{children:"40"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set scale major a\n\nlist myMelody [0 1 2 3 4 5 6 7 8 9 10 11 12]\nnew synth sine note(myMelody 2) time(1/8)\n"})}),"\n",(0,t.jsxs)(n.admonition,{title:"scales with randomness",type:"tip",children:[(0,t.jsxs)(n.p,{children:["It is especially helpful to use ",(0,t.jsx)(n.code,{children:"set scale"})," when you start generating lists with functions such as ",(0,t.jsx)(n.code,{children:"random()"}),". More on lists functions in a later chapter. But you can already try this:"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set scale dorian\n\nlist randomMelody random(16 0 12)\nnew synth sine note(randomMelody) time(1/16)\n"})})]}),"\n",(0,t.jsx)(n.h3,{id:"harmony",children:"Harmony"}),"\n",(0,t.jsxs)(n.p,{children:["When two or more melodic instruments play together you hear multiple pitches at the same time. This is called a harmony. We can make two instances of a ",(0,t.jsx)(n.code,{children:"synth"})," and make different notes for them to play, or we can use one list for multiple instruments and let them play at the same time. We use the ",(0,t.jsx)(n.code,{children:"octave"})," argument in ",(0,t.jsx)(n.code,{children:"note()"})," to move the instruments to different hights."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\nset scale minor a\n\nlist myMelody [0 4 7 5 7 9 4 5]\nlist melodyTwo [7 7 5 5 4 4 0 0]\n\nnew synth sine note(myMelody 0) time(1/6)\nnew synth sine note(melodyTwo 1) time(1/8)\nnew synth sine note(myMelody 2) time(1/8)\n"})}),"\n",(0,t.jsxs)(n.h3,{id:"shape-ing-the-sound",children:[(0,t.jsx)(n.code,{children:"shape"}),"-ing the sound"]}),"\n",(0,t.jsxs)(n.p,{children:["As you may have noticed the synth has by default quite a short sound. This is because the default synth has a so called ",(0,t.jsx)(n.em,{children:"envelope"}),", which we refer to in Mercury as the ",(0,t.jsx)(n.code,{children:"shape"}),". The shape describes the fade-in and fade-out time of the synth's source (the oscillator). The shape is necessary, because without it the oscillator would continue sounding forever. We can adjust the fade-in and fade-out times with arguments in the ",(0,t.jsx)(n.code,{children:"shape()"})," function. The argument can be a ",(0,t.jsx)(n.code,{children:"number"}),", which describe the fade time in milliseconds, or it can be a ",(0,t.jsx)(n.code,{children:"fraction"})," which describes the fade time relative to the ",(0,t.jsx)(n.code,{children:"tempo"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\n\n// fade-in of 5ms and fade-out of 100ms\nnew synth saw time(1/4) shape(5 100)\n\n// fade in and out exactly in the time of 1/2\nnew synth square time(1/2) shape(1/4 1/4) \n"})}),"\n",(0,t.jsxs)(n.p,{children:["Just like with ",(0,t.jsx)(n.code,{children:"play()"})," and ",(0,t.jsx)(n.code,{children:"note()"})," we can also use a ",(0,t.jsx)(n.code,{children:"list"})," in the ",(0,t.jsx)(n.code,{children:"shape()"})," function to apply different fade-in and fade-out times for the synth per trigger of the note. This gives us more flexibility in creating interesting synthesizer parts."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 130\n\nlist notes [0 0 3 12 7]\nlist lengths [40 100 40 1/8 40 1/1]\nlist rhythm [1 0 1 1 0 1 0 1]\n\nnew synth saw time(1/16) note(notes 0) shape(lengths) play(rhythm)\n"})}),"\n",(0,t.jsxs)(n.admonition,{title:"Shape a sample",type:"tip",children:[(0,t.jsxs)(n.p,{children:["It is also possible to shape the ",(0,t.jsx)(n.code,{children:"sample"}),". This is useful in the case you have a sample that sounds quite long."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\n\nnew sample harp_down shape(1 1/8)\nnew sample gong_hi shape(1/2 1/2)\n"})})]}),"\n",(0,t.jsx)(n.h2,{id:"-power-of-algorithms",children:"\ud83c\udfb2 Power of Algorithms"}),"\n",(0,t.jsx)(n.p,{children:"In this chapter we'll look at Algorithmic Composition. This is a way of composing music (or other forms of art) through the means of algorithms. An algorithm is a set of steps (or rules) that you or the system follows in order to gain a result. The result in this case is the composition."}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"A brief history on Algorithmic Composition"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(n.p,{children:['For many years composers have been experimenting with ways to create new musical pieces. For example J.S. Bach published the Musikalisches Opfer (Musical Offerings) in 1747, which included many fugues that were "generated" (by hand) based on the rules of counterpoint (a polyphonic composition technique). It also included the ',(0,t.jsxs)(n.a,{href:"https://www.youtube.com/watch?v=DAIc1XvnPkI",children:[(0,t.jsx)(n.em,{children:"Canon Cancrizans"})," (Crab Canon)"]}),", a musical piece of two voices that are a mirror image of each other, played forward and backwards at the same time."]}),(0,t.jsxs)(n.p,{children:["Another example is from the famous classical composer Mozart in 1792 who used a game called ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Musikalisches_W%C3%BCrfelspiel",children:(0,t.jsx)(n.em,{children:"Muzikalisches W\xfcrfelspiel"})}),' (german for "musical dice game"), where he would first compose 176 short pieces of music with the length of one measure. Then by rolling some dice he would decide which pieces come after one another. This is a form of what is called ',(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Algorithmic_composition",children:(0,t.jsx)(n.em,{children:"Algorithmic Composition"})}),". Composing music based on a predefined set of rules also called an algorithm. More on Algorithmic Composition will be explained further ahead."]}),(0,t.jsxs)(n.p,{children:["Around 1920 a new form of composition technique was described, namely ",(0,t.jsx)(n.code,{children:"Serialism"}),". Serialism originated from the ",(0,t.jsx)(n.code,{children:"twelve-tone"}),' technique, described in 1919 by Josef Hauer in his published work "Law of the twelve tones". This technique starts out with a randomly ordered set of the twelve chromatic notes. From there on out you can apply transformations on this set, such as reverse/retrograde, inverse, transpose, and combinations between those.']}),(0,t.jsxs)(n.p,{children:["In the 60's the Greek Iannis Xenakis published the book Formalized Music containing many techniques and his philosophy on composing music with mathematics and stochastic functions (forms of randomness). An example in his work is the piece ",(0,t.jsx)(n.a,{href:"https://www.youtube.com/watch?v=nvH2KYYJg-o",children:"Pithoprakta"}),", using brownian motion, the stochastic movement of particles bumping into each other, to compose a piece."]}),(0,t.jsxs)(n.p,{children:["Later in the 70's we've seen composers such as Laurie Spiegel work on musical pieces generated with computer code such as her work ",(0,t.jsx)(n.a,{href:"https://www.youtube.com/watch?v=fKX21xp6hhA",children:"Harmony of the Worlds"}),", a sonification of the motion of the planets, based on the research of Johannes Kepler. She also wrote the paper ",(0,t.jsx)(n.a,{href:"https://github.com/calpicasso/Manipulations-of-musical-patterns/blob/master/Manipulations%20of%20Musical%20Patterns.md",children:(0,t.jsx)(n.em,{children:"Manipulation of Musical Patterns"})})," (1981) in which she suggests to ",(0,t.jsx)(n.em,{children:'"extract a basic "library" consisting of the most elemental transformations which have consistently been successfully used on musical patterns, a basic group of "tried-and-true" musical manipulations."'})," beyond that which already exists in such a way as to preserve continuity with it."]}),(0,t.jsxs)(n.p,{children:["After that there have been more and more examples of musicians using electronic instruments (such as modular synthesizers) and computers to generate electronic music algorithmically. Books such as ",(0,t.jsx)(n.a,{href:"https://books.google.nl/books?id=jaowAtnXsDQC&printsec=frontcover&dq=Nierhaus+Algorithmic+composition&hl=en&sa=X&redir_esc=y#v=onepage&q=Nierhaus%20Algorithmic%20composition&f=false",children:"Algorithmic Composition"}),", ",(0,t.jsx)(n.a,{href:"https://academic.oup.com/edited-volume/28278",children:"Oxford Handbook on Algorithmic Composition"}),", ",(0,t.jsx)(n.a,{href:"https://academic.oup.com/edited-volume/28207?login=false",children:"Oxford Handbook of Computer Music"}),", ",(0,t.jsx)(n.a,{href:"https://direct.mit.edu/books/oa-monograph/5495/Live-CodingA-User-s-Manual",children:"Live Coding: A User's Manual"})," and many more give great insights in various techniques that can be used in algorithmic composition."]}),(0,t.jsx)(n.p,{children:"Artists/composers such as Alvin Lucier, Pauline Oliveros, Terry Riley, Daphne Oram, Lilian Schwartz, Aphex Twin, Autechre, Suzanne Ciani, Caterina Barbieri, Robert Henke, Emptyset, Holly Herndon, Rian Treanor, Mark Fell, Dawn of Midi, Zo\xeb McPherson, Jlin, Bj\xf6rk, G\xe1bor L\xe1zar, James Holden, Portrait XO, and many more have for example all been working with algorithms in their audio(visual) compositions in one way or the other."})]})]}),"\n",(0,t.jsxs)(n.h3,{id:"randomising-rhythms-and-melodies",children:[(0,t.jsx)(n.code,{children:"random"}),"ising rhythms and melodies"]}),"\n",(0,t.jsxs)(n.p,{children:["So far we've been creating ",(0,t.jsx)(n.code,{children:"list"}),"s manually by typing all the numbers we want. This is one we to go about composing, thinking about all the details exactly how you want them to be. An other way of composing is using the computational power of your computer. With this you can generate lists with ",(0,t.jsx)(n.code,{children:"list-function"}),"s. These lists can be generated randomly or with other types of algorithms."]}),"\n",(0,t.jsxs)(n.p,{children:["We start by looking at generating a list of random notes. The ",(0,t.jsx)(n.code,{children:"list-function"})," we will use is ",(0,t.jsx)(n.code,{children:"random()"}),". Random is a ",(0,t.jsx)(n.em,{children:"generator"})," function. It takes a few arguments, the length of the list, the lowest possible value, the highest possible value (excluding). For example we can generate 8 random notes between 0 and 13. This gives us the options 0 up and including 12. We can use the ",(0,t.jsx)(n.code,{children:"print"})," action to also see what the result of the ",(0,t.jsx)(n.code,{children:"list-function"})," is."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"list randomNotes random(8 0 13)\nprint randomNotes\n\nnew synth saw time(1/8) note(randomNotes 1)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This ",(0,t.jsx)(n.code,{children:"random()"})," function can be used for many other things in the code. For example we can use it to generate a random rhythm of ",(0,t.jsx)(n.code,{children:"0"}),"'s and ",(0,t.jsx)(n.code,{children:"1"}),"'s, or create random note-lengths. Also we can include the ",(0,t.jsx)(n.code,{children:"scale"})," to make sure the random notes stay within a specific scale even tho there is randomness involved."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\nset scale minor c\n\nlist randomNotes random(4 0 13)\nlist randomRhythm random(16 0 2) // 2 because this value is excluded, so the options are 0/1\nlist randomLengths random(5 40 500)\n\nprint randomNotes randomRhythm randomLengths\n\nnew synth saw time(1/16) play(randomRhythm) note(randomNotes) shape(2 randomLengths)\n"})}),"\n",(0,t.jsx)(n.h3,{id:"predicting-randomness",children:"Predicting Randomness"}),"\n",(0,t.jsx)(n.p,{children:"You'll notice that every time you evaluate the code in the example above, the notes, rhythm and lengths change. This is because the numbers are generated randomly. But actually there is no such thing as true randomness, the random numbers are generated by a deterministic process (psuedo-randomness), an algorithm that has a specific mathematical function and is seeded by a starting point. We only perceive it as random because we can't see any pattern."}),"\n",(0,t.jsxs)(n.p,{children:["Once you know the starting-point, called the ",(0,t.jsx)(n.em,{children:"seed"}),", that initializes this process, you can reproduce the sequence of random output of the algorithm over and over. We can do this by setting the so called ",(0,t.jsx)(n.code,{children:"randomSeed"}),". Using a ",(0,t.jsx)(n.code,{children:"number"})," will make sure random values keep the same sequence every time you re-evaluate the code. The algorithm will use this fixed ",(0,t.jsx)(n.code,{children:"number"}),' as a "seed" to start the calculations. A value of ',(0,t.jsx)(n.code,{children:"0"})," sets to unpredictable seeding (which is the default). For example try the same code again, but now swap between the 2 seeds (or choose some yourself) and you'll notice every time you evaluate with the same seed the randomness doesn't change."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\nset scale minor c\nset randomSeed 4829\n// set randomSeed 9282\n\nlist randomNotes random(4 0 13)\nlist randomRhythm random(16 0 2) // 2 because this value is excluded, so the options are 0/1\nlist randomLengths random(5 40 500)\n\nprint randomNotes randomRhythm randomLengths\n\nnew synth saw time(1/16) play(randomRhythm) note(randomNotes) shape(2 randomLengths)\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"randomSeed"})," works for all the ",(0,t.jsx)(n.code,{children:"list-function"}),"s that use some form of randomness. For example also ",(0,t.jsx)(n.code,{children:"shuffle()"}),", ",(0,t.jsx)(n.code,{children:"drunk()"}),", ",(0,t.jsx)(n.code,{children:"expand()"}),". You can read all about these functions in the ",(0,t.jsx)(n.a,{href:"/mercury/docs/reference/list-functions",children:"Reference"}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"-coloring-your-sounds",children:"\ud83c\udf08 Coloring your sounds"}),"\n",(0,t.jsx)(n.p,{children:"Coming soon..."}),"\n",(0,t.jsx)(n.h2,{id:"-composition-strategies",children:"\ud83c\udfbc Composition Strategies"}),"\n",(0,t.jsx)(n.p,{children:"Coming soon..."})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>r});var t=s(6540);const i={},o=t.createContext(i);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b096b7b7.caf228a8.js b/assets/js/b096b7b7.caf228a8.js new file mode 100644 index 00000000..26b70e6e --- /dev/null +++ b/assets/js/b096b7b7.caf228a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[464],{1818:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var t=s(4848),i=s(8453);const o={sidebar_position:-1},a="\ud83e\udd13 Coding in Mercury",r={id:"usage/coding",title:"\ud83e\udd13 Coding in Mercury",description:'Now that you got everything setup and are ready to start coding you\'re probably wondering: "How does this actually work?"',source:"@site/docs/usage/coding.md",sourceDirName:"usage",slug:"/usage/coding",permalink:"/mercury/docs/usage/coding",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:-1,frontMatter:{sidebar_position:-1},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udd79 Usage",permalink:"/mercury/docs/usage"},next:{title:"\ud83d\udcda How To's",permalink:"/mercury/docs/usage/howto"}},h={},l=[{value:"\ud83d\udc69\ud83c\udffd\u200d\ud83d\udcbb\ud83d\udc68\ud83c\udffb\u200d\ud83d\udcbb\ud83d\udc68\ud83c\udffe\u200d\ud83d\udcbb\ud83d\udc69\ud83c\udffc\u200d\ud83d\udcbb Live Coding",id:"-live-coding",level:2},{value:"\ud83d\udcbe Playing a sample",id:"-playing-a-sample",level:2},{value:"One sample",id:"one-sample",level:3},{value:"What's the time()?",id:"whats-the-time",level:3},{value:"Other sounds",id:"other-sounds",level:3},{value:"Changing tempo",id:"changing-tempo",level:3},{value:"play() and list",id:"play-and-list",level:3},{value:"The list",id:"the-list",level:3},{value:"To play(1) or not to play(0)",id:"to-play1-or-not-to-play0",level:3},{value:"Combining rhythms",id:"combining-rhythms",level:3},{value:"Linear beats",id:"linear-beats",level:3},{value:"\ud83c\udfb9 The Synth",id:"-the-synth",level:2},{value:"Play the synth",id:"play-the-synth",level:3},{value:"A note()",id:"a-note",level:3},{value:"12-TET system",id:"12-tet-system",level:4},{value:"The Mercury Notation System",id:"the-mercury-notation-system",level:4},{value:"A melody",id:"a-melody",level:3},{value:"Set a scale",id:"set-a-scale",level:3},{value:"Harmony",id:"harmony",level:3},{value:"shape-ing the sound",id:"shape-ing-the-sound",level:3},{value:"\ud83c\udfb2 Power of Algorithms",id:"-power-of-algorithms",level:2},{value:"randomising rhythms and melodies",id:"randomising-rhythms-and-melodies",level:3},{value:"Predicting Randomness",id:"predicting-randomness",level:3},{value:"\ud83c\udf08 Coloring your sounds",id:"-coloring-your-sounds",level:2},{value:"\ud83c\udfbc Composition Strategies",id:"-composition-strategies",level:2}];function c(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"-coding-in-mercury",children:"\ud83e\udd13 Coding in Mercury"}),"\n",(0,t.jsx)(n.p,{children:'Now that you got everything setup and are ready to start coding you\'re probably wondering: "How does this actually work?"'}),"\n",(0,t.jsxs)(n.p,{children:["This short introduction will help you to get started with coding your first sounds and music. The guide will explain the Mercury ",(0,t.jsx)(n.em,{children:"syntax"}),", some basics in (western) ",(0,t.jsx)(n.em,{children:"music theory"}),", the concept of ",(0,t.jsx)(n.em,{children:"serialism"})," in music and ",(0,t.jsx)(n.em,{children:"algorithmic composition"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["First we will look briefly at what ",(0,t.jsx)(n.em,{children:"Live Coding"})," is and how this works in Mercury. Then we will make a sampler to play a basic sound, changing the timing, changing the tempo, play more samples together and make a rhythm. We'll look at how we can create these rhythms with functions too to make the compisition ",(0,t.jsx)(n.em,{children:"algorithmic"}),". After that we will focus on creating a synthesizer that allows us to play melodies. We'll see how we can make a melody with a list of numbers and apply a scale. We can also play chords and adjust the sound to our liking by changing the waveform, changing the length of the sound and applying different effects such as a filter, a echo and a reverb. If you run into an issue please see the ",(0,t.jsx)(n.a,{href:"troubleshooting",children:(0,t.jsx)(n.strong,{children:"Troubleshooting"})})," page."]}),"\n",(0,t.jsx)(n.admonition,{title:"More tutorials",type:"tip",children:(0,t.jsx)(n.p,{children:(0,t.jsxs)(n.strong,{children:["You can find many more bite-sized tutorials in the ",(0,t.jsx)(n.a,{href:"https://mercury-playground.pages.dev/",children:"Mercury Playground"})," in the bottom left corner drop down menu."]})})}),"\n",(0,t.jsx)(n.h2,{id:"-live-coding",children:"\ud83d\udc69\ud83c\udffd\u200d\ud83d\udcbb\ud83d\udc68\ud83c\udffb\u200d\ud83d\udcbb\ud83d\udc68\ud83c\udffe\u200d\ud83d\udcbb\ud83d\udc69\ud83c\udffc\u200d\ud83d\udcbb Live Coding"}),"\n",(0,t.jsxs)(n.p,{children:["Live coding is about making software live, sometimes called ",(0,t.jsx)(n.em,{children:"on-the-fly"})," or ",(0,t.jsx)(n.em,{children:"just-in-time"})," programming. It is a form of peformance art where the artist is typing code on stage, this code is interpreted by the computer in real time and translated to sound or visuals (or sometimes even something else completely, like controlling robots). Live coding is not a specific genre, but can be applied across many art disciplines. There are dance events where live coding is used to create electronic music, these are usually called Algorave's. Live coding is also about openness, inclusion and accessibility, showing your code to the audience via a projection and thinking and improvising with it publically. Creating a welcoming environment where people can try and fail collectively. Sharing your code and knowledge and learning from others. And after all this live coding is still much more. You can read all about it in the book: ",(0,t.jsx)(n.a,{href:"https://livecodingbook.toplap.org/",children:'"Live Coding, A user\'s manual"'}),", openly available as pdf and epub."]}),"\n",(0,t.jsx)(n.p,{children:"There are more people involved in live coding around the world! You can find them here:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["TOPLAP Home: ",(0,t.jsx)(n.a,{href:"https://blog.toplap.org/",children:"https://blog.toplap.org/"})]}),"\n",(0,t.jsxs)(n.li,{children:["Algorave Site: ",(0,t.jsx)(n.a,{href:"https://algorave.com/",children:"https://algorave.com/"})]}),"\n",(0,t.jsxs)(n.li,{children:["Eulerroom Youtube Livestreams: ",(0,t.jsx)(n.a,{href:"https://www.youtube.com/eulerroom",children:"https://www.youtube.com/eulerroom"})]}),"\n",(0,t.jsxs)(n.li,{children:["Mercury Discord Server: ",(0,t.jsx)(n.a,{href:"https://discord.gg/vt59NYU",children:"https://discord.gg/vt59NYU"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Live coding is not necessarily easy, but just like with playing an instrument such as guitar or drums, you can learn it by trying and practicing often. By following tutorials, visiting events, watching videos, listening music, you name it, you can find inspiration and ideas to make your own code and sounds."}),"\n",(0,t.jsx)(n.p,{children:"Mercury was made with the idea to abstract away some more difficult parts of coding electronic music, and provide you (the artist/performer) with functions that get you to make music quickly."}),"\n",(0,t.jsx)(n.h2,{id:"-playing-a-sample",children:"\ud83d\udcbe Playing a sample"}),"\n",(0,t.jsx)(n.p,{children:"A big part of electronic music (but for sure also in many other music genres) is the use of samples. The word sample can have different meanings accross various musical contexts. A sample can be a recording of a note of an instrument, or a small portion of a larger recording, or a snippet of an original song."}),"\n",(0,t.jsxs)(n.h3,{id:"one-sample",children:["One ",(0,t.jsx)(n.code,{children:"sample"})]}),"\n",(0,t.jsxs)(n.p,{children:["Empty the editor and type the following code and press ",(0,t.jsx)(n.code,{children:"play"})," or use the shortkey ",(0,t.jsx)(n.code,{children:"Alt + Enter"}),". Mercury will evaluate your code and start making sound (if there aren't any errors)."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:['Be aware of the spaces "',(0,t.jsx)(n.code,{children:" "}),'" in the code between words, these are important!']})}),"\n",(0,t.jsxs)(n.p,{children:["Because Mercury is made for live coding you will hear this sample and it is already playing repeatedly by default for you! This repetition is also called a ",(0,t.jsx)(n.em,{children:"loop"}),". A cool feature is that all the instruments are always immediately ",(0,t.jsx)(n.em,{children:"looping"})," \ud83d\udd01."]}),"\n",(0,t.jsxs)(n.p,{children:["You don't have to stop the sound when you make adjustments to the code. You can keep typing and every time just hit ",(0,t.jsx)(n.em,{children:"evaluate"}),". The old sound will be replaced by the new sound automatically \ud83c\udf89. For example add some other sounds on the lines below, evaluate, and hear the sounds play together. Mercury evaluates code ",(0,t.jsx)(n.code,{children:"line-per-line"}),', so you have to start a new line with a new "action".']}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house\nnew sample hat_min\nnew sample snare_808\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["You can comment ",(0,t.jsx)(n.code,{children:"//"}),' a line to "mute" the instrument. Comments are parts of text in the code that are not evaluated when you click play. This is useful during live performances if you want to stop a sound from playing without removing the code.']}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house\n// the hihat is removed from the code\n// new sample hat_min \nnew sample snare_808\n"})})]}),"\n",(0,t.jsxs)(n.h3,{id:"whats-the-time",children:["What's the ",(0,t.jsx)(n.code,{children:"time()"}),"?"]}),"\n",(0,t.jsxs)(n.p,{children:["By default every instrument will play its sound once per measure. In most western pop music a measure has four counts (1, 2, 3, 4, 1, 2, 3, 4, 1, etc.). If we want to play this sample four times per measure we use an ",(0,t.jsx)(n.code,{children:"instrument-function"})," named ",(0,t.jsx)(n.code,{children:"time()"}),". The argument for the function will be the ",(0,t.jsx)(n.code,{children:"fraction"})," we want to count, in this case ",(0,t.jsx)(n.code,{children:"1/4"})," if we want four counts in 1 measure. We can apply this function for the different samples to create a beat. The most basic beat (or groove) has a kick 4 times per measure (called ",(0,t.jsx)(n.em,{children:"four-on-the-floor"}),"), a snare 2 times and a hihat 8 times."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house time(1/4)\nnew sample hat_min time(1/8)\nnew sample snare_808 time(1/2)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Now you hear a basic drumbeat that you are likely familiar with. Try making it more interesting by changing any of the ",(0,t.jsx)(n.code,{children:"time()"})," arguments to different ",(0,t.jsx)(n.code,{children:"fraction"}),"'s."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house time(1/4)\nnew sample hat_min time(3/16)\nnew sample snare_808 time(5/8)\n"})}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsxs)(n.p,{children:["You can use a second argument in ",(0,t.jsx)(n.code,{children:"time()"})," to apply an offset, a short delay of the sound."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house time(1/4)\n// the hihat's time is 1/4, the same the kick, but the offset is 1/8\n// so you'll hear exactly between every kick sound\nnew sample hat_min time(1/4 1/8)\n"})})]}),"\n",(0,t.jsx)(n.h3,{id:"other-sounds",children:"Other sounds"}),"\n",(0,t.jsxs)(n.p,{children:["You can of course also try other samples that are included in Mercury! A full list of samples is available in ",(0,t.jsx)(n.a,{href:"sounds",children:(0,t.jsx)(n.strong,{children:"Sounds in Mercury"})}),". Try for example: ",(0,t.jsx)(n.code,{children:"bamboo_g"}),", ",(0,t.jsx)(n.code,{children:"shatter"}),", ",(0,t.jsx)(n.code,{children:"tabla_mid"}),"."]}),"\n",(0,t.jsxs)(n.h3,{id:"changing-tempo",children:["Changing ",(0,t.jsx)(n.code,{children:"tempo"})]}),"\n",(0,t.jsxs)(n.p,{children:["When you hear this beat it might sound great, but maybe you want it to play faster or slower all together. You can change the overall (",(0,t.jsx)(n.em,{children:"global"}),") tempo of the environment with a ",(0,t.jsx)(n.code,{children:"set"})," action."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 80\n\nnew sample kick_house time(1/4)\nnew sample hat_min time(3/16)\nnew sample snare_808 time(5/8)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Try a tempo of ",(0,t.jsx)(n.code,{children:"110"}),", ",(0,t.jsx)(n.code,{children:"140"}),", ",(0,t.jsx)(n.code,{children:"180"}),", and even ",(0,t.jsx)(n.code,{children:"300"}),"! All the different tempos give the groove a different feeling as well and may change your perception on rhythm of all the instruments combined. This perception is called a ",(0,t.jsx)(n.em,{children:"composite rhythm"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The tempo is definited in BPM, or ",(0,t.jsx)(n.em,{children:"Beats Per Minute"})," on a quarter note (",(0,t.jsx)(n.code,{children:"1/4"}),"). This means that when the tempo is ",(0,t.jsx)(n.code,{children:"100"}),", you can fit 100 quarter notes in one minute. The time between these notes will therefore be ",(0,t.jsx)(n.code,{children:"60000 ms / 100 beats = 600 ms"}),". When the tempo goes higher (read faster) the time between notes will get shorter. Eg. the time-interval with a tempo of ",(0,t.jsx)(n.code,{children:"140"})," is ",(0,t.jsx)(n.code,{children:"60000 ms / 150 beats = 400 ms"})]}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"set"})," command is a command that allows you to change parameters of global settings such as the tempo. Later on we'll see how to use it for instruments as well."]}),"\n"]}),"\n",(0,t.jsxs)(n.h3,{id:"play-and-list",children:[(0,t.jsx)(n.code,{children:"play()"})," and ",(0,t.jsx)(n.code,{children:"list"})]}),"\n",(0,t.jsxs)(n.p,{children:["After a short while of playing the tempo and time you maybe think to yourself: ",(0,t.jsx)(n.em,{children:'"Is it also possible to play this sample in the same tempo and timing, but maybe with a different rhythm?"'})]}),"\n",(0,t.jsxs)(n.p,{children:["This is where we will introduce ",(0,t.jsx)(n.code,{children:"list"}),"'s as arguments to functions and the ",(0,t.jsx)(n.code,{children:"play()"})," function. But before we start making rhythms, let's first have a quick look at various forms of music notation systems."]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"A brief history on Musical Notation Systems"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(n.p,{children:["Maybe you are familiar with the modern western ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Musical_notation",children:"music notation"}),". A notation system consisting of five horizontal lines stretching over the paper. At the beginning of the lines a so called clef is drawn, denoting the position of the note G or F depending on the type of clef. From that point onwards notes can be written down by using various symbols on the paper (usually oval shaped), where the vertical position of the symbol (on or between the lines) determines the pitch (how high or low is the note), the horizontal position together with the symbol itself determines the timing and length of the note (when is it played and for how long)."]}),(0,t.jsxs)(n.p,{children:["This western notation system is a form of musical representation originating from ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Neume",children:"Neume"})," in 800 CE. But other parts of the world like ",(0,t.jsx)(n.a,{href:"https://www.google.com/search?q=india+traditional+musical+notation&tbm=isch&ved=2ahUKEwiA95P_ht7qAhX3wAIHHW8DBmsQ2-cCegQIABAA&oq=india+traditional+musical+notation&gs_lcp=CgNpbWcQA1DvA1jvA2DqBWgAcAB4AIABLogBLpIBATGYAQCgAQGqAQtnd3Mtd2l6LWltZ8ABAQ&sclient=img&ei=cbgWX8D6KveBi-gP74aY2AY&bih=821&biw=1440",children:"India"}),", ",(0,t.jsx)(n.a,{href:"https://www.google.com/search?q=russian+musical+notation&tbm=isch&ved=2ahUKEwjxtMDoht7qAhUGG-wKHTtuDFoQ2-cCegQIABAA&oq=russian+musical+notation&gs_lcp=CgNpbWcQAzIECAAQGDoGCAAQBxAeOggIABAIEAcQHlD_Z1j1bGDVbmgAcAB4AIABQ4gB7AKSAQE3mAEAoAEBqgELZ3dzLXdpei1pbWfAAQE&sclient=img&ei=QrgWX_GLDIa2sAe73LHQBQ&bih=821&biw=1440",children:"Russia"})," and ",(0,t.jsx)(n.a,{href:"https://www.google.com/search?q=chinese+traditional+musical+notation&tbm=isch&ved=2ahUKEwiJ9u31ht7qAhXaOewKHbbZBCYQ2-cCegQIABAA&oq=chinese+traditional+musical+notation&gs_lcp=CgNpbWcQA1CqEFiTIWDfImgBcAB4AIABSIgBgQWSAQIxM5gBAKABAaoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=XrgWX4nPDNrzsAe2s5OwAg&bih=821&biw=1440",children:"China"})," developed there own notations over the centuries. In the 50's and later many composers have been experimenting with other forms of notation as well, named ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Graphic_notation_(music)",children:"graphic notation"}),", to find new ways of capturing musical expression that does not work in the modern western notation. Have a look at some of these ",(0,t.jsx)(n.a,{href:"https://www.google.com/search?q=graphical+music+notation&tbm=isch&ved=2ahUKEwiFwM6Oh97qAhUFt6QKHZ4uCloQ2-cCegQIABAA&oq=graphical+music+notation&gs_lcp=CgNpbWcQAzoCCAA6BggAEAUQHjoGCAAQCBAeOgQIABAYOgYIABAKEBg6CAgAEAgQBxAeUKEOWPAuYP8vaAFwAHgAgAE4iAHNA5IBAjEwmAEAoAEBqgELZ3dzLXdpei1pbWfAAQE&sclient=img&ei=krgWX4WvB4XukgWe3ajQBQ&bih=821&biw=1440",children:"graphical notations"}),". They are already a piece of art even without the musical output."]}),(0,t.jsxs)(n.p,{children:["Around 1920 a new form of composition technique, ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Serialism",children:(0,t.jsx)(n.em,{children:"Serialism"})})," was described by Josef Hauer and used avidly by composer Arnold Schoenberg. Serialism uses series (or sequences) of values to describe various musical parameters. A series could hold for example pitch information (such as note names c e g f), but could also have rhythmical information. In this way all components (pitch, length, dynamics, articulation and more) of a note can be captured in a series and used to compose with. More on this will be discussed in the section ",(0,t.jsx)(n.a,{href:"#-power-of-algorithms",children:"Power of Algorithms"})]})]})]}),"\n",(0,t.jsxs)(n.h3,{id:"the-list",children:["The ",(0,t.jsx)(n.code,{children:"list"})]}),"\n",(0,t.jsxs)(n.p,{children:["Mercury finds its roots in the concept of ",(0,t.jsx)(n.em,{children:"Serialism"}),", a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a ",(0,t.jsx)(n.code,{children:"list"}),". Every instance of an instrument has an internal counter. This counter increments (0, 1, 2, 3,... etc) when an instrument triggers an event based on the time-interval from ",(0,t.jsx)(n.code,{children:"time()"}),". This is also called a step-sequencer. When a ",(0,t.jsx)(n.code,{children:"list"})," is added as argument to an ",(0,t.jsx)(n.code,{children:"instrument-function"})," the instrument uses its count as a lookup-position (index) taking the corresponding value from the list. As soon as the index is higher then the amount of values in the ",(0,t.jsx)(n.code,{children:"list"})," it will return to the beginning and start over, therefore the ",(0,t.jsx)(n.code,{children:"list"})," is circular/looping."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"list [ value0 value1 ... value-n ]\nlist function()\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The line starts with the code ",(0,t.jsx)(n.code,{children:"list"}),", followed by the ",(0,t.jsx)(n.code,{children:"name"})," of the list. The name can be any 3 or more characters you like. All values between the ",(0,t.jsx)(n.code,{children:"["})," and ",(0,t.jsx)(n.code,{children:"]"}),' (square brackets) are part of the list. Every value must be separated by a space "',(0,t.jsx)(n.code,{children:" "}),'".']}),"\n",(0,t.jsxs)(n.admonition,{type:"info",children:[(0,t.jsx)(n.mdxAdmonitionTitle,{}),(0,t.jsxs)(n.p,{children:["Lists have to be created on a line ",(0,t.jsx)(n.strong,{children:"before"})," they are used, because the code is evaluated from top to bottom."]})]}),"\n",(0,t.jsxs)(n.h3,{id:"to-play1-or-not-to-play0",children:["To ",(0,t.jsx)(n.code,{children:"play(1)"})," or not to ",(0,t.jsx)(n.code,{children:"play(0)"})]}),"\n",(0,t.jsxs)(n.p,{children:["In order to create a rhythm for an instrument we can make a list consisting of zeroes and ones. The ",(0,t.jsx)(n.code,{children:"1"})," represents a ",(0,t.jsx)(n.code,{children:"true"}),"/",(0,t.jsx)(n.code,{children:"on"})," value, resulting in the triggering of the sound, the ",(0,t.jsx)(n.code,{children:"0"})," a ",(0,t.jsx)(n.code,{children:"false"}),"/",(0,t.jsx)(n.code,{children:"off"})," value that will not play. Let's put this into practice."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nnew sample hat_min time(1/16) play(1)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This sounds the same to what we heard before. This is because the ",(0,t.jsx)(n.code,{children:"play()"})," function only has a single ",(0,t.jsx)(n.code,{children:"1"})," as argument, which means all notes are played. This is the ",(0,t.jsx)(n.em,{children:"default"})," and was already the case in the code above. But let's now create a list with ",(0,t.jsx)(n.code,{children:"0"}),"s and ",(0,t.jsx)(n.code,{children:"1"}),"s and apply the name of the list as argument in the function."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nlist hatBeat [1 0 0 1 0 1 1 0]\n\nnew sample hat_min time(1/16) play(hatBeat)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You can hear how the rhythm is applied to the sample. Every 16th note (",(0,t.jsx)(n.code,{children:"1/16"}),") the internal counter from that instrument looks up a value from the ",(0,t.jsx)(n.code,{children:"list hatBeat"}),". When it is a ",(0,t.jsx)(n.code,{children:"1"})," it is played, when it is a ",(0,t.jsx)(n.code,{children:"0"})," it is not. Try some different rhythms of different lengths, for example: ",(0,t.jsx)(n.code,{children:"[0 1 0 0 1]"}),", ",(0,t.jsx)(n.code,{children:"[1 1 0 1 1 0 0]"}),", ",(0,t.jsx)(n.code,{children:"[1 1 1 0]"}),"."]}),"\n",(0,t.jsxs)(n.admonition,{title:"kick with a chance of hat",type:"tip",children:[(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"1"})," or ",(0,t.jsx)(n.code,{children:"0"})," in ",(0,t.jsx)(n.code,{children:"play()"})," is actually not a binairy value but a percentage where 0=0% and 1=100%. You can add some chance to your instruments by choosing for example ",(0,t.jsx)(n.code,{children:"0.5"})," (50%) or ",(0,t.jsx)(n.code,{children:"0.9"})," (90%) of playing"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new sample kick_house time(1/4) play(0.9) // play 90% of the time\nnew sample hat_min time(1/16) play(0.5) // play 50% of the time\n"})})]}),"\n",(0,t.jsx)(n.h3,{id:"combining-rhythms",children:"Combining rhythms"}),"\n",(0,t.jsxs)(n.p,{children:["In order to make more complex rhythms we can go back to our pop beat, but instead of using different ",(0,t.jsx)(n.code,{children:"time()"})," arguments to make a rhythm, we will use the power of ",(0,t.jsx)(n.code,{children:"list"}),"'s to look up a ",(0,t.jsx)(n.code,{children:"1"})," or ",(0,t.jsx)(n.code,{children:"0"})," to let it play the sound or not. First we make sure that all instruments play in the same time of 1/16th notes."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\n\nnew sample kick_house time(1/16) play(1)\nnew sample snare_fat time(1/16) play(1)\nnew sample hat_click time(1/16) play(1)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Execute this code and you will hear all samples play all 16th notes. Now we add lists for the different instruments. Note the lists don't have to be the same length. They will each ",(0,t.jsx)(n.em,{children:"loop"})," individually. This allows you to quickly create quite complex rhythms that phase over time with just a few lines of code!"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\n\nlist kickBeat [1 0 0]\nlist snareBeat [0 0 0 0 1 0 1 0]\nlist hatBeat [1 1 0 1 1 0 1]\n\nnew sample kick_house time(1/16) play(kickBeat)\nnew sample snare_808 time(1/16) play(snareBeat)\nnew sample hat_min time(1/16) play(hatBeat)\n"})}),"\n",(0,t.jsx)(n.h3,{id:"linear-beats",children:"Linear beats"}),"\n",(0,t.jsxs)(n.p,{children:["Instead of using multiple instruments to create our beat, we can also use one sampler and let it play different sounds sequentially. For this we need to create a list with the names of the samples in the order we want to play them. The playing of samples without any overlap or playing at the same time is sometimes called a ",(0,t.jsx)(n.em,{children:"linear beat"}),". For example we want to play kick, hat, snare, hat. Now our code will look like this:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nlist drumSounds [kick_house hat_click snare_fat hat_click]\n\nnew sample drumSounds time(1/8)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Now to make this a bit more interesting we can combine this technique with another list that has some zeroes and ones to play a rhythm at a time of ",(0,t.jsx)(n.code,{children:"1/16"}),". For example:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nlist theSounds [kick_house hat_click snare_fat hat_click]\nlist rhythm [1 0 1 0 0 1 0 1]\n\nnew sample theSounds time(1/16) play(rhythm)\n"})}),"\n",(0,t.jsx)(n.p,{children:"Give yourself some time to experiment with all the code so far to get comfortable with the different functions and their arguments and making of lists. Try some different rhythms in various lengths, try some different samples in different orders as well. Have fun!"}),"\n",(0,t.jsx)(n.p,{children:"There is still so much to do with just the sampler, but for now we'll first introduce another instrument in Mercury: the Synthesizer."}),"\n",(0,t.jsx)(n.h2,{id:"-the-synth",children:"\ud83c\udfb9 The Synth"}),"\n",(0,t.jsx)(n.p,{children:"A synthesizer generates its sound through an electrical circuit or a digital chip running some computer code. This code produces a periodic waveshape, an oscillator. The amplitude value of the oscillator controls the motion of your speaker. The synth can therefore be used to create sounds in many different ways and control the pitch to play melodies, basslines, chords and more."}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"What is a synthesizer and synthesis?"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(n.p,{children:["A synthesizer is an electronic musical instrument that generates its sound through analog electrical circuits or in a digital manner through chips and computer code. Generating sounds in these ways is called synthesis. The first instrument that was defined as a synthesizer (",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Moog_synthesizer",children:"the Moog"}),") was introduced in 1964, but before that there were already other electrical instruments available such as the ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Theremin",children:"Theremin"})," (1928) and the ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Hammond_organ",children:"Hammond Organ"})," (1935)."]}),(0,t.jsxs)(n.p,{children:["The basic building blocks needed to do synthesis are one or multiple oscillators (audio signal generators), methods to add or multiply signals and filters to remove parts of a signal. By combining these in different ways you can perform a wide variety of synthesis techniques, such as ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Additive_synthesis",children:"additive synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Subtractive_synthesis",children:"subtractive synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Amplitude_modulation",children:"amplitude modulation synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Ring_modulation",children:"ring modulation synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Frequency_modulation",children:"frequency modulation synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Physical_modelling_synthesis",children:"physical modelling synthesis"}),", ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Vocoder",children:"analyse synthesis"})," (or resynthesis), ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Wavetable_synthesis",children:"wavetable synthesis"})," and ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Sample-based_synthesis",children:"sample-based synthesis"}),". On top of that different techniques can of course be combined to generate even more sounds."]}),(0,t.jsxs)(n.p,{children:["An oscillator is a signal generator that produces a periodic wave. This periodic wave is what drives your speaker (move it back and forth) and produces airpressure differences that you will perceive as sound. The four most common ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Waveform",children:"waveforms"})," are a sine-, sawtooth-, square- and triangle-wave. The name describes the shape of the wave if you would plot it in a graph of time against amplitude. The sinewave is a pure tone consisting of a single frequency. The pitch (how high or low does it sound) is called the Frequency and is expressed in Hertz (Hz). The other waveforms have a richer sound because they consist of more frequencies called harmonics. ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Harmonic",children:"Harmonics"})," can be defined as a range of stacked sinewaves of different frequencies on top of the ",(0,t.jsxs)(n.a,{href:"https://en.wikipedia.org/wiki/Fundamental_frequency",children:[(0,t.jsx)(n.em,{children:"fundamental"})," frequency"]}),". The relationship between these frequencies is different between the three waves (saw, square and triangle) and determines the ",(0,t.jsx)(n.em,{children:"color"})," of the sound (also called ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Timbre",children:(0,t.jsx)(n.em,{children:"timbre"})}),"). The timbre is that what makes an instrument sound like a flute, violin, guitar or voice, even if they play or sing the same note."]})]})]}),"\n",(0,t.jsxs)(n.h3,{id:"play-the-synth",children:["Play the ",(0,t.jsx)(n.code,{children:"synth"})]}),"\n",(0,t.jsx)(n.p,{children:"Lets create our first synthesizer. For this we type the following code and execute it:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth saw\n"})}),"\n",(0,t.jsxs)(n.p,{children:["You will hear the sawtooth waveform play a note. The default ",(0,t.jsx)(n.code,{children:"time()"})," for the synth is ",(0,t.jsx)(n.code,{children:"1"}),", the same as with the ",(0,t.jsx)(n.code,{children:"sample"}),". Now try the other waveforms as well: ",(0,t.jsx)(n.code,{children:"square"}),", ",(0,t.jsx)(n.code,{children:"triangle"}),", ",(0,t.jsx)(n.code,{children:"sine"}),". Notice that the triangle sounds a bit darker, this is because its overtones (harmonics) aren't as loud as with the square and the saw. Also notice that the sine is almost impossible to hear (depending on your headphones or speakers). This is because the sine is only a single frequency, no overtones. And the default frequency for the synth is quite low."]}),"\n",(0,t.jsxs)(n.h3,{id:"a-note",children:["A ",(0,t.jsx)(n.code,{children:"note()"})]}),"\n",(0,t.jsxs)(n.p,{children:["For now lets stick with the ",(0,t.jsx)(n.code,{children:"sine"})," oscillator for a while and try to make some different pitches. In a moment we will look into how the notes work in Mercury, but first let's try some different values to get a feeling of what happens to the sound."]}),"\n",(0,t.jsx)(n.p,{children:"Try these following code snippets and hear how the pitch changes, you can try as many other values as you want of course:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth sine note(0 1)\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth sine note(7 1)\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth sine note(0 2)\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"new synth sine note(7 2)\n"})}),"\n",(0,t.jsx)(n.h4,{id:"12-tet-system",children:"12-TET system"}),"\n",(0,t.jsx)(n.p,{children:"In western music the most common tuning system is the so called 12-Tone Equal Temperament, or 12-TET. This means that we divide a full octave (an octave is a range of one frequency to the doubling of that frequency, for example 200 to 400 Hz) into 12 equal steps: C, C#/Db, D, D#/Eb, E, F, F#/Gb, G, G#/Ab, A, A#/Bb, B, C (octave higher)"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Pythagorean tuning"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(n.p,{children:["You've maybe heard of ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Pythagoras",children:"Pythagoras"}),", a greek philospher and mathematician famous for the pythagorean theorem. He discoverd around 500 BCE that when you take a string (like a guitar) and make another string with half the distance, that string sounds twice as high in pitch. This doubling of pitch is called an Octave. This means that if you have a string with a frequency of 200 Hz, a string that is half that long will have a pitch of 400 Hz. Phytagoras took this idea and expanded it by taking a third of that string, a fourth, a fifth and so on. This let to the discovery of the harmonic series (for example 100 Hz, 200, 300, 400, 500...)."]}),(0,t.jsxs)(n.p,{children:["The distance of an octave is quite big, and we can fit more pitches of different intervals in between two octaves. Pythagoras build its ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Pythagorean_tuning",children:"tuning system"})," based on stacking perfect fifths (ratio 3:2) and scaling down octaves to fit in one octave. This system had a slight problem that the octaves were slightly out of tune though."]})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"Scales in the 12-TET system"}),(0,t.jsxs)("div",{children:[(0,t.jsx)(n.p,{children:"Our current note name system - C D E F G A B - started out around the 12th century. At that time there was not really a notation system and scales (a ascending sequence of notes). The different scales were referred to as modes and all ended and started at a different note. These were later on defined as do, re, mi, fa, sol, la, ti and do again. Later on these became A up till G. The do's are both the same note only an octave higher, so they need to have the same name. In the past this was notated as A, a, aa for three octaves. Sometimes when the mode starts on a different letter, some notes are supposed to sound higher or lower. This is where the accidentals came in to play. If a not is made a bit lower, it is called flat (b) and a bit higher it is called sharp (#). This completed the 12 tone system that we know now. C, C#/Db, D D#/Eb, E, F, F#/Gb, G, G#/Ab, A, A#/Bb, B. You will notice that some notes don't have a sharp or flat note in between (E-F and B-C), this is because these notes are already a half-step apart, while all the other notes are actually a whole-step apart."}),(0,t.jsxs)(n.p,{children:["Since the 18th century the ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Equal_temperament",children:"12-Tone Equal Temperament"})," is used. In this system all the octaves are completely consonant over the entire range of the keyboard, and all the notes in between are at an equal distance from eachother. Because of this manner of tuning some notes are every so slightly out of tune when compared with the harmonic series ratios, but the system allows for quick switching between scales and tonal centre, and therefore it is still used mostly today. There are other tuning systems in the world as well, for example ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Slendro",children:"Slendro"})," is a 5-TET tuning system from Indonesia."]}),(0,t.jsxs)(n.p,{children:["From our tuning-system we can make various scales. The scale that has all the notes is called the ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Chromatic_scale",children:(0,t.jsx)(n.em,{children:"chromatic"})})," scale. Other scales usually consist of 7 notes picked from those 12 (originating from the modes). The distances between the 12 tones in the chromatic scale are called semitones (half steps). Most scales have a combination of tones and semitones (full and half steps). This is what is called a Diatonic scale. The most famous scales are the major and minor scale. The major scale when starting from C has no accidentals (C D E F G A B, with steps W W H W W W H), but when starting this same series from A you get a minor scale (A B C D E F G, with steps W H W W H W)."]})]})]}),"\n",(0,t.jsx)(n.h4,{id:"the-mercury-notation-system",children:"The Mercury Notation System"}),"\n",(0,t.jsxs)(n.p,{children:["Now let's go back to our coding of notes. In Mercury the notes are not written down as letters, but as numbers. These numbers are added as arguments to the ",(0,t.jsx)(n.code,{children:"note()"})," method. The arguments consist of 2 numbers, the first number is the tone-step (semitone) in the chromatic 12-TET system, the second number is an octave-step. Later on we'll see how we can work with ",(0,t.jsx)(n.code,{children:"scale"}),"s and changing the root (tonal centre) as well."]}),"\n",(0,t.jsxs)(n.p,{children:["By default Mercury works with ",(0,t.jsx)(n.code,{children:"C"})," as the root and ",(0,t.jsx)(n.code,{children:"chromatic"})," as the scale used. This means that the ",(0,t.jsx)(n.code,{children:"note(0 0)"})," corresponds to the 1st note (counting starts at 0) in the 12-TET system (which is ",(0,t.jsx)(n.code,{children:"C"}),") and the second ",(0,t.jsx)(n.code,{children:"0"})," is the default octave. ",(0,t.jsx)(n.code,{children:"note(0 0)"})," therefore corresponds with MIDI-note ",(0,t.jsx)(n.code,{children:"36"}),". Now a ",(0,t.jsx)(n.code,{children:"note(0 2)"})," would also be a ",(0,t.jsx)(n.code,{children:"C"}),", only 2 octaves higher. A ",(0,t.jsx)(n.code,{children:"note(7 1)"})," would be the 8th note in the 12-TET system starting at ",(0,t.jsx)(n.code,{children:"C"}),", one octave higher, resulting in ",(0,t.jsx)(n.code,{children:"G"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"a-melody",children:"A melody"}),"\n",(0,t.jsxs)(n.p,{children:["Now that we know which numbers make up which notes we can make a melody. By putting the numbers in a list and giving the name of the list as argument to the ",(0,t.jsx)(n.code,{children:"note()"})," function. You can try different numbers to hear which ones sound nice and which ones don't. You can also try different octaves as well or different waveforms of course. Maybe add a rhythm too? It's all up to you! \ud83c\udfb6"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"list myMelody [0 4 7 5 7 9 4 5]\n\nnew synth sine note(myMelody 2) time(1/8)\n"})}),"\n",(0,t.jsxs)(n.h3,{id:"set-a-scale",children:["Set a ",(0,t.jsx)(n.code,{children:"scale"})]}),"\n",(0,t.jsxs)(n.p,{children:["It can be tough to know all the various scales that can be used and which numbers belong to these scales. In order to help you code melodies and harmonies that fit within a specific scale you can specify the global ",(0,t.jsx)(n.code,{children:"scale"})," via the ",(0,t.jsx)(n.code,{children:"set"})," action. Applying a scale to the entire environment will force all numbers that don't fit in a scale to be replaced by a number that is closest to them. This happens at runtime (so when the note gets played). The content of the list doesn't change. Some scale names are for example: ",(0,t.jsx)(n.code,{children:"major"}),", ",(0,t.jsx)(n.code,{children:"minor"}),", ",(0,t.jsx)(n.code,{children:"dorian"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set scale minor c\n\nlist myMelody [0 1 2 3 4 5 6 7 8 9 10 11 12]\nnew synth sine note(myMelody 2) time(1/8)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["As you can see and hear in the example above there is a list of all the 12 notes in an octave. But when you play it you will hear some notes double. This is because some numbers are not part of the ",(0,t.jsx)(n.code,{children:"minor"})," scale. For example ",(0,t.jsx)(n.code,{children:"1"})," and ",(0,t.jsx)(n.code,{children:"4"})," are not part of this scale, therefore they are mapped to a number closest that does fit, like ",(0,t.jsx)(n.code,{children:"2"})," and ",(0,t.jsx)(n.code,{children:"3"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["By changing the ",(0,t.jsx)(n.em,{children:"root"})," behind the name of the scale it is possible to offset what the ",(0,t.jsx)(n.code,{children:"0"})," means in the ",(0,t.jsx)(n.code,{children:"note(0)"}),". By default the ",(0,t.jsx)(n.code,{children:"0"})," corresponds with the ",(0,t.jsx)(n.code,{children:"c"}),". But if we set the scale to for example ",(0,t.jsx)(n.code,{children:"e"}),", the ",(0,t.jsx)(n.code,{children:"note(0 0)"})," will correspond with ",(0,t.jsx)(n.code,{children:"e"}),", 4 semitons higher, MIDI-note ",(0,t.jsx)(n.code,{children:"40"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set scale major a\n\nlist myMelody [0 1 2 3 4 5 6 7 8 9 10 11 12]\nnew synth sine note(myMelody 2) time(1/8)\n"})}),"\n",(0,t.jsxs)(n.admonition,{title:"scales with randomness",type:"tip",children:[(0,t.jsxs)(n.p,{children:["It is especially helpful to use ",(0,t.jsx)(n.code,{children:"set scale"})," when you start generating lists with functions such as ",(0,t.jsx)(n.code,{children:"random()"}),". More on lists functions in a later chapter. But you can already try this:"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set scale dorian\n\nlist randomMelody random(16 0 12)\nnew synth sine note(randomMelody) time(1/16)\n"})})]}),"\n",(0,t.jsx)(n.h3,{id:"harmony",children:"Harmony"}),"\n",(0,t.jsxs)(n.p,{children:["When two or more melodic instruments play together you hear multiple pitches at the same time. This is called a harmony. We can make two instances of a ",(0,t.jsx)(n.code,{children:"synth"})," and make different notes for them to play, or we can use one list for multiple instruments and let them play at the same time. We use the ",(0,t.jsx)(n.code,{children:"octave"})," argument in ",(0,t.jsx)(n.code,{children:"note()"})," to move the instruments to different hights."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\nset scale minor a\n\nlist myMelody [0 4 7 5 7 9 4 5]\nlist melodyTwo [7 7 5 5 4 4 0 0]\n\nnew synth sine note(myMelody 0) time(1/6)\nnew synth sine note(melodyTwo 1) time(1/8)\nnew synth sine note(myMelody 2) time(1/8)\n"})}),"\n",(0,t.jsxs)(n.h3,{id:"shape-ing-the-sound",children:[(0,t.jsx)(n.code,{children:"shape"}),"-ing the sound"]}),"\n",(0,t.jsxs)(n.p,{children:["As you may have noticed the synth has by default quite a short sound. This is because the default synth has a so called ",(0,t.jsx)(n.em,{children:"envelope"}),", which we refer to in Mercury as the ",(0,t.jsx)(n.code,{children:"shape"}),". The shape describes the fade-in and fade-out time of the synth's source (the oscillator). The shape is necessary, because without it the oscillator would continue sounding forever. We can adjust the fade-in and fade-out times with arguments in the ",(0,t.jsx)(n.code,{children:"shape()"})," function. The argument can be a ",(0,t.jsx)(n.code,{children:"number"}),", which describe the fade time in milliseconds, or it can be a ",(0,t.jsx)(n.code,{children:"fraction"})," which describes the fade time relative to the ",(0,t.jsx)(n.code,{children:"tempo"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\n\n// fade-in of 5ms and fade-out of 100ms\nnew synth saw time(1/4) shape(5 100)\n\n// fade in and out exactly in the time of 1/2\nnew synth square time(1/2) shape(1/4 1/4) \n"})}),"\n",(0,t.jsxs)(n.p,{children:["Just like with ",(0,t.jsx)(n.code,{children:"play()"})," and ",(0,t.jsx)(n.code,{children:"note()"})," we can also use a ",(0,t.jsx)(n.code,{children:"list"})," in the ",(0,t.jsx)(n.code,{children:"shape()"})," function to apply different fade-in and fade-out times for the synth per trigger of the note. This gives us more flexibility in creating interesting synthesizer parts."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 130\n\nlist notes [0 0 3 12 7]\nlist lengths [40 100 40 1/8 40 1/1]\nlist rhythm [1 0 1 1 0 1 0 1]\n\nnew synth saw time(1/16) note(notes 0) shape(lengths) play(rhythm)\n"})}),"\n",(0,t.jsxs)(n.admonition,{title:"Shape a sample",type:"tip",children:[(0,t.jsxs)(n.p,{children:["It is also possible to shape the ",(0,t.jsx)(n.code,{children:"sample"}),". This is useful in the case you have a sample that sounds quite long."]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 100\n\nnew sample harp_down shape(1 1/8)\nnew sample gong_hi shape(1/2 1/2)\n"})})]}),"\n",(0,t.jsx)(n.h2,{id:"-power-of-algorithms",children:"\ud83c\udfb2 Power of Algorithms"}),"\n",(0,t.jsx)(n.p,{children:"In this chapter we'll look at Algorithmic Composition. This is a way of composing music (or other forms of art) through the means of algorithms. An algorithm is a set of steps (or rules) that you or the system follows in order to gain a result. The result in this case is the composition."}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:"A brief history on Algorithmic Composition"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(n.p,{children:['For many years composers have been experimenting with ways to create new musical pieces. For example J.S. Bach published the Musikalisches Opfer (Musical Offerings) in 1747, which included many fugues that were "generated" (by hand) based on the rules of counterpoint (a polyphonic composition technique). It also included the ',(0,t.jsxs)(n.a,{href:"https://www.youtube.com/watch?v=DAIc1XvnPkI",children:[(0,t.jsx)(n.em,{children:"Canon Cancrizans"})," (Crab Canon)"]}),", a musical piece of two voices that are a mirror image of each other, played forward and backwards at the same time."]}),(0,t.jsxs)(n.p,{children:["Another example is from the famous classical composer Mozart in 1792 who used a game called ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Musikalisches_W%C3%BCrfelspiel",children:(0,t.jsx)(n.em,{children:"Muzikalisches W\xfcrfelspiel"})}),' (german for "musical dice game"), where he would first compose 176 short pieces of music with the length of one measure. Then by rolling some dice he would decide which pieces come after one another. This is a form of what is called ',(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Algorithmic_composition",children:(0,t.jsx)(n.em,{children:"Algorithmic Composition"})}),". Composing music based on a predefined set of rules also called an algorithm. More on Algorithmic Composition will be explained further ahead."]}),(0,t.jsxs)(n.p,{children:["Around 1920 a new form of composition technique was described, namely ",(0,t.jsx)(n.code,{children:"Serialism"}),". Serialism originated from the ",(0,t.jsx)(n.code,{children:"twelve-tone"}),' technique, described in 1919 by Josef Hauer in his published work "Law of the twelve tones". This technique starts out with a randomly ordered set of the twelve chromatic notes. From there on out you can apply transformations on this set, such as reverse/retrograde, inverse, transpose, and combinations between those.']}),(0,t.jsxs)(n.p,{children:["In the 60's the Greek Iannis Xenakis published the book Formalized Music containing many techniques and his philosophy on composing music with mathematics and stochastic functions (forms of randomness). An example in his work is the piece ",(0,t.jsx)(n.a,{href:"https://www.youtube.com/watch?v=nvH2KYYJg-o",children:"Pithoprakta"}),", using brownian motion, the stochastic movement of particles bumping into each other, to compose a piece."]}),(0,t.jsxs)(n.p,{children:["Later in the 70's we've seen composers such as Laurie Spiegel work on musical pieces generated with computer code such as her work ",(0,t.jsx)(n.a,{href:"https://www.youtube.com/watch?v=fKX21xp6hhA",children:"Harmony of the Worlds"}),", a sonification of the motion of the planets, based on the research of Johannes Kepler. She also wrote the paper ",(0,t.jsx)(n.a,{href:"https://github.com/calpicasso/Manipulations-of-musical-patterns/blob/master/Manipulations%20of%20Musical%20Patterns.md",children:(0,t.jsx)(n.em,{children:"Manipulation of Musical Patterns"})})," (1981) in which she suggests to ",(0,t.jsx)(n.em,{children:'"extract a basic "library" consisting of the most elemental transformations which have consistently been successfully used on musical patterns, a basic group of "tried-and-true" musical manipulations."'})," beyond that which already exists in such a way as to preserve continuity with it."]}),(0,t.jsxs)(n.p,{children:["After that there have been more and more examples of musicians using electronic instruments (such as modular synthesizers) and computers to generate electronic music algorithmically. Books such as ",(0,t.jsx)(n.a,{href:"https://books.google.nl/books?id=jaowAtnXsDQC&printsec=frontcover&dq=Nierhaus+Algorithmic+composition&hl=en&sa=X&redir_esc=y#v=onepage&q=Nierhaus%20Algorithmic%20composition&f=false",children:"Algorithmic Composition"}),", ",(0,t.jsx)(n.a,{href:"https://academic.oup.com/edited-volume/28278",children:"Oxford Handbook on Algorithmic Composition"}),", ",(0,t.jsx)(n.a,{href:"https://academic.oup.com/edited-volume/28207?login=false",children:"Oxford Handbook of Computer Music"}),", ",(0,t.jsx)(n.a,{href:"https://direct.mit.edu/books/oa-monograph/5495/Live-CodingA-User-s-Manual",children:"Live Coding: A User's Manual"})," and many more give great insights in various techniques that can be used in algorithmic composition."]}),(0,t.jsx)(n.p,{children:"Artists/composers such as Alvin Lucier, Pauline Oliveros, Terry Riley, Daphne Oram, Lilian Schwartz, Aphex Twin, Autechre, Suzanne Ciani, Caterina Barbieri, Robert Henke, Emptyset, Holly Herndon, Rian Treanor, Mark Fell, Dawn of Midi, Zo\xeb McPherson, Jlin, Bj\xf6rk, G\xe1bor L\xe1zar, James Holden, Portrait XO, and many more have for example all been working with algorithms in their audio(visual) compositions in one way or the other."})]})]}),"\n",(0,t.jsxs)(n.h3,{id:"randomising-rhythms-and-melodies",children:[(0,t.jsx)(n.code,{children:"random"}),"ising rhythms and melodies"]}),"\n",(0,t.jsxs)(n.p,{children:["So far we've been creating ",(0,t.jsx)(n.code,{children:"list"}),"s manually by typing all the numbers we want. This is one we to go about composing, thinking about all the details exactly how you want them to be. An other way of composing is using the computational power of your computer. With this you can generate lists with ",(0,t.jsx)(n.code,{children:"list-function"}),"s. These lists can be generated randomly or with other types of algorithms."]}),"\n",(0,t.jsxs)(n.p,{children:["We start by looking at generating a list of random notes. The ",(0,t.jsx)(n.code,{children:"list-function"})," we will use is ",(0,t.jsx)(n.code,{children:"random()"}),". Random is a ",(0,t.jsx)(n.em,{children:"generator"})," function. It takes a few arguments, the length of the list, the lowest possible value, the highest possible value (excluding). For example we can generate 8 random notes between 0 and 13. This gives us the options 0 up and including 12. We can use the ",(0,t.jsx)(n.code,{children:"print"})," action to also see what the result of the ",(0,t.jsx)(n.code,{children:"list-function"})," is."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"list randomNotes random(8 0 13)\nprint randomNotes\n\nnew synth saw time(1/8) note(randomNotes 1)\n"})}),"\n",(0,t.jsxs)(n.p,{children:["This ",(0,t.jsx)(n.code,{children:"random()"})," function can be used for many other things in the code. For example we can use it to generate a random rhythm of ",(0,t.jsx)(n.code,{children:"0"}),"'s and ",(0,t.jsx)(n.code,{children:"1"}),"'s, or create random note-lengths. Also we can include the ",(0,t.jsx)(n.code,{children:"scale"})," to make sure the random notes stay within a specific scale even tho there is randomness involved."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\nset scale minor c\n\nlist randomNotes random(4 0 13)\nlist randomRhythm random(16 0 2) // 2 because this value is excluded, so the options are 0/1\nlist randomLengths random(5 40 500)\n\nprint randomNotes randomRhythm randomLengths\n\nnew synth saw time(1/16) play(randomRhythm) note(randomNotes) shape(2 randomLengths)\n"})}),"\n",(0,t.jsx)(n.h3,{id:"predicting-randomness",children:"Predicting Randomness"}),"\n",(0,t.jsx)(n.p,{children:"You'll notice that every time you evaluate the code in the example above, the notes, rhythm and lengths change. This is because the numbers are generated randomly. But actually there is no such thing as true randomness, the random numbers are generated by a deterministic process (psuedo-randomness), an algorithm that has a specific mathematical function and is seeded by a starting point. We only perceive it as random because we can't see any pattern."}),"\n",(0,t.jsxs)(n.p,{children:["Once you know the starting-point, called the ",(0,t.jsx)(n.em,{children:"seed"}),", that initializes this process, you can reproduce the sequence of random output of the algorithm over and over. We can do this by setting the so called ",(0,t.jsx)(n.code,{children:"randomSeed"}),". Using a ",(0,t.jsx)(n.code,{children:"number"})," will make sure random values keep the same sequence every time you re-evaluate the code. The algorithm will use this fixed ",(0,t.jsx)(n.code,{children:"number"}),' as a "seed" to start the calculations. A value of ',(0,t.jsx)(n.code,{children:"0"})," sets to unpredictable seeding (which is the default). For example try the same code again, but now swap between the 2 seeds (or choose some yourself) and you'll notice every time you evaluate with the same seed the randomness doesn't change."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-js",children:"set tempo 110\nset scale minor c\nset randomSeed 4829\n// set randomSeed 9282\n\nlist randomNotes random(4 0 13)\nlist randomRhythm random(16 0 2) // 2 because this value is excluded, so the options are 0/1\nlist randomLengths random(5 40 500)\n\nprint randomNotes randomRhythm randomLengths\n\nnew synth saw time(1/16) play(randomRhythm) note(randomNotes) shape(2 randomLengths)\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"randomSeed"})," works for all the ",(0,t.jsx)(n.code,{children:"list-function"}),"s that use some form of randomness. For example also ",(0,t.jsx)(n.code,{children:"shuffle()"}),", ",(0,t.jsx)(n.code,{children:"drunk()"}),", ",(0,t.jsx)(n.code,{children:"expand()"}),". You can read all about these functions in the ",(0,t.jsx)(n.a,{href:"/mercury/docs/reference/list-functions",children:"Reference"}),"."]})}),"\n",(0,t.jsx)(n.h2,{id:"-coloring-your-sounds",children:"\ud83c\udf08 Coloring your sounds"}),"\n",(0,t.jsx)(n.p,{children:"Coming soon..."}),"\n",(0,t.jsx)(n.h2,{id:"-composition-strategies",children:"\ud83c\udfbc Composition Strategies"}),"\n",(0,t.jsx)(n.p,{children:"Coming soon..."})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>r});var t=s(6540);const i={},o=t.createContext(i);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba4e2648.1d87bb77.js b/assets/js/ba4e2648.1d87bb77.js deleted file mode 100644 index 1ed5b3d8..00000000 --- a/assets/js/ba4e2648.1d87bb77.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[613],{3985:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>l,metadata:()=>t,toc:()=>d});var i=s(4848),r=s(8453);const l={sidebar_position:0},c="Syntax Overview",t={id:"reference/syntax",title:"Syntax Overview",description:"Mercury is a minimal and human-readable language for the live coding of algorithmic electronic music. All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals.",source:"@site/docs/reference/syntax.md",sourceDirName:"reference",slug:"/reference/syntax",permalink:"/mercury/docs/reference/syntax",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udcd6 Reference",permalink:"/mercury/docs/category/-reference"},next:{title:"Actions",permalink:"/mercury/docs/reference/actions"}},o={},d=[{value:"Evaluation",id:"evaluation",level:2},{value:"Syntax Structure",id:"syntax-structure",level:2},{value:"Syntax Vocabulary",id:"syntax-vocabulary",level:2},{value:"Param Glossary",id:"param-glossary",level:2},{value:"Value Types",id:"value-types",level:3},{value:"List Types",id:"list-types",level:3}];function a(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"syntax-overview",children:"Syntax Overview"}),"\n",(0,i.jsx)(n.p,{children:"Mercury is a minimal and human-readable language for the live coding of algorithmic electronic music. All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals."}),"\n",(0,i.jsx)(n.h2,{id:"evaluation",children:"Evaluation"}),"\n",(0,i.jsxs)(n.p,{children:["Mercury code is evaluated as an ",(0,i.jsx)(n.code,{children:"entire page"}),", ",(0,i.jsx)(n.code,{children:"per line"})," and from ",(0,i.jsx)(n.code,{children:"top to bottom"}),". One of the main reasons the entire code page is evaluated is that this allows the code to always be a direct reflection of the state of the system and therefore what you hear. This helps to keep an overview what is going on in the system. The downside is that it is more difficult to prepare snippets of code in the same file without evaluating them. Code that you don't want to hear can therefore be ",(0,i.jsx)(n.code,{children:"commented"}),", or you can store it in a separate file."]}),"\n",(0,i.jsx)(n.h2,{id:"syntax-structure",children:"Syntax Structure"}),"\n",(0,i.jsx)(n.p,{children:"The following chart gives an overview of how the syntax is structured when you type code in Mercury. There are of course many combinations of instruments, lists, methods and functions possible. Please refer to the specific functions in the reference and the tutorials for more concrete examples."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"new function(value1 value2 ... value-n)\n function1() function2() ... function-n()\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"list [ value1 value2 ... value-n ]\n [ list1 list2 ... list-n ]\n function(value1 value2 ... value-n)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"set value\n function(...)\n function1() function2() ... function-n()\n all function(...)\n function1() function2() ... function-n()\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"print \n function(...)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"syntax-vocabulary",children:"Syntax Vocabulary"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"linebreak"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Linebreaks ",(0,i.jsx)(n.code,{children:"enters"})," are used to separate lines of code"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"space"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Spaces ",(0,i.jsx)(n.code,{children:" "})," are used to separate keywords, functions, arguments, list-items and more"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"parenthesis"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Parenthesis ",(0,i.jsx)(n.code,{children:"( )"})," are used to denote the opening and closing of a ",(0,i.jsx)(n.code,{children:"function"})," call"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"brackets"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Brackets ",(0,i.jsx)(n.code,{children:"[ ]"})," are used to denote the opening and closing of a ",(0,i.jsx)(n.code,{children:"list"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"comment"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A comment ",(0,i.jsx)(n.code,{children:"//"})," is created by starting with 2 forward slashes"]}),"\n",(0,i.jsx)(n.li,{children:"Comments can be started at a later point in a line"}),"\n",(0,i.jsx)(n.li,{children:"Multiple lines have to be commented separately"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"action"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A word used as an action to start a line of code with"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"new"}),", ",(0,i.jsx)(n.code,{children:"set"}),", ",(0,i.jsx)(n.code,{children:"list"}),", ",(0,i.jsx)(n.code,{children:"print"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A name is a group of 3 or more characters (",(0,i.jsx)(n.code,{children:"A-Z a-z - _ 0-9"}),"), but may not start with any number"]}),"\n",(0,i.jsx)(n.li,{children:"Names can be used for for example instrument instances, lists and sample-files"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"kick_909"}),", ",(0,i.jsx)(n.code,{children:"polySynth"}),", ",(0,i.jsx)(n.code,{children:"melody"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"string"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A string is a collection of any character including spaces between ",(0,i.jsx)(n.code,{children:'" "'})," or ",(0,i.jsx)(n.code,{children:"' '"})]}),"\n",(0,i.jsxs)(n.li,{children:["Strings are also used for OSC messages in the form of ",(0,i.jsx)(n.code,{children:"/address/tag"})]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:'"hello, world!"'})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"number"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A number is any whole number or decimal number, 64-bit, positive or negative."}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"0"}),", ",(0,i.jsx)(n.code,{children:"21"}),", ",(0,i.jsx)(n.code,{children:"-144"}),", ",(0,i.jsx)(n.code,{children:"3.1415"}),", ",(0,i.jsx)(n.code,{children:"-6.18"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"fraction"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A fraction is a combination of a whole number, a forward slash, and a whole number ",(0,i.jsx)(n.code,{children:"0-9/0-9"})]}),"\n",(0,i.jsx)(n.li,{children:"Fractions are used to denote time intervals in a more precise manner"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"1/4"}),", ",(0,i.jsx)(n.code,{children:"3/16"}),", ",(0,i.jsx)(n.code,{children:"3/1"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"notename"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A notename is a combination of a letter ",(0,i.jsx)(n.code,{children:"a-g"})," followed by an octave number ",(0,i.jsx)(n.code,{children:"0-7"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["The notename can have a modifier for flat (",(0,i.jsx)(n.code,{children:"b"}),") or sharp (",(0,i.jsx)(n.code,{children:"#"}),") notes between the letter and octave"]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"g4"}),", ",(0,i.jsx)(n.code,{children:"eb3"}),", ",(0,i.jsx)(n.code,{children:"f#2"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"function"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A function is a ",(0,i.jsx)(n.code,{children:"name"})," followed by an opening parenthesis ",(0,i.jsx)(n.code,{children:"("}),", zero, one or more arguments and a closing parenthesis ",(0,i.jsx)(n.code,{children:")"})]}),"\n",(0,i.jsx)(n.li,{children:"A function executes some process to generate an output or control a behaviour based on arguments"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"random(4)"}),", ",(0,i.jsx)(n.code,{children:"spread(10 300 1000)"}),", ",(0,i.jsx)(n.code,{children:"time(1/4)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"list-function"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A list-function returns a list that can be stored in a named ",(0,i.jsx)(n.code,{children:"list"})]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"new list coin(8)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"instrument-function"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["An instrument-function is like a ",(0,i.jsx)(n.code,{children:"function"})," but is part of an instance created with ",(0,i.jsx)(n.code,{children:"new"})," (in most cases an instrument)"]}),"\n",(0,i.jsx)(n.li,{children:"Instrument-functions are specific to that instance only and can not be used outside that scope"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"new sample kick_min speed(0.8) gain(1.1) fx(reverb)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"list"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A list is a collection of values (eg. ",(0,i.jsx)(n.code,{children:"number"}),"'s, ",(0,i.jsx)(n.code,{children:"name"}),"'s, ",(0,i.jsx)(n.code,{children:"string"}),"'s or ",(0,i.jsx)(n.code,{children:"list"}),"'s) seperated by spaces ",(0,i.jsx)(n.code,{children:" "})]}),"\n",(0,i.jsxs)(n.li,{children:["A list always has a ",(0,i.jsx)(n.code,{children:"name"})]}),"\n",(0,i.jsxs)(n.li,{children:["A list is created with an opening bracket ",(0,i.jsx)(n.code,{children:"["}),", followed by some values, and closed with a closing bracket ",(0,i.jsx)(n.code,{children:"]"})]}),"\n",(0,i.jsxs)(n.li,{children:["A list can also be created with a list-",(0,i.jsx)(n.code,{children:"function"})," instead of using brackets"]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"list notes [0 3 12 5]"}),", ",(0,i.jsx)(n.code,{children:"list rhythm euclid(8 5)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"new"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Creates a ",(0,i.jsx)(n.code,{children:"new"})," instance of for example an instrument such as ",(0,i.jsx)(n.code,{children:"sample"})," or ",(0,i.jsx)(n.code,{children:"synth"})]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"new sample harp_down"}),", ",(0,i.jsx)(n.code,{children:"new synth saw"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"set"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Set the value for a global setting or append instrument-functions to a named instrument"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"set tempo 100"}),", ",(0,i.jsx)(n.code,{children:"set mySynth gain(0.4)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"print"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Print allows you to show the content of a ",(0,i.jsx)(n.code,{children:"list"})," or result of a ",(0,i.jsx)(n.code,{children:"list-function"})," in the console window"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"param-glossary",children:"Param Glossary"}),"\n",(0,i.jsx)(n.p,{children:"When describing input arguments for functions it is useful to know if the values can be a number (positive and/or negative), a decimal number (float), a name or string or a boolean value (0/1). Below is an overview what words are used for these various scenarios."}),"\n",(0,i.jsx)(n.h3,{id:"value-types",children:"Value Types"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"value"})," -> Any Number or Name","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"number"})," -> Int+, Int or Float","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"bool"})," -> 0 or 1 (sometimes ",(0,i.jsx)(n.code,{children:"on"})," or ",(0,i.jsx)(n.code,{children:"off"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"int+"})," -> a positive whole number (integer), bigger than 0"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"int"})," -> a whole number, negative or positive, including 0"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"float+"})," -> a positive decimal number (floating-point), bigger than 0"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"float"})," -> a decimal number, positive or negative, including 0"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"})," -> A combination of letter-characters, may include capital letter, underscores and digits"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"string"})," -> A combination of letters between ",(0,i.jsx)(n.code,{children:'" "'})," or ",(0,i.jsx)(n.code,{children:"' '"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"list-types",children:"List Types"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"list"})," -> A list with ",(0,i.jsx)(n.code,{children:"value"}),"'s","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"number-list"})," -> A list with ",(0,i.jsx)(n.code,{children:"number"}),"'s","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"int-list+"})," -> A list with ",(0,i.jsx)(n.code,{children:"int+"}),"'s"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"int-list"})," -> A list with ",(0,i.jsx)(n.code,{children:"int"}),"'s"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"floatList"})," -> A list with ",(0,i.jsx)(n.code,{children:"float"}),"'s"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name-list"})," -> A list with ",(0,i.jsx)(n.code,{children:"name"}),"'s"]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>c,x:()=>t});var i=s(6540);const r={},l=i.createContext(r);function c(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba4e2648.525e3820.js b/assets/js/ba4e2648.525e3820.js new file mode 100644 index 00000000..610485b0 --- /dev/null +++ b/assets/js/ba4e2648.525e3820.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[613],{3985:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>l,metadata:()=>t,toc:()=>d});var i=s(4848),r=s(8453);const l={sidebar_position:0},c="Syntax Overview",t={id:"reference/syntax",title:"Syntax Overview",description:"Mercury is a minimal and human-readable language for the live coding of algorithmic electronic music. All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals.",source:"@site/docs/reference/syntax.md",sourceDirName:"reference",slug:"/reference/syntax",permalink:"/mercury/docs/reference/syntax",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udcd6 Reference",permalink:"/mercury/docs/reference"},next:{title:"Actions",permalink:"/mercury/docs/reference/actions"}},o={},d=[{value:"Evaluation",id:"evaluation",level:2},{value:"Syntax Structure",id:"syntax-structure",level:2},{value:"Syntax Vocabulary",id:"syntax-vocabulary",level:2},{value:"Param Glossary",id:"param-glossary",level:2},{value:"Value Types",id:"value-types",level:3},{value:"List Types",id:"list-types",level:3}];function a(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"syntax-overview",children:"Syntax Overview"}),"\n",(0,i.jsx)(n.p,{children:"Mercury is a minimal and human-readable language for the live coding of algorithmic electronic music. All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals."}),"\n",(0,i.jsx)(n.h2,{id:"evaluation",children:"Evaluation"}),"\n",(0,i.jsxs)(n.p,{children:["Mercury code is evaluated as an ",(0,i.jsx)(n.code,{children:"entire page"}),", ",(0,i.jsx)(n.code,{children:"per line"})," and from ",(0,i.jsx)(n.code,{children:"top to bottom"}),". One of the main reasons the entire code page is evaluated is that this allows the code to always be a direct reflection of the state of the system and therefore what you hear. This helps to keep an overview what is going on in the system. The downside is that it is more difficult to prepare snippets of code in the same file without evaluating them. Code that you don't want to hear can therefore be ",(0,i.jsx)(n.code,{children:"commented"}),", or you can store it in a separate file."]}),"\n",(0,i.jsx)(n.h2,{id:"syntax-structure",children:"Syntax Structure"}),"\n",(0,i.jsx)(n.p,{children:"The following chart gives an overview of how the syntax is structured when you type code in Mercury. There are of course many combinations of instruments, lists, methods and functions possible. Please refer to the specific functions in the reference and the tutorials for more concrete examples."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"new function(value1 value2 ... value-n)\n function1() function2() ... function-n()\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"list [ value1 value2 ... value-n ]\n [ list1 list2 ... list-n ]\n function(value1 value2 ... value-n)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"set value\n function(...)\n function1() function2() ... function-n()\n all function(...)\n function1() function2() ... function-n()\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"print \n function(...)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"syntax-vocabulary",children:"Syntax Vocabulary"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"linebreak"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Linebreaks ",(0,i.jsx)(n.code,{children:"enters"})," are used to separate lines of code"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"space"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Spaces ",(0,i.jsx)(n.code,{children:" "})," are used to separate keywords, functions, arguments, list-items and more"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"parenthesis"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Parenthesis ",(0,i.jsx)(n.code,{children:"( )"})," are used to denote the opening and closing of a ",(0,i.jsx)(n.code,{children:"function"})," call"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"brackets"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Brackets ",(0,i.jsx)(n.code,{children:"[ ]"})," are used to denote the opening and closing of a ",(0,i.jsx)(n.code,{children:"list"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"comment"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A comment ",(0,i.jsx)(n.code,{children:"//"})," is created by starting with 2 forward slashes"]}),"\n",(0,i.jsx)(n.li,{children:"Comments can be started at a later point in a line"}),"\n",(0,i.jsx)(n.li,{children:"Multiple lines have to be commented separately"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"action"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A word used as an action to start a line of code with"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"new"}),", ",(0,i.jsx)(n.code,{children:"set"}),", ",(0,i.jsx)(n.code,{children:"list"}),", ",(0,i.jsx)(n.code,{children:"print"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A name is a group of 3 or more characters (",(0,i.jsx)(n.code,{children:"A-Z a-z - _ 0-9"}),"), but may not start with any number"]}),"\n",(0,i.jsx)(n.li,{children:"Names can be used for for example instrument instances, lists and sample-files"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"kick_909"}),", ",(0,i.jsx)(n.code,{children:"polySynth"}),", ",(0,i.jsx)(n.code,{children:"melody"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"string"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A string is a collection of any character including spaces between ",(0,i.jsx)(n.code,{children:'" "'})," or ",(0,i.jsx)(n.code,{children:"' '"})]}),"\n",(0,i.jsxs)(n.li,{children:["Strings are also used for OSC messages in the form of ",(0,i.jsx)(n.code,{children:"/address/tag"})]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:'"hello, world!"'})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"number"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A number is any whole number or decimal number, 64-bit, positive or negative."}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"0"}),", ",(0,i.jsx)(n.code,{children:"21"}),", ",(0,i.jsx)(n.code,{children:"-144"}),", ",(0,i.jsx)(n.code,{children:"3.1415"}),", ",(0,i.jsx)(n.code,{children:"-6.18"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"fraction"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A fraction is a combination of a whole number, a forward slash, and a whole number ",(0,i.jsx)(n.code,{children:"0-9/0-9"})]}),"\n",(0,i.jsx)(n.li,{children:"Fractions are used to denote time intervals in a more precise manner"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"1/4"}),", ",(0,i.jsx)(n.code,{children:"3/16"}),", ",(0,i.jsx)(n.code,{children:"3/1"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"notename"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A notename is a combination of a letter ",(0,i.jsx)(n.code,{children:"a-g"})," followed by an octave number ",(0,i.jsx)(n.code,{children:"0-7"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["The notename can have a modifier for flat (",(0,i.jsx)(n.code,{children:"b"}),") or sharp (",(0,i.jsx)(n.code,{children:"#"}),") notes between the letter and octave"]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"g4"}),", ",(0,i.jsx)(n.code,{children:"eb3"}),", ",(0,i.jsx)(n.code,{children:"f#2"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"function"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A function is a ",(0,i.jsx)(n.code,{children:"name"})," followed by an opening parenthesis ",(0,i.jsx)(n.code,{children:"("}),", zero, one or more arguments and a closing parenthesis ",(0,i.jsx)(n.code,{children:")"})]}),"\n",(0,i.jsx)(n.li,{children:"A function executes some process to generate an output or control a behaviour based on arguments"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"random(4)"}),", ",(0,i.jsx)(n.code,{children:"spread(10 300 1000)"}),", ",(0,i.jsx)(n.code,{children:"time(1/4)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"list-function"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A list-function returns a list that can be stored in a named ",(0,i.jsx)(n.code,{children:"list"})]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"new list coin(8)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"instrument-function"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["An instrument-function is like a ",(0,i.jsx)(n.code,{children:"function"})," but is part of an instance created with ",(0,i.jsx)(n.code,{children:"new"})," (in most cases an instrument)"]}),"\n",(0,i.jsx)(n.li,{children:"Instrument-functions are specific to that instance only and can not be used outside that scope"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"new sample kick_min speed(0.8) gain(1.1) fx(reverb)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"list"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A list is a collection of values (eg. ",(0,i.jsx)(n.code,{children:"number"}),"'s, ",(0,i.jsx)(n.code,{children:"name"}),"'s, ",(0,i.jsx)(n.code,{children:"string"}),"'s or ",(0,i.jsx)(n.code,{children:"list"}),"'s) seperated by spaces ",(0,i.jsx)(n.code,{children:" "})]}),"\n",(0,i.jsxs)(n.li,{children:["A list always has a ",(0,i.jsx)(n.code,{children:"name"})]}),"\n",(0,i.jsxs)(n.li,{children:["A list is created with an opening bracket ",(0,i.jsx)(n.code,{children:"["}),", followed by some values, and closed with a closing bracket ",(0,i.jsx)(n.code,{children:"]"})]}),"\n",(0,i.jsxs)(n.li,{children:["A list can also be created with a list-",(0,i.jsx)(n.code,{children:"function"})," instead of using brackets"]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"list notes [0 3 12 5]"}),", ",(0,i.jsx)(n.code,{children:"list rhythm euclid(8 5)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"new"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Creates a ",(0,i.jsx)(n.code,{children:"new"})," instance of for example an instrument such as ",(0,i.jsx)(n.code,{children:"sample"})," or ",(0,i.jsx)(n.code,{children:"synth"})]}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"new sample harp_down"}),", ",(0,i.jsx)(n.code,{children:"new synth saw"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"set"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Set the value for a global setting or append instrument-functions to a named instrument"}),"\n",(0,i.jsxs)(n.li,{children:["Example: ",(0,i.jsx)(n.code,{children:"set tempo 100"}),", ",(0,i.jsx)(n.code,{children:"set mySynth gain(0.4)"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"print"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Print allows you to show the content of a ",(0,i.jsx)(n.code,{children:"list"})," or result of a ",(0,i.jsx)(n.code,{children:"list-function"})," in the console window"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"param-glossary",children:"Param Glossary"}),"\n",(0,i.jsx)(n.p,{children:"When describing input arguments for functions it is useful to know if the values can be a number (positive and/or negative), a decimal number (float), a name or string or a boolean value (0/1). Below is an overview what words are used for these various scenarios."}),"\n",(0,i.jsx)(n.h3,{id:"value-types",children:"Value Types"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"value"})," -> Any Number or Name","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"number"})," -> Int+, Int or Float","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"bool"})," -> 0 or 1 (sometimes ",(0,i.jsx)(n.code,{children:"on"})," or ",(0,i.jsx)(n.code,{children:"off"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"int+"})," -> a positive whole number (integer), bigger than 0"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"int"})," -> a whole number, negative or positive, including 0"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"float+"})," -> a positive decimal number (floating-point), bigger than 0"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"float"})," -> a decimal number, positive or negative, including 0"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name"})," -> A combination of letter-characters, may include capital letter, underscores and digits"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"string"})," -> A combination of letters between ",(0,i.jsx)(n.code,{children:'" "'})," or ",(0,i.jsx)(n.code,{children:"' '"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"list-types",children:"List Types"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"list"})," -> A list with ",(0,i.jsx)(n.code,{children:"value"}),"'s","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"number-list"})," -> A list with ",(0,i.jsx)(n.code,{children:"number"}),"'s","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"int-list+"})," -> A list with ",(0,i.jsx)(n.code,{children:"int+"}),"'s"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"int-list"})," -> A list with ",(0,i.jsx)(n.code,{children:"int"}),"'s"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"floatList"})," -> A list with ",(0,i.jsx)(n.code,{children:"float"}),"'s"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"name-list"})," -> A list with ",(0,i.jsx)(n.code,{children:"name"}),"'s"]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>c,x:()=>t});var i=s(6540);const r={},l=i.createContext(r);function c(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bbca2b71.85cb5295.js b/assets/js/bbca2b71.352773e9.js similarity index 99% rename from assets/js/bbca2b71.85cb5295.js rename to assets/js/bbca2b71.352773e9.js index 5cdb86c5..b39070f1 100644 --- a/assets/js/bbca2b71.85cb5295.js +++ b/assets/js/bbca2b71.352773e9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[283],{9030:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>a});var i=s(4848),t=s(8453);const r={sidebar_position:3},l="Instrument Functions",d={id:"reference/instruments",title:"Instrument Functions",description:"An instrument is the main sound or sequencing source in Mercury. Instruments can produce sounds natively in Mercury by means of synthesis or sampling, but can also send out MIDI or OSC-messages to trigger external devices or plugins, and are able to take input from for example your microphone. The following functions apply to all the types of instruments such as synth, sample, loop, polySynth, polySample, midi, osc and input.",source:"@site/docs/reference/instruments.md",sourceDirName:"reference",slug:"/reference/instruments",permalink:"/mercury/docs/reference/instruments",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Global Settings",permalink:"/mercury/docs/reference/global"},next:{title:"Instrument Effects",permalink:"/mercury/docs/reference/effects"}},o={},a=[{value:"All Instruments",id:"all-instruments",level:2},{value:"name",id:"name",level:3},{value:"group",id:"group",level:3},{value:"time",id:"time",level:3},{value:"once",id:"once",level:3},{value:"play",id:"play",level:3},{value:"shape",id:"shape",level:3},{value:"gain",id:"gain",level:3},{value:"pan",id:"pan",level:3},{value:"effect",id:"effect",level:3},{value:"ratchet",id:"ratchet",level:3},{value:"timediv",id:"timediv",level:3},{value:"warp",id:"warp",level:3},{value:"wait",id:"wait",level:3},{value:"synth",id:"synth",level:2},{value:"note",id:"note",level:3},{value:"slide",id:"slide",level:3},{value:"super",id:"super",level:3},{value:"wave2",id:"wave2",level:3},{value:"sub",id:"sub",level:3},{value:"noise",id:"noise",level:3},{value:"sample",id:"sample",level:2},{value:"speed",id:"speed",level:3},{value:"start",id:"start",level:3},{value:"note",id:"note-1",level:3},{value:"tune",id:"tune",level:3},{value:"stretch",id:"stretch",level:3},{value:"loop",id:"loop",level:2},{value:"polySynth",id:"polysynth",level:2},{value:"steal",id:"steal",level:3},{value:"spread",id:"spread",level:3},{value:"voices",id:"voices",level:3},{value:"polySample",id:"polysample",level:2},{value:"midi",id:"midi",level:2},{value:"note",id:"note-2",level:3},{value:"length",id:"length",level:3},{value:"channel",id:"channel",level:3},{value:"chord",id:"chord",level:3},{value:"program",id:"program",level:3},{value:"change",id:"change",level:3},{value:"sync",id:"sync",level:3},{value:"input",id:"input",level:2},{value:"osc",id:"osc",level:2},{value:"receiving",id:"receiving",level:3},{value:"modulator",id:"modulator",level:2},{value:"name",id:"name-1",level:3},{value:"time",id:"time-1",level:3},{value:"range",id:"range",level:3},{value:"out",id:"out",level:3},{value:"trigger",id:"trigger",level:3},{value:"hold",id:"hold",level:3},{value:"emitter",id:"emitter",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"instrument-functions",children:"Instrument Functions"}),"\n",(0,i.jsxs)(n.p,{children:["An instrument is the main sound or sequencing source in Mercury. Instruments can produce sounds natively in Mercury by means of synthesis or sampling, but can also send out MIDI or OSC-messages to trigger external devices or plugins, and are able to take input from for example your microphone. The following functions apply to all the types of instruments such as ",(0,i.jsx)(n.code,{children:"synth"}),", ",(0,i.jsx)(n.code,{children:"sample"}),", ",(0,i.jsx)(n.code,{children:"loop"}),", ",(0,i.jsx)(n.code,{children:"polySynth"}),", ",(0,i.jsx)(n.code,{children:"polySample"}),", ",(0,i.jsx)(n.code,{children:"midi"}),", ",(0,i.jsx)(n.code,{children:"osc"})," and ",(0,i.jsx)(n.code,{children:"input"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["For detailed explanation of the syntax see: ",(0,i.jsx)(n.a,{href:"syntax",children:"Syntax"})," and ",(0,i.jsx)(n.a,{href:"actions#list",children:(0,i.jsx)(n.code,{children:"list"})})," under ",(0,i.jsx)(n.a,{href:"actions",children:"Actions"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Available instruments:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#synth",children:(0,i.jsx)(n.code,{children:"synth"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#sample",children:(0,i.jsx)(n.code,{children:"sample"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#loop",children:(0,i.jsx)(n.code,{children:"loop"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#polysynth",children:(0,i.jsx)(n.code,{children:"polySynth"})})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#polysample",children:(0,i.jsx)(n.code,{children:"polySample"})})," ",(0,i.jsx)(n.em,{children:"MercuryPlayground only"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#input",children:(0,i.jsx)(n.code,{children:"input"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#midi",children:(0,i.jsx)(n.code,{children:"midi"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#osc",children:(0,i.jsx)(n.code,{children:"osc"})})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#modulator",children:(0,i.jsx)(n.code,{children:"modulator"})})," ",(0,i.jsx)(n.em,{children:"Mercury4Max only"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"all-instruments",children:"All Instruments"}),"\n",(0,i.jsx)(n.p,{children:"The following functions apply to all instruments."}),"\n",(0,i.jsx)(n.h3,{id:"name",children:"name"}),"\n",(0,i.jsxs)(n.p,{children:["Set the ",(0,i.jsx)(n.code,{children:"name"})," for this instrument. This can be any string of 3 or more characters. The ",(0,i.jsx)(n.code,{children:"name"})," is used as a reference to the instrument when the ",(0,i.jsx)(n.code,{children:"set"})," action is used to call functions for a specific instrument. The name is also used to generate an OSC-message that is send out from Mercury to trigger external things in sync with the instrument."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> an instrument name (default=random character string)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw name(bob)\n set bob gain(0.8) time(1/16)\n\nnew sample kick_909 name(alice)\n set alice gain(1.2) time(1/4)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="expected osc messages:"',children:"/bob 1\n/alice 1\n"})}),"\n",(0,i.jsx)(n.h3,{id:"group",children:"group"}),"\n",(0,i.jsx)(n.admonition,{title:"Currently (and hopefully temporarily) not working",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Set one or more ",(0,i.jsx)(n.code,{children:"group-name"}),"(s) for this instrument. This can be any string of 3 or more characters. With the ",(0,i.jsx)(n.code,{children:"group"})," you can apply a line of code to multiple instruments at the same time. The ",(0,i.jsx)(n.code,{children:"group"})," is ",(0,i.jsx)(n.strong,{children:"not"})," like a mixing bus, so using for example ",(0,i.jsx)(n.code,{children:"gain()"})," will overwrite the ",(0,i.jsx)(n.code,{children:"gain()"})," function on the line of the instrument. If you use the ",(0,i.jsx)(n.code,{children:"name()"})," function you have to make sure the name is set before the group is applied otherwise the reference won't work correctly."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> a group name used for multiple instruments (default=none)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// the hihat is not included in the group so will \n// not get the gain(0.8) and fx(reverb 0.9 11)\nnew sample hat_909 time(1/8)\n\nnew sample kick_909 group(drums) time(1/4)\nnew sample snare_909 group(drums) time(1/2 1/4)\n set drums gain(0.8) fx(reverb 0.9 11)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"time",children:"time"}),"\n",(0,i.jsxs)(n.p,{children:["Set the time interval at which the internal clock for an instrument runs and the synth or sample is triggered. This can be an ",(0,i.jsx)(n.code,{children:"integer"}),", ",(0,i.jsx)(n.code,{children:"float"})," or ",(0,i.jsx)(n.code,{children:"fraction"}),". ",(0,i.jsx)(n.code,{children:"1"})," = 1measure, ",(0,i.jsx)(n.code,{children:"1/4"})," = quarter-note, ",(0,i.jsx)(n.code,{children:"1/12"})," = 8th triplet, ",(0,i.jsx)(n.code,{children:"3/16"})," = 3-16th notes, etc. Similarly you can set an offset in the timing. The ",(0,i.jsx)(n.code,{children:"time()"})," will start an internal counter for this instrument, incremented every time it is triggerd (based on the ",(0,i.jsx)(n.code,{children:"play()"})," function). The counter is used as an index to lookup values from other ",(0,i.jsx)(n.code,{children:"list"})," provided as argument in functions for this instrument."]}),"\n",(0,i.jsxs)(n.p,{children:["Setting the first argument to ",(0,i.jsx)(n.code,{children:"free"})," allows the use of external triggering via OSC-messages. The trigger reacts when a value greater than ",(0,i.jsx)(n.code,{children:"0"})," is received. When another instrument in the code has a ",(0,i.jsx)(n.code,{children:"name()"}),", that name can be used as OSC-message trigger for another instrument to synchronize them."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number/Fraction"})," -> the timing fraction or ",(0,i.jsx)(n.code,{children:"free"})," (default=1/4)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number/Fraction"})," -> timing offset or osc-message when ",(0,i.jsx)(n.code,{children:"free"})," (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set tempo 130\n\nnew sample kick_909 time(1/4)\nnew synth saw time(1/2 3/16)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="external trigger"',children:"new sample snare_dnb time(free '/snareOSC/amplitude')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="triggering from other instrument"',children:"new sample kick_909 time(3/16) name(kick)\nnew synth saw time(free '/kick')\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.mdxAdmonitionTitle,{children:["You can not (yet) use ",(0,i.jsx)(n.code,{children:"list"}),"s to modulate the ",(0,i.jsx)(n.code,{children:"time()"})," parameters"]})}),"\n",(0,i.jsx)(n.h3,{id:"once",children:"once"}),"\n",(0,i.jsxs)(n.p,{children:["With once you can disable the looping mode of an instrument being triggered for every ",(0,i.jsx)(n.code,{children:"time()"})," interval. When the code is evaluated the instrument will only trigger ",(0,i.jsx)(n.code,{children:"1"})," time and stop after that. It will always trigger once every time the code is evaluated, so if you like the instrument to not play anymore after that you can either set ",(0,i.jsx)(n.code,{children:"gain(0)"})," or comment ",(0,i.jsx)(n.code,{children:"//"})," it."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> enable triggering the instrument once (default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample gong_lo time(2/1) once(on)\n// a sample for reference in time\nnew sample tabla_hi time(1/4)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="trigger once on a bar multiple of 2 with offset of 7/8"',children:"new sample harp_down once(on) time(2/1 7/8)\n// a sample for reference in time\nnew sample hat_808 time(1/4)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"play",children:"play"}),"\n",(0,i.jsxs)(n.p,{children:["Provide the play function with a ",(0,i.jsx)(n.code,{children:"list"})," containing 1's and 0's. For every time interval defined by the ",(0,i.jsx)(n.code,{children:"time()"})," function, the next value in the list is checked. A one results in a trigger of the instrument and an increment of the internal counter. A zero results in no trigger. An optional second argument resets the internal instrument index after a certain amount of time in ",(0,i.jsx)(n.code,{children:"fraction"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> a rhythmic pattern of ones and zeroes to play (default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number/Fraction"})," -> reset internal time() counter after specified time (optional, default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list hatBeat [1 0 0 1 0 1 1 0 0]\n\nnew sample hat_909 time(1/16) play(hatBeat)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alternatively you can use floating-point values in a list which result in a probability that the instrument will play. Here 0 means 0% chance, 1=100% and 0.5 is 50%. Inspired by Nick Collins paper on ",(0,i.jsx)(n.a,{href:"https://www.dmu.ac.uk/documents/technology-documents/research/mtirc/nowalls/mww-collins.pdf",children:"Algorithmic Composition Methods for Breakbeat Science"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="using probabilities"',children:"list hatBeat [1 0.5 0.2 0.8 0.5]\n\nnew sample hat_909 time(1/16) play(hatBeat 2)\nnew sample kick_909 time(1/4)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"beat()"})]}),"\n",(0,i.jsx)(n.h3,{id:"shape",children:"shape"}),"\n",(0,i.jsxs)(n.p,{children:["Set the shape generator of a sound (in synthesis also called envelope). The shape is the trajectory of volume over time on the sound (eg. fade-in, fade-out). Various modes are possible depending on the amount of arguments. The attack time is the fade-in for the sound, the release is the fade-out for the sound, both in milliseconds or ",(0,i.jsx)(n.code,{children:"fraction"}),". The sustain time holds the sound at a static volume for a while. If the sound is triggered before the end of the envelope, the envelope is canceled, faded to 0 in 1ms and retriggered (in the case of monophonic instruments). You can specify the times in absolute values using integer/floating points (in ms) or in relative values using beat fractions."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)/Fraction(List)"})," -> Attack time in ms or fraction (optional, default=2)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)/Fraction(List)"})," -> Decay time in ms or fraction (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)/Fraction(List)"})," -> Release time in ms or fraction"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw shape(1500)\n// default attack of 2 ms, sustain of 0 ms and a release of 1500 ms\n\nnew synth saw shape(1000 250)\n// attack of 1000 ms, default sustain of 0 ms and a release of 250 ms\n\nnew synth saw shape(10 500 50)\n// attack of 10 ms, sustain of 500 ms and a release of 50 ms\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="shape with fractions"',children:"set tempo 100\n\nnew synth saw shape(1/2)\n// default release of 1/2 (about 250 ms at 120 bpm)\n\nnew synth saw shape(1/4 1/32)\n\nnew synth saw shape(1/64 1/8 1/16)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="modulate duration with a list"',children:"list durs [50 200 500]\nnew synth saw shape(durs)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"length()"}),", ",(0,i.jsx)(n.code,{children:"envelope()"})]}),"\n",(0,i.jsx)(n.h3,{id:"gain",children:"gain"}),"\n",(0,i.jsxs)(n.p,{children:["Set the volume for the instrument in floating-point amplitude. Where ",(0,i.jsx)(n.code,{children:"1"})," is the default amplitude of the sample or synth, ",(0,i.jsx)(n.code,{children:"0.5"})," is the half louder (-6 dB) and ",(0,i.jsx)(n.code,{children:"2"})," is twice as loud (+ 6dB). An optional second argument sets the sliding time to go to the next gain value in milliseconds or ",(0,i.jsx)(n.code,{children:"fraction"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> the (start) volume of the instrument (default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)"})," -> the sliding time in fraction or ms (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> mute the instrument but still use named sends (default=0) ",(0,i.jsx)(n.em,{children:"Mercury4Max only"})]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample snare_909 gain(0.8)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="modulate gain with a list"',children:"list gains [0 0.5 0.2 0.9]\nnew synth saw gain(gains 500) time(1/1)\n// ramps between gain values over 500ms every trigger 1/1\n"})}),"\n",(0,i.jsx)(n.admonition,{title:"Important for midi",type:"info",children:(0,i.jsxs)(n.p,{children:["When using the ",(0,i.jsx)(n.code,{children:"midi"})," instrument the gain will be multiplied by ",(0,i.jsx)(n.code,{children:"127"})," to create a velocity message. ",(0,i.jsx)(n.code,{children:"gain(0.5)"})," therefore maps to ",(0,i.jsx)(n.code,{children:"63"})," and ",(0,i.jsx)(n.code,{children:"gain(1)"})," to ",(0,i.jsx)(n.code,{children:"127"})]})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"amp()"}),", ",(0,i.jsx)(n.code,{children:"volume()"}),", ",(0,i.jsx)(n.code,{children:"velocity()"})]}),"\n",(0,i.jsx)(n.h3,{id:"pan",children:"pan"}),"\n",(0,i.jsxs)(n.p,{children:["Set the panning position in floating-point for the sound in the stereo-image. ",(0,i.jsx)(n.code,{children:"-1"})," is 100% left channel, ",(0,i.jsx)(n.code,{children:"0"})," is center (both speakers), ",(0,i.jsx)(n.code,{children:"1"})," is 100% right channel. Higher or lower values wrap between ",(0,i.jsx)(n.code,{children:"-1"})," and ",(0,i.jsx)(n.code,{children:"1"}),". Provide pan with the ",(0,i.jsx)(n.code,{children:"random"})," argument to get a new random panning value every trigger of the instrument."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float"})," -> the panning position between -1 and 1 (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw pan(-1)\nnew synth square pan(1)\n// two synths hard-panned left and right\n\nnew sample clap_909 pan(random) time(1/8)\n// random panning every trigger\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="modulate panning with a list',children:"list positions [-1 0 1 0 1 -1 -1]\nnew sample hat_808 time(1/16) pan(positions)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"panning()"})]}),"\n",(0,i.jsx)(n.admonition,{title:"Multi-speaker output is not (yet) supported",type:"note"}),"\n",(0,i.jsx)(n.h3,{id:"effect",children:"effect"}),"\n",(0,i.jsxs)(n.p,{children:["Add an effect to the sound of the instrument to manipulate the sounds timbre in different ways. The first argument is always the ",(0,i.jsx)(n.code,{children:"effect-name"}),". The arguments that follow depend on the selected effect. ",(0,i.jsx)(n.code,{children:"fx()"})," can be used as an alias to reduce some typing. See ",(0,i.jsx)(n.a,{href:"/mercury/docs/reference/effects",children:"Effects"})," for more details and an up-to-date list of all the available effects for both ",(0,i.jsx)(n.em,{children:"Mercury4Max"})," and the ",(0,i.jsx)(n.em,{children:"MercuryPlayground"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> the effect name"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value+/List+"})," -> values or lists depending on effectname arguments order (optional)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth square effect(distort) effect(reverb)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"fx()"}),", "]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"static vs. dynamic effect-chains"})}),"\n",(0,i.jsxs)(n.p,{children:["The Mercury4Max version has a static effects-chain. This means the order in the effects under the hood is fixed. The order is documented under ",(0,i.jsx)(n.a,{href:"/mercury/docs/reference/effects",children:"Effects"}),". Because of this there is:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"No option to change the order of effects with the code"}),"\n",(0,i.jsx)(n.li,{children:"No option to use effects multiple times in one instrument"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="static fx-chain"',children:"new synth saw fx(reverb) fx(filter low 2000) fx(distort) fx(filter low 300)\n// filter and distortion are fixed before reverb in the chain, the order of \n// the code doesn't matter. There is only one filter in the chain, the first \n// filter is therefore overwritten by the other\n"})}),"\n",(0,i.jsx)(n.p,{children:"The MercuryPlayground version has a dynamic effects-chain. This means the order in the effects is determined by how you type the code. Because of this there is:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Decide the order of effects by the order of the code you type"}),"\n",(0,i.jsx)(n.li,{children:"Use effects multiple times on one instrument"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="dynamic fx-chain"',children:"new synth saw fx(reverb) fx(filter low 2000) fx(distort) fx(filter low 300)\n// the reverb will be filtered, then distorted and then filtered again\n// the resulting sound is filtered twice\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["There are differences in sound between the ",(0,i.jsx)(n.em,{children:"Mercury4Max"})," and ",(0,i.jsx)(n.em,{children:"MercuryPlayground"})," versions. Parameters may need some tweaking when you port from one environment to the other."]})}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Not all effects from ",(0,i.jsx)(n.em,{children:"Mercury4Max"})," are available in the ",(0,i.jsx)(n.em,{children:"MercuryPlayground"})," because some are in the process of being ported, and some are sadly not as easy to implement with Web Audio."]})}),"\n",(0,i.jsx)(n.h3,{id:"ratchet",children:"ratchet"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsx)(n.p,{children:"Add a ratcheting effect (doubling/tripling/quadrupling of hits) with a probability. A technique that introduces some variety in rhythm that originated with electronic music from groups such as Tangerine Dream. The first argument sets the probability a note will be repeated. The second argument sets the amount of repetitions within the time, effectively doubling, tripling or more."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+"})," -> probability of ratchet happening (default=0.1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+/IntList+"})," -> amount of repetitions (default=2)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample hat_909 time(1/8) ratchet(0.3 2)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="using a ratchet list"',children:"list rtc [2 3 2 4 8]\nnew sample hat_909 time(1/4) ratchet(1 rtc)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"timediv",children:"timediv"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercuryplayground only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Add subdivisions to ",(0,i.jsx)(n.code,{children:"time()"}),". Documentation to do..."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list div [1 2 3 4]\nnew sample hat_808 time(1/4) timediv(div)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"warp",children:"warp"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Warp ",(0,i.jsx)(n.code,{children:"time()"})," in a more complex way. Documentation to do..."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list warp [1 2 3 4]\nnew sample hat_808 time(1/1) warp(warp)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"wait",children:"wait"}),"\n",(0,i.jsx)(n.admonition,{title:"MercuryPlayground only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["This function is similar to the offset parameter in the ",(0,i.jsx)(n.code,{children:"time()"})," function except that it allows you to set an additional waiting time (or delay) for an instrument in milliseconds. This function is useful to align/synchronize instruments with external peripherals such as sending MIDI notes or OSC messages."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+/Fraction"})," -> specify the waiting time in milliseconds or fraction (default=null)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample kick_909 time(1/4)\n// the hihat plays 100ms later than the kick\nnew sample hat_909 time(1/4) wait(100)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"synth",children:"synth"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"synth"})," and ",(0,i.jsx)(n.code,{children:"polySynth"})," instruments allow you to play synthesized sounds using a single cycle waveform. These waveforms are loaded in memory and can be accessed by their filename (without the extension). The default waveforms are ",(0,i.jsx)(n.code,{children:"sine"}),", ",(0,i.jsx)(n.code,{children:"triangle"}),", ",(0,i.jsx)(n.code,{children:"square"})," and ",(0,i.jsx)(n.code,{children:"saw"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth \n"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["The waveforms in MercuryPlayground are currently not created with single-cycle soundfiles but via WebAudio's ",(0,i.jsx)(n.code,{children:"PeriodicWave"}),", constructing a waveform from a Fourier Series."]})}),"\n",(0,i.jsx)(n.h3,{id:"note",children:"note"}),"\n",(0,i.jsx)(n.p,{children:"Set the pitch for the instrument to play a note in a melody or chord. The note is specified as a 2-dimensional coordinate system, where the first argument is the semitone offset (positive or negative) and the second argument is the octave offset (positive or negative)."}),"\n",(0,i.jsxs)(n.p,{children:["The origin of the system, ",(0,i.jsx)(n.code,{children:"note(0 0)"}),", corresponds by default with midi-pitch ",(0,i.jsx)(n.code,{children:"36"})," or ",(0,i.jsx)(n.code,{children:"C2"}),". Depending on the ",(0,i.jsx)(n.code,{children:"set scale"})," the coordinate system will shift and result in a different pitch for the origin. A ",(0,i.jsx)(n.code,{children:"note()"})," should therefore not be taken as an absolute value, but rather a relative direction where the melody is going to in relation to the scale and root."]}),"\n",(0,i.jsxs)(n.p,{children:["Detuning/pitchbending can be done by providing a ",(0,i.jsx)(n.code,{children:"float"})," note number. The value behind the decimal point is the amount of detuning from one semitone to the next. For example ",(0,i.jsx)(n.code,{children:"7.5"})," results in ",(0,i.jsx)(n.code,{children:"7"})," semitones (and mapped to ",(0,i.jsx)(n.code,{children:"scale"})," if used) and then a ",(0,i.jsx)(n.code,{children:"0.5"})," semitone is added (= 50 cents). Detuning is applied after mapping the integer semitone to a scale."]}),"\n",(0,i.jsxs)(n.p,{children:["The mapping of the notes is as follows with ",(0,i.jsx)(n.code,{children:"set scale chromatic c"})," (default)"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:(0,i.jsx)(n.code,{children:"note(x y)"})}),(0,i.jsx)(n.th,{children:"..."}),(0,i.jsx)(n.th,{children:"-1"}),(0,i.jsx)(n.th,{children:"0"}),(0,i.jsx)(n.th,{children:"1"}),(0,i.jsx)(n.th,{children:"2"}),(0,i.jsx)(n.th,{children:"3"}),(0,i.jsx)(n.th,{children:"4"}),(0,i.jsx)(n.th,{children:"..."}),(0,i.jsx)(n.th,{children:"9"}),(0,i.jsx)(n.th,{children:"10"}),(0,i.jsx)(n.th,{children:"11"}),(0,i.jsx)(n.th,{children:"12"}),(0,i.jsx)(n.th,{children:"13"}),(0,i.jsx)(n.th,{children:"..."})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"72"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"84"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"60"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"72"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"48"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"60"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"36"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"48"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"-1"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"24"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"36"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]})]})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> positive or negative semitone note value or list, x-coordinate (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> positive or negative octave value or list, y-coordinate (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set scale major d\nnew synth sine note(2 2)\n//=> results in midi-note 64 > F4\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="play a melody with lists"',children:"set scale minor A\n\nlist mel [0 5 7 3 2 -2 0]\nlist oct [0 1 2]\nnew synth sine note(mel oct) time(1/16)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"slide",children:"slide"}),"\n",(0,i.jsxs)(n.p,{children:["A portamento/sliding/gliding effect. This will make the synthesizers' oscillator slowly slide from the current frequency to the new played one over a defined period of ",(0,i.jsx)(n.code,{children:"number"})," in milliseconds or ",(0,i.jsx)(n.code,{children:"fraction"}),". The sliding is logarithmically (meaning it will slide from midi-note to midi-note linearly, but after conversion to frequency slides logarithmically. This sounds slightly different from sliding linearly between frequencies)."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+/Fraction(List)"})," -> sliding time in milliseconds or fraction (default=50)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 7 3]\nnew synth saw note(notes 1) time(1/2) slide(1/8)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"glide()"}),", ",(0,i.jsx)(n.code,{children:"portamento()"})]}),"\n",(0,i.jsx)(n.h3,{id:"super",children:"super"}),"\n",(0,i.jsxs)(n.p,{children:["Add multiple oscillators in unison with a detuning factor to create a ",(0,i.jsx)(n.em,{children:"SuperSaw"})," effect. One oscillator will always be the base frequency of the ",(0,i.jsx)(n.code,{children:"note()"}),", the others are tuned above and below in incremental steps based on the detuning factor. The first argument sets the amount of oscillators (minum of 1, default=1), the second argument sets the detuning factor in semi-tones, the third optional argument sets the oscillator type for the odd numbered oscillators."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> number of oscillators (default=1, maximum=64)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> detuning factor in semi-tone, 12=octave"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> the name of the odd numbered oscillators (optional, default=main oscillator) ",(0,i.jsx)(n.em,{children:"Mercury4Max only"})]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw super(5 0.031415)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw super(11 0.0618 square) \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="modulate detuning with a list"',children:"list voices [3 5 9 21]\nlist detune [0.1 0.5 0.9 12.01 0.3]\n\nnew synth saw time(1/4) shape(-1) super(voices detune)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"unison()"})]}),"\n",(0,i.jsx)(n.h3,{id:"wave2",children:"wave2"}),"\n",(0,i.jsx)(n.admonition,{title:"REMOVED",type:"warning",children:(0,i.jsxs)(n.p,{children:["use ",(0,i.jsx)(n.a,{href:"#super",children:"super()"})," instead"]})}),"\n",(0,i.jsx)(n.h3,{id:"sub",children:"sub"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Add a second sinewave oscillator to the synth. The oscillator is tuned one octave lower than the ",(0,i.jsx)(n.code,{children:"note()"})," played to create a sub frequency."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> amplitude for the sub oscillator (default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth sine note(5 1) sub(0.8)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"noise",children:"noise"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Add a noise oscillator to the synth sound. The first argument is the ",(0,i.jsx)(n.em,{children:"amplitude"})," (gain), the second argument is the ",(0,i.jsx)(n.em,{children:'"color"'})," of the noise between 0 and 1 (1 = white noise, lower values give a more darker/downsampled noise sound). When the modulation mode is turned on (with 1) the noise is modulated by the source of the oscillator (or oscillators if ",(0,i.jsx)(n.code,{children:"super()"})," and ",(0,i.jsx)(n.code,{children:"sub()"})," are used)."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> amplitude of the noise (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> color of the noise 0-1 (default=0.8)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool(List)"})," -> modulation mode (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw note(0 1) noise(0.3 0.8 1)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"sample",children:"sample"}),"\n",(0,i.jsx)(n.p,{children:'The sample instrument allows you to play sound-recordings and loops. These so called "samples" are loaded in memory and can be accessed by their filename (without the extension).'}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample \n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/mercury/docs/usage/mercury4max-overview#sounds",children:"Load sounds in Mercury4Max"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/mercury/docs/usage/playground-overview#add-sounds",children:"Load sounds in MercuryPlayground"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/mercury/docs/usage/sounds",children:"Full list of all the included sounds"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"speed",children:"speed"}),"\n",(0,i.jsxs)(n.p,{children:["Set the playback speed for the sample, where 1 = original speed, 0.5 = half the speed and 2 = twice as fast. Adjusting the playback speed will change the pitch of the sample. A negative value will play the sample backwards starting at the end (or at the ",(0,i.jsx)(n.code,{children:"start()"})," position)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float(List)"})," -> playback speed (default=1)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample choir time(5) speed(0.5)\nnew sample choir time(5) speed(-0.3)\n\nset all fx(reverb 2 17)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"rate()"})]}),"\n",(0,i.jsx)(n.admonition,{title:"Reversed speed is not supported (yet) in the MercuryPlayground",type:"warning"}),"\n",(0,i.jsx)(n.h3,{id:"start",children:"start"}),"\n",(0,i.jsxs)(n.p,{children:["Set the start position (the offset position of the playback) of the sample. 0 = start at the beginning, 0.5 = start midway in the sample. With long decaying samples the offset is very useful if playing the sounds backwards when using for example ",(0,i.jsx)(n.code,{children:"speed(-1)"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> the playback position between 0 and 1 (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list positions randomFloat(8 0 0.5)\n\nnew sample choir time(1/16) start(positions)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"offset()"})]}),"\n",(0,i.jsx)(n.h3,{id:"note-1",children:"note"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"note"})," function allows you to tune the sample to a specific pitch. This is easier than trying to set the playback speed with the ",(0,i.jsx)(n.code,{children:"speed()"})," function if you need to pitch the sample for melodic content. The function works the same as the ",(0,i.jsx)(n.code,{children:"note"})," function explained under the ",(0,i.jsx)(n.code,{children:"synth"}),". Please see ",(0,i.jsx)(n.a,{href:"#note",children:(0,i.jsx)(n.code,{children:"note()"})})," for further information."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 7 5 3]\nnew sample xylo_c4 time(1/8) note(notes 1)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"tune",children:"tune"}),"\n",(0,i.jsxs)(n.p,{children:["Set the base note midi value for the sample to determine how the ",(0,i.jsx)(n.code,{children:"note()"})," function changes the playback speed in relation to this note. For example if your sample was recorded as an ",(0,i.jsx)(n.code,{children:"a4"})," then you will set tune to ",(0,i.jsx)(n.code,{children:"69"})," (midi value of ",(0,i.jsx)(n.code,{children:"a4"}),"). ",(0,i.jsx)(n.code,{children:"note(0 2)"})," is the same as the ",(0,i.jsx)(n.code,{children:"tune()"})," value in the case of a scale set to have ",(0,i.jsx)(n.code,{children:"c"})," as the root."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+"})," -> midi pitch as base for tuning (optional, default=60)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set scale minor c\n\nlist notes [0 7 5 3]\n// tune the kalimba to a3\nnew sample kalimba_a time(1/4) note(notes 2) tune(57)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"stretch",children:"stretch"}),"\n",(0,i.jsxs)(n.p,{children:["Stretch the entire sample to the length of a full bar. Useful for when working with beats that have to be looped. Stretching is the default when working with the ",(0,i.jsx)(n.code,{children:"loop"})," instrument. This is the same as a ",(0,i.jsx)(n.code,{children:"new sample stretch(1)"}),". Optionally you can turn timestretching on with a second argument to preserve the original pitch of the sample. A third optional argument changes the mode of the stretching, choose from: basic, monophonic, rhythmic, general, extremestretch, efficient. The default is set to ",(0,i.jsx)(n.code,{children:"efficient"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> turn stretch to full bar on/off (default=0 for sample default=1 for loop)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> turn timestretching on when stretching to full bar, preservering the original pitch (default = 0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> adjust the stretching mode (default=efficient)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample chimes stretch(1 1 general) speed(-1)\n"})}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:["If your ",(0,i.jsx)(n.code,{children:"loop"})," is longer than ",(0,i.jsx)(n.code,{children:"1"})," bar use ",(0,i.jsx)(n.code,{children:"speed()"})," to decrease the playback speed by ",(0,i.jsx)(n.code,{children:"1 / n-bars"}),". Set ",(0,i.jsx)(n.code,{children:"time()"})," to the bar amounts."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new loop loopOfFourBars time(4/1) speed(0.25)\n"})})]}),"\n",(0,i.jsx)(n.admonition,{title:"Timestretching is only supported in Mercury4Max",type:"warning"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Stretching modes explained"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"basic"})," : best option for real-time performance"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"monophonic"})," : best option for any monophonic source without ambience"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"rhythmic"})," : best option for drums and percussion when transient preservation is critical"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"general"})," : balances spectral integrity with transient preservaton"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"extremestretch"})," : optimized for stretching (slowing down) material, limited to a stretch factor between 0.5 and 4"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"effcient"})," : best option when CPU efficiency is critical"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"loop",children:"loop"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"loop"})," instrument is basically the ",(0,i.jsx)(n.code,{children:"sample"})," instrument but with ",(0,i.jsx)(n.code,{children:"stretch(1)"})," enabled by default, making all the loaded samples stretch to 1 full bar. For all available ",(0,i.jsx)(n.code,{children:"instrument-functions"})," of ",(0,i.jsx)(n.code,{children:"loop"})," see ",(0,i.jsx)(n.a,{href:"#sample",children:(0,i.jsx)(n.code,{children:"sample"})})," above."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new loop \n"})}),"\n",(0,i.jsx)(n.h2,{id:"polysynth",children:"polySynth"}),"\n",(0,i.jsxs)(n.p,{children:["The polySynth functions the same as the ",(0,i.jsx)(n.code,{children:"synth"})," instrument in the sense that you choose a waveform, apply a ",(0,i.jsx)(n.code,{children:"note()"}),", add a ",(0,i.jsx)(n.code,{children:"shape()"}),", etc. For explanation of those functions see ",(0,i.jsx)(n.a,{href:"#synth",children:(0,i.jsx)(n.code,{children:"synth"})}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The extra feature of the polySynth is that it allows for overlapping notes to generate chords. Notes provided to the ",(0,i.jsx)(n.code,{children:"note()"})," function as a 2-dimensional list will be played on the same time as a chord. By default there are 8 voices available at the same time. Voice stealing is ",(0,i.jsx)(n.code,{children:"on"}),' by default meaning that if a new note is played while all voices are busy the "oldest" triggered note will be removed.']}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new polySynth note([ [chord1] [chord2] ... [chord-n] ])\n"})}),"\n",(0,i.jsx)(n.p,{children:"You can think of a 2D list like so:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list chords [ [ 0 3 7 ] [ 2 5 9 ] [ 3 6 10 13 ] ]\n\nlist chords [ 0 2 3 ]\n 3 5 6 \n 7 9 10\n 13 \n"})}),"\n",(0,i.jsxs)(n.p,{children:["So the list ",(0,i.jsx)(n.code,{children:"chords"})," has ",(0,i.jsx)(n.code,{children:"3"}),' "items", and those ',(0,i.jsx)(n.code,{children:"3"})," items again contain a ",(0,i.jsx)(n.code,{children:"list"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list chords [ [ 0 3 7 ] [ 2 5 9 ] [ 3 6 10 13 ] ]\n\nnew polySynth sine note(chord 2) time(1/2) shape(1 1/4) \n"})}),"\n",(0,i.jsx)(n.h3,{id:"steal",children:"steal"}),"\n",(0,i.jsxs)(n.p,{children:["With steal you can choose the behaviour of what happens when new notes are triggered while all voices are in use. When steal is ",(0,i.jsx)(n.code,{children:"on"})," (the default) every new note will be triggered and old notes will be overwritten by the new ones. If steal is ",(0,i.jsx)(n.code,{children:"off"})," new notes are not triggered while all voices are busy. You'll have to wait till some voice is done playing, based on the ",(0,i.jsx)(n.code,{children:"shape()"})," before a note can be triggered again."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool/Name"})," -> turn voice stealing ",(0,i.jsx)(n.code,{children:"on"})," or ",(0,i.jsx)(n.code,{children:"off"})," (optional, default=on)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes spread(16 0 36)\n\nnew polySynth sine note(notes 2) time(1/16) shape(1 1/1) steal(off)\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["If you use ",(0,i.jsx)(n.code,{children:"steal(off)"})," but also set ",(0,i.jsx)(n.code,{children:"shape(off)"})," you won't be able to trigger any new notes after all voices are filled because there is no shape to stop any voice from sounding."]})}),"\n",(0,i.jsx)(n.h3,{id:"spread",children:"spread"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsx)(n.p,{children:"Use the spread function to add little delays with optional randomness between every note in a chord, resulting in the chord to sound broken up in time (spread out)."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+/Fraction(List)"})," -> the delaytime between note triggers in ms or fraction (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+/Fraction(List)"})," -> random delaytime offset added to the delaytime in ms or fraction (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [ [0 3 7 11 12] ]\n\nnew polySynth sine note(notes 2) shape(1 1/1) time(1/1) spread(150 50)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"voices",children:"voices"}),"\n",(0,i.jsx)(n.admonition,{title:"not (yet) supported",type:"warning"}),"\n",(0,i.jsx)(n.h2,{id:"polysample",children:"polySample"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury Playground only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["The polySample functions the same as the ",(0,i.jsx)(n.code,{children:"sample"})," in the sense that you choose a sample file, set a ",(0,i.jsx)(n.code,{children:"speed()"}),", add a ",(0,i.jsx)(n.code,{children:"shape()"}),", etc. For explanation of those functions see ",(0,i.jsx)(n.a,{href:"#sample",children:(0,i.jsx)(n.code,{children:"sample"})}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The extra feature of the polySample is that it allows for overlapping sounds. For example useful when generating chords. Notes provided to the ",(0,i.jsx)(n.code,{children:"note()"})," function as a 2-dimensional list will be played at the same time as a chord. By default there are 8 voices available at the same time."]}),"\n",(0,i.jsxs)(n.p,{children:["For explanation of using ",(0,i.jsx)(n.code,{children:"2D-list"}),"'s in ",(0,i.jsx)(n.code,{children:"note()"})," for polyphony see ",(0,i.jsx)(n.a,{href:"#polysynth",children:(0,i.jsx)(n.code,{children:"polySynth"})})," voice-stealing see ",(0,i.jsx)(n.a,{href:"#steal",children:(0,i.jsx)(n.code,{children:"steal"})})," under ",(0,i.jsx)(n.code,{children:"polySynth"}),". For setting voice-amount see ",(0,i.jsx)(n.a,{href:"#voices",children:(0,i.jsx)(n.code,{children:"voices"})}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set tempo 100\nset scale dorian eb\n\nlist notes shuffle(spread(24))\nnew polySample piano_e time(1/16) note(notes 1) shape(1 1/2) steal(off) tune(64)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"midi",children:"midi"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"midi"})," instrument allows you to send MIDI messages (notes, pitchbend, controlchange, programchange) to other external devices or virtual devices in your computer. The ",(0,i.jsx)(n.code,{children:""})," is the literal name as a ",(0,i.jsx)(n.code,{children:"string"})," of the device as it shows up when connected to the computer. For example this can be something like ",(0,i.jsx)(n.code,{children:'"My MIDI Device"'}),". You can also choose ",(0,i.jsx)(n.code,{children:"default"})," to set the instrument to the first midi device in the list. The name is written as a ",(0,i.jsx)(n.code,{children:"string"})," between ",(0,i.jsx)(n.code,{children:'" "'})," and is sensitive to upper and lower cases. To setup a basic midi instrument use:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new midi \n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> ",(0,i.jsx)(n.code,{children:"default"})," or MIDI Device name as a ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Functions ",(0,i.jsx)(n.code,{children:"note()"}),", ",(0,i.jsx)(n.code,{children:"time()"}),", ",(0,i.jsx)(n.code,{children:"name()"}),", ",(0,i.jsx)(n.code,{children:"group()"}),", ",(0,i.jsx)(n.code,{children:"once()"}),", ",(0,i.jsx)(n.code,{children:"play()"}),", ",(0,i.jsx)(n.code,{children:"ratchet()"}),", ",(0,i.jsx)(n.code,{children:"timediv()"}),", ",(0,i.jsx)(n.code,{children:"warp()"}),", ",(0,i.jsx)(n.code,{children:"wait()"})," all work the same for the ",(0,i.jsx)(n.code,{children:"midi"})," instrument. There are some differences when using the ",(0,i.jsx)(n.code,{children:"shape()"})," and ",(0,i.jsx)(n.code,{children:"gain()"})," functions."]}),"\n",(0,i.jsx)(n.h3,{id:"note-2",children:"note"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"note"})," function allows you to play a midinote. The function works the same as the ",(0,i.jsx)(n.code,{children:"note"})," function explained under the ",(0,i.jsx)(n.code,{children:"synth"}),". Please see ",(0,i.jsx)(n.a,{href:"#note",children:(0,i.jsx)(n.code,{children:"note()"})})," for further information."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set scale major D\n\nlist notes [0 7 5 3]\n\nnew midi default note(notes 2)\n// plays the midi notes 62 69 67 64\n"})}),"\n",(0,i.jsx)(n.h3,{id:"length",children:"length"}),"\n",(0,i.jsxs)(n.p,{children:["Replaces the ",(0,i.jsx)(n.code,{children:"shape()"})," function of ",(0,i.jsx)(n.code,{children:"synth"})," and ",(0,i.jsx)(n.code,{children:"sample"}),". Set the duration of the midi-note. This means it will send a ",(0,i.jsx)(n.code,{children:"note-off"})," message after a ",(0,i.jsx)(n.code,{children:"number"})," of milliseconds or ",(0,i.jsx)(n.code,{children:"fraction"}),". If the instrument is triggered before the end of the duration, the note-off is canceled and a new note-off is scheduled."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number/Fraction(List)"})," -> Duration time in ms or fraction"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new midi default length(1500) time(1)\n"})}),"\n",(0,i.jsx)(n.p,{children:"with fraction:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new midi default length(1/2) time(1)\n//=> duration of 1/2 (1200 ms at 100 bpm)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"duration()"}),", ",(0,i.jsx)(n.code,{children:"shape()"})]}),"\n",(0,i.jsx)(n.h3,{id:"channel",children:"channel"}),"\n",(0,i.jsxs)(n.p,{children:["Set the midi-channel output for the midi-note to be send to. ",(0,i.jsx)(n.code,{children:"out()"})," can be used as an alias to reduce some typing."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)"})," -> Channel to send the midi-note to"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new midi default note(7 2) channel(1)\nnew midi default note(0 0) channel(2)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"out()"})]}),"\n",(0,i.jsx)(n.h3,{id:"chord",children:"chord"}),"\n",(0,i.jsxs)(n.p,{children:["By default the ",(0,i.jsx)(n.code,{children:"midi"})," instrument's output is monophonic. You can turn the chord output (polyphony) on for a midi instrument with this function. This allows you to use ",(0,i.jsx)(n.code,{children:"2D-list"}),"s where the 2nd dimension is used to generate chords. Read more about chords under ",(0,i.jsx)(n.a,{href:"#polySynth",children:(0,i.jsx)(n.code,{children:"polySynth"})}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> Turn chord output on/off"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list chords [[0 4 7] [2 5 9] [5 9 0]]\n\nnew midi default note(chords 1) chord(on)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"program",children:"program"}),"\n",(0,i.jsxs)(n.p,{children:["Send program change messages to the specified midi-channel of the instrument. The channel number is based on the ",(0,i.jsx)(n.code,{children:"out()"})," function (see ",(0,i.jsx)(n.a,{href:"#channel",children:(0,i.jsx)(n.code,{children:"channel"})}),"). The default channel ",(0,i.jsx)(n.code,{children:"1"})," is used if no channel is selected. The program change value is zero-based, an integer from ",(0,i.jsx)(n.code,{children:"0"})," - ",(0,i.jsx)(n.code,{children:"127"})," and can be sequenced as a list. If no value is provided there is no program change send. The value is ",(0,i.jsx)(n.strong,{children:"only"})," send when it changes based on the previous value. This is done because some midi devices react every time a program change is received (for example cutting of notes), even if the value stays the same."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> Program change value 0-127 (default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes spread(5 0 12)\nlist changes [0 10 20]\n\nnew midi default note(notes 1) out(1) program(changes)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"pgm()"})]}),"\n",(0,i.jsx)(n.h3,{id:"change",children:"change"}),"\n",(0,i.jsxs)(n.p,{children:["Send control change (CC) messages to the midi device. This function replaces the ",(0,i.jsx)(n.code,{children:"effect()"})," function of an instrument and can have multiple calls in the same instrument, every call can be a different control number. The first argument is the ",(0,i.jsx)(n.code,{children:"number"})," for the control, the second argument is the ",(0,i.jsx)(n.code,{children:"number"})," for the controller value or a list of controller values. You can use ",(0,i.jsx)(n.code,{children:"cc()"})," as an alias to reduce typing."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> controller number between 0-127"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> controller value between 0-127"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list ccValues [10 20 30 40 50]\n\nnew midi default time(1/8) change(13 100) change(21 ccValues)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"cc()"})]}),"\n",(0,i.jsx)(n.h3,{id:"sync",children:"sync"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsx)(n.p,{children:"Turn the midiclock syncing on/off for an individual instrument and send it to the selected port/device from that instrument."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> Turn syncing on/off"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:'new midi "My Midi Device" sync(on)\nnew midi "Another Device" sync(off)\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"clock()"})]}),"\n",(0,i.jsx)(n.h2,{id:"input",children:"input"}),"\n",(0,i.jsxs)(n.p,{children:["Use the input from the soundcard (ADC, Analog Digital Converter) as the source for an instrument. The sound can be modified by all the various ",(0,i.jsx)(n.code,{children:"fx()"}),"'s. The volume can be adjusted with ",(0,i.jsx)(n.code,{children:"gain()"}),". An envelope can be applied on the sound with ",(0,i.jsx)(n.code,{children:"shape()"})," and this envelope can be triggered with ",(0,i.jsx)(n.code,{children:"time()"})," just as with the regular instruments ",(0,i.jsx)(n.code,{children:"sample"}),", ",(0,i.jsx)(n.code,{children:"synth"}),", etc. Use the words ",(0,i.jsx)(n.code,{children:"in1"}),", ",(0,i.jsx)(n.code,{children:"in2"}),", ..., ",(0,i.jsx)(n.code,{children:"inx"})," to choose the input source. Use ",(0,i.jsx)(n.code,{children:"default"})," to pick the first input in the list."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new input \n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> ",(0,i.jsx)(n.code,{children:"default"})," or the input channel number as a string ",(0,i.jsx)(n.code,{children:"inX"})]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// use the default input, in most cases channel 1\nnew input default gain(1)\n\n// use a specific channel\nnew input in3 gain(0.9) \n\n// add functions like shape, time and fx\nnew input in4 gain(0.9) time(1/16) shape(1 100) fx(reverb) fx(distort)\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"In the browser you will need to give permission to use the microphone. Afterwards you might need to refresh the page."})}),"\n",(0,i.jsx)(n.h2,{id:"osc",children:"osc"}),"\n",(0,i.jsxs)(n.p,{children:["Create an instrument that sends OSC-messages. The ",(0,i.jsx)(n.code,{children:""})," is used to set the opening address of the message to ",(0,i.jsx)(n.code,{children:"/"}),". Any arbitrary function name is used to set as second address in the osc-string. If no name is provided it will default to a unique number for every instrument instance. By adding other functions with any arbitrary name you can send a message with the address in the form of ",(0,i.jsx)(n.code,{children:"// "})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new osc \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:'list params [0.25 0.5 0.75]\nlist values [3 1]\n\nnew osc "myOSC" time(1/4) someParam(params) anotherParam(values)\n\n// sends => /myOSC/someParams 0.25\n// /myOSC/anotherParam 3\n// /myOSC/someParams 0.5\n// /myOSC/anotherParam 1\n// etc...\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The messages also support multiple arguments up to a length of 256. Multiple arguments can be provided as ",(0,i.jsx)(n.code,{children:"list"}),"s, ",(0,i.jsx)(n.code,{children:"string"}),"s, ",(0,i.jsx)(n.code,{children:"float"}),"s or ",(0,i.jsx)(n.code,{children:"int"}),"s."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list val1 [0.25 0.5 0.75]\nlist val2 [3 1]\n\nnew osc myOSC time(1/4) aMessage(0.1 val1 val2 100)\n\n// emits => /myOSC/aMessage 0.1 0.25 3 100\n// /myOSC/aMessage 0.1 0.5 1 100\n// /myOSC/aMessage 0.1 0.75 3 100\n// etc...\n"})}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:["If you want multiple ",(0,i.jsx)(n.code,{children:"osc"})," to send to the same address, you can use the same ",(0,i.jsx)(n.code,{children:""})," but use different ",(0,i.jsx)(n.code,{children:"name()"}),"s for reference in the code. Useful if you want to send messages to the same address, but with different timing-intervals."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list params [0.25 0.5 0.75]\nlist values [3 1 4]\n\nnew osc myOSC name(osc1) time(1/4) \n set osc1 someParam(params)\n\nnew osc myOSC name(osc2) time(1/2)\n set osc2 anotherParam(values)\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"receiving",children:"receiving"}),"\n",(0,i.jsxs)(n.p,{children:["You can use osc adresses as arguments for other functions by putting the address as argument in the form: ",(0,i.jsx)(n.code,{children:"/
//"}),". For example to control the ",(0,i.jsx)(n.code,{children:"gain()"})," of a ",(0,i.jsx)(n.code,{children:"sample"})," and the ",(0,i.jsx)(n.code,{children:"note()"})," value of a ",(0,i.jsx)(n.code,{children:"synth"})," enter the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample kick_909 time(1/4) gain(/myOSC/sliderValue1)\nnew synth saw note(/myOSC/sliderValue2) shape(1 100) time(1/8)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["It is possible to scale the incoming osc value to a different range by using ",(0,i.jsx)(n.code,{children:"{}"})," after the address inputting a low and high output range separated by a colon ",(0,i.jsx)(n.code,{children:":"}),". The scaling function considers an incoming range of ",(0,i.jsx)(n.code,{children:"0 - 1"})," floatingpoint values. For example to control the ",(0,i.jsx)(n.code,{children:"note()"})," and ",(0,i.jsx)(n.code,{children:"shape()"})," ranges in a ",(0,i.jsx)(n.code,{children:"synth"})," enter the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw note(/myOsc/sliderValue3{2:19} 0) shape(1 /myOsc/sliderValue4{50:500}) \n// => converts incoming slider values from 0-1 to 2-19 for note and 0-1 to 50-500 for note length\n"})}),"\n",(0,i.jsx)(n.h2,{id:"modulator",children:"modulator"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["The modulator allows you to send a modulation signal as an argument to parameters in ",(0,i.jsx)(n.code,{children:"instrument-function"}),"s of other instruments. These parameters are continuously modulated at a specific rate with a specific waveform. The modulation rate is independent from the instruments ",(0,i.jsx)(n.code,{children:"time()"})," (in comparison when using a list as an argument). It is also possible to send the modulation signal directly out to the connected soundcard on a specific DAC channel (Digital Analog Converter). This can for example be used for CV-modulations."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> modulator waveform type: ",(0,i.jsx)(n.code,{children:"sine"}),"/",(0,i.jsx)(n.code,{children:"sin"}),", ",(0,i.jsx)(n.code,{children:"sawUp"}),"/",(0,i.jsx)(n.code,{children:"phasor"}),", ",(0,i.jsx)(n.code,{children:"sawDown"}),"/",(0,i.jsx)(n.code,{children:"saw"}),", ",(0,i.jsx)(n.code,{children:"square"}),"/",(0,i.jsx)(n.code,{children:"rect"}),", ",(0,i.jsx)(n.code,{children:"triangle"}),"/",(0,i.jsx)(n.code,{children:"tri"}),", ",(0,i.jsx)(n.code,{children:"random"}),"/",(0,i.jsx)(n.code,{children:"rand"}),", ",(0,i.jsx)(n.code,{children:"randomLine"}),"/",(0,i.jsx)(n.code,{children:"randL"}),", ",(0,i.jsx)(n.code,{children:"trigger"}),"/",(0,i.jsx)(n.code,{children:"gate"})]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new modulator name() range( ) time() out()\n"})}),"\n",(0,i.jsx)(n.h3,{id:"name-1",children:"name"}),"\n",(0,i.jsxs)(n.p,{children:["Replaces the ",(0,i.jsx)(n.code,{children:"name()"})," function. Set the name for the modulator, this name can be used as argument in the functions of an instrument like ",(0,i.jsx)(n.code,{children:"synth"})," and ",(0,i.jsx)(n.code,{children:"sample"})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> the modulator ",(0,i.jsx)(n.code,{children:"name"})," for reference in other functions"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// set the name to myModulator\nnew modulator sine name(myModulator)\n\n// the synth uses the modulator in the gain function\nnew synth saw gain(myModulator)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"time-1",children:"time"}),"\n",(0,i.jsxs)(n.p,{children:["Replaces the ",(0,i.jsx)(n.code,{children:"time()"})," function. Set the modulation speed as a ",(0,i.jsx)(n.code,{children:"fraction"})," or ",(0,i.jsx)(n.code,{children:"float+"}),". The default is ",(0,i.jsx)(n.code,{children:"1/1"})," (one period per bar)."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Fraction/Float+"})," -> The time interval for one period of the modulation waveform (optional, default=1/1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Fraction/Float+"})," -> The time offset for the modulation (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// modulate a sinewave at a period of one per 4 bars\nnew modulator sine time(4/1)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"range",children:"range"}),"\n",(0,i.jsxs)(n.p,{children:["Set the modulation range between a lower and upper value with an optional exponential value. The default range is ",(0,i.jsx)(n.code,{children:"0"})," to ",(0,i.jsx)(n.code,{children:"1"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> The low output range (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> The high output range (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> The scaling exponent (optional, default=1)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// set the range from 200 to 5000, for example to modulate a filter cutoff in Hz\nnew modulator sine range(200 5000)\n\n// include the third argument to set the exponential in the scaling\nnew modulator sine range(200 5000 3)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"out",children:"out"}),"\n",(0,i.jsxs)(n.p,{children:["Set the output channel from your connected soundcard to send the modulation signal directly to. The default is 0 (no output to DAC). Currently the maximum number of channels that can be used is 16. If the modulation signal is only used for direct output it is not necessary to also ",(0,i.jsx)(n.code,{children:"name()"})," the modulator."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+"})," -> The channel number from 1 till number of outputs available, maximum of 16 (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// send a sinewave modulator signal to DAC channel 3\nnew modulator sine range(-1 1) out(3)\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsx)(n.p,{children:"Be careful when sending DC signals with large ranges to your DAC, this could damage your speakers if you choose the wrong output!"})}),"\n",(0,i.jsx)(n.h3,{id:"trigger",children:"trigger"}),"\n",(0,i.jsxs)(n.p,{children:["When using the mode ",(0,i.jsx)(n.code,{children:"trigger"}),"/",(0,i.jsx)(n.code,{children:"gate"})," the modulator functions like the sequencer in the other instruments. Meaning that you can include the ",(0,i.jsx)(n.code,{children:"play()"})," function to add a rhythm list, use ",(0,i.jsx)(n.code,{children:"ratchet()"})," to add a list of timing subdivisions with probability and use ",(0,i.jsx)(n.code,{children:"warp()"})," to add a list of time warpings."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> ",(0,i.jsx)(n.code,{children:"trigger"}),"/",(0,i.jsx)(n.code,{children:"gate"})," sets the intrument to use the stepsequencer (default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// generate a euclidean rhythm and use it in the trigger\nlist rtm euclid(16 11)\nnew modulator trigger time(1/8) play(rtm) ratchet(0.1 2)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"hold",children:"hold"}),"\n",(0,i.jsxs)(n.p,{children:["The hold function transforms the ",(0,i.jsx)(n.code,{children:"trigger"})," into a gate that goes open and closes after a certain amount of time. The time value can be either ",(0,i.jsx)(n.code,{children:"ms"})," or a ",(0,i.jsx)(n.code,{children:"fraction"}),". If the hold time is longer than the time interval between triggers the gate stays open. A hold of ",(0,i.jsx)(n.code,{children:"0"})," results in the click from the default trigger."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+"})," -> hold time in ms or fraction (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// trigger every 8th note, and leave the gate open for the length of 50ms\nnew modulator trigger time(1/8) hold(50)\n\n// trigger every 8th note, and leave the gate open for the length of a 16th\nnew modulator trigger time(1/8) hold(1/16)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"emitter",children:"emitter"}),"\n",(0,i.jsx)(n.admonition,{title:"Deprecated in Mercury4Max",type:"warning",children:(0,i.jsxs)(n.p,{children:["Use ",(0,i.jsx)(n.a,{href:"#osc",children:(0,i.jsx)(n.code,{children:"osc"})})," instead (similar as in MercuryPlayground now)"]})}),"\n",(0,i.jsxs)(n.p,{children:["Create an emitter object. Use this object to send messages to other platforms. The emitter object works similarly to the Instruments in the sense that it also has the ",(0,i.jsx)(n.code,{children:"time"}),", ",(0,i.jsx)(n.code,{children:"beat"})," and ",(0,i.jsx)(n.code,{children:"name"})," functions by default. The ",(0,i.jsx)(n.code,{children:"time"})," determines the time-interval at which messages are send. The ",(0,i.jsx)(n.code,{children:"beat"})," can turn send moments on or off."]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>d});var i=s(6540);const t={},r=i.createContext(t);function l(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[283],{9030:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>a});var i=s(4848),t=s(8453);const r={sidebar_position:3},l="Instrument Functions",d={id:"reference/instruments",title:"Instrument Functions",description:"An instrument is the main sound or sequencing source in Mercury. Instruments can produce sounds natively in Mercury by means of synthesis or sampling, but can also send out MIDI or OSC-messages to trigger external devices or plugins, and are able to take input from for example your microphone. The following functions apply to all the types of instruments such as synth, sample, loop, polySynth, polySample, midi, osc and input.",source:"@site/docs/reference/instruments.md",sourceDirName:"reference",slug:"/reference/instruments",permalink:"/mercury/docs/reference/instruments",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Global Settings",permalink:"/mercury/docs/reference/global"},next:{title:"Instrument Effects",permalink:"/mercury/docs/reference/effects"}},o={},a=[{value:"All Instruments",id:"all-instruments",level:2},{value:"name",id:"name",level:3},{value:"group",id:"group",level:3},{value:"time",id:"time",level:3},{value:"once",id:"once",level:3},{value:"play",id:"play",level:3},{value:"shape",id:"shape",level:3},{value:"gain",id:"gain",level:3},{value:"pan",id:"pan",level:3},{value:"effect",id:"effect",level:3},{value:"ratchet",id:"ratchet",level:3},{value:"timediv",id:"timediv",level:3},{value:"warp",id:"warp",level:3},{value:"wait",id:"wait",level:3},{value:"synth",id:"synth",level:2},{value:"note",id:"note",level:3},{value:"slide",id:"slide",level:3},{value:"super",id:"super",level:3},{value:"wave2",id:"wave2",level:3},{value:"sub",id:"sub",level:3},{value:"noise",id:"noise",level:3},{value:"sample",id:"sample",level:2},{value:"speed",id:"speed",level:3},{value:"start",id:"start",level:3},{value:"note",id:"note-1",level:3},{value:"tune",id:"tune",level:3},{value:"stretch",id:"stretch",level:3},{value:"loop",id:"loop",level:2},{value:"polySynth",id:"polysynth",level:2},{value:"steal",id:"steal",level:3},{value:"spread",id:"spread",level:3},{value:"voices",id:"voices",level:3},{value:"polySample",id:"polysample",level:2},{value:"midi",id:"midi",level:2},{value:"note",id:"note-2",level:3},{value:"length",id:"length",level:3},{value:"channel",id:"channel",level:3},{value:"chord",id:"chord",level:3},{value:"program",id:"program",level:3},{value:"change",id:"change",level:3},{value:"sync",id:"sync",level:3},{value:"input",id:"input",level:2},{value:"osc",id:"osc",level:2},{value:"receiving",id:"receiving",level:3},{value:"modulator",id:"modulator",level:2},{value:"name",id:"name-1",level:3},{value:"time",id:"time-1",level:3},{value:"range",id:"range",level:3},{value:"out",id:"out",level:3},{value:"trigger",id:"trigger",level:3},{value:"hold",id:"hold",level:3},{value:"emitter",id:"emitter",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"instrument-functions",children:"Instrument Functions"}),"\n",(0,i.jsxs)(n.p,{children:["An instrument is the main sound or sequencing source in Mercury. Instruments can produce sounds natively in Mercury by means of synthesis or sampling, but can also send out MIDI or OSC-messages to trigger external devices or plugins, and are able to take input from for example your microphone. The following functions apply to all the types of instruments such as ",(0,i.jsx)(n.code,{children:"synth"}),", ",(0,i.jsx)(n.code,{children:"sample"}),", ",(0,i.jsx)(n.code,{children:"loop"}),", ",(0,i.jsx)(n.code,{children:"polySynth"}),", ",(0,i.jsx)(n.code,{children:"polySample"}),", ",(0,i.jsx)(n.code,{children:"midi"}),", ",(0,i.jsx)(n.code,{children:"osc"})," and ",(0,i.jsx)(n.code,{children:"input"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["For detailed explanation of the syntax see: ",(0,i.jsx)(n.a,{href:"syntax",children:"Syntax"})," and ",(0,i.jsx)(n.a,{href:"actions#list",children:(0,i.jsx)(n.code,{children:"list"})})," under ",(0,i.jsx)(n.a,{href:"actions",children:"Actions"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Available instruments:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#synth",children:(0,i.jsx)(n.code,{children:"synth"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#sample",children:(0,i.jsx)(n.code,{children:"sample"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#loop",children:(0,i.jsx)(n.code,{children:"loop"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#polysynth",children:(0,i.jsx)(n.code,{children:"polySynth"})})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#polysample",children:(0,i.jsx)(n.code,{children:"polySample"})})," ",(0,i.jsx)(n.em,{children:"MercuryPlayground only"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#input",children:(0,i.jsx)(n.code,{children:"input"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#midi",children:(0,i.jsx)(n.code,{children:"midi"})})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#osc",children:(0,i.jsx)(n.code,{children:"osc"})})}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"#modulator",children:(0,i.jsx)(n.code,{children:"modulator"})})," ",(0,i.jsx)(n.em,{children:"Mercury4Max only"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"all-instruments",children:"All Instruments"}),"\n",(0,i.jsx)(n.p,{children:"The following functions apply to all instruments."}),"\n",(0,i.jsx)(n.h3,{id:"name",children:"name"}),"\n",(0,i.jsxs)(n.p,{children:["Set the ",(0,i.jsx)(n.code,{children:"name"})," for this instrument. This can be any string of 3 or more characters. The ",(0,i.jsx)(n.code,{children:"name"})," is used as a reference to the instrument when the ",(0,i.jsx)(n.code,{children:"set"})," action is used to call functions for a specific instrument. The name is also used to generate an OSC-message that is send out from Mercury to trigger external things in sync with the instrument."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> an instrument name (default=random character string)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw name(bob)\n set bob gain(0.8) time(1/16)\n\nnew sample kick_909 name(alice)\n set alice gain(1.2) time(1/4)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="expected osc messages:"',children:"/bob 1\n/alice 1\n"})}),"\n",(0,i.jsx)(n.h3,{id:"group",children:"group"}),"\n",(0,i.jsx)(n.admonition,{title:"Currently (and hopefully temporarily) not working",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Set one or more ",(0,i.jsx)(n.code,{children:"group-name"}),"(s) for this instrument. This can be any string of 3 or more characters. With the ",(0,i.jsx)(n.code,{children:"group"})," you can apply a line of code to multiple instruments at the same time. The ",(0,i.jsx)(n.code,{children:"group"})," is ",(0,i.jsx)(n.strong,{children:"not"})," like a mixing bus, so using for example ",(0,i.jsx)(n.code,{children:"gain()"})," will overwrite the ",(0,i.jsx)(n.code,{children:"gain()"})," function on the line of the instrument. If you use the ",(0,i.jsx)(n.code,{children:"name()"})," function you have to make sure the name is set before the group is applied otherwise the reference won't work correctly."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> a group name used for multiple instruments (default=none)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// the hihat is not included in the group so will \n// not get the gain(0.8) and fx(reverb 0.9 11)\nnew sample hat_909 time(1/8)\n\nnew sample kick_909 group(drums) time(1/4)\nnew sample snare_909 group(drums) time(1/2 1/4)\n set drums gain(0.8) fx(reverb 0.9 11)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"time",children:"time"}),"\n",(0,i.jsxs)(n.p,{children:["Set the time interval at which the internal clock for an instrument runs and the synth or sample is triggered. This can be an ",(0,i.jsx)(n.code,{children:"integer"}),", ",(0,i.jsx)(n.code,{children:"float"})," or ",(0,i.jsx)(n.code,{children:"fraction"}),". ",(0,i.jsx)(n.code,{children:"1"})," = 1measure, ",(0,i.jsx)(n.code,{children:"1/4"})," = quarter-note, ",(0,i.jsx)(n.code,{children:"1/12"})," = 8th triplet, ",(0,i.jsx)(n.code,{children:"3/16"})," = 3-16th notes, etc. Similarly you can set an offset in the timing. The ",(0,i.jsx)(n.code,{children:"time()"})," will start an internal counter for this instrument, incremented every time it is triggerd (based on the ",(0,i.jsx)(n.code,{children:"play()"})," function). The counter is used as an index to lookup values from other ",(0,i.jsx)(n.code,{children:"list"})," provided as argument in functions for this instrument."]}),"\n",(0,i.jsxs)(n.p,{children:["Setting the first argument to ",(0,i.jsx)(n.code,{children:"free"})," allows the use of external triggering via OSC-messages. The trigger reacts when a value greater than ",(0,i.jsx)(n.code,{children:"0"})," is received. When another instrument in the code has a ",(0,i.jsx)(n.code,{children:"name()"}),", that name can be used as OSC-message trigger for another instrument to synchronize them."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number/Fraction"})," -> the timing fraction or ",(0,i.jsx)(n.code,{children:"free"})," (default=1/4)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number/Fraction"})," -> timing offset or osc-message when ",(0,i.jsx)(n.code,{children:"free"})," (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set tempo 130\n\nnew sample kick_909 time(1/4)\nnew synth saw time(1/2 3/16)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="external trigger"',children:"new sample snare_dnb time(free '/snareOSC/amplitude')\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="triggering from other instrument"',children:"new sample kick_909 time(3/16) name(kick)\nnew synth saw time(free '/kick')\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.mdxAdmonitionTitle,{children:["You can not (yet) use ",(0,i.jsx)(n.code,{children:"list"}),"s to modulate the ",(0,i.jsx)(n.code,{children:"time()"})," parameters"]})}),"\n",(0,i.jsx)(n.h3,{id:"once",children:"once"}),"\n",(0,i.jsxs)(n.p,{children:["With once you can disable the looping mode of an instrument being triggered for every ",(0,i.jsx)(n.code,{children:"time()"})," interval. When the code is evaluated the instrument will only trigger ",(0,i.jsx)(n.code,{children:"1"})," time and stop after that. It will always trigger once every time the code is evaluated, so if you like the instrument to not play anymore after that you can either set ",(0,i.jsx)(n.code,{children:"gain(0)"})," or comment ",(0,i.jsx)(n.code,{children:"//"})," it."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> enable triggering the instrument once (default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample gong_lo time(2/1) once(on)\n// a sample for reference in time\nnew sample tabla_hi time(1/4)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="trigger once on a bar multiple of 2 with offset of 7/8"',children:"new sample harp_down once(on) time(2/1 7/8)\n// a sample for reference in time\nnew sample hat_808 time(1/4)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"play",children:"play"}),"\n",(0,i.jsxs)(n.p,{children:["Provide the play function with a ",(0,i.jsx)(n.code,{children:"list"})," containing 1's and 0's. For every time interval defined by the ",(0,i.jsx)(n.code,{children:"time()"})," function, the next value in the list is checked. A one results in a trigger of the instrument and an increment of the internal counter. A zero results in no trigger. An optional second argument resets the internal instrument index after a certain amount of time in ",(0,i.jsx)(n.code,{children:"fraction"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> a rhythmic pattern of ones and zeroes to play (default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number/Fraction"})," -> reset internal time() counter after specified time (optional, default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list hatBeat [1 0 0 1 0 1 1 0 0]\n\nnew sample hat_909 time(1/16) play(hatBeat)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alternatively you can use floating-point values in a list which result in a probability that the instrument will play. Here 0 means 0% chance, 1=100% and 0.5 is 50%. Inspired by Nick Collins paper on ",(0,i.jsx)(n.a,{href:"https://www.dmu.ac.uk/documents/technology-documents/research/mtirc/nowalls/mww-collins.pdf",children:"Algorithmic Composition Methods for Breakbeat Science"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="using probabilities"',children:"list hatBeat [1 0.5 0.2 0.8 0.5]\n\nnew sample hat_909 time(1/16) play(hatBeat 2)\nnew sample kick_909 time(1/4)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"beat()"})]}),"\n",(0,i.jsx)(n.h3,{id:"shape",children:"shape"}),"\n",(0,i.jsxs)(n.p,{children:["Set the shape generator of a sound (in synthesis also called envelope). The shape is the trajectory of volume over time on the sound (eg. fade-in, fade-out). Various modes are possible depending on the amount of arguments. The attack time is the fade-in for the sound, the release is the fade-out for the sound, both in milliseconds or ",(0,i.jsx)(n.code,{children:"fraction"}),". The sustain time holds the sound at a static volume for a while. If the sound is triggered before the end of the envelope, the envelope is canceled, faded to 0 in 1ms and retriggered (in the case of monophonic instruments). You can specify the times in absolute values using integer/floating points (in ms) or in relative values using beat fractions."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)/Fraction(List)"})," -> Attack time in ms or fraction (optional, default=2)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)/Fraction(List)"})," -> Decay time in ms or fraction (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)/Fraction(List)"})," -> Release time in ms or fraction"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw shape(1500)\n// default attack of 2 ms, sustain of 0 ms and a release of 1500 ms\n\nnew synth saw shape(1000 250)\n// attack of 1000 ms, default sustain of 0 ms and a release of 250 ms\n\nnew synth saw shape(10 500 50)\n// attack of 10 ms, sustain of 500 ms and a release of 50 ms\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="shape with fractions"',children:"set tempo 100\n\nnew synth saw shape(1/2)\n// default release of 1/2 (about 250 ms at 120 bpm)\n\nnew synth saw shape(1/4 1/32)\n\nnew synth saw shape(1/64 1/8 1/16)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="modulate duration with a list"',children:"list durs [50 200 500]\nnew synth saw shape(durs)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"length()"}),", ",(0,i.jsx)(n.code,{children:"envelope()"})]}),"\n",(0,i.jsx)(n.h3,{id:"gain",children:"gain"}),"\n",(0,i.jsxs)(n.p,{children:["Set the volume for the instrument in floating-point amplitude. Where ",(0,i.jsx)(n.code,{children:"1"})," is the default amplitude of the sample or synth, ",(0,i.jsx)(n.code,{children:"0.5"})," is the half louder (-6 dB) and ",(0,i.jsx)(n.code,{children:"2"})," is twice as loud (+ 6dB). An optional second argument sets the sliding time to go to the next gain value in milliseconds or ",(0,i.jsx)(n.code,{children:"fraction"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> the (start) volume of the instrument (default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)"})," -> the sliding time in fraction or ms (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> mute the instrument but still use named sends (default=0) ",(0,i.jsx)(n.em,{children:"Mercury4Max only"})]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample snare_909 gain(0.8)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="modulate gain with a list"',children:"list gains [0 0.5 0.2 0.9]\nnew synth saw gain(gains 500) time(1/1)\n// ramps between gain values over 500ms every trigger 1/1\n"})}),"\n",(0,i.jsx)(n.admonition,{title:"Important for midi",type:"info",children:(0,i.jsxs)(n.p,{children:["When using the ",(0,i.jsx)(n.code,{children:"midi"})," instrument the gain will be multiplied by ",(0,i.jsx)(n.code,{children:"127"})," to create a velocity message. ",(0,i.jsx)(n.code,{children:"gain(0.5)"})," therefore maps to ",(0,i.jsx)(n.code,{children:"63"})," and ",(0,i.jsx)(n.code,{children:"gain(1)"})," to ",(0,i.jsx)(n.code,{children:"127"})]})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"amp()"}),", ",(0,i.jsx)(n.code,{children:"volume()"}),", ",(0,i.jsx)(n.code,{children:"velocity()"})]}),"\n",(0,i.jsx)(n.h3,{id:"pan",children:"pan"}),"\n",(0,i.jsxs)(n.p,{children:["Set the panning position in floating-point for the sound in the stereo-image. ",(0,i.jsx)(n.code,{children:"-1"})," is 100% left channel, ",(0,i.jsx)(n.code,{children:"0"})," is center (both speakers), ",(0,i.jsx)(n.code,{children:"1"})," is 100% right channel. Higher or lower values wrap between ",(0,i.jsx)(n.code,{children:"-1"})," and ",(0,i.jsx)(n.code,{children:"1"}),". Provide pan with the ",(0,i.jsx)(n.code,{children:"random"})," argument to get a new random panning value every trigger of the instrument."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float"})," -> the panning position between -1 and 1 (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw pan(-1)\nnew synth square pan(1)\n// two synths hard-panned left and right\n\nnew sample clap_909 pan(random) time(1/8)\n// random panning every trigger\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="modulate panning with a list',children:"list positions [-1 0 1 0 1 -1 -1]\nnew sample hat_808 time(1/16) pan(positions)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"panning()"})]}),"\n",(0,i.jsx)(n.admonition,{title:"Multi-speaker output is not (yet) supported",type:"note"}),"\n",(0,i.jsx)(n.h3,{id:"effect",children:"effect"}),"\n",(0,i.jsxs)(n.p,{children:["Add an effect to the sound of the instrument to manipulate the sounds timbre in different ways. The first argument is always the ",(0,i.jsx)(n.code,{children:"effect-name"}),". The arguments that follow depend on the selected effect. ",(0,i.jsx)(n.code,{children:"fx()"})," can be used as an alias to reduce some typing. See ",(0,i.jsx)(n.a,{href:"/mercury/docs/reference/effects",children:"Effects"})," for more details and an up-to-date list of all the available effects for both ",(0,i.jsx)(n.em,{children:"Mercury4Max"})," and the ",(0,i.jsx)(n.em,{children:"MercuryPlayground"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> the effect name"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value+/List+"})," -> values or lists depending on effectname arguments order (optional)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth square effect(distort) effect(reverb)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"fx()"}),", "]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"static vs. dynamic effect-chains"})}),"\n",(0,i.jsxs)(n.p,{children:["The Mercury4Max version has a static effects-chain. This means the order in the effects under the hood is fixed. The order is documented under ",(0,i.jsx)(n.a,{href:"/mercury/docs/reference/effects",children:"Effects"}),". Because of this there is:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"No option to change the order of effects with the code"}),"\n",(0,i.jsx)(n.li,{children:"No option to use effects multiple times in one instrument"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="static fx-chain"',children:"new synth saw fx(reverb) fx(filter low 2000) fx(distort) fx(filter low 300)\n// filter and distortion are fixed before reverb in the chain, the order of \n// the code doesn't matter. There is only one filter in the chain, the first \n// filter is therefore overwritten by the other\n"})}),"\n",(0,i.jsx)(n.p,{children:"The MercuryPlayground version has a dynamic effects-chain. This means the order in the effects is determined by how you type the code. Because of this there is:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Decide the order of effects by the order of the code you type"}),"\n",(0,i.jsx)(n.li,{children:"Use effects multiple times on one instrument"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="dynamic fx-chain"',children:"new synth saw fx(reverb) fx(filter low 2000) fx(distort) fx(filter low 300)\n// the reverb will be filtered, then distorted and then filtered again\n// the resulting sound is filtered twice\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["There are differences in sound between the ",(0,i.jsx)(n.em,{children:"Mercury4Max"})," and ",(0,i.jsx)(n.em,{children:"MercuryPlayground"})," versions. Parameters may need some tweaking when you port from one environment to the other."]})}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["Not all effects from ",(0,i.jsx)(n.em,{children:"Mercury4Max"})," are available in the ",(0,i.jsx)(n.em,{children:"MercuryPlayground"})," because some are in the process of being ported, and some are sadly not as easy to implement with Web Audio."]})}),"\n",(0,i.jsx)(n.h3,{id:"ratchet",children:"ratchet"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsx)(n.p,{children:"Add a ratcheting effect (doubling/tripling/quadrupling of hits) with a probability. A technique that introduces some variety in rhythm that originated with electronic music from groups such as Tangerine Dream. The first argument sets the probability a note will be repeated. The second argument sets the amount of repetitions within the time, effectively doubling, tripling or more."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+"})," -> probability of ratchet happening (default=0.1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+/IntList+"})," -> amount of repetitions (default=2)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample hat_909 time(1/8) ratchet(0.3 2)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="using a ratchet list"',children:"list rtc [2 3 2 4 8]\nnew sample hat_909 time(1/4) ratchet(1 rtc)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"timediv",children:"timediv"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercuryplayground only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Add subdivisions to ",(0,i.jsx)(n.code,{children:"time()"}),". Documentation to do..."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list div [1 2 3 4]\nnew sample hat_808 time(1/4) timediv(div)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"warp",children:"warp"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Warp ",(0,i.jsx)(n.code,{children:"time()"})," in a more complex way. Documentation to do..."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list warp [1 2 3 4]\nnew sample hat_808 time(1/1) warp(warp)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"wait",children:"wait"}),"\n",(0,i.jsx)(n.admonition,{title:"MercuryPlayground only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["This function is similar to the offset parameter in the ",(0,i.jsx)(n.code,{children:"time()"})," function except that it allows you to set an additional waiting time (or delay) for an instrument in milliseconds. This function is useful to align/synchronize instruments with external peripherals such as sending MIDI notes or OSC messages."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+/Fraction"})," -> specify the waiting time in milliseconds or fraction (default=null)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample kick_909 time(1/4)\n// the hihat plays 100ms later than the kick\nnew sample hat_909 time(1/4) wait(100)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"synth",children:"synth"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"synth"})," and ",(0,i.jsx)(n.code,{children:"polySynth"})," instruments allow you to play synthesized sounds using a single cycle waveform. These waveforms are loaded in memory and can be accessed by their filename (without the extension). The default waveforms are ",(0,i.jsx)(n.code,{children:"sine"}),", ",(0,i.jsx)(n.code,{children:"triangle"}),", ",(0,i.jsx)(n.code,{children:"square"})," and ",(0,i.jsx)(n.code,{children:"saw"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth \n"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["The waveforms in MercuryPlayground are currently not created with single-cycle soundfiles but via WebAudio's ",(0,i.jsx)(n.code,{children:"PeriodicWave"}),", constructing a waveform from a Fourier Series."]})}),"\n",(0,i.jsx)(n.h3,{id:"note",children:"note"}),"\n",(0,i.jsx)(n.p,{children:"Set the pitch for the instrument to play a note in a melody or chord. The note is specified as a 2-dimensional coordinate system, where the first argument is the semitone offset (positive or negative) and the second argument is the octave offset (positive or negative)."}),"\n",(0,i.jsxs)(n.p,{children:["The origin of the system, ",(0,i.jsx)(n.code,{children:"note(0 0)"}),", corresponds by default with midi-pitch ",(0,i.jsx)(n.code,{children:"36"})," or ",(0,i.jsx)(n.code,{children:"C2"}),". Depending on the ",(0,i.jsx)(n.code,{children:"set scale"})," the coordinate system will shift and result in a different pitch for the origin. A ",(0,i.jsx)(n.code,{children:"note()"})," should therefore not be taken as an absolute value, but rather a relative direction where the melody is going to in relation to the scale and root."]}),"\n",(0,i.jsxs)(n.p,{children:["Detuning/pitchbending can be done by providing a ",(0,i.jsx)(n.code,{children:"float"})," note number. The value behind the decimal point is the amount of detuning from one semitone to the next. For example ",(0,i.jsx)(n.code,{children:"7.5"})," results in ",(0,i.jsx)(n.code,{children:"7"})," semitones (and mapped to ",(0,i.jsx)(n.code,{children:"scale"})," if used) and then a ",(0,i.jsx)(n.code,{children:"0.5"})," semitone is added (= 50 cents). Detuning is applied after mapping the integer semitone to a scale."]}),"\n",(0,i.jsxs)(n.p,{children:["The mapping of the notes is as follows with ",(0,i.jsx)(n.code,{children:"set scale chromatic c"})," (default)"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:(0,i.jsx)(n.code,{children:"note(x y)"})}),(0,i.jsx)(n.th,{children:"..."}),(0,i.jsx)(n.th,{children:"-1"}),(0,i.jsx)(n.th,{children:"0"}),(0,i.jsx)(n.th,{children:"1"}),(0,i.jsx)(n.th,{children:"2"}),(0,i.jsx)(n.th,{children:"3"}),(0,i.jsx)(n.th,{children:"4"}),(0,i.jsx)(n.th,{children:"..."}),(0,i.jsx)(n.th,{children:"9"}),(0,i.jsx)(n.th,{children:"10"}),(0,i.jsx)(n.th,{children:"11"}),(0,i.jsx)(n.th,{children:"12"}),(0,i.jsx)(n.th,{children:"13"}),(0,i.jsx)(n.th,{children:"..."})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"3"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"72"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"84"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"2"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"60"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"72"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"1"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"48"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"60"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"0"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"36"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"48"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"-1"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"B#"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"24"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"D"}),(0,i.jsx)(n.td,{children:"D#"}),(0,i.jsx)(n.td,{children:"E"}),(0,i.jsx)(n.td,{children:"..."}),(0,i.jsx)(n.td,{children:"A"}),(0,i.jsx)(n.td,{children:"A#"}),(0,i.jsx)(n.td,{children:"B"}),(0,i.jsxs)(n.td,{children:["C ",(0,i.jsx)(n.code,{children:"36"})]}),(0,i.jsx)(n.td,{children:"C#"}),(0,i.jsx)(n.td,{children:"..."})]})]})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> positive or negative semitone note value or list, x-coordinate (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> positive or negative octave value or list, y-coordinate (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set scale major d\nnew synth sine note(2 2)\n//=> results in midi-note 64 > F4\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="play a melody with lists"',children:"set scale minor A\n\nlist mel [0 5 7 3 2 -2 0]\nlist oct [0 1 2]\nnew synth sine note(mel oct) time(1/16)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"slide",children:"slide"}),"\n",(0,i.jsxs)(n.p,{children:["A portamento/sliding/gliding effect. This will make the synthesizers' oscillator slowly slide from the current frequency to the new played one over a defined period of ",(0,i.jsx)(n.code,{children:"number"})," in milliseconds or ",(0,i.jsx)(n.code,{children:"fraction"}),". The sliding is logarithmically (meaning it will slide from midi-note to midi-note linearly, but after conversion to frequency slides logarithmically. This sounds slightly different from sliding linearly between frequencies)."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+/Fraction(List)"})," -> sliding time in milliseconds or fraction (default=50)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 7 3]\nnew synth saw note(notes 1) time(1/2) slide(1/8)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"glide()"}),", ",(0,i.jsx)(n.code,{children:"portamento()"})]}),"\n",(0,i.jsx)(n.h3,{id:"super",children:"super"}),"\n",(0,i.jsxs)(n.p,{children:["Add multiple oscillators in unison with a detuning factor to create a ",(0,i.jsx)(n.em,{children:"SuperSaw"})," effect. One oscillator will always be the base frequency of the ",(0,i.jsx)(n.code,{children:"note()"}),", the others are tuned above and below in incremental steps based on the detuning factor. The first argument sets the amount of oscillators (minum of 1, default=1), the second argument sets the detuning factor in semi-tones, the third optional argument sets the oscillator type for the odd numbered oscillators."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> number of oscillators (default=1, maximum=64)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> detuning factor in semi-tone, 12=octave"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> the name of the odd numbered oscillators (optional, default=main oscillator) ",(0,i.jsx)(n.em,{children:"Mercury4Max only"})]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw super(5 0.031415)\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw super(11 0.0618 square) \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="modulate detuning with a list"',children:"list voices [3 5 9 21]\nlist detune [0.1 0.5 0.9 12.01 0.3]\n\nnew synth saw time(1/4) shape(-1) super(voices detune)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"unison()"})]}),"\n",(0,i.jsx)(n.h3,{id:"wave2",children:"wave2"}),"\n",(0,i.jsx)(n.admonition,{title:"REMOVED",type:"warning",children:(0,i.jsxs)(n.p,{children:["use ",(0,i.jsx)(n.a,{href:"#super",children:"super()"})," instead"]})}),"\n",(0,i.jsx)(n.h3,{id:"sub",children:"sub"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Add a second sinewave oscillator to the synth. The oscillator is tuned one octave lower than the ",(0,i.jsx)(n.code,{children:"note()"})," played to create a sub frequency."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> amplitude for the sub oscillator (default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth sine note(5 1) sub(0.8)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"noise",children:"noise"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["Add a noise oscillator to the synth sound. The first argument is the ",(0,i.jsx)(n.em,{children:"amplitude"})," (gain), the second argument is the ",(0,i.jsx)(n.em,{children:'"color"'})," of the noise between 0 and 1 (1 = white noise, lower values give a more darker/downsampled noise sound). When the modulation mode is turned on (with 1) the noise is modulated by the source of the oscillator (or oscillators if ",(0,i.jsx)(n.code,{children:"super()"})," and ",(0,i.jsx)(n.code,{children:"sub()"})," are used)."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> amplitude of the noise (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> color of the noise 0-1 (default=0.8)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool(List)"})," -> modulation mode (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw note(0 1) noise(0.3 0.8 1)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"sample",children:"sample"}),"\n",(0,i.jsx)(n.p,{children:'The sample instrument allows you to play sound-recordings and loops. These so called "samples" are loaded in memory and can be accessed by their filename (without the extension).'}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample \n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/mercury/docs/usage/mercury4max-overview#sounds",children:"Load sounds in Mercury4Max"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/mercury/docs/usage/playground-overview#add-sounds",children:"Load sounds in MercuryPlayground"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/mercury/docs/usage/sounds",children:"Full list of all the included sounds"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"speed",children:"speed"}),"\n",(0,i.jsxs)(n.p,{children:["Set the playback speed for the sample, where 1 = original speed, 0.5 = half the speed and 2 = twice as fast. Adjusting the playback speed will change the pitch of the sample. A negative value will play the sample backwards starting at the end (or at the ",(0,i.jsx)(n.code,{children:"start()"})," position)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float(List)"})," -> playback speed (default=1)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample choir time(5) speed(0.5)\nnew sample choir time(5) speed(-0.3)\n\nset all fx(reverb 2 17)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"rate()"})]}),"\n",(0,i.jsx)(n.admonition,{title:"Reversed speed is not supported (yet) in the MercuryPlayground",type:"warning"}),"\n",(0,i.jsx)(n.h3,{id:"start",children:"start"}),"\n",(0,i.jsxs)(n.p,{children:["Set the start position (the offset position of the playback) of the sample. 0 = start at the beginning, 0.5 = start midway in the sample. With long decaying samples the offset is very useful if playing the sounds backwards when using for example ",(0,i.jsx)(n.code,{children:"speed(-1)"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Float+(List)"})," -> the playback position between 0 and 1 (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list positions randomFloat(8 0 0.5)\n\nnew sample choir time(1/16) start(positions)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"offset()"})]}),"\n",(0,i.jsx)(n.h3,{id:"note-1",children:"note"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"note"})," function allows you to tune the sample to a specific pitch. This is easier than trying to set the playback speed with the ",(0,i.jsx)(n.code,{children:"speed()"})," function if you need to pitch the sample for melodic content. The function works the same as the ",(0,i.jsx)(n.code,{children:"note"})," function explained under the ",(0,i.jsx)(n.code,{children:"synth"}),". Please see ",(0,i.jsx)(n.a,{href:"#note",children:(0,i.jsx)(n.code,{children:"note()"})})," for further information."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 7 5 3]\nnew sample xylo_c4 time(1/8) note(notes 1)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"tune",children:"tune"}),"\n",(0,i.jsxs)(n.p,{children:["Set the base note midi value for the sample to determine how the ",(0,i.jsx)(n.code,{children:"note()"})," function changes the playback speed in relation to this note. For example if your sample was recorded as an ",(0,i.jsx)(n.code,{children:"a4"})," then you will set tune to ",(0,i.jsx)(n.code,{children:"69"})," (midi value of ",(0,i.jsx)(n.code,{children:"a4"}),"). ",(0,i.jsx)(n.code,{children:"note(0 2)"})," is the same as the ",(0,i.jsx)(n.code,{children:"tune()"})," value in the case of a scale set to have ",(0,i.jsx)(n.code,{children:"c"})," as the root."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+"})," -> midi pitch as base for tuning (optional, default=60)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set scale minor c\n\nlist notes [0 7 5 3]\n// tune the kalimba to a3\nnew sample kalimba_a time(1/4) note(notes 2) tune(57)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"stretch",children:"stretch"}),"\n",(0,i.jsxs)(n.p,{children:["Stretch the entire sample to the length of a full bar. Useful for when working with beats that have to be looped. Stretching is the default when working with the ",(0,i.jsx)(n.code,{children:"loop"})," instrument. This is the same as a ",(0,i.jsx)(n.code,{children:"new sample stretch(1)"}),". Optionally you can turn timestretching on with a second argument to preserve the original pitch of the sample. A third optional argument changes the mode of the stretching, choose from: basic, monophonic, rhythmic, general, extremestretch, efficient. The default is set to ",(0,i.jsx)(n.code,{children:"efficient"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> turn stretch to full bar on/off (default=0 for sample default=1 for loop)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> turn timestretching on when stretching to full bar, preservering the original pitch (default = 0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> adjust the stretching mode (default=efficient)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample chimes stretch(1 1 general) speed(-1)\n"})}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:["If your ",(0,i.jsx)(n.code,{children:"loop"})," is longer than ",(0,i.jsx)(n.code,{children:"1"})," bar use ",(0,i.jsx)(n.code,{children:"speed()"})," to decrease the playback speed by ",(0,i.jsx)(n.code,{children:"1 / n-bars"}),". Set ",(0,i.jsx)(n.code,{children:"time()"})," to the bar amounts."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new loop loopOfFourBars time(4/1) speed(0.25)\n"})})]}),"\n",(0,i.jsx)(n.admonition,{title:"Timestretching is only supported in Mercury4Max",type:"warning"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Stretching modes explained"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"basic"})," : best option for real-time performance"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"monophonic"})," : best option for any monophonic source without ambience"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"rhythmic"})," : best option for drums and percussion when transient preservation is critical"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"general"})," : balances spectral integrity with transient preservaton"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"extremestretch"})," : optimized for stretching (slowing down) material, limited to a stretch factor between 0.5 and 4"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"effcient"})," : best option when CPU efficiency is critical"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"loop",children:"loop"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"loop"})," instrument is basically the ",(0,i.jsx)(n.code,{children:"sample"})," instrument but with ",(0,i.jsx)(n.code,{children:"stretch(1)"})," enabled by default, making all the loaded samples stretch to 1 full bar. For all available ",(0,i.jsx)(n.code,{children:"instrument-functions"})," of ",(0,i.jsx)(n.code,{children:"loop"})," see ",(0,i.jsx)(n.a,{href:"#sample",children:(0,i.jsx)(n.code,{children:"sample"})})," above."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new loop \n"})}),"\n",(0,i.jsx)(n.h2,{id:"polysynth",children:"polySynth"}),"\n",(0,i.jsxs)(n.p,{children:["The polySynth functions the same as the ",(0,i.jsx)(n.code,{children:"synth"})," instrument in the sense that you choose a waveform, apply a ",(0,i.jsx)(n.code,{children:"note()"}),", add a ",(0,i.jsx)(n.code,{children:"shape()"}),", etc. For explanation of those functions see ",(0,i.jsx)(n.a,{href:"#synth",children:(0,i.jsx)(n.code,{children:"synth"})}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The extra feature of the polySynth is that it allows for overlapping notes to generate chords. Notes provided to the ",(0,i.jsx)(n.code,{children:"note()"})," function as a 2-dimensional list will be played on the same time as a chord. By default there are 8 voices available at the same time. Voice stealing is ",(0,i.jsx)(n.code,{children:"on"}),' by default meaning that if a new note is played while all voices are busy the "oldest" triggered note will be removed.']}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new polySynth note([ [chord1] [chord2] ... [chord-n] ])\n"})}),"\n",(0,i.jsx)(n.p,{children:"You can think of a 2D list like so:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list chords [ [ 0 3 7 ] [ 2 5 9 ] [ 3 6 10 13 ] ]\n\nlist chords [ 0 2 3 ]\n 3 5 6 \n 7 9 10\n 13 \n"})}),"\n",(0,i.jsxs)(n.p,{children:["So the list ",(0,i.jsx)(n.code,{children:"chords"})," has ",(0,i.jsx)(n.code,{children:"3"}),' "items", and those ',(0,i.jsx)(n.code,{children:"3"})," items again contain a ",(0,i.jsx)(n.code,{children:"list"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list chords [ [ 0 3 7 ] [ 2 5 9 ] [ 3 6 10 13 ] ]\n\nnew polySynth sine note(chord 2) time(1/2) shape(1 1/4) \n"})}),"\n",(0,i.jsx)(n.h3,{id:"steal",children:"steal"}),"\n",(0,i.jsxs)(n.p,{children:["With steal you can choose the behaviour of what happens when new notes are triggered while all voices are in use. When steal is ",(0,i.jsx)(n.code,{children:"on"})," (the default) every new note will be triggered and old notes will be overwritten by the new ones. If steal is ",(0,i.jsx)(n.code,{children:"off"})," new notes are not triggered while all voices are busy. You'll have to wait till some voice is done playing, based on the ",(0,i.jsx)(n.code,{children:"shape()"})," before a note can be triggered again."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool/Name"})," -> turn voice stealing ",(0,i.jsx)(n.code,{children:"on"})," or ",(0,i.jsx)(n.code,{children:"off"})," (optional, default=on)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes spread(16 0 36)\n\nnew polySynth sine note(notes 2) time(1/16) shape(1 1/1) steal(off)\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["If you use ",(0,i.jsx)(n.code,{children:"steal(off)"})," but also set ",(0,i.jsx)(n.code,{children:"shape(off)"})," you won't be able to trigger any new notes after all voices are filled because there is no shape to stop any voice from sounding."]})}),"\n",(0,i.jsx)(n.h3,{id:"spread",children:"spread"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsx)(n.p,{children:"Use the spread function to add little delays with optional randomness between every note in a chord, resulting in the chord to sound broken up in time (spread out)."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+/Fraction(List)"})," -> the delaytime between note triggers in ms or fraction (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+/Fraction(List)"})," -> random delaytime offset added to the delaytime in ms or fraction (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [ [0 3 7 11 12] ]\n\nnew polySynth sine note(notes 2) shape(1 1/1) time(1/1) spread(150 50)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"voices",children:"voices"}),"\n",(0,i.jsx)(n.admonition,{title:"not (yet) supported",type:"warning"}),"\n",(0,i.jsx)(n.h2,{id:"polysample",children:"polySample"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury Playground only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["The polySample functions the same as the ",(0,i.jsx)(n.code,{children:"sample"})," in the sense that you choose a sample file, set a ",(0,i.jsx)(n.code,{children:"speed()"}),", add a ",(0,i.jsx)(n.code,{children:"shape()"}),", etc. For explanation of those functions see ",(0,i.jsx)(n.a,{href:"#sample",children:(0,i.jsx)(n.code,{children:"sample"})}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["The extra feature of the polySample is that it allows for overlapping sounds. For example useful when generating chords. Notes provided to the ",(0,i.jsx)(n.code,{children:"note()"})," function as a 2-dimensional list will be played at the same time as a chord. By default there are 8 voices available at the same time."]}),"\n",(0,i.jsxs)(n.p,{children:["For explanation of using ",(0,i.jsx)(n.code,{children:"2D-list"}),"'s in ",(0,i.jsx)(n.code,{children:"note()"})," for polyphony see ",(0,i.jsx)(n.a,{href:"#polysynth",children:(0,i.jsx)(n.code,{children:"polySynth"})})," voice-stealing see ",(0,i.jsx)(n.a,{href:"#steal",children:(0,i.jsx)(n.code,{children:"steal"})})," under ",(0,i.jsx)(n.code,{children:"polySynth"}),". For setting voice-amount see ",(0,i.jsx)(n.a,{href:"#voices",children:(0,i.jsx)(n.code,{children:"voices"})}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set tempo 100\nset scale dorian eb\n\nlist notes shuffle(spread(24))\nnew polySample piano_e time(1/16) note(notes 1) shape(1 1/2) steal(off) tune(64)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"midi",children:"midi"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"midi"})," instrument allows you to send MIDI messages (notes, pitchbend, controlchange, programchange) to other external devices or virtual devices in your computer. The ",(0,i.jsx)(n.code,{children:""})," is the literal name as a ",(0,i.jsx)(n.code,{children:"string"})," of the device as it shows up when connected to the computer. For example this can be something like ",(0,i.jsx)(n.code,{children:'"My MIDI Device"'}),". You can also choose ",(0,i.jsx)(n.code,{children:"default"})," to set the instrument to the first midi device in the list. The name is written as a ",(0,i.jsx)(n.code,{children:"string"})," between ",(0,i.jsx)(n.code,{children:'" "'})," and is sensitive to upper and lower cases. To setup a basic midi instrument use:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new midi \n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> ",(0,i.jsx)(n.code,{children:"default"})," or MIDI Device name as a ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Functions ",(0,i.jsx)(n.code,{children:"note()"}),", ",(0,i.jsx)(n.code,{children:"time()"}),", ",(0,i.jsx)(n.code,{children:"name()"}),", ",(0,i.jsx)(n.code,{children:"group()"}),", ",(0,i.jsx)(n.code,{children:"once()"}),", ",(0,i.jsx)(n.code,{children:"play()"}),", ",(0,i.jsx)(n.code,{children:"ratchet()"}),", ",(0,i.jsx)(n.code,{children:"timediv()"}),", ",(0,i.jsx)(n.code,{children:"warp()"}),", ",(0,i.jsx)(n.code,{children:"wait()"})," all work the same for the ",(0,i.jsx)(n.code,{children:"midi"})," instrument. There are some differences when using the ",(0,i.jsx)(n.code,{children:"shape()"})," and ",(0,i.jsx)(n.code,{children:"gain()"})," functions."]}),"\n",(0,i.jsx)(n.h3,{id:"note-2",children:"note"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"note"})," function allows you to play a midinote. The function works the same as the ",(0,i.jsx)(n.code,{children:"note"})," function explained under the ",(0,i.jsx)(n.code,{children:"synth"}),". Please see ",(0,i.jsx)(n.a,{href:"#note",children:(0,i.jsx)(n.code,{children:"note()"})})," for further information."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set scale major D\n\nlist notes [0 7 5 3]\n\nnew midi default note(notes 2)\n// plays the midi notes 62 69 67 64\n"})}),"\n",(0,i.jsx)(n.h3,{id:"length",children:"length"}),"\n",(0,i.jsxs)(n.p,{children:["Replaces the ",(0,i.jsx)(n.code,{children:"shape()"})," function of ",(0,i.jsx)(n.code,{children:"synth"})," and ",(0,i.jsx)(n.code,{children:"sample"}),". Set the duration of the midi-note. This means it will send a ",(0,i.jsx)(n.code,{children:"note-off"})," message after a ",(0,i.jsx)(n.code,{children:"number"})," of milliseconds or ",(0,i.jsx)(n.code,{children:"fraction"}),". If the instrument is triggered before the end of the duration, the note-off is canceled and a new note-off is scheduled."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number/Fraction(List)"})," -> Duration time in ms or fraction"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new midi default length(1500) time(1)\n"})}),"\n",(0,i.jsx)(n.p,{children:"with fraction:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new midi default length(1/2) time(1)\n//=> duration of 1/2 (1200 ms at 100 bpm)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"duration()"}),", ",(0,i.jsx)(n.code,{children:"shape()"})]}),"\n",(0,i.jsx)(n.h3,{id:"channel",children:"channel"}),"\n",(0,i.jsxs)(n.p,{children:["Set the midi-channel output for the midi-note to be send to. ",(0,i.jsx)(n.code,{children:"out()"})," can be used as an alias to reduce some typing."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+(List)"})," -> Channel to send the midi-note to"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new midi default note(7 2) channel(1)\nnew midi default note(0 0) channel(2)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"out()"})]}),"\n",(0,i.jsx)(n.h3,{id:"chord",children:"chord"}),"\n",(0,i.jsxs)(n.p,{children:["By default the ",(0,i.jsx)(n.code,{children:"midi"})," instrument's output is monophonic. You can turn the chord output (polyphony) on for a midi instrument with this function. This allows you to use ",(0,i.jsx)(n.code,{children:"2D-list"}),"s where the 2nd dimension is used to generate chords. Read more about chords under ",(0,i.jsx)(n.a,{href:"#polysynth",children:(0,i.jsx)(n.code,{children:"polySynth"})}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> Turn chord output on/off"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list chords [[0 4 7] [2 5 9] [5 9 0]]\n\nnew midi default note(chords 1) chord(on)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"program",children:"program"}),"\n",(0,i.jsxs)(n.p,{children:["Send program change messages to the specified midi-channel of the instrument. The channel number is based on the ",(0,i.jsx)(n.code,{children:"out()"})," function (see ",(0,i.jsx)(n.a,{href:"#channel",children:(0,i.jsx)(n.code,{children:"channel"})}),"). The default channel ",(0,i.jsx)(n.code,{children:"1"})," is used if no channel is selected. The program change value is zero-based, an integer from ",(0,i.jsx)(n.code,{children:"0"})," - ",(0,i.jsx)(n.code,{children:"127"})," and can be sequenced as a list. If no value is provided there is no program change send. The value is ",(0,i.jsx)(n.strong,{children:"only"})," send when it changes based on the previous value. This is done because some midi devices react every time a program change is received (for example cutting of notes), even if the value stays the same."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> Program change value 0-127 (default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes spread(5 0 12)\nlist changes [0 10 20]\n\nnew midi default note(notes 1) out(1) program(changes)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"pgm()"})]}),"\n",(0,i.jsx)(n.h3,{id:"change",children:"change"}),"\n",(0,i.jsxs)(n.p,{children:["Send control change (CC) messages to the midi device. This function replaces the ",(0,i.jsx)(n.code,{children:"effect()"})," function of an instrument and can have multiple calls in the same instrument, every call can be a different control number. The first argument is the ",(0,i.jsx)(n.code,{children:"number"})," for the control, the second argument is the ",(0,i.jsx)(n.code,{children:"number"})," for the controller value or a list of controller values. You can use ",(0,i.jsx)(n.code,{children:"cc()"})," as an alias to reduce typing."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> controller number between 0-127"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> controller value between 0-127"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list ccValues [10 20 30 40 50]\n\nnew midi default time(1/8) change(13 100) change(21 ccValues)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"cc()"})]}),"\n",(0,i.jsx)(n.h3,{id:"sync",children:"sync"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsx)(n.p,{children:"Turn the midiclock syncing on/off for an individual instrument and send it to the selected port/device from that instrument."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> Turn syncing on/off"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:'new midi "My Midi Device" sync(on)\nnew midi "Another Device" sync(off)\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"clock()"})]}),"\n",(0,i.jsx)(n.h2,{id:"input",children:"input"}),"\n",(0,i.jsxs)(n.p,{children:["Use the input from the soundcard (ADC, Analog Digital Converter) as the source for an instrument. The sound can be modified by all the various ",(0,i.jsx)(n.code,{children:"fx()"}),"'s. The volume can be adjusted with ",(0,i.jsx)(n.code,{children:"gain()"}),". An envelope can be applied on the sound with ",(0,i.jsx)(n.code,{children:"shape()"})," and this envelope can be triggered with ",(0,i.jsx)(n.code,{children:"time()"})," just as with the regular instruments ",(0,i.jsx)(n.code,{children:"sample"}),", ",(0,i.jsx)(n.code,{children:"synth"}),", etc. Use the words ",(0,i.jsx)(n.code,{children:"in1"}),", ",(0,i.jsx)(n.code,{children:"in2"}),", ..., ",(0,i.jsx)(n.code,{children:"inx"})," to choose the input source. Use ",(0,i.jsx)(n.code,{children:"default"})," to pick the first input in the list."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new input \n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> ",(0,i.jsx)(n.code,{children:"default"})," or the input channel number as a string ",(0,i.jsx)(n.code,{children:"inX"})]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// use the default input, in most cases channel 1\nnew input default gain(1)\n\n// use a specific channel\nnew input in3 gain(0.9) \n\n// add functions like shape, time and fx\nnew input in4 gain(0.9) time(1/16) shape(1 100) fx(reverb) fx(distort)\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"In the browser you will need to give permission to use the microphone. Afterwards you might need to refresh the page."})}),"\n",(0,i.jsx)(n.h2,{id:"osc",children:"osc"}),"\n",(0,i.jsxs)(n.p,{children:["Create an instrument that sends OSC-messages. The ",(0,i.jsx)(n.code,{children:""})," is used to set the opening address of the message to ",(0,i.jsx)(n.code,{children:"/"}),". Any arbitrary function name is used to set as second address in the osc-string. If no name is provided it will default to a unique number for every instrument instance. By adding other functions with any arbitrary name you can send a message with the address in the form of ",(0,i.jsx)(n.code,{children:"// "})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new osc \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:'list params [0.25 0.5 0.75]\nlist values [3 1]\n\nnew osc "myOSC" time(1/4) someParam(params) anotherParam(values)\n\n// sends => /myOSC/someParams 0.25\n// /myOSC/anotherParam 3\n// /myOSC/someParams 0.5\n// /myOSC/anotherParam 1\n// etc...\n'})}),"\n",(0,i.jsxs)(n.p,{children:["The messages also support multiple arguments up to a length of 256. Multiple arguments can be provided as ",(0,i.jsx)(n.code,{children:"list"}),"s, ",(0,i.jsx)(n.code,{children:"string"}),"s, ",(0,i.jsx)(n.code,{children:"float"}),"s or ",(0,i.jsx)(n.code,{children:"int"}),"s."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list val1 [0.25 0.5 0.75]\nlist val2 [3 1]\n\nnew osc myOSC time(1/4) aMessage(0.1 val1 val2 100)\n\n// emits => /myOSC/aMessage 0.1 0.25 3 100\n// /myOSC/aMessage 0.1 0.5 1 100\n// /myOSC/aMessage 0.1 0.75 3 100\n// etc...\n"})}),"\n",(0,i.jsxs)(n.admonition,{type:"tip",children:[(0,i.jsxs)(n.p,{children:["If you want multiple ",(0,i.jsx)(n.code,{children:"osc"})," to send to the same address, you can use the same ",(0,i.jsx)(n.code,{children:""})," but use different ",(0,i.jsx)(n.code,{children:"name()"}),"s for reference in the code. Useful if you want to send messages to the same address, but with different timing-intervals."]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list params [0.25 0.5 0.75]\nlist values [3 1 4]\n\nnew osc myOSC name(osc1) time(1/4) \n set osc1 someParam(params)\n\nnew osc myOSC name(osc2) time(1/2)\n set osc2 anotherParam(values)\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"receiving",children:"receiving"}),"\n",(0,i.jsxs)(n.p,{children:["You can use osc adresses as arguments for other functions by putting the address as argument in the form: ",(0,i.jsx)(n.code,{children:"/
//"}),". For example to control the ",(0,i.jsx)(n.code,{children:"gain()"})," of a ",(0,i.jsx)(n.code,{children:"sample"})," and the ",(0,i.jsx)(n.code,{children:"note()"})," value of a ",(0,i.jsx)(n.code,{children:"synth"})," enter the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new sample kick_909 time(1/4) gain(/myOSC/sliderValue1)\nnew synth saw note(/myOSC/sliderValue2) shape(1 100) time(1/8)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["It is possible to scale the incoming osc value to a different range by using ",(0,i.jsx)(n.code,{children:"{}"})," after the address inputting a low and high output range separated by a colon ",(0,i.jsx)(n.code,{children:":"}),". The scaling function considers an incoming range of ",(0,i.jsx)(n.code,{children:"0 - 1"})," floatingpoint values. For example to control the ",(0,i.jsx)(n.code,{children:"note()"})," and ",(0,i.jsx)(n.code,{children:"shape()"})," ranges in a ",(0,i.jsx)(n.code,{children:"synth"})," enter the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new synth saw note(/myOsc/sliderValue3{2:19} 0) shape(1 /myOsc/sliderValue4{50:500}) \n// => converts incoming slider values from 0-1 to 2-19 for note and 0-1 to 50-500 for note length\n"})}),"\n",(0,i.jsx)(n.h2,{id:"modulator",children:"modulator"}),"\n",(0,i.jsx)(n.admonition,{title:"Mercury4Max only",type:"warning"}),"\n",(0,i.jsxs)(n.p,{children:["The modulator allows you to send a modulation signal as an argument to parameters in ",(0,i.jsx)(n.code,{children:"instrument-function"}),"s of other instruments. These parameters are continuously modulated at a specific rate with a specific waveform. The modulation rate is independent from the instruments ",(0,i.jsx)(n.code,{children:"time()"})," (in comparison when using a list as an argument). It is also possible to send the modulation signal directly out to the connected soundcard on a specific DAC channel (Digital Analog Converter). This can for example be used for CV-modulations."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> modulator waveform type: ",(0,i.jsx)(n.code,{children:"sine"}),"/",(0,i.jsx)(n.code,{children:"sin"}),", ",(0,i.jsx)(n.code,{children:"sawUp"}),"/",(0,i.jsx)(n.code,{children:"phasor"}),", ",(0,i.jsx)(n.code,{children:"sawDown"}),"/",(0,i.jsx)(n.code,{children:"saw"}),", ",(0,i.jsx)(n.code,{children:"square"}),"/",(0,i.jsx)(n.code,{children:"rect"}),", ",(0,i.jsx)(n.code,{children:"triangle"}),"/",(0,i.jsx)(n.code,{children:"tri"}),", ",(0,i.jsx)(n.code,{children:"random"}),"/",(0,i.jsx)(n.code,{children:"rand"}),", ",(0,i.jsx)(n.code,{children:"randomLine"}),"/",(0,i.jsx)(n.code,{children:"randL"}),", ",(0,i.jsx)(n.code,{children:"trigger"}),"/",(0,i.jsx)(n.code,{children:"gate"})]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"new modulator name() range( ) time() out()\n"})}),"\n",(0,i.jsx)(n.h3,{id:"name-1",children:"name"}),"\n",(0,i.jsxs)(n.p,{children:["Replaces the ",(0,i.jsx)(n.code,{children:"name()"})," function. Set the name for the modulator, this name can be used as argument in the functions of an instrument like ",(0,i.jsx)(n.code,{children:"synth"})," and ",(0,i.jsx)(n.code,{children:"sample"})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> the modulator ",(0,i.jsx)(n.code,{children:"name"})," for reference in other functions"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// set the name to myModulator\nnew modulator sine name(myModulator)\n\n// the synth uses the modulator in the gain function\nnew synth saw gain(myModulator)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"time-1",children:"time"}),"\n",(0,i.jsxs)(n.p,{children:["Replaces the ",(0,i.jsx)(n.code,{children:"time()"})," function. Set the modulation speed as a ",(0,i.jsx)(n.code,{children:"fraction"})," or ",(0,i.jsx)(n.code,{children:"float+"}),". The default is ",(0,i.jsx)(n.code,{children:"1/1"})," (one period per bar)."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Fraction/Float+"})," -> The time interval for one period of the modulation waveform (optional, default=1/1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Fraction/Float+"})," -> The time offset for the modulation (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// modulate a sinewave at a period of one per 4 bars\nnew modulator sine time(4/1)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"range",children:"range"}),"\n",(0,i.jsxs)(n.p,{children:["Set the modulation range between a lower and upper value with an optional exponential value. The default range is ",(0,i.jsx)(n.code,{children:"0"})," to ",(0,i.jsx)(n.code,{children:"1"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> The low output range (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> The high output range (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> The scaling exponent (optional, default=1)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// set the range from 200 to 5000, for example to modulate a filter cutoff in Hz\nnew modulator sine range(200 5000)\n\n// include the third argument to set the exponential in the scaling\nnew modulator sine range(200 5000 3)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"out",children:"out"}),"\n",(0,i.jsxs)(n.p,{children:["Set the output channel from your connected soundcard to send the modulation signal directly to. The default is 0 (no output to DAC). Currently the maximum number of channels that can be used is 16. If the modulation signal is only used for direct output it is not necessary to also ",(0,i.jsx)(n.code,{children:"name()"})," the modulator."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+"})," -> The channel number from 1 till number of outputs available, maximum of 16 (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// send a sinewave modulator signal to DAC channel 3\nnew modulator sine range(-1 1) out(3)\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsx)(n.p,{children:"Be careful when sending DC signals with large ranges to your DAC, this could damage your speakers if you choose the wrong output!"})}),"\n",(0,i.jsx)(n.h3,{id:"trigger",children:"trigger"}),"\n",(0,i.jsxs)(n.p,{children:["When using the mode ",(0,i.jsx)(n.code,{children:"trigger"}),"/",(0,i.jsx)(n.code,{children:"gate"})," the modulator functions like the sequencer in the other instruments. Meaning that you can include the ",(0,i.jsx)(n.code,{children:"play()"})," function to add a rhythm list, use ",(0,i.jsx)(n.code,{children:"ratchet()"})," to add a list of timing subdivisions with probability and use ",(0,i.jsx)(n.code,{children:"warp()"})," to add a list of time warpings."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> ",(0,i.jsx)(n.code,{children:"trigger"}),"/",(0,i.jsx)(n.code,{children:"gate"})," sets the intrument to use the stepsequencer (default=off)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// generate a euclidean rhythm and use it in the trigger\nlist rtm euclid(16 11)\nnew modulator trigger time(1/8) play(rtm) ratchet(0.1 2)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"hold",children:"hold"}),"\n",(0,i.jsxs)(n.p,{children:["The hold function transforms the ",(0,i.jsx)(n.code,{children:"trigger"})," into a gate that goes open and closes after a certain amount of time. The time value can be either ",(0,i.jsx)(n.code,{children:"ms"})," or a ",(0,i.jsx)(n.code,{children:"fraction"}),". If the hold time is longer than the time interval between triggers the gate stays open. A hold of ",(0,i.jsx)(n.code,{children:"0"})," results in the click from the default trigger."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number+"})," -> hold time in ms or fraction (default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// trigger every 8th note, and leave the gate open for the length of 50ms\nnew modulator trigger time(1/8) hold(50)\n\n// trigger every 8th note, and leave the gate open for the length of a 16th\nnew modulator trigger time(1/8) hold(1/16)\n"})}),"\n",(0,i.jsx)(n.h2,{id:"emitter",children:"emitter"}),"\n",(0,i.jsx)(n.admonition,{title:"Deprecated in Mercury4Max",type:"warning",children:(0,i.jsxs)(n.p,{children:["Use ",(0,i.jsx)(n.a,{href:"#osc",children:(0,i.jsx)(n.code,{children:"osc"})})," instead (similar as in MercuryPlayground now)"]})}),"\n",(0,i.jsxs)(n.p,{children:["Create an emitter object. Use this object to send messages to other platforms. The emitter object works similarly to the Instruments in the sense that it also has the ",(0,i.jsx)(n.code,{children:"time"}),", ",(0,i.jsx)(n.code,{children:"beat"})," and ",(0,i.jsx)(n.code,{children:"name"})," functions by default. The ",(0,i.jsx)(n.code,{children:"time"})," determines the time-interval at which messages are send. The ",(0,i.jsx)(n.code,{children:"beat"})," can turn send moments on or off."]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>d});var i=s(6540);const t={},r=i.createContext(t);function l(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.70000c2d.js b/assets/js/c4f5d8e4.70000c2d.js deleted file mode 100644 index 0e5a9409..00000000 --- a/assets/js/c4f5d8e4.70000c2d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[634],{8848:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var o=n(4164),s=n(8774),r=n(4586),c=n(781),i=n(1107);var a=n(4848);a.Fragment,a.Fragment,a.Fragment;const l={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};function d(){const{siteConfig:e}=(0,r.A)();return(0,a.jsx)("header",{className:(0,o.A)("hero hero--primary",l.heroBanner),children:(0,a.jsxs)("div",{className:"container",children:[(0,a.jsx)(i.A,{as:"h1",className:"hero__title",style:{fontSize:"3.5em",fontWeight:"bolder",color:"white"},children:e.title}),(0,a.jsx)("p",{className:"hero__subtitle",style:{fontSize:"2em",color:"white"},children:e.tagline}),(0,a.jsxs)("div",{className:l.buttons,children:[(0,a.jsx)(s.A,{className:"button button--secondary button--lg",to:"https://mercury.timohoogland.com",children:"Start Coding"}),"\xa0\xa0\xa0\xa0",(0,a.jsx)(s.A,{className:"button button--secondary button--lg",to:"/docs/welcome",children:"Read Documentation"})]})]})})}function h(){const{siteConfig:e}=(0,r.A)();return(0,a.jsxs)(c.A,{title:`${e.title} Docs`,description:"Documentation and Tutorials for the Mercury Live Coding Environment",children:[(0,a.jsx)(d,{}),(0,a.jsx)("main",{})]})}}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.940206e3.js b/assets/js/c4f5d8e4.940206e3.js new file mode 100644 index 00000000..6785a56e --- /dev/null +++ b/assets/js/c4f5d8e4.940206e3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[634],{8848:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var o=n(4164),s=n(8774),r=n(4586),i=n(781),a=n(1107);var c=n(4848);c.Fragment,c.Fragment,c.Fragment;const l={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN"};function d(){const{siteConfig:e}=(0,r.A)();return(0,c.jsx)("header",{className:(0,o.A)("hero hero--primary",l.heroBanner),children:(0,c.jsxs)("div",{className:"container",children:[(0,c.jsx)(a.A,{as:"h1",className:"hero__title",style:{fontSize:"3.5em",fontWeight:"bolder",color:"white"},children:e.title}),(0,c.jsx)("p",{className:"hero__subtitle",style:{fontSize:"2em",color:"white"},children:e.tagline}),(0,c.jsxs)("div",{className:l.buttons,children:[(0,c.jsx)(s.A,{className:"button button--secondary button--lg",to:"https://mercury.timohoogland.com",children:"Start Coding"}),"\xa0\xa0\xa0\xa0",(0,c.jsx)(s.A,{className:"button button--secondary button--lg",to:"/docs",children:"Read Documentation"})]})]})})}function h(){const{siteConfig:e}=(0,r.A)();return(0,c.jsxs)(i.A,{title:`${e.title} Docs`,description:"Documentation and Tutorials for the Mercury Live Coding Environment",children:[(0,c.jsx)(d,{}),(0,c.jsx)("main",{})]})}}}]); \ No newline at end of file diff --git a/assets/js/c6a20f18.de183d46.js b/assets/js/c6a20f18.de183d46.js deleted file mode 100644 index ebccdc9f..00000000 --- a/assets/js/c6a20f18.de183d46.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[168],{4866:e=>{e.exports=JSON.parse('{"title":"\ud83d\udcd6 Reference","description":"Welcome to the Mercury reference pages","slug":"/category/-reference","permalink":"/mercury/docs/category/-reference","navigation":{"previous":{"title":"\ud83d\udee0 Extending Mercury","permalink":"/mercury/docs/usage/extending"},"next":{"title":"Syntax Overview","permalink":"/mercury/docs/reference/syntax"}}}')}}]); \ No newline at end of file diff --git a/assets/js/c6a20f18.eba7c0e1.js b/assets/js/c6a20f18.eba7c0e1.js new file mode 100644 index 00000000..d8018bfe --- /dev/null +++ b/assets/js/c6a20f18.eba7c0e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[168],{4866:e=>{e.exports=JSON.parse('{"title":"\ud83d\udcd6 Reference","description":"Welcome to the Mercury reference pages","slug":"/reference","permalink":"/mercury/docs/reference","navigation":{"previous":{"title":"\ud83d\udee0 Extending Mercury","permalink":"/mercury/docs/usage/extending"},"next":{"title":"Syntax Overview","permalink":"/mercury/docs/reference/syntax"}}}')}}]); \ No newline at end of file diff --git a/assets/js/ceb5ae55.8adaa515.js b/assets/js/ceb5ae55.8adaa515.js deleted file mode 100644 index 0e7e2b9b..00000000 --- a/assets/js/ceb5ae55.8adaa515.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[992],{4285:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var s=n(4848),r=n(8453);const i={sidebar_position:1},o="\ud83e\udd14 What is Mercury?",a={id:"about/about",title:"\ud83e\udd14 What is Mercury?",description:"All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals.",source:"@site/docs/about/about.md",sourceDirName:"about",slug:"/about/",permalink:"/mercury/docs/about/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udcdf About",permalink:"/mercury/docs/category/-about"},next:{title:"\ud83d\udd2d What can you do with Mercury?",permalink:"/mercury/docs/about/vision"}},c={},l=[];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"-what-is-mercury",children:"\ud83e\udd14 What is Mercury?"}),"\n",(0,s.jsx)(t.admonition,{title:"Mercury is a free/open-source, beginner-friendly, minimal and human-readable language for the live coding of algorithmic electronic music",type:"note"}),"\n",(0,s.jsx)(t.p,{children:"All elements of the language are designed around making code more accessible and less obfuscating for both the programmer-performer and the audience alike. This motivation stretches down to the coding-style itself which uses clear descriptive names for functions and a simple clear syntax. Mercury provides the performer with an extensive library of algorithms to generate or transform sequences that can modulate musical parameters, such as (but not limited to) melody and rhythm, over time. The environment focuses on creating sound in the first place, but is not limited to that and can for example also output MIDI, OSC to control other processes such as visuals."}),"\n",(0,s.jsx)(t.admonition,{title:"about the name \u263f",type:"note",children:(0,s.jsx)(t.p,{children:"The language is named after te planet Mercury. In astrology Mercury rules the creation and expression of our mental processes. The planet implores us to express ourselves. Mercury is about a quick wit, quick thinking. It lets us move from one thing to the next."})}),"\n",(0,s.jsxs)(t.p,{children:["Mercury was first programmed by ",(0,s.jsx)(t.a,{href:"https://www.timohoogland.com",children:"Timo Hoogland"})," in 2018 with the Cycling'74 Max8 node-based creative coding environment, as an abstracted layer on the Max/MSP audio engine and with the use of Node4Max for parsing, lexing and generative algorithms and Jitter/OpenGL for the visuals and the responsive texteditor. Later Mercury was also ported to a browser based version using WebAudio and the ToneJS framework. The original version was designed around a limitation of writing no more than 30 lines of code. This limitation is still present in the Mercury4Max version, but is not in use when using the browser or external editor."]}),"\n",(0,s.jsxs)(t.p,{children:["Mercury finds its roots in the concept of ",(0,s.jsx)(t.em,{children:"Serialism"}),", a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a ",(0,s.jsx)(t.code,{children:"list"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Every instance of an instrument has an internal counter. This counter increments (0, 1, 2, 3,... etc) when an instrument triggers an event based on the time-interval from ",(0,s.jsx)(t.code,{children:"time()"}),". This is also called a step-sequencer. When a ",(0,s.jsx)(t.code,{children:"list"})," is added as argument to an ",(0,s.jsx)(t.code,{children:"instrument-function"})," the instrument uses its count as a lookup-position (index) taking the corresponding value from the list. As soon as the index is higher then the amount of values in the ",(0,s.jsx)(t.code,{children:"list"})," it will return to the beginning and start over, therefore the ",(0,s.jsx)(t.code,{children:"list"})," is circular/looping."]}),"\n",(0,s.jsxs)(t.p,{children:["Mercury makes use of the ",(0,s.jsx)(t.a,{href:"https://www.npmjs.com/package/total-serialism",children:(0,s.jsx)(t.code,{children:"total-serialism"})})," NodeJS Package to generate and transform numbersequences that are used for melodies, rhythms, parameters and basically anything that can be sequenced in the environment. ",(0,s.jsx)(t.code,{children:"total-serialism"})," is a set of functions used for procedurally generating and transforming lists. This library is mainly designed with algorithmic composition of music in mind, but can be useful for other purposes that involve generating and manipulating lists and numbers."]})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>a});var s=n(6540);const r={},i=s.createContext(r);function o(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d44737fc.2ecb7944.js b/assets/js/d44737fc.2ecb7944.js deleted file mode 100644 index 62a2e709..00000000 --- a/assets/js/d44737fc.2ecb7944.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[707],{398:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>o});var i=s(4848),l=s(8453);const r={sidebar_position:5},t="List Functions",a={id:"reference/list-functions",title:"List Functions",description:"Mercury finds its roots in the concept of Serialism, a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a list.",source:"@site/docs/reference/list-functions.md",sourceDirName:"reference",slug:"/reference/list-functions",permalink:"/mercury/docs/reference/list-functions",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Instrument Effects",permalink:"/mercury/docs/reference/effects"},next:{title:"\ud83d\udc69\u200d\ud83d\udcbb\ud83d\udc68\u200d\ud83d\udcbb Collaborative Coding",permalink:"/mercury/docs/collaborate"}},d={},o=[{value:"Syntax Overview",id:"syntax-overview",level:2},{value:"Function Types",id:"function-types",level:2},{value:"Generators",id:"generators",level:3},{value:"Transformers",id:"transformers",level:3},{value:"Analysers",id:"analysers",level:3},{value:"Translators",id:"translators",level:3},{value:"Generative Functions",id:"generative-functions",level:2},{value:"spread (spreadFloat)",id:"spread-spreadfloat",level:3},{value:"spreadInclusive (spreadInclusiveFloat)",id:"spreadinclusive-spreadinclusivefloat",level:3},{value:"fill",id:"fill",level:3},{value:"sine (sineFloat)",id:"sine-sinefloat",level:3},{value:"cosine (cosineFloat)",id:"cosine-cosinefloat",level:3},{value:"saw (sawFloat)",id:"saw-sawfloat",level:3},{value:"square (squareFloat)",id:"square-squarefloat",level:3},{value:"binaryBeat",id:"binarybeat",level:3},{value:"spacingBeat",id:"spacingbeat",level:3},{value:"euclidean",id:"euclidean",level:3},{value:"hexBeat",id:"hexbeat",level:3},{value:"fibonacci",id:"fibonacci",level:3},{value:"pisano",id:"pisano",level:3},{value:"pell",id:"pell",level:3},{value:"lucas",id:"lucas",level:3},{value:"threeFibonacci",id:"threefibonacci",level:3},{value:"Stochastic Functions",id:"stochastic-functions",level:2},{value:"randomSeed",id:"randomseed",level:3},{value:"random (randomFloat)",id:"random-randomfloat",level:3},{value:"drunk (drunkFloat)",id:"drunk-drunkfloat",level:3},{value:"urn",id:"urn",level:3},{value:"coin",id:"coin",level:3},{value:"dice",id:"dice",level:3},{value:"clave",id:"clave",level:3},{value:"twelveTone",id:"twelvetone",level:3},{value:"choose",id:"choose",level:3},{value:"pick",id:"pick",level:3},{value:"shuffle",id:"shuffle",level:3},{value:"expand",id:"expand",level:3},{value:"markovTrain",id:"markovtrain",level:3},{value:"markovChain",id:"markovchain",level:3},{value:"Transform Functions",id:"transform-functions",level:2},{value:"clone",id:"clone",level:3},{value:"join",id:"join",level:3},{value:"copy",id:"copy",level:3},{value:"pad",id:"pad",level:3},{value:"every",id:"every",level:3},{value:"flat",id:"flat",level:3},{value:"invert",id:"invert",level:3},{value:"lace",id:"lace",level:3},{value:"lookup",id:"lookup",level:3},{value:"merge",id:"merge",level:3},{value:"palindrome",id:"palindrome",level:3},{value:"repeat",id:"repeat",level:3},{value:"reverse",id:"reverse",level:3},{value:"rotate",id:"rotate",level:3},{value:"sort",id:"sort",level:3},{value:"slice",id:"slice",level:3},{value:"split",id:"split",level:3},{value:"cut",id:"cut",level:3},{value:"spray",id:"spray",level:3},{value:"stretch (stretchFloat)",id:"stretch-stretchfloat",level:3},{value:"unique",id:"unique",level:3},{value:"Utility Functions",id:"utility-functions",level:2},{value:"add",id:"add",level:3},{value:"subtract",id:"subtract",level:3},{value:"multiply",id:"multiply",level:3},{value:"divide",id:"divide",level:3},{value:"mod",id:"mod",level:3},{value:"clip",id:"clip",level:3},{value:"wrap",id:"wrap",level:3},{value:"fold",id:"fold",level:3},{value:"map",id:"map",level:3},{value:"normalize",id:"normalize",level:3},{value:"equals",id:"equals",level:3},{value:"notEquals",id:"notequals",level:3},{value:"greater",id:"greater",level:3},{value:"greaterEquals",id:"greaterequals",level:3},{value:"less",id:"less",level:3},{value:"lessEquals",id:"lessequals",level:3},{value:"size",id:"size",level:2},{value:"sum",id:"sum",level:2},{value:"Translate Functions",id:"translate-functions",level:2},{value:"Conversion between pitch units",id:"conversion-between-pitch-units",level:3},{value:"Conversion between time units",id:"conversion-between-time-units",level:3},{value:"divisionToMs",id:"divisiontoms",level:4},{value:"Working with fixed scale and root",id:"working-with-fixed-scale-and-root",level:3},{value:"textToCode",id:"texttocode",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"list-functions",children:"List Functions"}),"\n",(0,i.jsxs)(n.p,{children:["Mercury finds its roots in the concept of ",(0,i.jsx)(n.em,{children:"Serialism"}),", a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a ",(0,i.jsx)(n.code,{children:"list"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Every instance of an instrument has an internal counter. This counter increments (0, 1, 2, 3,... etc) when an instrument triggers an event based on the time-interval from ",(0,i.jsx)(n.code,{children:"time()"}),". This is also called a step-sequencer. When a ",(0,i.jsx)(n.code,{children:"list"})," is added as argument to an ",(0,i.jsx)(n.code,{children:"instrument-function"})," the instrument uses its count as a lookup-position (index) taking the corresponding value from the list. As soon as the index is higher then the amount of values in the ",(0,i.jsx)(n.code,{children:"list"})," it will return to the beginning and start over, therefore the ",(0,i.jsx)(n.code,{children:"list"})," is circular/looping."]}),"\n",(0,i.jsxs)(n.p,{children:["Mercury makes use of the ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/total-serialism",children:(0,i.jsx)(n.code,{children:"total-serialism"})})," NodeJS Package to generate and transform numbersequences that are used for melodies, rhythms, parameters and basically anything that can be sequenced in the environment. ",(0,i.jsx)(n.code,{children:"total-serialism"})," is a set of functions used for procedurally generating and transforming lists. This library is mainly designed with algorithmic composition of music in mind, but can be useful for other purposes that involve generating and manipulating lists and numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"List Function Categories:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#generative-functions",children:"Generative"})}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#stochastic-functions",children:"Stochastic"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#transformative-functions",children:"Transform"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#translate-functions",children:"Translate"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#utility-functions",children:"Utility & Math"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"syntax-overview",children:"Syntax Overview"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list [ value0 value1 ... value-n ]\nlist function()\n"})}),"\n",(0,i.jsxs)(n.p,{children:["For detailed explanation of the syntax see: ",(0,i.jsx)(n.a,{href:"syntax",children:"Syntax"})," and ",(0,i.jsx)(n.a,{href:"actions#list",children:(0,i.jsx)(n.code,{children:"list"})})," under ",(0,i.jsx)(n.a,{href:"actions",children:"Actions"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"function-types",children:"Function Types"}),"\n",(0,i.jsxs)(n.p,{children:["There are 4 overall types of ",(0,i.jsx)(n.code,{children:"list-functions"}),": ",(0,i.jsx)(n.code,{children:"Generators"}),", ",(0,i.jsx)(n.code,{children:"Transformers"}),", ",(0,i.jsx)(n.code,{children:"Analysers"}),", ",(0,i.jsx)(n.code,{children:"Translators"})]}),"\n",(0,i.jsx)(n.h3,{id:"generators",children:"Generators"}),"\n",(0,i.jsxs)(n.p,{children:["Generators are ",(0,i.jsx)(n.code,{children:"list-functions"})," that generate a list based on a specific process. The process can be deterministic (the output will always be the same for a specific combination of arguments) or stochastic (the output has some form of psuedo-randomness that can be controlled with a seed). Generators can be found in different categories such as: ",(0,i.jsx)(n.code,{children:"Generative"}),", ",(0,i.jsx)(n.code,{children:"Algorithmic"})," and ",(0,i.jsx)(n.code,{children:"Stochastic"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["A generator always has the ",(0,i.jsx)(n.code,{children:"output-length"})," of the list as the first argument and always outputs a ",(0,i.jsx)(n.code,{children:"list"}),"."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list generator( )\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="example"',children:"list rand random(20) // generates 20 random numbers\nlist cosi cosine(32) // generates 32 values of a period of a cosine wave\n"})}),"\n",(0,i.jsx)(n.h3,{id:"transformers",children:"Transformers"}),"\n",(0,i.jsxs)(n.p,{children:["Transformers are ",(0,i.jsx)(n.code,{children:"list-functions"})," that take one or more lists as input, transform them with some process and output the processed result. The process can be deterministic (the output will always be the same for a specific combination of arguments) or stochastic (the output has some form of psuedo-randomness that can be controlled with a seed, more on that under ",(0,i.jsx)(n.a,{href:"global#randomseed",children:(0,i.jsx)(n.code,{children:"randomSeed"})}),")."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["A transformer always has an ",(0,i.jsx)(n.code,{children:"input-list"})," as the first argument and always outputs a ",(0,i.jsx)(n.code,{children:"list"}),"."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list transformer( )\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="example"',children:"list values [0 2 3 5 7 8 11 12]\n\nlist shuf shuffle(values) // shuffle the values\nlist revs rotate(values 4) // rotate the values by 4 steps\n"})}),"\n",(0,i.jsx)(n.h3,{id:"analysers",children:"Analysers"}),"\n",(0,i.jsxs)(n.p,{children:["Analysers are ",(0,i.jsx)(n.code,{children:"list-functions"})," that take one (or more) lists as input and analyse their content based on some process and output a single value as a result."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["An analyser always has an ",(0,i.jsx)(n.code,{children:"input-list"})," as the first argument and always outputs a single ",(0,i.jsx)(n.code,{children:"value"}),"."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list analyser( )\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="example"',children:"list values [0 2 3 5 7 8 11 12]\n\nlist amnt size(values) // get the amount of items in the list\nlist avg average(values) // get the average value from the list\n"})}),"\n",(0,i.jsx)(n.h3,{id:"translators",children:"Translators"}),"\n",(0,i.jsxs)(n.p,{children:["Translators are ",(0,i.jsx)(n.code,{children:"list-functions"})," that translate from one input to some other output. For example midi-note values can be translated to frequencies, or roman numerals can be translated to chord progression semitone values. Translatores can be found in different categories."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["A translator can have various ",(0,i.jsx)(n.code,{children:"input"})," datatypes (",(0,i.jsx)(n.code,{children:"list"}),", ",(0,i.jsx)(n.code,{children:"number"}),", ",(0,i.jsx)(n.code,{children:"name"}),") and different ",(0,i.jsx)(n.code,{children:"output"})," datatypes as well. Please refer to the function to see what these are."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="example"',children:'list numerals [I IIm IV]\nlist chords chordsFromNumerals(numerals)\n\nlist hex "8fa9"\nlist beat hexBeat(hex)\n'})}),"\n",(0,i.jsx)(n.h2,{id:"generative-functions",children:"Generative Functions"}),"\n",(0,i.jsx)(n.p,{children:"The generative list functions are functions that procedurally create a list from an algorithm and based on a set of arguments provided to the function."}),"\n",(0,i.jsx)(n.h3,{id:"spread-spreadfloat",children:"spread (spreadFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of n-length of evenly spaced values between a starting number up untill (but excluding) the 3th argument. Flipping the low and high values results in a descending list. By adding ",(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int/Float"})," -> Start value (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int/Float"})," -> End value (excluded, default=length)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list spr1 spread(5 0 12)\n// => [0 2 4 7 9]\n\nlist spr4 spread(5 12 0)\n// => [9 7 4 2 0]\n\nlist spr2 spreadFloat(5 -1 1)\n// => [-1 -0.6 -0.2 0.2 0.6]\n\nlist spr3 spreadF(5 0 2)\n// => [0 0.4 0.8 1.2 1.6]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"spreadF"})]}),"\n",(0,i.jsx)(n.h3,{id:"spreadinclusive-spreadinclusivefloat",children:"spreadInclusive (spreadInclusiveFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of n-length of evenly spaced values between a starting number up to (and including) the 3th argument. Flipping the low and high values results in a descending list. By adding ",(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Start value (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> End value (included, default=length)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list spi1 spreadInclusive(5 0 12)\n// => [0 3 6 9 12]\n\nlist spi4 spreadInclusive(5 12 0)\n// => [12 9 6 3 0]\n\nlist spi2 spreadInclusiveFloat(5 -1 1)\n// => [-1 -0.5 0 0.5 1]\n\nlist spi3 spreadIncF(5 0 2)\n// => [0 0.5 1 1.5 2]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"spreadInc"}),", ",(0,i.jsx)(n.code,{children:"spreadIncF"})]}),"\n",(0,i.jsx)(n.h3,{id:"fill",children:"fill"}),"\n",(0,i.jsxs)(n.p,{children:["Fill a list with values. Arguments are provided in pairs. Every pair consists of ",(0,i.jsx)(n.code,{children:"value amount"}),". The value is repeated n-amount of times in the list."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value"})," -> value to duplicate"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> amount of duplicates"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list fll1 fill(10 2 15 3 20 4)\n// => [10 10 15 15 15 20 20 20 20]\n\nlist fll2 fill(kick_min 2 hat_min 3)\n// => [kick_min kick_min hat_min hat_min hat_min]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"sine-sinefloat",children:"sine (sineFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list with n-periods of a sine function. Optional last arguments set the lo and hi range. Only setting first range argument sets the low-range to 0. The sine and cosine waves are interesting functions to use for creating melodic or rhythmic/dynamic patterns. By adding ",(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Periods of (co)sine-wave (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low range of values (optional, default=0, default=-1 for Float)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High range of values (optional, default=12, default=1 for Float)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Phase offset (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sin1 sine(10)\n// => [6 9 11 11 9 6 2 0 0 2]\n\nlist sin2 sine(10 1 -12 12)\n// => [0 7 11 11 7 0 -7 -11 -11 -7]\n\nlist sin3 sine(10 2 0 5)\n// => [2 4 3 1 0 2 4 3 1 0]\n\n// generate 10 ints with 4 periods a sine function\nlist sin4 sine(11 4 0 7)\n// 6.00 \u253c\u256d\u256e \u256d\u256e \u256d\u256e \n// 5.00 \u2524\u2502\u2502\u256d\u256e \u2502\u2502 \u2502\u2502 \n// 4.00 \u2524\u2502\u2502\u2502\u2570\u256e\u2502\u2502 \u2502\u2502 \n// 3.00 \u253c\u256f\u2502\u2502 \u2502\u2502\u2502 \u2502\u2502 \n// 2.00 \u2524 \u2502\u2502 \u2502\u2502\u2570\u256e\u2502\u2502 \n// 1.00 \u2524 \u2502\u2502 \u2502\u2502 \u2570\u256f\u2502 \n// 0.00 \u2524 \u2570\u256f \u2570\u256f \u2570 \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"sineF"})]}),"\n",(0,i.jsx)(n.h3,{id:"cosine-cosinefloat",children:"cosine (cosineFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Like ",(0,i.jsx)(n.a,{href:"#sine-sinefloat",children:(0,i.jsx)(n.code,{children:"sine"})})," but using the cosine function."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Periods of (co)sine-wave (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low range of values (optional, default=0, default=-1 for Float)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High range of values (optional, default=12, default=1 for Float)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Phase offset (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list cos1 cosine(10)\n// => [12 10 7 4 1 0 1 4 7 10]\n\nlist cos2 cosine(10 1 -12 12)\n// => [12 9 3 -3 -9 -12 -9 -3 3 9]\n\nlist cos3 cosine(10 2 0 5)\n// => [5 3 0 0 3 4 3 0 0 3]\n\n// generate 16 floats with 1 period of a cosine function\nlist cos4 cosineFloat(8)\n// 1.00 \u253c\u256e \n// 0.60 \u2524\u2570\u2500\u256e \u256d\u2500 \n// 0.20 \u253c \u2570\u256e \u256d\u256f \n// -0.20 \u2524 \u2570\u256e \u256d\u256f \n// -0.60 \u2524 \u2570\u256e \u256d\u256f \n// -1.00 \u2524 \u2570\u2500\u2500\u2500\u2500\u256f \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"cosineF"})]}),"\n",(0,i.jsx)(n.h3,{id:"saw-sawfloat",children:"saw (sawFloat)"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list with n-periods of a saw/phasor function. Optional last arguments set lo and hi range and phase offset. Only setting first range argument sets the low-range to 0"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> Length of output list (resolution)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Periods of the wave (option, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low range of values (optional, default=-1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High range of values (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Phase offset (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list saw1 sawFloat(25 2.5)\n//=> 0.80 \u2524 \u256d\u2500\u256e \u256d\u2500\u256e \n// 0.44 \u2524 \u256d\u2500\u256f \u2502 \u256d\u2500\u256f \u2502 \n// 0.08 \u2524 \u256d\u256f \u2502 \u256d\u256f \u2502 \n// -0.28 \u253c \u256d\u2500\u256f \u2502 \u256d\u2500\u256f \u2502 \u256d\u2500 \n// -0.64 \u2524\u256d\u2500\u256f \u2502\u256d\u2500\u256f \u2502\u256d\u2500\u256f \n// -1.00 \u253c\u256f \u2570\u256f \u2570\u256f \n\n// Modulation on frequency\nlist saw2 saw(34 sinF(30 2 0 100) 0 12)\n//=> 11.00 \u253c \u256d\u256e \u256d\u256e\u256d\u256e \n// 10.00 \u2524 \u2502\u2502\u256d\u2500\u256e \u256d\u256e \u2502\u2502\u2502\u2502 \n// 9.00 \u2524 \u2502\u2502\u2502 \u2502 \u2502\u2502 \u256d\u256e\u2502\u2502\u2502\u2502 \n// 8.00 \u2524 \u256d\u2500\u256e \u2502\u2502\u2502 \u2502 \u256d\u256f\u2502 \u2502\u2502\u2502\u2502\u2502\u2502 \u256d \n// 7.00 \u2524 \u256d\u256f \u2502 \u2502\u2502\u2502 \u2502 \u256d\u256f \u2502 \u2502\u2502\u2502\u2502\u2502\u2502 \u2502 \n// 6.00 \u2524 \u2502 \u2502 \u2502\u2502\u2502 \u2502 \u256d\u256f \u2502 \u2502\u2570\u256f\u2502\u2502\u2570\u256e \u2502 \n// 5.00 \u2524 \u2502 \u2502\u256d\u256e\u256d\u256f\u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \n// 4.00 \u2524 \u2502 \u2502\u2502\u2502\u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \n// 3.00 \u2524 \u2502 \u2502\u2502\u2570\u256f \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502\u2502 \u2570\u256e \u2502 \n// 2.00 \u2524 \u2502 \u2502\u2502 \u2502\u2502 \u2570\u256e \u2502 \u2502 \u2502 \u2570\u256f \u2502 \u2502 \n// 1.00 \u2524 \u256d\u256f \u2502\u2502 \u2570\u256f \u2502\u256d\u256f \u2502 \u2502 \u2570\u2500\u256e\u2502 \n// 0.00 \u253c\u2500\u256f \u2570\u256f \u2570\u256f \u2570\u2500\u256f \u2570\u256f \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"sawF"})]}),"\n",(0,i.jsx)(n.h3,{id:"square-squarefloat",children:"square (squareFloat)"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list with n-periods of a square/pulse wave function. Optional last arguments set lo and hi range and pulse width. Only setting first range argument sets the low-range to 0."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> Length of output list (resolution)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Periods of the wave (option, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low range of values (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High range of values (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Pulse width (optional, default=0.5)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sqr1 square(30 4 0 1 0.2)\n//=> 1.00 \u253c\u2500\u256e \u256d\u2500\u256e \u256d\u2500\u256e \u256d\u256e \n// 0.00 \u2524 \u2570\u2500\u2500\u2500\u2500\u2500\u256f \u2570\u2500\u2500\u2500\u2500\u256f \u2570\u2500\u2500\u2500\u2500\u2500\u256f\u2570\u2500\u2500\u2500\u2500\u2500 \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// Frequency Modulation with Gen.sin\nlist sqr2 squareFloat(30 sinF(30 2 1 5))\n//=> 1.00 \u253c\u2500\u2500\u2500\u256e \u256d\u2500\u2500\u256e\u256d\u2500\u2500\u256e \u256d\u2500\u256e \u256d\u2500\u256e \u256d\u2500 \n// 0.80 \u2524 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \n// 0.60 \u2524 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \n// 0.40 \u2524 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \n// 0.20 \u2524 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \n// 0.00 \u2524 \u2570\u2500\u2500\u2500\u2500\u2500\u256f \u2570\u256f \u2570\u2500\u256f \u2570\u2500\u2500\u256f \u2570\u2500\u256f \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"squareF"})]}),"\n",(0,i.jsx)(n.h3,{id:"binarybeat",children:"binaryBeat"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a binary sequence (which can be used as a rhythm) from a positive integer ",(0,i.jsx)(n.code,{children:"number"})," or a ",(0,i.jsx)(n.code,{children:"list"})," of numbers. Returns the binary value as a list of separated 1's and 0's useful for representing rhythmical patterns."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> List of numbers to convert to binary representation"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// generate a binary list from a single number\nlist bny1 binaryBeat(358)\n//=> [1 0 1 1 0 0 1 1 0]\n\n// use a list of numbers and concatenate binary representations\nlist bny2 binaryBeat([4 3 5])\n//=> [1 0 0 1 1 1 0 1]\n\n// negative values are clipped to 0\nlist bny3 binaryBeat([-4 4])\n//=> [0 1 0 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"binary"})]}),"\n",(0,i.jsx)(n.h3,{id:"spacingbeat",children:"spacingBeat"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of 1's and 0's based on a positive integer ",(0,i.jsx)(n.code,{children:"number"})," or ",(0,i.jsx)(n.code,{children:"list"}),". Every number in the list will be replaced by a 1 with a specified amount of 0's appended to it. Eg. a 2 => 1 0, a 4 => 1 0 0 0, etc. This technique is useful to generate a rhythm based on spacing length between onsets."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> List of numbers to convert to spaced rhythm"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// generate a rhythm based on numbered spacings\nlist spc1 spacingBeat(2 3 2)\n//=> [1 0 1 0 0 1 0]\n\n// also works with a list as input\nlist spc2 spacingBeat([4 2 0])\n//=> [1 0 0 0 1 0 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"spacing"})]}),"\n",(0,i.jsx)(n.h3,{id:"euclidean",children:"euclidean"}),"\n",(0,i.jsx)(n.p,{children:'Generate a euclidean rhythm evenly spacing n-hits amongst n-steps. Inspired by Godfried Toussaints famous paper "The Euclidean Algorithm Generates Traditional Musical Rhythms". This implementation is however a faster method that uses the downsampling of a line drawn between two points in a 2-dimensional grid to divide the squares into an evenly distributed amount of steps refered to as "Bresenham\'s Line Algorithm".'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> length of list (optional, default=8)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> hits to distribute (optional, default=4)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> rotate n-steps left or right (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list euc1 euclidean()\n// => [1 0 1 0 1 0 1 0]\n\nlist euc2 euclidean(7 5)\n// => [1 1 0 1 1 0 1]\n\nlist euc3 euclidean(7 5 2)\n// => [0 1 1 1 0 1 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"euclid"})]}),"\n",(0,i.jsx)(n.h3,{id:"hexbeat",children:"hexBeat"}),"\n",(0,i.jsxs)(n.p,{children:["Generate rhythms from hexadecimal values. Hexadecimal beats make use of hexadecimal values (0 - f) that are a base-16 number system. Because one digit in a base-16 number system has 16 possible values (0 - 15) these can be converted to 4 bits that therefore can be seen as groups of 4 16th notes. These hexadecimal values will then represent any permutation of 1's and 0's in a 4 bit number, where 0 = 0 0 0 0, 7 = 0 1 1 1, b = 1 0 1 1, f = 1 1 1 1 and all possible values in between. Inspired by a workshop from Steven Yi at the ICLC 2020 in Limerick. ",(0,i.jsx)(n.a,{href:"https://kunstmusik.github.io/learn-hex-beats/",children:"Learn hex beats here"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> ",(0,i.jsx)(n.code,{children:"string"}),"/",(0,i.jsx)(n.code,{children:"name"}),"/",(0,i.jsx)(n.code,{children:"number"})," of hexadecimal characters (0 t/m f) (optional, default=8)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list hex1 hexBeat()\n// => [1 0 0 0]\n\nlist hex2 hexBeat(a)\n// => [1 0 1 0]\n\nlist hex3 hexBeat(f9cb)\n// => [1 1 1 1 1 0 0 1 1 1 0 0 1 0 1 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"hex"})]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["In the MercuryPlayground writing ",(0,i.jsx)(n.code,{children:"hex(82fc)"})," causes an error because the value ",(0,i.jsx)(n.code,{children:"82fc"})," starts with a number so it is nota valid ",(0,i.jsx)(n.code,{children:"name"}),". To be able to use it anyways change that value into a string by adding quotes: ",(0,i.jsx)(n.code,{children:"hex('82fc')"})]})}),"\n",(0,i.jsx)(n.h3,{id:"fibonacci",children:"fibonacci"}),"\n",(0,i.jsxs)(n.p,{children:["Generate the Fibonacci sequence ",(0,i.jsx)(n.code,{children:"F(n) = F(n-1) + F(n-2)"}),". The ratio between consecutive numbers in the fibonacci sequence tends towards the Golden Ratio (1+\u221a5)/2."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"OEIS: A000045"})," (Online Encyclopedia of Integer Sequences)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> offset, start the sequence at nth-fibonacci number (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list fib1 fibonacci(10)\n// => [0 1 1 2 3 5 8 13 21 34]\n\nlist fib2 fibonacci(3 10)\n// => [55 89 144]\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["The numbers in the fibonacci sequence grow big quite fast! If you like to use these for melodic material consider using ",(0,i.jsx)(n.code,{children:"wrap()"}),", ",(0,i.jsx)(n.code,{children:"fold()"}),", ",(0,i.jsx)(n.code,{children:"clip()"})," or ",(0,i.jsx)(n.code,{children:"mod()"}),", or have a look at the ",(0,i.jsx)(n.code,{children:"pisano()"})," function below."]})}),"\n",(0,i.jsx)(n.h3,{id:"pisano",children:"pisano"}),"\n",(0,i.jsxs)(n.p,{children:["Translate the fibonacci sequence to the Pisano period sequence with a modulus operation. The pisano period is a result of applying a modulo (",(0,i.jsx)(n.code,{children:"%"}),") operation on the Fibonacci sequence ",(0,i.jsx)(n.code,{children:"F[n] = (F[n-1] + F[n-2]) mod a"}),". The length of the period differs per modulus value, but the sequence will always have a repetition at some point."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> modulus for pisano period (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list (optional, defaults to pisano-period length)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list psn1 pisano()\n// => [0 1 1 2 3 5 8 1 9 10 7 5 0 5 5 10 3 1 4 5 9 2 11 1]\n\nlist psn2 pisano(3)\n// => [0 1 1 2 0 2 2 1]\n\nlist psn3 pisano(11)\n// => [0 1 1 2 3 5 8 2 10 1]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"pell",children:"pell"}),"\n",(0,i.jsxs)(n.p,{children:["Generate the Pell numbers ",(0,i.jsx)(n.code,{children:"F(n) = 2 * F(n-1) + F(n-2)"}),". The ratio between consecutive numbers in the pell sequence tends towards the Silver Ratio 1 + \u221a2."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"OEIS: A006190"})," (Online Encyclopedia of Integer Sequences)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list pll1 pell(8)\n// => [0 1 2 5 12 29 70 169]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"lucas",children:"lucas"}),"\n",(0,i.jsxs)(n.p,{children:["Generate the Lucas numbers ",(0,i.jsx)(n.code,{children:"F(n) = F(n-1) + F(n-2), with F0=2 and F1=1"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"OEIS: A000032"})," (Online Encyclopedia of Integer Sequences)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list luc1 lucas(8)\n// => [2 1 3 4 7 11 18 29]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"threefibonacci",children:"threeFibonacci"}),"\n",(0,i.jsxs)(n.p,{children:["Generate the Tribonacci (3bonacci or threebonacci) numbers ",(0,i.jsx)(n.code,{children:"F(n) = 2 * F(n-1) + F(n-2)"}),". The ratio between consecutive numbers in the 3-bonacci sequence tends towards the Bronze Ratio (3 + \u221a13) / 2."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"OEIS: A000129"})," (Online Encyclopedia of Integer Sequences)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list tfi1 threeFibonacci(8)\n// => [0 1 3 10 33 109 360 1189]\n"})}),"\n",(0,i.jsx)(n.h2,{id:"stochastic-functions",children:"Stochastic Functions"}),"\n",(0,i.jsx)(n.p,{children:"The stochastic list functions are functions that create or transform a list with some form of randomness involved. This is psuedo-randomess that can be controlled with the random seed."}),"\n",(0,i.jsx)(n.h3,{id:"randomseed",children:"randomSeed"}),"\n",(0,i.jsxs)(n.p,{children:["Set the seed for the Random Number Generators. The RNG's are part of all the Stochastic Functions. This is not a list function but part of the ",(0,i.jsx)(n.code,{children:"global"})," settings. A value of ",(0,i.jsx)(n.code,{children:"0"})," sets to unpredictable seeding (which is the default). Read more about the ",(0,i.jsxs)(n.a,{href:"global#randomseed",children:[(0,i.jsx)(n.code,{children:"randomSeed"})," here"]}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 3141\n"})}),"\n",(0,i.jsx)(n.h3,{id:"random-randomfloat",children:"random (randomFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of random integers between a specified range (excluding the high value!). By adding ",(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of values to output as a list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> minimum range (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> maximum range (optional, default=2, default=1 for Float)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 31415\n\nlist rnd1 random(5)\n// => [1 0 0 1 1]\nlist rnd2 random(5 12)\n// => [0 10 3 2 2]\nlist rnd3 random(5 -12 12)\n// => [-2 -5 -8 -11 6]\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 31415\n\nlist rnf1 randomFloat(5)\n// => [0.81 0.32 0.01 0.85 0.88]\nlist rnf2 randomFloat(5 0 12)\n// => [0.16 10.72 3.16 262 2.34]\nlist rnf3 randomFloat(5 -12 12)\n// => [-1.19 -4.21 -7.36 -10.31 6.82]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"rand"}),", ",(0,i.jsx)(n.code,{children:"randF"})]}),"\n",(0,i.jsx)(n.h3,{id:"drunk-drunkfloat",children:"drunk (drunkFloat)"}),"\n",(0,i.jsxs)(n.p,{children:['Generate a list of random values but the next random value is within a limited range of the previous value generating a random "drunk" walk, also referred to as brownian motion. By adding ',(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of values to output as a list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> step range for next random value"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> minimum range (optional, default=null)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> maximum range (optional, default=null)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> starting point (optional, default=(lo+hi)/2)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> fold between lo and hi range (optional, default=true)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list dr1 drunk(10 5 0 24)\n//=> [ 13 10 14 13 14 13 15 10 8 4 ] \n\n// 22.00 \u253c \u256d\u256e \n// 17.80 \u253c\u2500\u256e\u256d\u2500\u256e \u2502\u2502 \n// 13.60 \u2524 \u2502\u2502 \u2570\u256e\u256d\u256f\u2502 \n// 9.40 \u2524 \u2502\u2502 \u2570\u256f \u2502 \n// 5.20 \u2524 \u2570\u256f \u2502 \n// 1.00 \u2524 \u2570 \n\nlist dr2 drunk(10 4 0 12 6 false)\n//=> [ 2 -2 2 1 -3 -1 -2 -1 3 6 ] \n\n// 2.00 \u2524\u256d\u256e \n// -0.20 \u2524\u2502\u2570\u256e \u256d \n// -2.40 \u253c\u256f \u2570\u256e \u2502 \n// -4.60 \u2524 \u2502\u256d\u256e \u256d\u256f \n// -6.80 \u253c \u2570\u256f\u2502\u256d\u256f \n// -9.00 \u2524 \u2570\u256f \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list dr1 drunkFloat(5)\n//=> [ 0.493 0.459 0.846 0.963 0.400 ] \n\n// 0.88 \u253c\u256e\u256d\u256e \n// 0.76 \u2524\u2570\u256f\u2502 \n// 0.63 \u2524 \u2502 \n// 0.51 \u2524 \u2570\u256e \n// 0.39 \u2524 \u2502 \n// 0.26 \u2524 \u2570 \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"drunkF"})]}),"\n",(0,i.jsx)(n.h3,{id:"urn",children:"urn"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list of unique random integer values between a certain specified range (excluding high val). An 'urn' is filled with values and when one is picked it is removed from the urn. If the outputlist is longer then the range, the urn refills when empty. On refill it is made sure no repeating value can be picked."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of values to output as a list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> maximum range (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> minimum range (optional, defautl=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 1618\n\nlist urn1 urn(5)\n// => [3 7 10 0 2]\nlist urn2 urn(8 4)\n// => [0 2 1 3 1 3 0 2]\nlist urn3 urn(8 10 14)\n// => [13 10 12 11 12 10 13 11]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"coin",children:"coin"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of random integer values 1 or 0 like a coin toss, heads/tails. Useful for generating random rhythms. ",(0,i.jsx)(n.code,{children:"coin()"})," is basically a ",(0,i.jsx)(n.code,{children:"random()"})," with a range of 2."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of coin tosses to output as list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list coin1 coin(8)\n// => [1 0 1 0 1 0 1 1]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"dice",children:"dice"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list of random integer values 1 till 6 (inclusive) like you would roll some dice."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of dice rolls to output as list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list dice1 dice(8)\n// => [5 4 6 4 4 5 4 2]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"clave",children:"clave"}),"\n",(0,i.jsx)(n.p,{children:"Generate random clave patterns. The output is a binary list that represents a rhythm, where 1's can represent onsets and 0's rests. The first argument sets the list length output, second argument sets the maximum gap between onsets, third argument the minimum gap."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list (default=8)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> maximum gap between onsets (default=3)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> minimum gap between onsets (default=2)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list clv1 clave()\n//=> [ 1 0 1 0 0 1 0 1 ] \n\nlist clv2 clave(8)\n//=> [ 1 0 0 1 0 1 0 1 ] \n\nlist clv3 clave(16 4)\n//=> [ 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 1 ] \n\nlist clv4 clave(16 3 1)\n//=> [ 1 0 0 1 0 0 1 1 0 0 1 0 1 0 0 1 ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"twelvetone",children:"twelveTone"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list of all 12 semitones in one octave (12-TET) then shuffle the list based on the random seed."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"None"})}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list twv1 twelveTone()\n// => [10 7 6 3 2 9 8 4 1 5 0 11]\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"//Basically a shorthand for: \nlist notes spread(12)\nlist notes shuffle(notes)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"choose",children:"choose"}),"\n",(0,i.jsx)(n.p,{children:"Choose random items from a list provided with uniform probability distribution. The default list is a list of 0 and 1."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> length of list output"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> items to choose from (optional, default=[0 1])"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 62832\n\nlist samples [hat snare kick]\nlist sequence choose(10 samples)\n// => [hat kick hat kick hat snare kick hat hat hat]\n\nlist notes [0 3 7 5 9 12]\nlist melody choose(10 notes)\n// => [0 5 3 9 0 7 3 12 3 7]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"pick",children:"pick"}),"\n",(0,i.jsx)(n.p,{children:'Pick random items from a list provided. An "urn" is filled with values and when one is picked it is removed from the urn. If the outputlist is longer then the range, the urn refills when empty. On refill it is made sure no repeating value can be picked.'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> length of list output"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> items to choose from (optional, default=[0 1])"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 62832\n\nlist samples [hat snare kick tom]\nlist sequence pick(10 samples)\n// => [hat kick tom snare tom hat snare kick tom hat]\n\nlist notes [0 3 7 5 9 12]\nlist melody pick(10 notes)\n// => [3 0 7 9 12 5 0 7 12 9]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"shuffle",children:"shuffle"}),"\n",(0,i.jsx)(n.p,{children:"Shuffle a list, influenced by the random seed. Based on the Fisher-Yates shuffle algorithm by Ronald Fisher and Frank Yates in 1938. The algorithm has run time complexity of O(n)."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to shuffle"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 14142\n\nlist samples [hat snare kick tom]\nlist shf1 shuffle(samples)\n// => [snare tom kick hat]\n\nlist notes [0 3 7 5 9 12]\nlist shf2 scramble(notes)\n// => [12 0 3 7 5 9]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"expand",children:"expand"}),"\n",(0,i.jsxs)(n.p,{children:["Expand a list based on the pattern/progression within a list. The pattern is derived from the rate of change between values by calculating the differences between every consecutive value. The newly generated values are selected randomly from the list of possible changes, but in such a way that every change occurs once in the sequence of total changes before reshuffling and selecting the next one (see the ",(0,i.jsx)(n.code,{children:"pick"})," method for explanation). The resulting output starts with the input list."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to expand"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> length of list output"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 3141\nlist notes [0 9 7 3 5 0 -1]\nlist exp expand(notes 30)\n\n//=> 9.00 \u2524\u256d\u256e \u256d\u256e \n// 6.80 \u2524\u2502\u2570\u256e \u2502\u2502 \n// 4.60 \u2524\u2502 \u2502\u256d\u256e \u2502\u2502 \n// 2.40 \u2524\u2502 \u2570\u256f\u2502 \u2502\u2570\u2500\u256e \u256d\u2500\u256e \n// 0.20 \u253c\u256f \u2570\u2500\u256e\u256d\u256f \u2502 \u2502 \u2502\u256d \n// -2.00 \u2524 \u2570\u256f \u2570\u256e \u256d\u2500\u256e \u2502 \u2570\u256f \n// -4.20 \u253c \u2502 \u2502 \u2502 \u256d\u256e\u2502 \n// -6.40 \u2524 \u2570\u256e \u2502 \u2502 \u2502\u2570\u256f \n// -8.60 \u2524 \u2502\u256d\u256e\u2502 \u2570\u2500\u256e \u2502 \n// -10.80 \u2524 \u2570\u256f\u2570\u256f \u2502\u256d\u256e\u2502 \n// -13.00 \u2524 \u2570\u256f\u2570\u256f \n\nset randomSeed 6181\nlist exp2 expand(notes 30)\n\n//=> 9.00 \u2524\u256d\u256e \n// 6.80 \u2524\u2502\u2570\u256e \n// 4.60 \u2524\u2502 \u2502\u256d\u256e \n// 2.40 \u2524\u2502 \u2570\u256f\u2502 \u256d\u256e\u256d\u256e \n// 0.20 \u253c\u256f \u2570\u2500\u256e\u256d\u256e \u2502\u2570\u256f\u2570\u256e \u256d\u2500\u2500 \n// -2.00 \u2524 \u2570\u256f\u2502 \u256d\u256e\u2502 \u2570\u256e \u2502 \n// -4.20 \u253c \u2570\u256e \u2502\u2502\u2502 \u2570\u256e \u256d\u256e \u2502 \n// -6.40 \u2524 \u2502 \u2502\u2570\u256f \u2502\u256d\u256e \u2502\u2502 \u2502 \n// -8.60 \u2524 \u2570\u256e\u2502 \u2570\u256f\u2570\u256e\u2502\u2570\u256e\u2502 \n// -10.80 \u2524 \u2570\u256f \u2502\u2502 \u2570\u256f \n// -13.00 \u2524 \u2570\u256f \n"})}),"\n",(0,i.jsx)(n.h3,{id:"markovtrain",children:"markovTrain"}),"\n",(0,i.jsxs)(n.p,{children:["Build a Markov Chain transition table from a set of datapoints (a list) and use it together with ",(0,i.jsx)(n.code,{children:"markovChain()"})," to generate a new list of values based on the probabilities of the transitions in the provided training dataset. A Markov Chain is a model that describes possible next events based on a current state (first order) or multiple previous states (2nd, 3rd, ... n-order). The Markov Chain is a broadly used method in algorithmic music to generate new material (melodies, rhythms, but even words) based on a set of provided material, but can also be used in linguistics to analyze word or sentence structures. The first argument is the list to analyze, the second argument is the nth-order (default = 2). In theory, longer chains preserve the original structure of the model, but won't generate as diverse outputs. The output is a"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to analyze into transition table"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Order of the markov-chain (optional, default=2)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"return"})," -> Transition table as a string"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list melody [ 0 0 7 7 9 9 7 5 5 4 4 2 2 0 ]\nlist model markovTrain(melody 2)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"markov"})]}),"\n",(0,i.jsx)(n.h3,{id:"markovchain",children:"markovChain"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of values of n-length based on a markov transition table (a model) that was trained with ",(0,i.jsx)(n.code,{children:"markovTrain()"}),". The first argument determines the output length, the second input is the reference to the markov model. The resulting output is based on the probabilities that are captured within the transition table. This means the output can also be directed by the ",(0,i.jsx)(n.code,{children:"randomSeed"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list melody [ 0 0 7 7 9 9 7 5 5 4 4 2 2 0 ]\nlist model markovTrain(melody 3)\n\nset randomSeed 3141\n\nlist markovMelody markovChain(16 model)\n//=> [9 7 7 5 5 4 4 2 2 0 0 5 4 4 2 2]\n"})}),"\n",(0,i.jsx)(n.h2,{id:"transform-functions",children:"Transform Functions"}),"\n",(0,i.jsx)(n.p,{children:"The transform list-functions are functions that take one or multiple lists as input and transform them based on a procedure. The output is again a list with the result of the process."}),"\n",(0,i.jsx)(n.h3,{id:"clone",children:"clone"}),"\n",(0,i.jsx)(n.p,{children:"Duplicate a list with an offset added to every value."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"IntList"})," -> List to clone"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int, Int2, ... Int-n"})," -> amount of clones with integer offset"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7]\nlist melody clone(notes 0 12 7 -7)\n// => [0 3 7 12 15 19 7 10 14 -7 -4 0]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"join",children:"join"}),"\n",(0,i.jsx)(n.p,{children:"Join lists into one list. Using multiple lists as arguments is possible."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List-0, List-1, ..., List-n"})," -> List to combine"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list partA [0 3 7]\nlist partB [24 19 12]\nlist partC [-7 -3 -5]\nlist phrase join(partA partB partC)\n// => [0 3 7 24 19 12 -7 -5 -3]\n\nlist partD [kick hat snare hat]\nlist partE [hat hat hat snare]\nlist sequence join(partD partE)\n// => [kick hat snare hat hat hat hat snare]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"combine"})]}),"\n",(0,i.jsx)(n.h3,{id:"copy",children:"copy"}),"\n",(0,i.jsx)(n.p,{children:"Copy a list a certain amount of times."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to duplicate"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> amount of duplicates (optional, default=2)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7]\nlist phrase copy(notes 4)\n// => [0 3 7 0 3 7 0 3 7 0 3 7]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"duplicate"})]}),"\n",(0,i.jsx)(n.h3,{id:"pad",children:"pad"}),"\n",(0,i.jsxs)(n.p,{children:["Pad a list with zeroes (or any other value) up to the length specified. The padding value can optionally be changed and the shift argument rotates the list n-steps left or right (negative). This method is similar to ",(0,i.jsx)(n.code,{children:"every()"})," except arguments are not specified in musical bars/divisions."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"NumberList"})," -> List to use every n-bars"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> output length of list (optional, default=16)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value"})," -> padding value for the added items (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> shift in steps (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list pad2 pad(pad1 9)\n// [ 3 7 11 12 0 0 0 0 0]\n\nlist pad3 pad([c f g] 11 - 4)\n// [ - - - - c f g - - - - ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"every",children:"every"}),"\n",(0,i.jsx)(n.p,{children:"Add zeroes to a list with a number sequence. The division determines the amount of values per bar. The total length = bars * div. This function is very useful for rhythms that must occur once in a while, but can also be use for melodic phrases or other things."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"IntList"})," -> List to use every n-bars"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> amount of bars (optional, default=4)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> amount of values per bar (optional, default=16)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list rhythm [1 0 1 1 0 1 1]\nlist sequence every(rhythm 2 8)\n// => [1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0]\n\nlist melody [12 19 24 27 24]\nlist phrase every(melody 2 8)\n// => [12 19 24 27 24 0 0 0 0 0 0 0 0 0 0 0]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"flat",children:"flat"}),"\n",(0,i.jsx)(n.p,{children:"Flatten a multidimensional list. Optionally set the depth for the flattening with the second argument. Flattening a list removes the multi-dimensionality of a list and outputs only a 1D-list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to flatten"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> depth of flatten (default=Infinity)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list fl1 flat([1 [2 3 [ 4 ] 5] 6])\n//=> [ 1 2 3 4 5 6 ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"invert",children:"invert"}),"\n",(0,i.jsx)(n.p,{children:"Invert a list of values by mapping the lowest value to the highest value and vice versa, flipping everything in between. Second optional argument sets the center to flip values around. Third optional argument sets a range to flip values against."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"IntList"})," -> list to invert"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> invert center / lower range (optional)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> upper range (optional)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7 12]\nlist inv1 invert(notes)\n// => [12 9 5 0]\n\nlist inv2 invert(notes 5)\n// => [10 7 3 -2]\n\nlist inv3 invert(notes 3 10)\n// => [13 10 6 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"inverse"}),", ",(0,i.jsx)(n.code,{children:"flip"}),", ",(0,i.jsx)(n.code,{children:"inv"})]}),"\n",(0,i.jsx)(n.h3,{id:"lace",children:"lace"}),"\n",(0,i.jsx)(n.p,{children:"Interleave, lace, zip two or more lists. The output length of the list is always the length of the longest input list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List0, List1, ..., List-n"})," -> Lists to interleave"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list partA [0 3 7 5 0]\nlist partB [12 19 15]\nlist partC [24 22]\nlist melody lace(partA partB)\n// => [0 12 24 3 19 22 7 15 5 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"zip"})]}),"\n",(0,i.jsx)(n.h3,{id:"lookup",children:"lookup"}),"\n",(0,i.jsx)(n.p,{children:"Build a list of items based on another list of indices. The values are wrapped within the length of the lookup list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"NumberList"})," -> List with indeces to lookup"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List with values returned from lookup"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> Looked up values"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list items [c e f g]\nlist indices [0 1 1 2 0 2 2 1]\n\n// first list is the index, second list are the items to lookup\nlist notes lookup(indices items)\n//=> [ c e e f c f f e ]\n\n// indices are wrapped between listlength\nlist indices [8 -5 144 55]\nlist notes lookup(indices items)\n//=> [ g e c e ]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"get"})]}),"\n",(0,i.jsx)(n.h3,{id:"merge",children:"merge"}),"\n",(0,i.jsx)(n.p,{children:"Merge all values of two lists on the same index into a 2-dimensional list. Preserves the length of longest input list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List0, List1, ..., List-n"})," -> Lists to merge"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list partA [0 3 7 5 0]\nlist partB [12 19 15] \nlist merged merge(partA partB)\n// => [[0 12] [3 19] [7 15] 5 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"mix"})]}),"\n",(0,i.jsx)(n.h3,{id:"palindrome",children:"palindrome"}),"\n",(0,i.jsxs)(n.p,{children:["Reverse a list and concatenate it to the input list, creating a palindrome of the list. A second argument ",(0,i.jsx)(n.code,{children:"1"})," will remove the duplicates halfway through and at the end."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to make palindrome of"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> no-double flag (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7 12]\nlist melodyA palindrome(notes)\n// => [0 3 7 12 12 7 3 0]\n\nlist melodyB palindrome(notes 1)\n// => [0 3 7 12 7 3]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"palin"}),", ",(0,i.jsx)(n.code,{children:"mirror"})]}),"\n",(0,i.jsx)(n.h3,{id:"repeat",children:"repeat"}),"\n",(0,i.jsx)(n.p,{children:"Repeats separate values in a list a certain amount of times. The repeat-er argument can be a list that will be iterated for every value in the to-repeat list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to repeat"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+/Int(List)"})," -> amount of repeats per value"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7]\nlist phrase repeat(notes 4)\n// => [0 0 0 0 3 3 3 3 7 7 7 7]\n\nlist repeats [2 5 3]\nlist phraseB repeat(notes repeats)\n// => [0 0 3 3 3 3 3 7 7 7]\n\n// also works with strings\nlist samples [kick snare hat]\nlist beats repeat(samples repeats)\n// => [kick kick snare snare snare snare hat hat hat]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"reverse",children:"reverse"}),"\n",(0,i.jsx)(n.p,{children:"Reverse the order of items in a list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to reverse"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list melody [0 3 7 5]\nlist rev reverse(melody)\n// => [5 7 3 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"rev"})]}),"\n",(0,i.jsx)(n.h3,{id:"rotate",children:"rotate"}),"\n",(0,i.jsx)(n.p,{children:"Rotate the position of items in a list. positive numbers = direction right, negative numbers = direction left"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to rotate"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> Steps to rotate"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list melody [0 3 7 5 7 9 12]\nlist left rotate(melody -2)\n// => [7 5 7 9 12 0 3]\n\nlist right rotate(melody 2)\n// => [9 12 0 3 7 5 7]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"rot"})]}),"\n",(0,i.jsx)(n.h3,{id:"sort",children:"sort"}),"\n",(0,i.jsx)(n.p,{children:"Sort a list of numbers or strings. sorts ascending or descending in numerical and alphabetical order."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to sort"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> sort direction (positive value is ascending, default=1)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list srt1 sort([-5 7 0 3 12 -7 9] -1)\n//=> [ 12 9 7 3 0 -5 -7 ] \n\n// works with strings (but alphabetical order!)\nlist srt2 sort([e4 g3 c4 f3 b5])\n//=> [ b5 c4 e4 f3 g3 ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"slice",children:"slice"}),"\n",(0,i.jsx)(n.p,{children:"Slice a list in one or multiple parts. Slice lengths are determined by the second argument list. Outputs a list of lists of the result"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to slice in parts"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> slice lengths to slice list into"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> output rest flag (optional, default=false)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sl1 slice(spread(8) [3 2])\n//=> [ [ 0 1 2 ] [ 3 4 ] [ 5 6 7 ] ] \n\n// set rest-flag to false removes last slice \nlist sl2 slice(spread(24) [3 2 -1 5] 0)\n//=> [ [ 0 1 2 ] [ 3 4 ] [ 5 6 7 8 9 ] ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"split",children:"split"}),"\n",(0,i.jsx)(n.p,{children:"Similar to slice in that it also splits a list, except that slice recursively splits until the list is completely empty. If a list is provided as split sizes it will iterate the lengths."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to split in parts"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> split lengths to split list into"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sp1 split(spread(12) 3)\n//=> [ [ 0 1 2 ] [ 3 4 5 ] [ 6 7 8 ] [ 9 10 11 ] ] \n\nlist sp2 split(spread(12) [3 2 -1])\n//=> [ [ 0 1 2 ] [ 3 4 ] [ 5 6 7 ] [ 8 9 ] [ 10 11 ] ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"cut",children:"cut"}),"\n",(0,i.jsx)(n.p,{children:"Cut the beginning of a list and return. Slice length is determined by the second argument number. Outputs a list of the result."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to slice in parts"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> slice length to cut list into"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> output rest flag (optional, default=false)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list ct1 cut(spread(8) 3)\n//=> [ 0 1 2 ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"spray",children:"spray"}),"\n",(0,i.jsx)(n.p,{children:'"Spray" the values of one list on the places of values of another list if that value is greater than 0. Wraps input list if more places must be set then length of the list. This function is interesting to use for melodic material that needs some rhythmic aspect too.'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to spray"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> Positions to spray on"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [12 19 15 17]\nlist places [1 0 0 1 1 0 1 0 1 0]\nlist sprayed spray(notes places)\n// => [12 0 0 19 15 0 17 0 12 0]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"stretch-stretchfloat",children:"stretch (stretchFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Stretch (or shrink) a list to a specified length, linearly interpolating between all values within the list. Minimum output length is 2 (which will be the outmost values from the list). Third optional argument sets the interpolation mode. Available modes are ",(0,i.jsx)(n.code,{children:"none"})," (or ",(0,i.jsx)(n.code,{children:"null"}),", ",(0,i.jsx)(n.code,{children:"false"}),") and ",(0,i.jsx)(n.code,{children:"linear"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 12 3 7]\nlist str stretch(notes 15)\n//=> [ 0 2 5 7 10 11 9 7 5 3 3 4 5 6 7 ] \n\n// 12.00 \u253c \u256d\u256e \n// 9.60 \u2524 \u2502\u2570\u256e \n// 7.20 \u2524 \u256d\u256f \u2502 \u256d \n// 4.80 \u2524\u256d\u256f \u2570\u256e\u256d\u2500\u256f \n// 2.40 \u2524\u2502 \u2570\u256f \n// 0.00 \u253c\u256f \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// use stretchFloat if you want the result to have more precision\nlist str stretchFloat(notes 15)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"stretchF"})]}),"\n",(0,i.jsx)(n.h3,{id:"unique",children:"unique"}),"\n",(0,i.jsx)(n.p,{children:"Filter duplicate items from a list. It does not account for 2-dimensional lists in the list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to filter"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 5 7 3 7 7 0 12 5]\nlist thinned unique(notes)\n// => [0 5 7 3 12]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"thin"})]}),"\n",(0,i.jsx)(n.h2,{id:"utility-functions",children:"Utility Functions"}),"\n",(0,i.jsx)(n.p,{children:"The utility list-functions are a set of functions that are mainly helpful in combination with other lists. Like performing basic arithmetic such as adding, subtracting or performing some other functionality like wrapping values between a range or mapping the input list to an output range."}),"\n",(0,i.jsx)(n.h3,{id:"add",children:"add"}),"\n",(0,i.jsx)(n.p,{children:"Add a single value to a list or add two lists sequentially."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals add([1 2 3 4] [1 2 3])\n//=> [ 2 4 6 5 ] \n\n// Works with n-dimensional lists\nlist vals add([1 [2 3]] [10 [20 30 40]])\n//=> [ 11 [ 22 33 42 ] ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"subtract",children:"subtract"}),"\n",(0,i.jsx)(n.p,{children:"Subtract a single value from a list or subtract two lists sequentially."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals subtract([1 2 3 4] [1 2 3])\n//=> [ 0 0 0 3 ] \n\nlist vals sub([1 [2 3]] [10 [20 30 40]])\n//=> [ -9 [ -18 -27 -38 ] ] \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"sub"})]}),"\n",(0,i.jsx)(n.h3,{id:"multiply",children:"multiply"}),"\n",(0,i.jsx)(n.p,{children:"Multiply a single value to a list or multiply two lists sequentially."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals multiply([1 2 3 4] [1 2 3])\n//=> [ 1 4 9 4 ] \n\nlist vals mul([1 [2 3]] [10 [20 30 40]])\n//=> [ 10 [ 40 90 80 ] ] \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"mul"})]}),"\n",(0,i.jsx)(n.h3,{id:"divide",children:"divide"}),"\n",(0,i.jsx)(n.p,{children:"Divide a single value from a list or multiply two lists sequentially."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals divide([1 2 3 4] [1 2 3])\n//=> [ 1 1 1 4 ] \n\nlist vals div([1 [2 3]] [10 [20 30 40]])\n//=> [ 0.1 [ 0.1 0.1 0.05 ] ] \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"div"})]}),"\n",(0,i.jsx)(n.h3,{id:"mod",children:"mod"}),"\n",(0,i.jsx)(n.p,{children:"Return the remainder after division. Also works in the negative direction, so the wrapping starts at 0."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int(List)"})," -> Input value"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int(List)"})," -> Divisor (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int(List)"})," -> Remainder after division"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals mod([-2 [4 [3 7]]] 5)\n//=> [ 3 [ 4 [ 3 2 ] ] ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"clip",children:"clip"}),"\n",(0,i.jsx)(n.p,{children:"Constrain values from a list within a specified low and high range."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to constrain"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low value (optional default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High value (optional default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list cn1 constrain([0 [1 [2 3]] [4 5] 6] 2 5)\n//=> [ 2 [ 2 [ 2 3 ] ] [ 4 5 ] 5 ] \n\nlist cn2 constrain(cosine(30 1) 5 9)\n//=> 9.00 \u253c\u2500\u2500\u2500\u2500\u2500\u256e \u256d\u2500\u2500\u2500 \n// 8.20 \u2524 \u2502 \u256d\u256f \n// 7.40 \u2524 \u2570\u256e \u256d\u256f \n// 6.60 \u2524 \u2570\u256e \u256d\u256f \n// 5.80 \u2524 \u2502 \u2502 \n// 5.00 \u2524 \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f \n\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"constrain"})]}),"\n",(0,i.jsx)(n.h3,{id:"wrap",children:"wrap"}),"\n",(0,i.jsx)(n.p,{children:"Wrap values from a list within a specified lower and upper range."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to wrap"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Lower value (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Upper value (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list wr1 wrap([0 [1 [2 3]] [4 5] 6] 2 5)\n//=> [ 3 [ 4 [ 2 3 ] ] [ 4 2 ] 3 ] \n\nlist wr2 wrap(spread(30) 2 8)\n//=> 7.00 \u2524\u256d\u256e \u256d\u256e \u256d\u256e \u256d\u256e \u256d\u256e \n// 6.00 \u253c\u256f\u2502 \u256d\u256f\u2502 \u256d\u256f\u2502 \u256d\u256f\u2502 \u256d\u256f\u2502 \n// 5.00 \u2524 \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d \n// 4.00 \u2524 \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \n// 3.00 \u2524 \u2502\u256d\u256f \u2502\u256d\u256f \u2502\u256d\u256f \u2502\u256d\u256f \u2502\u256d\u256f \n// 2.00 \u2524 \u2570\u256f \u2570\u256f \u2570\u256f \u2570\u256f \u2570\u256f \n"})}),"\n",(0,i.jsx)(n.h3,{id:"fold",children:"fold"}),"\n",(0,i.jsx)(n.p,{children:'Fold values from a list within a specified lower and upper range. Folding "bounces" the number back when it reaches the limit, instead of wrapping back to the other side or clipping.'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to fold"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low value (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High value (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list fl1 fold([0 [1 [2 3]] [4 5] 6] 2 5)\n//=> [ 4 [ 3 [ 2 3 ] ] [ 4 5 ] 4 ]\n\nlist fl2 fold(spreadFloat(30 -9 13) 0 1)\n//=> 1.00 \u253c\u256e \u256d\u256e \u256d\u256e \n// 0.80 \u2524\u2502 \u256d\u256e \u256d\u256e \u2502\u2502 \u256d\u256e\u256d\u256e \u2502\u2502 \u256d\u256e \u256d\u256e \n// 0.60 \u2524\u2502 \u2502\u2502\u256d\u2500\u256e\u2502\u2502 \u2502\u2502\u256d\u256f\u2502\u2502\u2570\u256e\u2502\u2502 \u2502\u2502\u256d\u2500\u256e\u2502\u2502 \n// 0.40 \u2524\u2502\u256d\u256f\u2502\u2502 \u2502\u2502\u2570\u2500\u256f\u2502\u2502 \u2502\u2502 \u2502\u2502\u2570\u2500\u256f\u2502\u2502 \u2502\u2502\u2570\u256e \n// 0.20 \u2524\u2570\u256f \u2502\u2502 \u2570\u256f \u2570\u256f \u2502\u2502 \u2570\u256f \u2570\u256f \u2502\u2502 \u2570 \n// 0.00 \u2524 \u2570\u256f \u2570\u256f \u2570\u256f \n"})}),"\n",(0,i.jsx)(n.h3,{id:"map",children:"map"}),"\n",(0,i.jsx)(n.p,{children:"Rescale values in a list from a specified input range to a specified low and high output range."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to wrap"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low value (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High value (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low value (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High value (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Exponent value (optional, default=1)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sc1 scale([0 [1 [2 3]] 4] 0 4 -1 1)\n//=> [ -1 [ -0.5 [ 0 0.5 ] ] 1 ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"normalize",children:"normalize"}),"\n",(0,i.jsxs)(n.p,{children:["Normalize all the values in a list between ",(0,i.jsx)(n.code,{children:"0"})," and ",(0,i.jsx)(n.code,{children:"1"}),". The highest value will be 1, the lowest value will be 0."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Input list to normalize"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals normalize([0 1 2 3 4])\n//=> [ 0 0.25 0.5 0.75 1 ]\n\n// works with n-dimensional lists\nlist vals normalize([5 [12 [4 17]] 3 1])\n//=> [ 0.25 [ 0.6875 [ 0.1875 1 ] ] 0.125 0 ] \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"norm"})]}),"\n",(0,i.jsx)(n.h3,{id:"equals",children:"equals"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for equals (",(0,i.jsx)(n.code,{children:"=="}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals eq([0 10 20 30] [20 0 30 30])\n//=> [0 0 0 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"eq"})]}),"\n",(0,i.jsx)(n.h3,{id:"notequals",children:"notEquals"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two list for not equals (",(0,i.jsx)(n.code,{children:"!="}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals neq([0 10 20 30] [20 0 30 30])\n//=> [1 1 1 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"neq"})]}),"\n",(0,i.jsx)(n.h3,{id:"greater",children:"greater"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for left values are greater than right (",(0,i.jsx)(n.code,{children:">"}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals gt([0 10 20 30] [20 0 30 30])\n//=> [0 1 0 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"gt"})]}),"\n",(0,i.jsx)(n.h3,{id:"greaterequals",children:"greaterEquals"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for left values are greater than or equal to right (",(0,i.jsx)(n.code,{children:">="}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals gte([0 10 20 30] [20 0 30 30])\n//=> [0 1 0 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"gte"})]}),"\n",(0,i.jsx)(n.h3,{id:"less",children:"less"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for left values are less than right (",(0,i.jsx)(n.code,{children:"<"}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals lt([0 10 20 30] [20 0 30 30])\n//=> [1 0 1 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"lt"})]}),"\n",(0,i.jsx)(n.h3,{id:"lessequals",children:"lessEquals"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for left values less than or equal to right (",(0,i.jsx)(n.code,{children:"<="}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals lte([0 10 20 30] [20 0 30 30])\n//=> [1 0 1 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"lte"})]}),"\n",(0,i.jsx)(n.h2,{id:"size",children:"size"}),"\n",(0,i.jsxs)(n.p,{children:["Return the length/size of a list as a ",(0,i.jsx)(n.code,{children:"number"})," if the argument is a list. If the argument is a number return the number as a positive integer greater than 0. If the argument is not a number return 1. The method can be used to input lists as arguments for other functions."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"analyser"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value(List)"})," -> input list to check size of"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"size([5 7 3 2 9])\n//=> 5\n\nsize(8)\n//=> 8\n\nsize(3.1415)\n//=> 3\n\nsize('foo')\n//=> 1\n\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"length"})]}),"\n",(0,i.jsx)(n.h2,{id:"sum",children:"sum"}),"\n",(0,i.jsxs)(n.p,{children:["Return the sum of all values in a list as a ",(0,i.jsx)(n.code,{children:"number"}),". The function ignores all non-numeric values. Works recursively with n-dimensional lists."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"analyser"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value(List)"})," -> input list to check size of"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"sum([1 2 3 4])\n//=> 10 \n\nsum([10 'foo' 11 'bar' 22])\n//=> 43 \n\nsum([1 2 [3 4 [5 6] 7] 8])\n//=> 36\n"})}),"\n",(0,i.jsx)(n.h2,{id:"translate-functions",children:"Translate Functions"}),"\n",(0,i.jsx)(n.h3,{id:"conversion-between-pitch-units",children:"Conversion between pitch units"}),"\n",(0,i.jsxs)(n.p,{children:["Convert easily between relative-semitones, midinotes, notenames, chord-numerals, chordnames and frequencies with the functions below. Thankfully using the amazing ",(0,i.jsx)(n.code,{children:"Tonal.js"})," package by ",(0,i.jsx)(n.code,{children:"@danigb"})," for various functions."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// Convert list or Int as midi-number to midi-notenames\nmidiToNote([60 [63 67 69] [57 65]])\n//=> [ c4 [ eb4 g4 a4 ] [ a3 f4 ] ] \n// Alias: mton\n\n// Convert midi-pitches to frequency (A4 = 440 Hz)\nmidiToFreq([60 [63 67 69] [57 65]])\n//=> [ 261.63 [ 311.13 391.995 440 ] [ 220 349.23 ] ] \n// Alias: mtof\n\n// Convert list of String as midi-notenames to midi-pitch\nnoteToMidi([c4 [eb4 g4 a4] [a3 f4]])\n//=> [ 60 [ 63 67 69 ] [ 57 65 ] ] \n// Alias: ntom\n\n// Convert midi-notenames to frequency (A4 = 440 Hz)\nnoteToFreq([c4 [eb4 g4 a4] [a3 f4]])\n//=> [ 261.63 [ 311.13 391.995 440 ] [ 220 349.23 ] ] \n// Alias: ntof\n\n// Convert frequency to nearest midi note\nfreqToMidi([ 261 [ 311 391 440 ] [ 220 349 ] ])\n//=> [ 60 [ 63 67 69 ] [ 57 65 ] ] \n// Alias: ftom\n\n// Set detune flag to true to get floating midi output for pitchbend\nfreqToMidi([ 261 [ 311 391 440 ] [ 220 349 ] ] true)\n//=> [ 59.959 [ 62.993 66.956 69 ] [ 57 64.989 ]] \n\n// Convert frequency to nearest midi note name\nfreqToNote([ 261 [ 311 391 440 ] [ 220 349 ] ])\n//=> [ c4 [ eb4 g4 a4 ] [ a3 f4 ] ] \n// Alias: fton\n\n// Convert relative semitone values to midi-numbers\n// specify the octave as second argument (default = C4 = 4 => 48)\nrelativeToMidi([[-12 -9 -5] [0 4 7] [2 5 9]] c4)\n//=> [ [ 48 51 55 ] [ 60 64 67 ] [ 62 65 69 ] ]\n// Alias: rtom\n\n// Convert relative semitone values to frequency (A4 = 440 Hz)\n// specify the octave as second argument (default = C4 = 4 => 48)\nrelativeToFreq([[-12 -9 -5] [0 4 7] [2 5 9]] c4)\n//=> [ [ 130.81 155.56 196 ] [ 261.62 329.63 392 ] [ 293.66 349.23 440 ] ]\n// Alias: rtof\n\n// Convert a chroma value to a relative note number\n// Can also include octave offsets with -/+ case-insensitive\nchromaToRelative([c [eb G Ab] [a+ f-]]) \n//=> [ 0 [ 3 7 8 ] [ 21 -7 ] ]\n// Alias: ctor\n\n// Convert ratio to relative cents\nratioToCent([2/1 [3/2 [4/3 5/4]] 9/8])\n//=> [ 1200 [ 701.95 [ 498.04 386.31 ] ] 203.91 ] \n// Alias: rtoc\n\n// Convert a chord progression from roman numerals to semitones\nchordsFromNumerals([I IIm IVsus2 V7 VIm9])\n// => [[ 0 4 7 ]\n// [ 2 5 9 ]\n// [ 5 7 0 ]\n// [ 7 11 2 5 ]\n// [ 9 0 4 7 11 ]] \n// Alias: chords\n\n// Convert a chord progression from chordnames to semitones\nchordsFromNames([C Dm Fsus2 G7 Am9])\n//=> [[ 0 4 7 ]\n// [ 2 5 9 ]\n// [ 5 7 0 ]\n// [ 7 11 2 5 ]\n// [ 9 0 4 7 11 ]] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"conversion-between-time-units",children:"Conversion between time units"}),"\n",(0,i.jsx)(n.p,{children:"Convert between rhythmic notation such as divisions or ratios and milliseconds based on the set tempo in the global settings."}),"\n",(0,i.jsx)(n.h4,{id:"divisiontoms",children:"divisionToMs"}),"\n",(0,i.jsx)(n.p,{children:"Convert beat division strings or beat ratio floats to milliseconds using BPM from the global settings. Optional second argument sets BPM and ignores global setting."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> beat division or ratio list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> set the BPM (optional, default = global tempo)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set tempo 120\nlist divs [1/4 1/2 1/8 3/16 1/4 1/6 2]\nlist ms1 divisionToMs(divs)\n// => [500 1000 250 375 500 333.33 4000]\nlist ms2 divisionToMs(divs 100)\n// => [600 1200 300 450 600 400 4800]\n\nlist ratios [0.25 0.125 0.1875 0.25 0.16667 2]\nlist ms3 divisionToMs(ratios)\n// => [500 1000 250 375 500 333.33 4000]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"dtoms"})]}),"\n",(0,i.jsx)(n.p,{children:"Other functions:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// convert beat division strings to beat ratio floats\ndivisionToRatio([1/4 1/8 3/16 1/4 1/6 2])\n//=> [ 0.25 0.125 0.1875 0.25 0.167 2 ] \n// Alias: print dtor\n\n// convert beat ratio floats to milliseconds\nratioToMs([0.25 [0.125 [0.1875 0.25]] 0.1667 2] 100)\n//=> [ 600 [ 300 [ 450 600 ] ] 400.08 4800 ] \n// Alias: print rtoms\n"})}),"\n",(0,i.jsx)(n.h3,{id:"working-with-fixed-scale-and-root",children:"Working with fixed scale and root"}),"\n",(0,i.jsx)(n.p,{children:"Convert notes to a fixed scale based on the global settings."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// Set the global scale used with toScale() and toMidi() functions\nset scale minor a\n\n// Set only the root for the global scale\nset root c\n\n// Return all the available scale names\nprint scaleNames()\n//=> [ chromatic major etc... ] \n\n// Map relative numbers to a specified scale class (excluding root)\ntoScale([0 1 2 3 4 5 6 7 8 9 10 11])\n//=> [0 0 2 3 3 5 5 7 8 8 10 10]\n\n// Works with negative relative values\ntoScale([8 13 -1 20 -6 21 -4 12])\n//=> [8 12 -2 20 -7 20 -4 12]\n\n// Preserves floating point for detune/microtonality\ntoScale([0 4.1 6.5 7.1 9.25])\n//=> [0 3.1 5.5 7.1 8.25] \n\n// Optionally add a scale name and root to use a scale other \n// than the global one\ntoScale([0 1 2 3 4 5 6 7 8 9 10 11] major)\n//=> [ 0 0 2 2 4 5 5 7 7 9 9 11 ]\n\ntoScale([0 1 2 3 4 5 6 7 8 9 10 11] minor eb)\n//=> [ 3 3 5 6 6 8 8 10 11 11 13 13 ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"texttocode",children:"textToCode"}),"\n",(0,i.jsxs)(n.p,{children:["Convert a string or list of strings to their ASCII code integer representation. The ASCII code is the American Standard Code for Information Interchange. In this code every unique character/symbol/number is represented by a whole number (integer). For example ",(0,i.jsx)(n.code,{children:"a=97"}),", but ",(0,i.jsx)(n.code,{children:"A=65"})," and ",(0,i.jsx)(n.code,{children:"SPACE=32"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String(List)"})," -> input to convert to ASCII"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// single string input\ntextCode('bach cage')\n//=> [ 98 97 99 104 32 99 97 103 101 ]\n\n// multiple strings in a list results in a 2D list output\ntextCode([bach cage])\n//=> [ [ 98 97 99 104 ] [ 99 97 103 101 ] ]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"textCode"}),", ",(0,i.jsx)(n.code,{children:"ttoc"})]})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>a});var i=s(6540);const l={},r=i.createContext(l);function t(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d44737fc.5891da8c.js b/assets/js/d44737fc.5891da8c.js new file mode 100644 index 00000000..2c33c359 --- /dev/null +++ b/assets/js/d44737fc.5891da8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[707],{398:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>o});var i=s(4848),l=s(8453);const r={sidebar_position:5},t="List Functions",a={id:"reference/list-functions",title:"List Functions",description:"Mercury finds its roots in the concept of Serialism, a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a list.",source:"@site/docs/reference/list-functions.md",sourceDirName:"reference",slug:"/reference/list-functions",permalink:"/mercury/docs/reference/list-functions",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Instrument Effects",permalink:"/mercury/docs/reference/effects"},next:{title:"\ud83d\udc69\u200d\ud83d\udcbb\ud83d\udc68\u200d\ud83d\udcbb Collaborative Coding",permalink:"/mercury/docs/collaborate"}},d={},o=[{value:"Syntax Overview",id:"syntax-overview",level:2},{value:"Function Types",id:"function-types",level:2},{value:"Generators",id:"generators",level:3},{value:"Transformers",id:"transformers",level:3},{value:"Analysers",id:"analysers",level:3},{value:"Translators",id:"translators",level:3},{value:"Generative Functions",id:"generative-functions",level:2},{value:"spread (spreadFloat)",id:"spread-spreadfloat",level:3},{value:"spreadInclusive (spreadInclusiveFloat)",id:"spreadinclusive-spreadinclusivefloat",level:3},{value:"fill",id:"fill",level:3},{value:"sine (sineFloat)",id:"sine-sinefloat",level:3},{value:"cosine (cosineFloat)",id:"cosine-cosinefloat",level:3},{value:"saw (sawFloat)",id:"saw-sawfloat",level:3},{value:"square (squareFloat)",id:"square-squarefloat",level:3},{value:"binaryBeat",id:"binarybeat",level:3},{value:"spacingBeat",id:"spacingbeat",level:3},{value:"euclidean",id:"euclidean",level:3},{value:"hexBeat",id:"hexbeat",level:3},{value:"fibonacci",id:"fibonacci",level:3},{value:"pisano",id:"pisano",level:3},{value:"pell",id:"pell",level:3},{value:"lucas",id:"lucas",level:3},{value:"threeFibonacci",id:"threefibonacci",level:3},{value:"Stochastic Functions",id:"stochastic-functions",level:2},{value:"randomSeed",id:"randomseed",level:3},{value:"random (randomFloat)",id:"random-randomfloat",level:3},{value:"drunk (drunkFloat)",id:"drunk-drunkfloat",level:3},{value:"urn",id:"urn",level:3},{value:"coin",id:"coin",level:3},{value:"dice",id:"dice",level:3},{value:"clave",id:"clave",level:3},{value:"twelveTone",id:"twelvetone",level:3},{value:"choose",id:"choose",level:3},{value:"pick",id:"pick",level:3},{value:"shuffle",id:"shuffle",level:3},{value:"expand",id:"expand",level:3},{value:"markovTrain",id:"markovtrain",level:3},{value:"markovChain",id:"markovchain",level:3},{value:"Transform Functions",id:"transform-functions",level:2},{value:"clone",id:"clone",level:3},{value:"join",id:"join",level:3},{value:"copy",id:"copy",level:3},{value:"pad",id:"pad",level:3},{value:"every",id:"every",level:3},{value:"flat",id:"flat",level:3},{value:"invert",id:"invert",level:3},{value:"lace",id:"lace",level:3},{value:"lookup",id:"lookup",level:3},{value:"merge",id:"merge",level:3},{value:"palindrome",id:"palindrome",level:3},{value:"repeat",id:"repeat",level:3},{value:"reverse",id:"reverse",level:3},{value:"rotate",id:"rotate",level:3},{value:"sort",id:"sort",level:3},{value:"slice",id:"slice",level:3},{value:"split",id:"split",level:3},{value:"cut",id:"cut",level:3},{value:"spray",id:"spray",level:3},{value:"stretch (stretchFloat)",id:"stretch-stretchfloat",level:3},{value:"unique",id:"unique",level:3},{value:"Utility Functions",id:"utility-functions",level:2},{value:"add",id:"add",level:3},{value:"subtract",id:"subtract",level:3},{value:"multiply",id:"multiply",level:3},{value:"divide",id:"divide",level:3},{value:"mod",id:"mod",level:3},{value:"clip",id:"clip",level:3},{value:"wrap",id:"wrap",level:3},{value:"fold",id:"fold",level:3},{value:"map",id:"map",level:3},{value:"normalize",id:"normalize",level:3},{value:"equals",id:"equals",level:3},{value:"notEquals",id:"notequals",level:3},{value:"greater",id:"greater",level:3},{value:"greaterEquals",id:"greaterequals",level:3},{value:"less",id:"less",level:3},{value:"lessEquals",id:"lessequals",level:3},{value:"size",id:"size",level:2},{value:"sum",id:"sum",level:2},{value:"Translate Functions",id:"translate-functions",level:2},{value:"Conversion between pitch units",id:"conversion-between-pitch-units",level:3},{value:"Conversion between time units",id:"conversion-between-time-units",level:3},{value:"divisionToMs",id:"divisiontoms",level:4},{value:"Working with fixed scale and root",id:"working-with-fixed-scale-and-root",level:3},{value:"textToCode",id:"texttocode",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"list-functions",children:"List Functions"}),"\n",(0,i.jsxs)(n.p,{children:["Mercury finds its roots in the concept of ",(0,i.jsx)(n.em,{children:"Serialism"}),", a musical composition style where all parameters such as pitch, rhythm and dynamics are expressed in a series of values that adjust the instruments state over time. This series in Mercury is refered to as a ",(0,i.jsx)(n.code,{children:"list"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Every instance of an instrument has an internal counter. This counter increments (0, 1, 2, 3,... etc) when an instrument triggers an event based on the time-interval from ",(0,i.jsx)(n.code,{children:"time()"}),". This is also called a step-sequencer. When a ",(0,i.jsx)(n.code,{children:"list"})," is added as argument to an ",(0,i.jsx)(n.code,{children:"instrument-function"})," the instrument uses its count as a lookup-position (index) taking the corresponding value from the list. As soon as the index is higher then the amount of values in the ",(0,i.jsx)(n.code,{children:"list"})," it will return to the beginning and start over, therefore the ",(0,i.jsx)(n.code,{children:"list"})," is circular/looping."]}),"\n",(0,i.jsxs)(n.p,{children:["Mercury makes use of the ",(0,i.jsx)(n.a,{href:"https://www.npmjs.com/package/total-serialism",children:(0,i.jsx)(n.code,{children:"total-serialism"})})," NodeJS Package to generate and transform numbersequences that are used for melodies, rhythms, parameters and basically anything that can be sequenced in the environment. ",(0,i.jsx)(n.code,{children:"total-serialism"})," is a set of functions used for procedurally generating and transforming lists. This library is mainly designed with algorithmic composition of music in mind, but can be useful for other purposes that involve generating and manipulating lists and numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"List Function Categories:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#generative-functions",children:"Generative"})}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#stochastic-functions",children:"Stochastic"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#transform-functions",children:"Transform"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#translate-functions",children:"Translate"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#utility-functions",children:"Utility & Math"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"syntax-overview",children:"Syntax Overview"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list [ value0 value1 ... value-n ]\nlist function()\n"})}),"\n",(0,i.jsxs)(n.p,{children:["For detailed explanation of the syntax see: ",(0,i.jsx)(n.a,{href:"syntax",children:"Syntax"})," and ",(0,i.jsx)(n.a,{href:"actions#list",children:(0,i.jsx)(n.code,{children:"list"})})," under ",(0,i.jsx)(n.a,{href:"actions",children:"Actions"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"function-types",children:"Function Types"}),"\n",(0,i.jsxs)(n.p,{children:["There are 4 overall types of ",(0,i.jsx)(n.code,{children:"list-functions"}),": ",(0,i.jsx)(n.code,{children:"Generators"}),", ",(0,i.jsx)(n.code,{children:"Transformers"}),", ",(0,i.jsx)(n.code,{children:"Analysers"}),", ",(0,i.jsx)(n.code,{children:"Translators"})]}),"\n",(0,i.jsx)(n.h3,{id:"generators",children:"Generators"}),"\n",(0,i.jsxs)(n.p,{children:["Generators are ",(0,i.jsx)(n.code,{children:"list-functions"})," that generate a list based on a specific process. The process can be deterministic (the output will always be the same for a specific combination of arguments) or stochastic (the output has some form of psuedo-randomness that can be controlled with a seed). Generators can be found in different categories such as: ",(0,i.jsx)(n.code,{children:"Generative"}),", ",(0,i.jsx)(n.code,{children:"Algorithmic"})," and ",(0,i.jsx)(n.code,{children:"Stochastic"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["A generator always has the ",(0,i.jsx)(n.code,{children:"output-length"})," of the list as the first argument and always outputs a ",(0,i.jsx)(n.code,{children:"list"}),"."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list generator( )\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="example"',children:"list rand random(20) // generates 20 random numbers\nlist cosi cosine(32) // generates 32 values of a period of a cosine wave\n"})}),"\n",(0,i.jsx)(n.h3,{id:"transformers",children:"Transformers"}),"\n",(0,i.jsxs)(n.p,{children:["Transformers are ",(0,i.jsx)(n.code,{children:"list-functions"})," that take one or more lists as input, transform them with some process and output the processed result. The process can be deterministic (the output will always be the same for a specific combination of arguments) or stochastic (the output has some form of psuedo-randomness that can be controlled with a seed, more on that under ",(0,i.jsx)(n.a,{href:"global#randomseed",children:(0,i.jsx)(n.code,{children:"randomSeed"})}),")."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["A transformer always has an ",(0,i.jsx)(n.code,{children:"input-list"})," as the first argument and always outputs a ",(0,i.jsx)(n.code,{children:"list"}),"."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list transformer( )\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="example"',children:"list values [0 2 3 5 7 8 11 12]\n\nlist shuf shuffle(values) // shuffle the values\nlist revs rotate(values 4) // rotate the values by 4 steps\n"})}),"\n",(0,i.jsx)(n.h3,{id:"analysers",children:"Analysers"}),"\n",(0,i.jsxs)(n.p,{children:["Analysers are ",(0,i.jsx)(n.code,{children:"list-functions"})," that take one (or more) lists as input and analyse their content based on some process and output a single value as a result."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["An analyser always has an ",(0,i.jsx)(n.code,{children:"input-list"})," as the first argument and always outputs a single ",(0,i.jsx)(n.code,{children:"value"}),"."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list analyser( )\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="example"',children:"list values [0 2 3 5 7 8 11 12]\n\nlist amnt size(values) // get the amount of items in the list\nlist avg average(values) // get the average value from the list\n"})}),"\n",(0,i.jsx)(n.h3,{id:"translators",children:"Translators"}),"\n",(0,i.jsxs)(n.p,{children:["Translators are ",(0,i.jsx)(n.code,{children:"list-functions"})," that translate from one input to some other output. For example midi-note values can be translated to frequencies, or roman numerals can be translated to chord progression semitone values. Translatores can be found in different categories."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["A translator can have various ",(0,i.jsx)(n.code,{children:"input"})," datatypes (",(0,i.jsx)(n.code,{children:"list"}),", ",(0,i.jsx)(n.code,{children:"number"}),", ",(0,i.jsx)(n.code,{children:"name"}),") and different ",(0,i.jsx)(n.code,{children:"output"})," datatypes as well. Please refer to the function to see what these are."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",metastring:'title="example"',children:'list numerals [I IIm IV]\nlist chords chordsFromNumerals(numerals)\n\nlist hex "8fa9"\nlist beat hexBeat(hex)\n'})}),"\n",(0,i.jsx)(n.h2,{id:"generative-functions",children:"Generative Functions"}),"\n",(0,i.jsx)(n.p,{children:"The generative list functions are functions that procedurally create a list from an algorithm and based on a set of arguments provided to the function."}),"\n",(0,i.jsx)(n.h3,{id:"spread-spreadfloat",children:"spread (spreadFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of n-length of evenly spaced values between a starting number up untill (but excluding) the 3th argument. Flipping the low and high values results in a descending list. By adding ",(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int/Float"})," -> Start value (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int/Float"})," -> End value (excluded, default=length)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list spr1 spread(5 0 12)\n// => [0 2 4 7 9]\n\nlist spr4 spread(5 12 0)\n// => [9 7 4 2 0]\n\nlist spr2 spreadFloat(5 -1 1)\n// => [-1 -0.6 -0.2 0.2 0.6]\n\nlist spr3 spreadF(5 0 2)\n// => [0 0.4 0.8 1.2 1.6]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"spreadF"})]}),"\n",(0,i.jsx)(n.h3,{id:"spreadinclusive-spreadinclusivefloat",children:"spreadInclusive (spreadInclusiveFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of n-length of evenly spaced values between a starting number up to (and including) the 3th argument. Flipping the low and high values results in a descending list. By adding ",(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Start value (default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> End value (included, default=length)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list spi1 spreadInclusive(5 0 12)\n// => [0 3 6 9 12]\n\nlist spi4 spreadInclusive(5 12 0)\n// => [12 9 6 3 0]\n\nlist spi2 spreadInclusiveFloat(5 -1 1)\n// => [-1 -0.5 0 0.5 1]\n\nlist spi3 spreadIncF(5 0 2)\n// => [0 0.5 1 1.5 2]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"spreadInc"}),", ",(0,i.jsx)(n.code,{children:"spreadIncF"})]}),"\n",(0,i.jsx)(n.h3,{id:"fill",children:"fill"}),"\n",(0,i.jsxs)(n.p,{children:["Fill a list with values. Arguments are provided in pairs. Every pair consists of ",(0,i.jsx)(n.code,{children:"value amount"}),". The value is repeated n-amount of times in the list."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value"})," -> value to duplicate"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> amount of duplicates"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list fll1 fill(10 2 15 3 20 4)\n// => [10 10 15 15 15 20 20 20 20]\n\nlist fll2 fill(kick_min 2 hat_min 3)\n// => [kick_min kick_min hat_min hat_min hat_min]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"sine-sinefloat",children:"sine (sineFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list with n-periods of a sine function. Optional last arguments set the lo and hi range. Only setting first range argument sets the low-range to 0. The sine and cosine waves are interesting functions to use for creating melodic or rhythmic/dynamic patterns. By adding ",(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Periods of (co)sine-wave (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low range of values (optional, default=0, default=-1 for Float)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High range of values (optional, default=12, default=1 for Float)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Phase offset (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sin1 sine(10)\n// => [6 9 11 11 9 6 2 0 0 2]\n\nlist sin2 sine(10 1 -12 12)\n// => [0 7 11 11 7 0 -7 -11 -11 -7]\n\nlist sin3 sine(10 2 0 5)\n// => [2 4 3 1 0 2 4 3 1 0]\n\n// generate 10 ints with 4 periods a sine function\nlist sin4 sine(11 4 0 7)\n// 6.00 \u253c\u256d\u256e \u256d\u256e \u256d\u256e \n// 5.00 \u2524\u2502\u2502\u256d\u256e \u2502\u2502 \u2502\u2502 \n// 4.00 \u2524\u2502\u2502\u2502\u2570\u256e\u2502\u2502 \u2502\u2502 \n// 3.00 \u253c\u256f\u2502\u2502 \u2502\u2502\u2502 \u2502\u2502 \n// 2.00 \u2524 \u2502\u2502 \u2502\u2502\u2570\u256e\u2502\u2502 \n// 1.00 \u2524 \u2502\u2502 \u2502\u2502 \u2570\u256f\u2502 \n// 0.00 \u2524 \u2570\u256f \u2570\u256f \u2570 \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"sineF"})]}),"\n",(0,i.jsx)(n.h3,{id:"cosine-cosinefloat",children:"cosine (cosineFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Like ",(0,i.jsx)(n.a,{href:"#sine-sinefloat",children:(0,i.jsx)(n.code,{children:"sine"})})," but using the cosine function."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Periods of (co)sine-wave (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low range of values (optional, default=0, default=-1 for Float)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High range of values (optional, default=12, default=1 for Float)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Phase offset (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list cos1 cosine(10)\n// => [12 10 7 4 1 0 1 4 7 10]\n\nlist cos2 cosine(10 1 -12 12)\n// => [12 9 3 -3 -9 -12 -9 -3 3 9]\n\nlist cos3 cosine(10 2 0 5)\n// => [5 3 0 0 3 4 3 0 0 3]\n\n// generate 16 floats with 1 period of a cosine function\nlist cos4 cosineFloat(8)\n// 1.00 \u253c\u256e \n// 0.60 \u2524\u2570\u2500\u256e \u256d\u2500 \n// 0.20 \u253c \u2570\u256e \u256d\u256f \n// -0.20 \u2524 \u2570\u256e \u256d\u256f \n// -0.60 \u2524 \u2570\u256e \u256d\u256f \n// -1.00 \u2524 \u2570\u2500\u2500\u2500\u2500\u256f \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"cosineF"})]}),"\n",(0,i.jsx)(n.h3,{id:"saw-sawfloat",children:"saw (sawFloat)"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list with n-periods of a saw/phasor function. Optional last arguments set lo and hi range and phase offset. Only setting first range argument sets the low-range to 0"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> Length of output list (resolution)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Periods of the wave (option, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low range of values (optional, default=-1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High range of values (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Phase offset (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list saw1 sawFloat(25 2.5)\n//=> 0.80 \u2524 \u256d\u2500\u256e \u256d\u2500\u256e \n// 0.44 \u2524 \u256d\u2500\u256f \u2502 \u256d\u2500\u256f \u2502 \n// 0.08 \u2524 \u256d\u256f \u2502 \u256d\u256f \u2502 \n// -0.28 \u253c \u256d\u2500\u256f \u2502 \u256d\u2500\u256f \u2502 \u256d\u2500 \n// -0.64 \u2524\u256d\u2500\u256f \u2502\u256d\u2500\u256f \u2502\u256d\u2500\u256f \n// -1.00 \u253c\u256f \u2570\u256f \u2570\u256f \n\n// Modulation on frequency\nlist saw2 saw(34 sinF(30 2 0 100) 0 12)\n//=> 11.00 \u253c \u256d\u256e \u256d\u256e\u256d\u256e \n// 10.00 \u2524 \u2502\u2502\u256d\u2500\u256e \u256d\u256e \u2502\u2502\u2502\u2502 \n// 9.00 \u2524 \u2502\u2502\u2502 \u2502 \u2502\u2502 \u256d\u256e\u2502\u2502\u2502\u2502 \n// 8.00 \u2524 \u256d\u2500\u256e \u2502\u2502\u2502 \u2502 \u256d\u256f\u2502 \u2502\u2502\u2502\u2502\u2502\u2502 \u256d \n// 7.00 \u2524 \u256d\u256f \u2502 \u2502\u2502\u2502 \u2502 \u256d\u256f \u2502 \u2502\u2502\u2502\u2502\u2502\u2502 \u2502 \n// 6.00 \u2524 \u2502 \u2502 \u2502\u2502\u2502 \u2502 \u256d\u256f \u2502 \u2502\u2570\u256f\u2502\u2502\u2570\u256e \u2502 \n// 5.00 \u2524 \u2502 \u2502\u256d\u256e\u256d\u256f\u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \n// 4.00 \u2524 \u2502 \u2502\u2502\u2502\u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \n// 3.00 \u2524 \u2502 \u2502\u2502\u2570\u256f \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502\u2502 \u2570\u256e \u2502 \n// 2.00 \u2524 \u2502 \u2502\u2502 \u2502\u2502 \u2570\u256e \u2502 \u2502 \u2502 \u2570\u256f \u2502 \u2502 \n// 1.00 \u2524 \u256d\u256f \u2502\u2502 \u2570\u256f \u2502\u256d\u256f \u2502 \u2502 \u2570\u2500\u256e\u2502 \n// 0.00 \u253c\u2500\u256f \u2570\u256f \u2570\u256f \u2570\u2500\u256f \u2570\u256f \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"sawF"})]}),"\n",(0,i.jsx)(n.h3,{id:"square-squarefloat",children:"square (squareFloat)"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list with n-periods of a square/pulse wave function. Optional last arguments set lo and hi range and pulse width. Only setting first range argument sets the low-range to 0."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> Length of output list (resolution)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Periods of the wave (option, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low range of values (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High range of values (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Pulse width (optional, default=0.5)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sqr1 square(30 4 0 1 0.2)\n//=> 1.00 \u253c\u2500\u256e \u256d\u2500\u256e \u256d\u2500\u256e \u256d\u256e \n// 0.00 \u2524 \u2570\u2500\u2500\u2500\u2500\u2500\u256f \u2570\u2500\u2500\u2500\u2500\u256f \u2570\u2500\u2500\u2500\u2500\u2500\u256f\u2570\u2500\u2500\u2500\u2500\u2500 \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// Frequency Modulation with Gen.sin\nlist sqr2 squareFloat(30 sinF(30 2 1 5))\n//=> 1.00 \u253c\u2500\u2500\u2500\u256e \u256d\u2500\u2500\u256e\u256d\u2500\u2500\u256e \u256d\u2500\u256e \u256d\u2500\u256e \u256d\u2500 \n// 0.80 \u2524 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \n// 0.60 \u2524 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \n// 0.40 \u2524 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \n// 0.20 \u2524 \u2502 \u2502 \u2502\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \n// 0.00 \u2524 \u2570\u2500\u2500\u2500\u2500\u2500\u256f \u2570\u256f \u2570\u2500\u256f \u2570\u2500\u2500\u256f \u2570\u2500\u256f \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"squareF"})]}),"\n",(0,i.jsx)(n.h3,{id:"binarybeat",children:"binaryBeat"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a binary sequence (which can be used as a rhythm) from a positive integer ",(0,i.jsx)(n.code,{children:"number"})," or a ",(0,i.jsx)(n.code,{children:"list"})," of numbers. Returns the binary value as a list of separated 1's and 0's useful for representing rhythmical patterns."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> List of numbers to convert to binary representation"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// generate a binary list from a single number\nlist bny1 binaryBeat(358)\n//=> [1 0 1 1 0 0 1 1 0]\n\n// use a list of numbers and concatenate binary representations\nlist bny2 binaryBeat([4 3 5])\n//=> [1 0 0 1 1 1 0 1]\n\n// negative values are clipped to 0\nlist bny3 binaryBeat([-4 4])\n//=> [0 1 0 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"binary"})]}),"\n",(0,i.jsx)(n.h3,{id:"spacingbeat",children:"spacingBeat"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of 1's and 0's based on a positive integer ",(0,i.jsx)(n.code,{children:"number"})," or ",(0,i.jsx)(n.code,{children:"list"}),". Every number in the list will be replaced by a 1 with a specified amount of 0's appended to it. Eg. a 2 => 1 0, a 4 => 1 0 0 0, etc. This technique is useful to generate a rhythm based on spacing length between onsets."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+(List)"})," -> List of numbers to convert to spaced rhythm"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// generate a rhythm based on numbered spacings\nlist spc1 spacingBeat(2 3 2)\n//=> [1 0 1 0 0 1 0]\n\n// also works with a list as input\nlist spc2 spacingBeat([4 2 0])\n//=> [1 0 0 0 1 0 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"spacing"})]}),"\n",(0,i.jsx)(n.h3,{id:"euclidean",children:"euclidean"}),"\n",(0,i.jsx)(n.p,{children:'Generate a euclidean rhythm evenly spacing n-hits amongst n-steps. Inspired by Godfried Toussaints famous paper "The Euclidean Algorithm Generates Traditional Musical Rhythms". This implementation is however a faster method that uses the downsampling of a line drawn between two points in a 2-dimensional grid to divide the squares into an evenly distributed amount of steps refered to as "Bresenham\'s Line Algorithm".'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> length of list (optional, default=8)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> hits to distribute (optional, default=4)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> rotate n-steps left or right (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list euc1 euclidean()\n// => [1 0 1 0 1 0 1 0]\n\nlist euc2 euclidean(7 5)\n// => [1 1 0 1 1 0 1]\n\nlist euc3 euclidean(7 5 2)\n// => [0 1 1 1 0 1 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"euclid"})]}),"\n",(0,i.jsx)(n.h3,{id:"hexbeat",children:"hexBeat"}),"\n",(0,i.jsxs)(n.p,{children:["Generate rhythms from hexadecimal values. Hexadecimal beats make use of hexadecimal values (0 - f) that are a base-16 number system. Because one digit in a base-16 number system has 16 possible values (0 - 15) these can be converted to 4 bits that therefore can be seen as groups of 4 16th notes. These hexadecimal values will then represent any permutation of 1's and 0's in a 4 bit number, where 0 = 0 0 0 0, 7 = 0 1 1 1, b = 1 0 1 1, f = 1 1 1 1 and all possible values in between. Inspired by a workshop from Steven Yi at the ICLC 2020 in Limerick. ",(0,i.jsx)(n.a,{href:"https://kunstmusik.github.io/learn-hex-beats/",children:"Learn hex beats here"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Name"})," -> ",(0,i.jsx)(n.code,{children:"string"}),"/",(0,i.jsx)(n.code,{children:"name"}),"/",(0,i.jsx)(n.code,{children:"number"})," of hexadecimal characters (0 t/m f) (optional, default=8)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list hex1 hexBeat()\n// => [1 0 0 0]\n\nlist hex2 hexBeat(a)\n// => [1 0 1 0]\n\nlist hex3 hexBeat(f9cb)\n// => [1 1 1 1 1 0 0 1 1 1 0 0 1 0 1 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"hex"})]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["In the MercuryPlayground writing ",(0,i.jsx)(n.code,{children:"hex(82fc)"})," causes an error because the value ",(0,i.jsx)(n.code,{children:"82fc"})," starts with a number so it is nota valid ",(0,i.jsx)(n.code,{children:"name"}),". To be able to use it anyways change that value into a string by adding quotes: ",(0,i.jsx)(n.code,{children:"hex('82fc')"})]})}),"\n",(0,i.jsx)(n.h3,{id:"fibonacci",children:"fibonacci"}),"\n",(0,i.jsxs)(n.p,{children:["Generate the Fibonacci sequence ",(0,i.jsx)(n.code,{children:"F(n) = F(n-1) + F(n-2)"}),". The ratio between consecutive numbers in the fibonacci sequence tends towards the Golden Ratio (1+\u221a5)/2."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"OEIS: A000045"})," (Online Encyclopedia of Integer Sequences)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> offset, start the sequence at nth-fibonacci number (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list fib1 fibonacci(10)\n// => [0 1 1 2 3 5 8 13 21 34]\n\nlist fib2 fibonacci(3 10)\n// => [55 89 144]\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["The numbers in the fibonacci sequence grow big quite fast! If you like to use these for melodic material consider using ",(0,i.jsx)(n.code,{children:"wrap()"}),", ",(0,i.jsx)(n.code,{children:"fold()"}),", ",(0,i.jsx)(n.code,{children:"clip()"})," or ",(0,i.jsx)(n.code,{children:"mod()"}),", or have a look at the ",(0,i.jsx)(n.code,{children:"pisano()"})," function below."]})}),"\n",(0,i.jsx)(n.h3,{id:"pisano",children:"pisano"}),"\n",(0,i.jsxs)(n.p,{children:["Translate the fibonacci sequence to the Pisano period sequence with a modulus operation. The pisano period is a result of applying a modulo (",(0,i.jsx)(n.code,{children:"%"}),") operation on the Fibonacci sequence ",(0,i.jsx)(n.code,{children:"F[n] = (F[n-1] + F[n-2]) mod a"}),". The length of the period differs per modulus value, but the sequence will always have a repetition at some point."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> modulus for pisano period (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list (optional, defaults to pisano-period length)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list psn1 pisano()\n// => [0 1 1 2 3 5 8 1 9 10 7 5 0 5 5 10 3 1 4 5 9 2 11 1]\n\nlist psn2 pisano(3)\n// => [0 1 1 2 0 2 2 1]\n\nlist psn3 pisano(11)\n// => [0 1 1 2 3 5 8 2 10 1]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"pell",children:"pell"}),"\n",(0,i.jsxs)(n.p,{children:["Generate the Pell numbers ",(0,i.jsx)(n.code,{children:"F(n) = 2 * F(n-1) + F(n-2)"}),". The ratio between consecutive numbers in the pell sequence tends towards the Silver Ratio 1 + \u221a2."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"OEIS: A006190"})," (Online Encyclopedia of Integer Sequences)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list pll1 pell(8)\n// => [0 1 2 5 12 29 70 169]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"lucas",children:"lucas"}),"\n",(0,i.jsxs)(n.p,{children:["Generate the Lucas numbers ",(0,i.jsx)(n.code,{children:"F(n) = F(n-1) + F(n-2), with F0=2 and F1=1"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"OEIS: A000032"})," (Online Encyclopedia of Integer Sequences)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list luc1 lucas(8)\n// => [2 1 3 4 7 11 18 29]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"threefibonacci",children:"threeFibonacci"}),"\n",(0,i.jsxs)(n.p,{children:["Generate the Tribonacci (3bonacci or threebonacci) numbers ",(0,i.jsx)(n.code,{children:"F(n) = 2 * F(n-1) + F(n-2)"}),". The ratio between consecutive numbers in the 3-bonacci sequence tends towards the Bronze Ratio (3 + \u221a13) / 2."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"OEIS: A000129"})," (Online Encyclopedia of Integer Sequences)"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list tfi1 threeFibonacci(8)\n// => [0 1 3 10 33 109 360 1189]\n"})}),"\n",(0,i.jsx)(n.h2,{id:"stochastic-functions",children:"Stochastic Functions"}),"\n",(0,i.jsx)(n.p,{children:"The stochastic list functions are functions that create or transform a list with some form of randomness involved. This is psuedo-randomess that can be controlled with the random seed."}),"\n",(0,i.jsx)(n.h3,{id:"randomseed",children:"randomSeed"}),"\n",(0,i.jsxs)(n.p,{children:["Set the seed for the Random Number Generators. The RNG's are part of all the Stochastic Functions. This is not a list function but part of the ",(0,i.jsx)(n.code,{children:"global"})," settings. A value of ",(0,i.jsx)(n.code,{children:"0"})," sets to unpredictable seeding (which is the default). Read more about the ",(0,i.jsxs)(n.a,{href:"global#randomseed",children:[(0,i.jsx)(n.code,{children:"randomSeed"})," here"]}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 3141\n"})}),"\n",(0,i.jsx)(n.h3,{id:"random-randomfloat",children:"random (randomFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of random integers between a specified range (excluding the high value!). By adding ",(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of values to output as a list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> minimum range (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> maximum range (optional, default=2, default=1 for Float)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 31415\n\nlist rnd1 random(5)\n// => [1 0 0 1 1]\nlist rnd2 random(5 12)\n// => [0 10 3 2 2]\nlist rnd3 random(5 -12 12)\n// => [-2 -5 -8 -11 6]\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 31415\n\nlist rnf1 randomFloat(5)\n// => [0.81 0.32 0.01 0.85 0.88]\nlist rnf2 randomFloat(5 0 12)\n// => [0.16 10.72 3.16 262 2.34]\nlist rnf3 randomFloat(5 -12 12)\n// => [-1.19 -4.21 -7.36 -10.31 6.82]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"rand"}),", ",(0,i.jsx)(n.code,{children:"randF"})]}),"\n",(0,i.jsx)(n.h3,{id:"drunk-drunkfloat",children:"drunk (drunkFloat)"}),"\n",(0,i.jsxs)(n.p,{children:['Generate a list of random values but the next random value is within a limited range of the previous value generating a random "drunk" walk, also referred to as brownian motion. By adding ',(0,i.jsx)(n.code,{children:"Float/F"})," to the function it outputs ",(0,i.jsx)(n.code,{children:"float"})," numbers."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of values to output as a list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> step range for next random value"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> minimum range (optional, default=null)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> maximum range (optional, default=null)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> starting point (optional, default=(lo+hi)/2)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> fold between lo and hi range (optional, default=true)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list dr1 drunk(10 5 0 24)\n//=> [ 13 10 14 13 14 13 15 10 8 4 ] \n\n// 22.00 \u253c \u256d\u256e \n// 17.80 \u253c\u2500\u256e\u256d\u2500\u256e \u2502\u2502 \n// 13.60 \u2524 \u2502\u2502 \u2570\u256e\u256d\u256f\u2502 \n// 9.40 \u2524 \u2502\u2502 \u2570\u256f \u2502 \n// 5.20 \u2524 \u2570\u256f \u2502 \n// 1.00 \u2524 \u2570 \n\nlist dr2 drunk(10 4 0 12 6 false)\n//=> [ 2 -2 2 1 -3 -1 -2 -1 3 6 ] \n\n// 2.00 \u2524\u256d\u256e \n// -0.20 \u2524\u2502\u2570\u256e \u256d \n// -2.40 \u253c\u256f \u2570\u256e \u2502 \n// -4.60 \u2524 \u2502\u256d\u256e \u256d\u256f \n// -6.80 \u253c \u2570\u256f\u2502\u256d\u256f \n// -9.00 \u2524 \u2570\u256f \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list dr1 drunkFloat(5)\n//=> [ 0.493 0.459 0.846 0.963 0.400 ] \n\n// 0.88 \u253c\u256e\u256d\u256e \n// 0.76 \u2524\u2570\u256f\u2502 \n// 0.63 \u2524 \u2502 \n// 0.51 \u2524 \u2570\u256e \n// 0.39 \u2524 \u2502 \n// 0.26 \u2524 \u2570 \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"drunkF"})]}),"\n",(0,i.jsx)(n.h3,{id:"urn",children:"urn"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list of unique random integer values between a certain specified range (excluding high val). An 'urn' is filled with values and when one is picked it is removed from the urn. If the outputlist is longer then the range, the urn refills when empty. On refill it is made sure no repeating value can be picked."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of values to output as a list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> maximum range (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> minimum range (optional, defautl=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 1618\n\nlist urn1 urn(5)\n// => [3 7 10 0 2]\nlist urn2 urn(8 4)\n// => [0 2 1 3 1 3 0 2]\nlist urn3 urn(8 10 14)\n// => [13 10 12 11 12 10 13 11]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"coin",children:"coin"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of random integer values 1 or 0 like a coin toss, heads/tails. Useful for generating random rhythms. ",(0,i.jsx)(n.code,{children:"coin()"})," is basically a ",(0,i.jsx)(n.code,{children:"random()"})," with a range of 2."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of coin tosses to output as list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list coin1 coin(8)\n// => [1 0 1 0 1 0 1 1]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"dice",children:"dice"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list of random integer values 1 till 6 (inclusive) like you would roll some dice."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> number of dice rolls to output as list"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list dice1 dice(8)\n// => [5 4 6 4 4 5 4 2]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"clave",children:"clave"}),"\n",(0,i.jsx)(n.p,{children:"Generate random clave patterns. The output is a binary list that represents a rhythm, where 1's can represent onsets and 0's rests. The first argument sets the list length output, second argument sets the maximum gap between onsets, third argument the minimum gap."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> output length of list (default=8)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> maximum gap between onsets (default=3)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> minimum gap between onsets (default=2)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list clv1 clave()\n//=> [ 1 0 1 0 0 1 0 1 ] \n\nlist clv2 clave(8)\n//=> [ 1 0 0 1 0 1 0 1 ] \n\nlist clv3 clave(16 4)\n//=> [ 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 1 ] \n\nlist clv4 clave(16 3 1)\n//=> [ 1 0 0 1 0 0 1 1 0 0 1 0 1 0 0 1 ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"twelvetone",children:"twelveTone"}),"\n",(0,i.jsx)(n.p,{children:"Generate a list of all 12 semitones in one octave (12-TET) then shuffle the list based on the random seed."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"None"})}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list twv1 twelveTone()\n// => [10 7 6 3 2 9 8 4 1 5 0 11]\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"//Basically a shorthand for: \nlist notes spread(12)\nlist notes shuffle(notes)\n"})}),"\n",(0,i.jsx)(n.h3,{id:"choose",children:"choose"}),"\n",(0,i.jsx)(n.p,{children:"Choose random items from a list provided with uniform probability distribution. The default list is a list of 0 and 1."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> length of list output"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> items to choose from (optional, default=[0 1])"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 62832\n\nlist samples [hat snare kick]\nlist sequence choose(10 samples)\n// => [hat kick hat kick hat snare kick hat hat hat]\n\nlist notes [0 3 7 5 9 12]\nlist melody choose(10 notes)\n// => [0 5 3 9 0 7 3 12 3 7]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"pick",children:"pick"}),"\n",(0,i.jsx)(n.p,{children:'Pick random items from a list provided. An "urn" is filled with values and when one is picked it is removed from the urn. If the outputlist is longer then the range, the urn refills when empty. On refill it is made sure no repeating value can be picked.'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> length of list output"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> items to choose from (optional, default=[0 1])"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 62832\n\nlist samples [hat snare kick tom]\nlist sequence pick(10 samples)\n// => [hat kick tom snare tom hat snare kick tom hat]\n\nlist notes [0 3 7 5 9 12]\nlist melody pick(10 notes)\n// => [3 0 7 9 12 5 0 7 12 9]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"shuffle",children:"shuffle"}),"\n",(0,i.jsx)(n.p,{children:"Shuffle a list, influenced by the random seed. Based on the Fisher-Yates shuffle algorithm by Ronald Fisher and Frank Yates in 1938. The algorithm has run time complexity of O(n)."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to shuffle"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 14142\n\nlist samples [hat snare kick tom]\nlist shf1 shuffle(samples)\n// => [snare tom kick hat]\n\nlist notes [0 3 7 5 9 12]\nlist shf2 scramble(notes)\n// => [12 0 3 7 5 9]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"expand",children:"expand"}),"\n",(0,i.jsxs)(n.p,{children:["Expand a list based on the pattern/progression within a list. The pattern is derived from the rate of change between values by calculating the differences between every consecutive value. The newly generated values are selected randomly from the list of possible changes, but in such a way that every change occurs once in the sequence of total changes before reshuffling and selecting the next one (see the ",(0,i.jsx)(n.code,{children:"pick"})," method for explanation). The resulting output starts with the input list."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to expand"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> length of list output"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set randomSeed 3141\nlist notes [0 9 7 3 5 0 -1]\nlist exp expand(notes 30)\n\n//=> 9.00 \u2524\u256d\u256e \u256d\u256e \n// 6.80 \u2524\u2502\u2570\u256e \u2502\u2502 \n// 4.60 \u2524\u2502 \u2502\u256d\u256e \u2502\u2502 \n// 2.40 \u2524\u2502 \u2570\u256f\u2502 \u2502\u2570\u2500\u256e \u256d\u2500\u256e \n// 0.20 \u253c\u256f \u2570\u2500\u256e\u256d\u256f \u2502 \u2502 \u2502\u256d \n// -2.00 \u2524 \u2570\u256f \u2570\u256e \u256d\u2500\u256e \u2502 \u2570\u256f \n// -4.20 \u253c \u2502 \u2502 \u2502 \u256d\u256e\u2502 \n// -6.40 \u2524 \u2570\u256e \u2502 \u2502 \u2502\u2570\u256f \n// -8.60 \u2524 \u2502\u256d\u256e\u2502 \u2570\u2500\u256e \u2502 \n// -10.80 \u2524 \u2570\u256f\u2570\u256f \u2502\u256d\u256e\u2502 \n// -13.00 \u2524 \u2570\u256f\u2570\u256f \n\nset randomSeed 6181\nlist exp2 expand(notes 30)\n\n//=> 9.00 \u2524\u256d\u256e \n// 6.80 \u2524\u2502\u2570\u256e \n// 4.60 \u2524\u2502 \u2502\u256d\u256e \n// 2.40 \u2524\u2502 \u2570\u256f\u2502 \u256d\u256e\u256d\u256e \n// 0.20 \u253c\u256f \u2570\u2500\u256e\u256d\u256e \u2502\u2570\u256f\u2570\u256e \u256d\u2500\u2500 \n// -2.00 \u2524 \u2570\u256f\u2502 \u256d\u256e\u2502 \u2570\u256e \u2502 \n// -4.20 \u253c \u2570\u256e \u2502\u2502\u2502 \u2570\u256e \u256d\u256e \u2502 \n// -6.40 \u2524 \u2502 \u2502\u2570\u256f \u2502\u256d\u256e \u2502\u2502 \u2502 \n// -8.60 \u2524 \u2570\u256e\u2502 \u2570\u256f\u2570\u256e\u2502\u2570\u256e\u2502 \n// -10.80 \u2524 \u2570\u256f \u2502\u2502 \u2570\u256f \n// -13.00 \u2524 \u2570\u256f \n"})}),"\n",(0,i.jsx)(n.h3,{id:"markovtrain",children:"markovTrain"}),"\n",(0,i.jsxs)(n.p,{children:["Build a Markov Chain transition table from a set of datapoints (a list) and use it together with ",(0,i.jsx)(n.code,{children:"markovChain()"})," to generate a new list of values based on the probabilities of the transitions in the provided training dataset. A Markov Chain is a model that describes possible next events based on a current state (first order) or multiple previous states (2nd, 3rd, ... n-order). The Markov Chain is a broadly used method in algorithmic music to generate new material (melodies, rhythms, but even words) based on a set of provided material, but can also be used in linguistics to analyze word or sentence structures. The first argument is the list to analyze, the second argument is the nth-order (default = 2). In theory, longer chains preserve the original structure of the model, but won't generate as diverse outputs. The output is a"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to analyze into transition table"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> Order of the markov-chain (optional, default=2)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"return"})," -> Transition table as a string"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list melody [ 0 0 7 7 9 9 7 5 5 4 4 2 2 0 ]\nlist model markovTrain(melody 2)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"markov"})]}),"\n",(0,i.jsx)(n.h3,{id:"markovchain",children:"markovChain"}),"\n",(0,i.jsxs)(n.p,{children:["Generate a list of values of n-length based on a markov transition table (a model) that was trained with ",(0,i.jsx)(n.code,{children:"markovTrain()"}),". The first argument determines the output length, the second input is the reference to the markov model. The resulting output is based on the probabilities that are captured within the transition table. This means the output can also be directed by the ",(0,i.jsx)(n.code,{children:"randomSeed"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"generator"})]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list melody [ 0 0 7 7 9 9 7 5 5 4 4 2 2 0 ]\nlist model markovTrain(melody 3)\n\nset randomSeed 3141\n\nlist markovMelody markovChain(16 model)\n//=> [9 7 7 5 5 4 4 2 2 0 0 5 4 4 2 2]\n"})}),"\n",(0,i.jsx)(n.h2,{id:"transform-functions",children:"Transform Functions"}),"\n",(0,i.jsx)(n.p,{children:"The transform list-functions are functions that take one or multiple lists as input and transform them based on a procedure. The output is again a list with the result of the process."}),"\n",(0,i.jsx)(n.h3,{id:"clone",children:"clone"}),"\n",(0,i.jsx)(n.p,{children:"Duplicate a list with an offset added to every value."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"IntList"})," -> List to clone"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int, Int2, ... Int-n"})," -> amount of clones with integer offset"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7]\nlist melody clone(notes 0 12 7 -7)\n// => [0 3 7 12 15 19 7 10 14 -7 -4 0]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"join",children:"join"}),"\n",(0,i.jsx)(n.p,{children:"Join lists into one list. Using multiple lists as arguments is possible."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List-0, List-1, ..., List-n"})," -> List to combine"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list partA [0 3 7]\nlist partB [24 19 12]\nlist partC [-7 -3 -5]\nlist phrase join(partA partB partC)\n// => [0 3 7 24 19 12 -7 -5 -3]\n\nlist partD [kick hat snare hat]\nlist partE [hat hat hat snare]\nlist sequence join(partD partE)\n// => [kick hat snare hat hat hat hat snare]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"combine"})]}),"\n",(0,i.jsx)(n.h3,{id:"copy",children:"copy"}),"\n",(0,i.jsx)(n.p,{children:"Copy a list a certain amount of times."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to duplicate"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+"})," -> amount of duplicates (optional, default=2)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7]\nlist phrase copy(notes 4)\n// => [0 3 7 0 3 7 0 3 7 0 3 7]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"duplicate"})]}),"\n",(0,i.jsx)(n.h3,{id:"pad",children:"pad"}),"\n",(0,i.jsxs)(n.p,{children:["Pad a list with zeroes (or any other value) up to the length specified. The padding value can optionally be changed and the shift argument rotates the list n-steps left or right (negative). This method is similar to ",(0,i.jsx)(n.code,{children:"every()"})," except arguments are not specified in musical bars/divisions."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"NumberList"})," -> List to use every n-bars"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> output length of list (optional, default=16)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value"})," -> padding value for the added items (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> shift in steps (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list pad2 pad(pad1 9)\n// [ 3 7 11 12 0 0 0 0 0]\n\nlist pad3 pad([c f g] 11 - 4)\n// [ - - - - c f g - - - - ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"every",children:"every"}),"\n",(0,i.jsx)(n.p,{children:"Add zeroes to a list with a number sequence. The division determines the amount of values per bar. The total length = bars * div. This function is very useful for rhythms that must occur once in a while, but can also be use for melodic phrases or other things."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"IntList"})," -> List to use every n-bars"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> amount of bars (optional, default=4)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> amount of values per bar (optional, default=16)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list rhythm [1 0 1 1 0 1 1]\nlist sequence every(rhythm 2 8)\n// => [1 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0]\n\nlist melody [12 19 24 27 24]\nlist phrase every(melody 2 8)\n// => [12 19 24 27 24 0 0 0 0 0 0 0 0 0 0 0]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"flat",children:"flat"}),"\n",(0,i.jsx)(n.p,{children:"Flatten a multidimensional list. Optionally set the depth for the flattening with the second argument. Flattening a list removes the multi-dimensionality of a list and outputs only a 1D-list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to flatten"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> depth of flatten (default=Infinity)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list fl1 flat([1 [2 3 [ 4 ] 5] 6])\n//=> [ 1 2 3 4 5 6 ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"invert",children:"invert"}),"\n",(0,i.jsx)(n.p,{children:"Invert a list of values by mapping the lowest value to the highest value and vice versa, flipping everything in between. Second optional argument sets the center to flip values around. Third optional argument sets a range to flip values against."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"IntList"})," -> list to invert"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> invert center / lower range (optional)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> upper range (optional)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7 12]\nlist inv1 invert(notes)\n// => [12 9 5 0]\n\nlist inv2 invert(notes 5)\n// => [10 7 3 -2]\n\nlist inv3 invert(notes 3 10)\n// => [13 10 6 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"inverse"}),", ",(0,i.jsx)(n.code,{children:"flip"}),", ",(0,i.jsx)(n.code,{children:"inv"})]}),"\n",(0,i.jsx)(n.h3,{id:"lace",children:"lace"}),"\n",(0,i.jsx)(n.p,{children:"Interleave, lace, zip two or more lists. The output length of the list is always the length of the longest input list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List0, List1, ..., List-n"})," -> Lists to interleave"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list partA [0 3 7 5 0]\nlist partB [12 19 15]\nlist partC [24 22]\nlist melody lace(partA partB)\n// => [0 12 24 3 19 22 7 15 5 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"zip"})]}),"\n",(0,i.jsx)(n.h3,{id:"lookup",children:"lookup"}),"\n",(0,i.jsx)(n.p,{children:"Build a list of items based on another list of indices. The values are wrapped within the length of the lookup list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"NumberList"})," -> List with indeces to lookup"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List with values returned from lookup"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> Looked up values"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list items [c e f g]\nlist indices [0 1 1 2 0 2 2 1]\n\n// first list is the index, second list are the items to lookup\nlist notes lookup(indices items)\n//=> [ c e e f c f f e ]\n\n// indices are wrapped between listlength\nlist indices [8 -5 144 55]\nlist notes lookup(indices items)\n//=> [ g e c e ]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"get"})]}),"\n",(0,i.jsx)(n.h3,{id:"merge",children:"merge"}),"\n",(0,i.jsx)(n.p,{children:"Merge all values of two lists on the same index into a 2-dimensional list. Preserves the length of longest input list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List0, List1, ..., List-n"})," -> Lists to merge"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list partA [0 3 7 5 0]\nlist partB [12 19 15] \nlist merged merge(partA partB)\n// => [[0 12] [3 19] [7 15] 5 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"mix"})]}),"\n",(0,i.jsx)(n.h3,{id:"palindrome",children:"palindrome"}),"\n",(0,i.jsxs)(n.p,{children:["Reverse a list and concatenate it to the input list, creating a palindrome of the list. A second argument ",(0,i.jsx)(n.code,{children:"1"})," will remove the duplicates halfway through and at the end."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to make palindrome of"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> no-double flag (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7 12]\nlist melodyA palindrome(notes)\n// => [0 3 7 12 12 7 3 0]\n\nlist melodyB palindrome(notes 1)\n// => [0 3 7 12 7 3]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"palin"}),", ",(0,i.jsx)(n.code,{children:"mirror"})]}),"\n",(0,i.jsx)(n.h3,{id:"repeat",children:"repeat"}),"\n",(0,i.jsx)(n.p,{children:"Repeats separate values in a list a certain amount of times. The repeat-er argument can be a list that will be iterated for every value in the to-repeat list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to repeat"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int+/Int(List)"})," -> amount of repeats per value"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 3 7]\nlist phrase repeat(notes 4)\n// => [0 0 0 0 3 3 3 3 7 7 7 7]\n\nlist repeats [2 5 3]\nlist phraseB repeat(notes repeats)\n// => [0 0 3 3 3 3 3 7 7 7]\n\n// also works with strings\nlist samples [kick snare hat]\nlist beats repeat(samples repeats)\n// => [kick kick snare snare snare snare hat hat hat]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"reverse",children:"reverse"}),"\n",(0,i.jsx)(n.p,{children:"Reverse the order of items in a list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to reverse"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list melody [0 3 7 5]\nlist rev reverse(melody)\n// => [5 7 3 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"rev"})]}),"\n",(0,i.jsx)(n.h3,{id:"rotate",children:"rotate"}),"\n",(0,i.jsx)(n.p,{children:"Rotate the position of items in a list. positive numbers = direction right, negative numbers = direction left"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to rotate"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> Steps to rotate"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list melody [0 3 7 5 7 9 12]\nlist left rotate(melody -2)\n// => [7 5 7 9 12 0 3]\n\nlist right rotate(melody 2)\n// => [9 12 0 3 7 5 7]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"rot"})]}),"\n",(0,i.jsx)(n.h3,{id:"sort",children:"sort"}),"\n",(0,i.jsx)(n.p,{children:"Sort a list of numbers or strings. sorts ascending or descending in numerical and alphabetical order."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to sort"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int"})," -> sort direction (positive value is ascending, default=1)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list srt1 sort([-5 7 0 3 12 -7 9] -1)\n//=> [ 12 9 7 3 0 -5 -7 ] \n\n// works with strings (but alphabetical order!)\nlist srt2 sort([e4 g3 c4 f3 b5])\n//=> [ b5 c4 e4 f3 g3 ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"slice",children:"slice"}),"\n",(0,i.jsx)(n.p,{children:"Slice a list in one or multiple parts. Slice lengths are determined by the second argument list. Outputs a list of lists of the result"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to slice in parts"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> slice lengths to slice list into"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> output rest flag (optional, default=false)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sl1 slice(spread(8) [3 2])\n//=> [ [ 0 1 2 ] [ 3 4 ] [ 5 6 7 ] ] \n\n// set rest-flag to false removes last slice \nlist sl2 slice(spread(24) [3 2 -1 5] 0)\n//=> [ [ 0 1 2 ] [ 3 4 ] [ 5 6 7 8 9 ] ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"split",children:"split"}),"\n",(0,i.jsx)(n.p,{children:"Similar to slice in that it also splits a list, except that slice recursively splits until the list is completely empty. If a list is provided as split sizes it will iterate the lengths."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to split in parts"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> split lengths to split list into"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sp1 split(spread(12) 3)\n//=> [ [ 0 1 2 ] [ 3 4 5 ] [ 6 7 8 ] [ 9 10 11 ] ] \n\nlist sp2 split(spread(12) [3 2 -1])\n//=> [ [ 0 1 2 ] [ 3 4 ] [ 5 6 7 ] [ 8 9 ] [ 10 11 ] ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"cut",children:"cut"}),"\n",(0,i.jsx)(n.p,{children:"Cut the beginning of a list and return. Slice length is determined by the second argument number. Outputs a list of the result."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> list to slice in parts"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> slice length to cut list into"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Bool"})," -> output rest flag (optional, default=false)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list ct1 cut(spread(8) 3)\n//=> [ 0 1 2 ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"spray",children:"spray"}),"\n",(0,i.jsx)(n.p,{children:'"Spray" the values of one list on the places of values of another list if that value is greater than 0. Wraps input list if more places must be set then length of the list. This function is interesting to use for melodic material that needs some rhythmic aspect too.'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to spray"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> Positions to spray on"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [12 19 15 17]\nlist places [1 0 0 1 1 0 1 0 1 0]\nlist sprayed spray(notes places)\n// => [12 0 0 19 15 0 17 0 12 0]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"stretch-stretchfloat",children:"stretch (stretchFloat)"}),"\n",(0,i.jsxs)(n.p,{children:["Stretch (or shrink) a list to a specified length, linearly interpolating between all values within the list. Minimum output length is 2 (which will be the outmost values from the list). Third optional argument sets the interpolation mode. Available modes are ",(0,i.jsx)(n.code,{children:"none"})," (or ",(0,i.jsx)(n.code,{children:"null"}),", ",(0,i.jsx)(n.code,{children:"false"}),") and ",(0,i.jsx)(n.code,{children:"linear"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 12 3 7]\nlist str stretch(notes 15)\n//=> [ 0 2 5 7 10 11 9 7 5 3 3 4 5 6 7 ] \n\n// 12.00 \u253c \u256d\u256e \n// 9.60 \u2524 \u2502\u2570\u256e \n// 7.20 \u2524 \u256d\u256f \u2502 \u256d \n// 4.80 \u2524\u256d\u256f \u2570\u256e\u256d\u2500\u256f \n// 2.40 \u2524\u2502 \u2570\u256f \n// 0.00 \u253c\u256f \n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// use stretchFloat if you want the result to have more precision\nlist str stretchFloat(notes 15)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"stretchF"})]}),"\n",(0,i.jsx)(n.h3,{id:"unique",children:"unique"}),"\n",(0,i.jsx)(n.p,{children:"Filter duplicate items from a list. It does not account for 2-dimensional lists in the list."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to filter"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list notes [0 5 7 3 7 7 0 12 5]\nlist thinned unique(notes)\n// => [0 5 7 3 12]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"thin"})]}),"\n",(0,i.jsx)(n.h2,{id:"utility-functions",children:"Utility Functions"}),"\n",(0,i.jsx)(n.p,{children:"The utility list-functions are a set of functions that are mainly helpful in combination with other lists. Like performing basic arithmetic such as adding, subtracting or performing some other functionality like wrapping values between a range or mapping the input list to an output range."}),"\n",(0,i.jsx)(n.h3,{id:"add",children:"add"}),"\n",(0,i.jsx)(n.p,{children:"Add a single value to a list or add two lists sequentially."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals add([1 2 3 4] [1 2 3])\n//=> [ 2 4 6 5 ] \n\n// Works with n-dimensional lists\nlist vals add([1 [2 3]] [10 [20 30 40]])\n//=> [ 11 [ 22 33 42 ] ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"subtract",children:"subtract"}),"\n",(0,i.jsx)(n.p,{children:"Subtract a single value from a list or subtract two lists sequentially."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals subtract([1 2 3 4] [1 2 3])\n//=> [ 0 0 0 3 ] \n\nlist vals sub([1 [2 3]] [10 [20 30 40]])\n//=> [ -9 [ -18 -27 -38 ] ] \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"sub"})]}),"\n",(0,i.jsx)(n.h3,{id:"multiply",children:"multiply"}),"\n",(0,i.jsx)(n.p,{children:"Multiply a single value to a list or multiply two lists sequentially."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals multiply([1 2 3 4] [1 2 3])\n//=> [ 1 4 9 4 ] \n\nlist vals mul([1 [2 3]] [10 [20 30 40]])\n//=> [ 10 [ 40 90 80 ] ] \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"mul"})]}),"\n",(0,i.jsx)(n.h3,{id:"divide",children:"divide"}),"\n",(0,i.jsx)(n.p,{children:"Divide a single value from a list or multiply two lists sequentially."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals divide([1 2 3 4] [1 2 3])\n//=> [ 1 1 1 4 ] \n\nlist vals div([1 [2 3]] [10 [20 30 40]])\n//=> [ 0.1 [ 0.1 0.1 0.05 ] ] \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"div"})]}),"\n",(0,i.jsx)(n.h3,{id:"mod",children:"mod"}),"\n",(0,i.jsx)(n.p,{children:"Return the remainder after division. Also works in the negative direction, so the wrapping starts at 0."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int(List)"})," -> Input value"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int(List)"})," -> Divisor (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Int(List)"})," -> Remainder after division"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals mod([-2 [4 [3 7]]] 5)\n//=> [ 3 [ 4 [ 3 2 ] ] ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"clip",children:"clip"}),"\n",(0,i.jsx)(n.p,{children:"Constrain values from a list within a specified low and high range."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to constrain"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low value (optional default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High value (optional default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list cn1 constrain([0 [1 [2 3]] [4 5] 6] 2 5)\n//=> [ 2 [ 2 [ 2 3 ] ] [ 4 5 ] 5 ] \n\nlist cn2 constrain(cosine(30 1) 5 9)\n//=> 9.00 \u253c\u2500\u2500\u2500\u2500\u2500\u256e \u256d\u2500\u2500\u2500 \n// 8.20 \u2524 \u2502 \u256d\u256f \n// 7.40 \u2524 \u2570\u256e \u256d\u256f \n// 6.60 \u2524 \u2570\u256e \u256d\u256f \n// 5.80 \u2524 \u2502 \u2502 \n// 5.00 \u2524 \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f \n\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"constrain"})]}),"\n",(0,i.jsx)(n.h3,{id:"wrap",children:"wrap"}),"\n",(0,i.jsx)(n.p,{children:"Wrap values from a list within a specified lower and upper range."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to wrap"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Lower value (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Upper value (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list wr1 wrap([0 [1 [2 3]] [4 5] 6] 2 5)\n//=> [ 3 [ 4 [ 2 3 ] ] [ 4 2 ] 3 ] \n\nlist wr2 wrap(spread(30) 2 8)\n//=> 7.00 \u2524\u256d\u256e \u256d\u256e \u256d\u256e \u256d\u256e \u256d\u256e \n// 6.00 \u253c\u256f\u2502 \u256d\u256f\u2502 \u256d\u256f\u2502 \u256d\u256f\u2502 \u256d\u256f\u2502 \n// 5.00 \u2524 \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d \n// 4.00 \u2524 \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \u2502 \u256d\u256f \n// 3.00 \u2524 \u2502\u256d\u256f \u2502\u256d\u256f \u2502\u256d\u256f \u2502\u256d\u256f \u2502\u256d\u256f \n// 2.00 \u2524 \u2570\u256f \u2570\u256f \u2570\u256f \u2570\u256f \u2570\u256f \n"})}),"\n",(0,i.jsx)(n.h3,{id:"fold",children:"fold"}),"\n",(0,i.jsx)(n.p,{children:'Fold values from a list within a specified lower and upper range. Folding "bounces" the number back when it reaches the limit, instead of wrapping back to the other side or clipping.'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to fold"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low value (optional, default=12)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High value (optional, default=0)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list fl1 fold([0 [1 [2 3]] [4 5] 6] 2 5)\n//=> [ 4 [ 3 [ 2 3 ] ] [ 4 5 ] 4 ]\n\nlist fl2 fold(spreadFloat(30 -9 13) 0 1)\n//=> 1.00 \u253c\u256e \u256d\u256e \u256d\u256e \n// 0.80 \u2524\u2502 \u256d\u256e \u256d\u256e \u2502\u2502 \u256d\u256e\u256d\u256e \u2502\u2502 \u256d\u256e \u256d\u256e \n// 0.60 \u2524\u2502 \u2502\u2502\u256d\u2500\u256e\u2502\u2502 \u2502\u2502\u256d\u256f\u2502\u2502\u2570\u256e\u2502\u2502 \u2502\u2502\u256d\u2500\u256e\u2502\u2502 \n// 0.40 \u2524\u2502\u256d\u256f\u2502\u2502 \u2502\u2502\u2570\u2500\u256f\u2502\u2502 \u2502\u2502 \u2502\u2502\u2570\u2500\u256f\u2502\u2502 \u2502\u2502\u2570\u256e \n// 0.20 \u2524\u2570\u256f \u2502\u2502 \u2570\u256f \u2570\u256f \u2502\u2502 \u2570\u256f \u2570\u256f \u2502\u2502 \u2570 \n// 0.00 \u2524 \u2570\u256f \u2570\u256f \u2570\u256f \n"})}),"\n",(0,i.jsx)(n.h3,{id:"map",children:"map"}),"\n",(0,i.jsx)(n.p,{children:"Rescale values in a list from a specified input range to a specified low and high output range."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> List to wrap"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low value (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High value (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Low value (optional, default=0)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> High value (optional, default=1)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> Exponent value (optional, default=1)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list sc1 scale([0 [1 [2 3]] 4] 0 4 -1 1)\n//=> [ -1 [ -0.5 [ 0 0.5 ] ] 1 ] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"normalize",children:"normalize"}),"\n",(0,i.jsxs)(n.p,{children:["Normalize all the values in a list between ",(0,i.jsx)(n.code,{children:"0"})," and ",(0,i.jsx)(n.code,{children:"1"}),". The highest value will be 1, the lowest value will be 0."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number(List)"})," -> Input list to normalize"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals normalize([0 1 2 3 4])\n//=> [ 0 0.25 0.5 0.75 1 ]\n\n// works with n-dimensional lists\nlist vals normalize([5 [12 [4 17]] 3 1])\n//=> [ 0.25 [ 0.6875 [ 0.1875 1 ] ] 0.125 0 ] \n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"norm"})]}),"\n",(0,i.jsx)(n.h3,{id:"equals",children:"equals"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for equals (",(0,i.jsx)(n.code,{children:"=="}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals eq([0 10 20 30] [20 0 30 30])\n//=> [0 0 0 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"eq"})]}),"\n",(0,i.jsx)(n.h3,{id:"notequals",children:"notEquals"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two list for not equals (",(0,i.jsx)(n.code,{children:"!="}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals neq([0 10 20 30] [20 0 30 30])\n//=> [1 1 1 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"neq"})]}),"\n",(0,i.jsx)(n.h3,{id:"greater",children:"greater"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for left values are greater than right (",(0,i.jsx)(n.code,{children:">"}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals gt([0 10 20 30] [20 0 30 30])\n//=> [0 1 0 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"gt"})]}),"\n",(0,i.jsx)(n.h3,{id:"greaterequals",children:"greaterEquals"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for left values are greater than or equal to right (",(0,i.jsx)(n.code,{children:">="}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals gte([0 10 20 30] [20 0 30 30])\n//=> [0 1 0 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"gte"})]}),"\n",(0,i.jsx)(n.h3,{id:"less",children:"less"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for left values are less than right (",(0,i.jsx)(n.code,{children:"<"}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals lt([0 10 20 30] [20 0 30 30])\n//=> [1 0 1 0]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"lt"})]}),"\n",(0,i.jsx)(n.h3,{id:"lessequals",children:"lessEquals"}),"\n",(0,i.jsxs)(n.p,{children:["Compare two lists for left values less than or equal to right (",(0,i.jsx)(n.code,{children:"<="}),")."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"transformer"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on left-hand side of equation"}),"\n",(0,i.jsx)(n.li,{children:"Number(List) -> Input number or list on right-hand side of equation"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"list vals lte([0 10 20 30] [20 0 30 30])\n//=> [1 0 1 1]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"lte"})]}),"\n",(0,i.jsx)(n.h2,{id:"size",children:"size"}),"\n",(0,i.jsxs)(n.p,{children:["Return the length/size of a list as a ",(0,i.jsx)(n.code,{children:"number"})," if the argument is a list. If the argument is a number return the number as a positive integer greater than 0. If the argument is not a number return 1. The method can be used to input lists as arguments for other functions."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"analyser"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value(List)"})," -> input list to check size of"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"size([5 7 3 2 9])\n//=> 5\n\nsize(8)\n//=> 8\n\nsize(3.1415)\n//=> 3\n\nsize('foo')\n//=> 1\n\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"length"})]}),"\n",(0,i.jsx)(n.h2,{id:"sum",children:"sum"}),"\n",(0,i.jsxs)(n.p,{children:["Return the sum of all values in a list as a ",(0,i.jsx)(n.code,{children:"number"}),". The function ignores all non-numeric values. Works recursively with n-dimensional lists."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"analyser"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Value(List)"})," -> input list to check size of"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"sum([1 2 3 4])\n//=> 10 \n\nsum([10 'foo' 11 'bar' 22])\n//=> 43 \n\nsum([1 2 [3 4 [5 6] 7] 8])\n//=> 36\n"})}),"\n",(0,i.jsx)(n.h2,{id:"translate-functions",children:"Translate Functions"}),"\n",(0,i.jsx)(n.h3,{id:"conversion-between-pitch-units",children:"Conversion between pitch units"}),"\n",(0,i.jsxs)(n.p,{children:["Convert easily between relative-semitones, midinotes, notenames, chord-numerals, chordnames and frequencies with the functions below. Thankfully using the amazing ",(0,i.jsx)(n.code,{children:"Tonal.js"})," package by ",(0,i.jsx)(n.code,{children:"@danigb"})," for various functions."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// Convert list or Int as midi-number to midi-notenames\nmidiToNote([60 [63 67 69] [57 65]])\n//=> [ c4 [ eb4 g4 a4 ] [ a3 f4 ] ] \n// Alias: mton\n\n// Convert midi-pitches to frequency (A4 = 440 Hz)\nmidiToFreq([60 [63 67 69] [57 65]])\n//=> [ 261.63 [ 311.13 391.995 440 ] [ 220 349.23 ] ] \n// Alias: mtof\n\n// Convert list of String as midi-notenames to midi-pitch\nnoteToMidi([c4 [eb4 g4 a4] [a3 f4]])\n//=> [ 60 [ 63 67 69 ] [ 57 65 ] ] \n// Alias: ntom\n\n// Convert midi-notenames to frequency (A4 = 440 Hz)\nnoteToFreq([c4 [eb4 g4 a4] [a3 f4]])\n//=> [ 261.63 [ 311.13 391.995 440 ] [ 220 349.23 ] ] \n// Alias: ntof\n\n// Convert frequency to nearest midi note\nfreqToMidi([ 261 [ 311 391 440 ] [ 220 349 ] ])\n//=> [ 60 [ 63 67 69 ] [ 57 65 ] ] \n// Alias: ftom\n\n// Set detune flag to true to get floating midi output for pitchbend\nfreqToMidi([ 261 [ 311 391 440 ] [ 220 349 ] ] true)\n//=> [ 59.959 [ 62.993 66.956 69 ] [ 57 64.989 ]] \n\n// Convert frequency to nearest midi note name\nfreqToNote([ 261 [ 311 391 440 ] [ 220 349 ] ])\n//=> [ c4 [ eb4 g4 a4 ] [ a3 f4 ] ] \n// Alias: fton\n\n// Convert relative semitone values to midi-numbers\n// specify the octave as second argument (default = C4 = 4 => 48)\nrelativeToMidi([[-12 -9 -5] [0 4 7] [2 5 9]] c4)\n//=> [ [ 48 51 55 ] [ 60 64 67 ] [ 62 65 69 ] ]\n// Alias: rtom\n\n// Convert relative semitone values to frequency (A4 = 440 Hz)\n// specify the octave as second argument (default = C4 = 4 => 48)\nrelativeToFreq([[-12 -9 -5] [0 4 7] [2 5 9]] c4)\n//=> [ [ 130.81 155.56 196 ] [ 261.62 329.63 392 ] [ 293.66 349.23 440 ] ]\n// Alias: rtof\n\n// Convert a chroma value to a relative note number\n// Can also include octave offsets with -/+ case-insensitive\nchromaToRelative([c [eb G Ab] [a+ f-]]) \n//=> [ 0 [ 3 7 8 ] [ 21 -7 ] ]\n// Alias: ctor\n\n// Convert ratio to relative cents\nratioToCent([2/1 [3/2 [4/3 5/4]] 9/8])\n//=> [ 1200 [ 701.95 [ 498.04 386.31 ] ] 203.91 ] \n// Alias: rtoc\n\n// Convert a chord progression from roman numerals to semitones\nchordsFromNumerals([I IIm IVsus2 V7 VIm9])\n// => [[ 0 4 7 ]\n// [ 2 5 9 ]\n// [ 5 7 0 ]\n// [ 7 11 2 5 ]\n// [ 9 0 4 7 11 ]] \n// Alias: chords\n\n// Convert a chord progression from chordnames to semitones\nchordsFromNames([C Dm Fsus2 G7 Am9])\n//=> [[ 0 4 7 ]\n// [ 2 5 9 ]\n// [ 5 7 0 ]\n// [ 7 11 2 5 ]\n// [ 9 0 4 7 11 ]] \n"})}),"\n",(0,i.jsx)(n.h3,{id:"conversion-between-time-units",children:"Conversion between time units"}),"\n",(0,i.jsx)(n.p,{children:"Convert between rhythmic notation such as divisions or ratios and milliseconds based on the set tempo in the global settings."}),"\n",(0,i.jsx)(n.h4,{id:"divisiontoms",children:"divisionToMs"}),"\n",(0,i.jsx)(n.p,{children:"Convert beat division strings or beat ratio floats to milliseconds using BPM from the global settings. Optional second argument sets BPM and ignores global setting."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List"})," -> beat division or ratio list"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Number"})," -> set the BPM (optional, default = global tempo)"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"set tempo 120\nlist divs [1/4 1/2 1/8 3/16 1/4 1/6 2]\nlist ms1 divisionToMs(divs)\n// => [500 1000 250 375 500 333.33 4000]\nlist ms2 divisionToMs(divs 100)\n// => [600 1200 300 450 600 400 4800]\n\nlist ratios [0.25 0.125 0.1875 0.25 0.16667 2]\nlist ms3 divisionToMs(ratios)\n// => [500 1000 250 375 500 333.33 4000]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"dtoms"})]}),"\n",(0,i.jsx)(n.p,{children:"Other functions:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// convert beat division strings to beat ratio floats\ndivisionToRatio([1/4 1/8 3/16 1/4 1/6 2])\n//=> [ 0.25 0.125 0.1875 0.25 0.167 2 ] \n// Alias: print dtor\n\n// convert beat ratio floats to milliseconds\nratioToMs([0.25 [0.125 [0.1875 0.25]] 0.1667 2] 100)\n//=> [ 600 [ 300 [ 450 600 ] ] 400.08 4800 ] \n// Alias: print rtoms\n"})}),"\n",(0,i.jsx)(n.h3,{id:"working-with-fixed-scale-and-root",children:"Working with fixed scale and root"}),"\n",(0,i.jsx)(n.p,{children:"Convert notes to a fixed scale based on the global settings."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// Set the global scale used with toScale() and toMidi() functions\nset scale minor a\n\n// Set only the root for the global scale\nset root c\n\n// Return all the available scale names\nprint scaleNames()\n//=> [ chromatic major etc... ] \n\n// Map relative numbers to a specified scale class (excluding root)\ntoScale([0 1 2 3 4 5 6 7 8 9 10 11])\n//=> [0 0 2 3 3 5 5 7 8 8 10 10]\n\n// Works with negative relative values\ntoScale([8 13 -1 20 -6 21 -4 12])\n//=> [8 12 -2 20 -7 20 -4 12]\n\n// Preserves floating point for detune/microtonality\ntoScale([0 4.1 6.5 7.1 9.25])\n//=> [0 3.1 5.5 7.1 8.25] \n\n// Optionally add a scale name and root to use a scale other \n// than the global one\ntoScale([0 1 2 3 4 5 6 7 8 9 10 11] major)\n//=> [ 0 0 2 2 4 5 5 7 7 9 9 11 ]\n\ntoScale([0 1 2 3 4 5 6 7 8 9 10 11] minor eb)\n//=> [ 3 3 5 6 6 8 8 10 11 11 13 13 ]\n"})}),"\n",(0,i.jsx)(n.h3,{id:"texttocode",children:"textToCode"}),"\n",(0,i.jsxs)(n.p,{children:["Convert a string or list of strings to their ASCII code integer representation. The ASCII code is the American Standard Code for Information Interchange. In this code every unique character/symbol/number is represented by a whole number (integer). For example ",(0,i.jsx)(n.code,{children:"a=97"}),", but ",(0,i.jsx)(n.code,{children:"A=65"})," and ",(0,i.jsx)(n.code,{children:"SPACE=32"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsxs)(n.strong,{children:["type: ",(0,i.jsx)(n.code,{children:"translator"})]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"arguments"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String(List)"})," -> input to convert to ASCII"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-js",children:"// single string input\ntextCode('bach cage')\n//=> [ 98 97 99 104 32 99 97 103 101 ]\n\n// multiple strings in a list results in a 2D list output\ntextCode([bach cage])\n//=> [ [ 98 97 99 104 ] [ 99 97 103 101 ] ]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Alias: ",(0,i.jsx)(n.code,{children:"textCode"}),", ",(0,i.jsx)(n.code,{children:"ttoc"})]})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>a});var i=s(6540);const l={},r=i.createContext(l);function t(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d589d3a7.1183e0e2.js b/assets/js/d589d3a7.1183e0e2.js deleted file mode 100644 index 3fb6d930..00000000 --- a/assets/js/d589d3a7.1183e0e2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[924],{8578:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var s=r(4848),t=r(8453);const i={sidebar_position:1},o="\ud83d\ude80 Getting Started",l={id:"getting-started",title:"\ud83d\ude80 Getting Started",description:"Hello, World! Welcome to the Getting Started guide for Mercury. The various chapters in this guide will get you up and running in no time! Before we get started it is good to know that Mercury currently has 2 versions:",source:"@site/docs/getting-started.md",sourceDirName:".",slug:"/getting-started",permalink:"/mercury/docs/getting-started",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udc7e Made with Mercury",permalink:"/mercury/docs/about/inspiration"},next:{title:"\ud83d\udd79 Usage",permalink:"/mercury/docs/category/-usage"}},c={},d=[{value:"\ud83c\udf0e MercuryPlayground",id:"-mercuryplayground",level:2},{value:"\ud83c\udf11 Without internet",id:"-without-internet",level:3},{value:"\ud83d\udcbb Mercury4Max",id:"-mercury4max",level:2},{value:"\ud83d\udee0 System Requirements",id:"-system-requirements",level:3},{value:"\u2699\ufe0f Install Mercury",id:"\ufe0f-install-mercury",level:3},{value:"\ud83d\ude80 Launch Mercury4Max",id:"-launch-mercury4max",level:3},{value:"\ud83c\udfb9 Play a first sound!",id:"-play-a-first-sound",level:2},{value:"What's next?",id:"whats-next",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"-getting-started",children:"\ud83d\ude80 Getting Started"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Hello, World!"})," Welcome to the Getting Started guide for Mercury. The various chapters in this guide will get you up and running in no time! Before we get started it is good to know that Mercury currently has 2 versions:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"MercuryPlayground"}),", running in the ",(0,s.jsx)(n.a,{href:"https://mercury.timohoogland.com/",children:"browser"})," (Windows/Mac/Linux)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Mercury4Max"}),", running in ",(0,s.jsx)(n.a,{href:"https://cycling74.com/downloads",children:"Cycling'74's Max8"})," (Windows/Mac only)"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"for everyone",type:"info",children:(0,s.jsxs)(n.p,{children:["I recommend to use the MercuryPlayground (browser version) first. Please read further in chapter ",(0,s.jsx)(n.a,{href:"#mercuryplayground",children:"MercuryPlayground"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["If you have experience with Max8 you can also consider using Mercury4Max instead. Please read further in chapter ",(0,s.jsx)(n.a,{href:"#-mercury4max",children:"Mercury4Max"})," for instructions on installing and setting up the environment."]}),"\n",(0,s.jsx)(n.h2,{id:"-mercuryplayground",children:"\ud83c\udf0e MercuryPlayground"}),"\n",(0,s.jsx)(n.p,{children:"The MercuryPlayground runs directly in the browser using WebAudio and WebMIDI technologies based on the JavaScript and the ToneJS framework. This makes it very accessible for everyone, no matter if you're a beginner or an expert."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Install a Chromium based browser on your computer (for example Chrome, Brave, Arc, Opera)"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["You can start coding immediately: ",(0,s.jsx)(n.a,{href:"https://mercury.timohoogland.com/",children:"https://mercury.timohoogland.com/"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Wait till the sounds are loaded (depending on your internet speed this could take some time)"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"You are now ready to start coding your first sounds or follow the tutorials! \ud83c\udfb6\ud83d\udcbb\ud83c\udfb6"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"-without-internet",children:"\ud83c\udf11 Without internet"}),"\n",(0,s.jsx)(n.p,{children:"If you want to run the MercuryPlayground locally (for using without internet, or using the OSC-messages functionality, or when developing extra features) you can follow these steps:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Make sure you have ",(0,s.jsx)(n.a,{href:"https://nodejs.org/en",children:"NodeJS installed for your Operating System"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In the terminal navigate to the folder where you want to install Mercury."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Then run: ",(0,s.jsx)(n.code,{children:"git clone http://github.com/tmhglnd/mercury-playground"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Navigate to the cloned folder with: ",(0,s.jsx)(n.code,{children:"cd mercury-playground"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install all the dependencies: ",(0,s.jsx)(n.code,{children:"npm install"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Build your local version: ",(0,s.jsx)(n.code,{children:"npm run build"})," (or ",(0,s.jsx)(n.code,{children:"npm run watch"})," while developing)"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["You can add your own samples to ",(0,s.jsx)(n.code,{children:"/public/assets/samples"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When you added samples make sure you ",(0,s.jsx)(n.code,{children:"npm run build"})," again"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Now start the local server: ",(0,s.jsx)(n.code,{children:"npm start"}),", open a browser and go to ",(0,s.jsx)(n.a,{href:"http://localhost:8080",children:(0,s.jsx)(n.code,{children:"http://localhost:8080"})}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Once connected the Terminal will print something like:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"Connected yH0SGEdRHbZD1IACAAAB\nReceive messages from Mercury on port 2440\nSend messages to Mercury on port 4880\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Mercury can now receive OSC-messages on port ",(0,s.jsx)(n.code,{children:"4880"})," ",(0,s.jsx)(n.em,{children:"(the portnumber is chosen to not interfere with many other default portnumbers. The number is the diameter in kilometers of the planet Mercury)"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"You are now ready to start coding your first sounds or follow the tutorials! \ud83c\udfb6\ud83d\udcbb\ud83c\udfb6"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"-mercury4max",children:"\ud83d\udcbb Mercury4Max"}),"\n",(0,s.jsx)(n.p,{children:"Mercury also runs in Max8 (sometimes also called MaxMSP), a node-based creative coding environment from Cycling'74."}),"\n",(0,s.jsx)(n.admonition,{title:"You do not need to buy a Max-license in order to use Mercury in Max8",type:"info"}),"\n",(0,s.jsx)(n.h3,{id:"-system-requirements",children:"\ud83d\udee0 System Requirements"}),"\n",(0,s.jsx)(n.p,{children:"These system requirements are recommended to install and run Max8 and Mercury on your computer. Lower specs may work but it's not guaranteed. A dedicated Graphics Card (GPU) is also recommended to run the visuals of Mercury smoothly (the text-editor runs on the graphics card as well). If you don't have a good Graphics Card you can also use an external text-editor like Pulsar or Flok. You can find instructions for using those in ."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"OS"}),(0,s.jsx)(n.th,{children:"CPU"}),(0,s.jsx)(n.th,{children:"RAM"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Mac OSX 10.13 (at least 10.11.6+)"}),(0,s.jsx)(n.td,{children:"Intel i5 processor"}),(0,s.jsx)(n.td,{children:"8 GB"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Windows 10 (7 or 8 may work)"}),(0,s.jsx)(n.td,{children:"Intel i5 or AMD mult-core processor"}),(0,s.jsx)(n.td,{children:"8 GB"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"\ufe0f-install-mercury",children:"\u2699\ufe0f Install Mercury"}),"\n",(0,s.jsxs)(n.p,{children:["Read the ",(0,s.jsx)(n.a,{href:"#-system-requirements",children:"system requirements"})," before getting started."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Download Max8 for your Operating System through the link below"}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://cycling74.com/downloads",children:"Download Max8"})}),"\n"]}),"\n",(0,s.jsxs)(n.ol,{start:"2",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Launch Max8 after installing. It will create a ",(0,s.jsx)(n.code,{children:"Max 8"})," folder in your ",(0,s.jsx)(n.code,{children:"Documents"}),". Go inside that folder and create an empty folder named ",(0,s.jsx)(n.code,{children:"Projects"}),". The full path should now look like this: ",(0,s.jsx)(n.code,{children:"/Documents/Max 8/Projects"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Download the ",(0,s.jsx)(n.a,{href:"https://github.com/tmhglnd/mercury/archive/refs/heads/master.zip",children:"latest version of Mercury"})," by clicking on the green button ",(0,s.jsx)(n.code,{children:"code"})," and ",(0,s.jsx)(n.code,{children:"download .zip"}),". Unzip the entire folder in ",(0,s.jsx)(n.code,{children:"~/Documents/Max 8/Projects"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Or"})," git-users can clone/fork Mercury to the Projects folder in their Documents."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ cd ~/Documents/Max\\ 8/Projects\n$ git clone http://github.com/tmhglnd/mercury\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Now your filepath should look something like: ",(0,s.jsx)(n.code,{children:"/Documents/Max 8/Projects/mercury-v.x.x.x"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"-launch-mercury4max",children:"\ud83d\ude80 Launch Mercury4Max"}),"\n",(0,s.jsxs)(n.p,{children:["Launch Mercury by double clicking ",(0,s.jsx)(n.code,{children:"mercury_ide.maxproj"})," located in the folder ",(0,s.jsx)(n.code,{children:"mercury-v.x.x.x/mercury-ide"})," ",(0,s.jsx)(n.strong,{children:"or"})," by running the following terminal command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ cd mercury\n$ open mercury_ide/mercury_ide.maxproj\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can create a shortcut or alias on your desktop or Applications folder if you like for easy access."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\u23f3 Now give it some time to load.","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Mac Users"}),": You may need to give some permissions under Security & Privacy Preferences. Please be on the lookout for any messages popping up."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Once it's ready you will see two windows:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"_mercury_main"})," window"]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"mercury"})," window (still black)."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.em,{children:"main window"})," is used to quickly access the most important settings in Mercury such as turning the audio on/off and starting a recording of your sound. When you turn the Rendering on you will start to see the text-editor in the ",(0,s.jsx)(n.code,{children:"mercury"})," window. This editor is rendered in a 3D visual environment called Jitter. This is the window were you can type your code. If your computer can't handle the rendering please use an external editor instead."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\ud83d\udd08 Turn the ",(0,s.jsx)(n.strong,{children:"Audio on"})]}),"\n",(0,s.jsxs)(n.li,{children:["\ud83d\udcfa Turn the ",(0,s.jsx)(n.strong,{children:"Rendering on"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"You are now ready to start coding your first sounds! \ud83c\udfb6\ud83d\udcbb\ud83c\udfb6"}),"\n",(0,s.jsx)(n.h2,{id:"-play-a-first-sound",children:"\ud83c\udfb9 Play a first sound!"}),"\n",(0,s.jsxs)(n.p,{children:["After going to the website or following any of the installation steps you are now ready to make the first sound! In the code editor you can type the following code (if there is already some code there you can ",(0,s.jsx)(n.code,{children:"backspace"})," it or click ",(0,s.jsx)(n.code,{children:"empty"}),"):"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nnew sample kick_house time(1/4)\nnew sample hat_808 time(1/8)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Now click ",(0,s.jsx)(n.code,{children:"play"})," (browser), ",(0,s.jsx)(n.code,{children:"Menubar > File > Execute Code"})," (Max8) or hit ",(0,s.jsx)(n.code,{children:"ctrl/alt + enter"})," to evaluate the code. If all goes well you should hear the sound of a kick go 4 times, while the hihat sound goes 8 times (2x as fast)."]}),"\n",(0,s.jsx)(n.admonition,{title:"help",type:"info",children:(0,s.jsx)(n.p,{children:"If you experience any issues, please see the "})}),"\n",(0,s.jsx)(n.h3,{id:"whats-next",children:"What's next?"}),"\n",(0,s.jsxs)(n.p,{children:["You are now ready to play all you want! For example you can listen some random examples or follow the tutorials. You can read the Usage chapter for more info on how to navigate the environment and you can read the Reference for explanation of all the functions. For Max users I also recommended following the interactive tutorials in the ",(0,s.jsx)(n.a,{href:"https://mercury.timohoogland.com",children:"MercuryPlayground"})," before continuing in Max."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"category/-usage",children:"Usage"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"category/-reference",children:"Reference"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>l});var s=r(6540);const t={},i=s.createContext(t);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d589d3a7.6186ee36.js b/assets/js/d589d3a7.6186ee36.js new file mode 100644 index 00000000..c8c6d358 --- /dev/null +++ b/assets/js/d589d3a7.6186ee36.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[924],{8578:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var s=r(4848),t=r(8453);const i={sidebar_position:1},o="\ud83d\ude80 Getting Started",l={id:"getting-started",title:"\ud83d\ude80 Getting Started",description:"Hello, World! Welcome to the Getting Started guide for Mercury. The various chapters in this guide will get you up and running in no time! Before we get started it is good to know that Mercury currently has 2 versions:",source:"@site/docs/getting-started.md",sourceDirName:".",slug:"/getting-started",permalink:"/mercury/docs/getting-started",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udc7e Made with Mercury",permalink:"/mercury/docs/about/inspiration"},next:{title:"\ud83d\udd79 Usage",permalink:"/mercury/docs/usage"}},c={},d=[{value:"\ud83c\udf0e MercuryPlayground",id:"-mercuryplayground",level:2},{value:"\ud83c\udf11 Without internet",id:"-without-internet",level:3},{value:"\ud83d\udcbb Mercury4Max",id:"-mercury4max",level:2},{value:"\ud83d\udee0 System Requirements",id:"-system-requirements",level:3},{value:"\u2699\ufe0f Install Mercury",id:"\ufe0f-install-mercury",level:3},{value:"\ud83d\ude80 Launch Mercury4Max",id:"-launch-mercury4max",level:3},{value:"\ud83c\udfb9 Play a first sound!",id:"-play-a-first-sound",level:2},{value:"What's next?",id:"whats-next",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"-getting-started",children:"\ud83d\ude80 Getting Started"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Hello, World!"})," Welcome to the Getting Started guide for Mercury. The various chapters in this guide will get you up and running in no time! Before we get started it is good to know that Mercury currently has 2 versions:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"MercuryPlayground"}),", running in the ",(0,s.jsx)(n.a,{href:"https://mercury.timohoogland.com/",children:"browser"})," (Windows/Mac/Linux)"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Mercury4Max"}),", running in ",(0,s.jsx)(n.a,{href:"https://cycling74.com/downloads",children:"Cycling'74's Max8"})," (Windows/Mac only)"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{title:"for everyone",type:"info",children:(0,s.jsxs)(n.p,{children:["I recommend to use the MercuryPlayground (browser version) first. Please read further in chapter ",(0,s.jsx)(n.a,{href:"#-mercuryplayground",children:"MercuryPlayground"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:["If you have experience with Max8 you can also consider using Mercury4Max instead. Please read further in chapter ",(0,s.jsx)(n.a,{href:"#-mercury4max",children:"Mercury4Max"})," for instructions on installing and setting up the environment."]}),"\n",(0,s.jsx)(n.h2,{id:"-mercuryplayground",children:"\ud83c\udf0e MercuryPlayground"}),"\n",(0,s.jsx)(n.p,{children:"The MercuryPlayground runs directly in the browser using WebAudio and WebMIDI technologies based on the JavaScript and the ToneJS framework. This makes it very accessible for everyone, no matter if you're a beginner or an expert."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Install a Chromium based browser on your computer (for example Chrome, Brave, Arc, Opera)"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["You can start coding immediately: ",(0,s.jsx)(n.a,{href:"https://mercury.timohoogland.com/",children:"https://mercury.timohoogland.com/"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Wait till the sounds are loaded (depending on your internet speed this could take some time)"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"You are now ready to start coding your first sounds or follow the tutorials! \ud83c\udfb6\ud83d\udcbb\ud83c\udfb6"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"-without-internet",children:"\ud83c\udf11 Without internet"}),"\n",(0,s.jsx)(n.p,{children:"If you want to run the MercuryPlayground locally (for using without internet, or using the OSC-messages functionality, or when developing extra features) you can follow these steps:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Make sure you have ",(0,s.jsx)(n.a,{href:"https://nodejs.org/en",children:"NodeJS installed for your Operating System"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"In the terminal navigate to the folder where you want to install Mercury."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Then run: ",(0,s.jsx)(n.code,{children:"git clone http://github.com/tmhglnd/mercury-playground"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Navigate to the cloned folder with: ",(0,s.jsx)(n.code,{children:"cd mercury-playground"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install all the dependencies: ",(0,s.jsx)(n.code,{children:"npm install"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Build your local version: ",(0,s.jsx)(n.code,{children:"npm run build"})," (or ",(0,s.jsx)(n.code,{children:"npm run watch"})," while developing)"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["You can add your own samples to ",(0,s.jsx)(n.code,{children:"/public/assets/samples"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When you added samples make sure you ",(0,s.jsx)(n.code,{children:"npm run build"})," again"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Now start the local server: ",(0,s.jsx)(n.code,{children:"npm start"}),", open a browser and go to ",(0,s.jsx)(n.a,{href:"http://localhost:8080",children:(0,s.jsx)(n.code,{children:"http://localhost:8080"})}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Once connected the Terminal will print something like:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"Connected yH0SGEdRHbZD1IACAAAB\nReceive messages from Mercury on port 2440\nSend messages to Mercury on port 4880\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Mercury can now receive OSC-messages on port ",(0,s.jsx)(n.code,{children:"4880"})," ",(0,s.jsx)(n.em,{children:"(the portnumber is chosen to not interfere with many other default portnumbers. The number is the diameter in kilometers of the planet Mercury)"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"You are now ready to start coding your first sounds or follow the tutorials! \ud83c\udfb6\ud83d\udcbb\ud83c\udfb6"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"-mercury4max",children:"\ud83d\udcbb Mercury4Max"}),"\n",(0,s.jsx)(n.p,{children:"Mercury also runs in Max8 (sometimes also called MaxMSP), a node-based creative coding environment from Cycling'74."}),"\n",(0,s.jsx)(n.admonition,{title:"You do not need to buy a Max-license in order to use Mercury in Max8",type:"info"}),"\n",(0,s.jsx)(n.h3,{id:"-system-requirements",children:"\ud83d\udee0 System Requirements"}),"\n",(0,s.jsx)(n.p,{children:"These system requirements are recommended to install and run Max8 and Mercury on your computer. Lower specs may work but it's not guaranteed. A dedicated Graphics Card (GPU) is also recommended to run the visuals of Mercury smoothly (the text-editor runs on the graphics card as well). If you don't have a good Graphics Card you can also use an external text-editor like Pulsar or Flok. You can find instructions for using those in ."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"OS"}),(0,s.jsx)(n.th,{children:"CPU"}),(0,s.jsx)(n.th,{children:"RAM"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Mac OSX 10.13 (at least 10.11.6+)"}),(0,s.jsx)(n.td,{children:"Intel i5 processor"}),(0,s.jsx)(n.td,{children:"8 GB"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Windows 10 (7 or 8 may work)"}),(0,s.jsx)(n.td,{children:"Intel i5 or AMD mult-core processor"}),(0,s.jsx)(n.td,{children:"8 GB"})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"\ufe0f-install-mercury",children:"\u2699\ufe0f Install Mercury"}),"\n",(0,s.jsxs)(n.p,{children:["Read the ",(0,s.jsx)(n.a,{href:"#-system-requirements",children:"system requirements"})," before getting started."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Download Max8 for your Operating System through the link below"}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://cycling74.com/downloads",children:"Download Max8"})}),"\n"]}),"\n",(0,s.jsxs)(n.ol,{start:"2",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Launch Max8 after installing. It will create a ",(0,s.jsx)(n.code,{children:"Max 8"})," folder in your ",(0,s.jsx)(n.code,{children:"Documents"}),". Go inside that folder and create an empty folder named ",(0,s.jsx)(n.code,{children:"Projects"}),". The full path should now look like this: ",(0,s.jsx)(n.code,{children:"/Documents/Max 8/Projects"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Download the ",(0,s.jsx)(n.a,{href:"https://github.com/tmhglnd/mercury/archive/refs/heads/master.zip",children:"latest version of Mercury"})," by clicking on the green button ",(0,s.jsx)(n.code,{children:"code"})," and ",(0,s.jsx)(n.code,{children:"download .zip"}),". Unzip the entire folder in ",(0,s.jsx)(n.code,{children:"~/Documents/Max 8/Projects"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Or"})," git-users can clone/fork Mercury to the Projects folder in their Documents."]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ cd ~/Documents/Max\\ 8/Projects\n$ git clone http://github.com/tmhglnd/mercury\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Now your filepath should look something like: ",(0,s.jsx)(n.code,{children:"/Documents/Max 8/Projects/mercury-v.x.x.x"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"-launch-mercury4max",children:"\ud83d\ude80 Launch Mercury4Max"}),"\n",(0,s.jsxs)(n.p,{children:["Launch Mercury by double clicking ",(0,s.jsx)(n.code,{children:"mercury_ide.maxproj"})," located in the folder ",(0,s.jsx)(n.code,{children:"mercury-v.x.x.x/mercury-ide"})," ",(0,s.jsx)(n.strong,{children:"or"})," by running the following terminal command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ cd mercury\n$ open mercury_ide/mercury_ide.maxproj\n"})}),"\n",(0,s.jsx)(n.p,{children:"You can create a shortcut or alias on your desktop or Applications folder if you like for easy access."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\u23f3 Now give it some time to load.","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Mac Users"}),": You may need to give some permissions under Security & Privacy Preferences. Please be on the lookout for any messages popping up."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Once it's ready you will see two windows:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"_mercury_main"})," window"]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"mercury"})," window (still black)."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.em,{children:"main window"})," is used to quickly access the most important settings in Mercury such as turning the audio on/off and starting a recording of your sound. When you turn the Rendering on you will start to see the text-editor in the ",(0,s.jsx)(n.code,{children:"mercury"})," window. This editor is rendered in a 3D visual environment called Jitter. This is the window were you can type your code. If your computer can't handle the rendering please use an external editor instead."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\ud83d\udd08 Turn the ",(0,s.jsx)(n.strong,{children:"Audio on"})]}),"\n",(0,s.jsxs)(n.li,{children:["\ud83d\udcfa Turn the ",(0,s.jsx)(n.strong,{children:"Rendering on"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"You are now ready to start coding your first sounds! \ud83c\udfb6\ud83d\udcbb\ud83c\udfb6"}),"\n",(0,s.jsx)(n.h2,{id:"-play-a-first-sound",children:"\ud83c\udfb9 Play a first sound!"}),"\n",(0,s.jsxs)(n.p,{children:["After going to the website or following any of the installation steps you are now ready to make the first sound! In the code editor you can type the following code (if there is already some code there you can ",(0,s.jsx)(n.code,{children:"backspace"})," it or click ",(0,s.jsx)(n.code,{children:"empty"}),"):"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-js",children:"set tempo 110\n\nnew sample kick_house time(1/4)\nnew sample hat_808 time(1/8)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Now click ",(0,s.jsx)(n.code,{children:"play"})," (browser), ",(0,s.jsx)(n.code,{children:"Menubar > File > Execute Code"})," (Max8) or hit ",(0,s.jsx)(n.code,{children:"ctrl/alt + enter"})," to evaluate the code. If all goes well you should hear the sound of a kick go 4 times, while the hihat sound goes 8 times (2x as fast)."]}),"\n",(0,s.jsx)(n.admonition,{title:"help",type:"info",children:(0,s.jsx)(n.p,{children:"If you experience any issues, please see the "})}),"\n",(0,s.jsx)(n.h3,{id:"whats-next",children:"What's next?"}),"\n",(0,s.jsxs)(n.p,{children:["You are now ready to play all you want! For example you can listen some random examples or follow the tutorials. You can read the Usage chapter for more info on how to navigate the environment and you can read the Reference for explanation of all the functions. For Max users I also recommended following the interactive tutorials in the ",(0,s.jsx)(n.a,{href:"https://mercury.timohoogland.com",children:"MercuryPlayground"})," before continuing in Max."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./usage/",children:"Usage"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./reference/",children:"Reference"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>o,x:()=>l});var s=r(6540);const t={},i=s.createContext(t);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/da3fe09b.1163186f.js b/assets/js/da3fe09b.1163186f.js deleted file mode 100644 index c8abd5ff..00000000 --- a/assets/js/da3fe09b.1163186f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[15],{4061:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/e92cf459.82411ef5.js b/assets/js/e92cf459.fe096c80.js similarity index 75% rename from assets/js/e92cf459.82411ef5.js rename to assets/js/e92cf459.fe096c80.js index 41684a46..afd45890 100644 --- a/assets/js/e92cf459.82411ef5.js +++ b/assets/js/e92cf459.fe096c80.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[543],{4249:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>t,metadata:()=>o,toc:()=>l});var r=s(4848),a=s(8453);const t={sidebar_position:3},i="\ud83c\udfae Quick Features Overview",o={id:"about/features",title:"\ud83c\udfae Quick Features Overview",description:"Below is a brief overview of several things you can do with Mercury. But this is of course just scratching the surface!",source:"@site/docs/about/features.md",sourceDirName:"about",slug:"/about/features",permalink:"/mercury/docs/about/features",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udd2d What can you do with Mercury?",permalink:"/mercury/docs/about/vision"},next:{title:"\ud83d\udc7e Made with Mercury",permalink:"/mercury/docs/about/inspiration"}},c={},l=[];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",hr:"hr",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"-quick-features-overview",children:"\ud83c\udfae Quick Features Overview"}),"\n",(0,r.jsx)(n.p,{children:"Below is a brief overview of several things you can do with Mercury. But this is of course just scratching the surface!"}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.p,{children:"Quick access to playback of samples and change timing and tempo of samples or synthesizers"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"set tempo 89\n\nnew sample kick_909 time(1/4)\nnew sample hat_909 time(3/16)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Make rhythmic patterns with sequences of numbers and probabilities"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"list loBeat [1 0 0 1 0.5]\nlist hiBeat [0 1 0.2 0]\n\nnew sample tabla_lo time(1/8) play(loBeat)\nnew sample tabla_hi time(1/8) play(hiBeat)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Generate psuedorandom melodic content for a synthesizer in a range and set a scale"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"set scale minor d\nset randomSeed 31415\n\nlist melody random(16 0 24)\n\nnew synth saw note(melody) time(1/16) shape(4 100)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Design sounds with various effects"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"new sample chimes time(2) speed(0.25) fx(reverb 0.3 15) fx(drive 10) fx(lfo 1/8 sine)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Easily give multiple instruments the same effects"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"new sample chimes time(2)\nnew sample harp_down time(3)\nnew sample gong_lo time(5)\n\nset all fx(lfo 1/16) fx(delay) fx(reverb 0.5 11)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Sync audio loops to the tempo of your music"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-java",children:"set tempo 97\n\nnew loop amen time(1)\nnew sample kick_house time(1/4)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Generate sequences algorithmically by combining list-functions to compose complex structures and choose from an extensive library of algorithms to work with"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"set scale minor a \n\nlist rhythm euclidean(32 13)\n\nlist melody spread(5 0 24)\nlist melody palinedrome(melody)\nlist melody clone(melody 0 5 7 3)\nlist melody lace(melody melody)\n\nnew synth triangle note(melody 1) shape(1 80) play(rhythm)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Control external midi devices or applications by sending midi and cc "}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-java",children:'new midi "Your Awesome Midi Device" time(1/16) note(7 1) name(mDev)\n set mDev length(1/16) gain(0.8) chord(off)\n set mDev control(10 [20 50 100])\n'})}),"\n",(0,r.jsx)(n.p,{children:"Control other environments via OSC-messages"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"list params [0.25 0.5 0.75]\n\nnew emitter osc address(yourDevice) theParam(params) time(1/4)\n\n// emits => /yourDevice/theParam 0.25\n// /yourDevice/theParam 0.5\n// /yourDevice/theParam 0.75\n// /yourDevice/theParam 0.25\n// etc...\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Easily control parameters in Mercury via external OSC-messages (",(0,r.jsxs)(n.em,{children:["only when running MercuryPlayground ",(0,r.jsx)(n.a,{href:"#-install",children:"localhost"})," or Mercury4Max"]}),")"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"new synth triangle fx(reverb '/synth/verb') fx(filter low '/synth/cutoff' 0.4) time(1) shape(1 'synth/length')\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Sequence Hyrda visuals with instruments (",(0,r.jsx)(n.em,{children:"experimental and MercuryPlayground only"}),")"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-java",children:"list hydras ['osc(10,0.1,2).out()' 'osc(20,-0.5,5).out()' 'osc(5,1,12).out()']\n\nnew sample kick_min time(1/16) play([1 0 0 1 0]) visual(hydras)\n"})})]})}function m(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var r=s(6540);const a={},t=r.createContext(a);function i(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[543],{4249:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var r=s(4848),t=s(8453);const a={sidebar_position:3},i="\ud83c\udfae Quick Features Overview",o={id:"about/features",title:"\ud83c\udfae Quick Features Overview",description:"Below is a brief overview of several things you can do with Mercury. But this is of course just scratching the surface!",source:"@site/docs/about/features.md",sourceDirName:"about",slug:"/about/features",permalink:"/mercury/docs/about/features",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udd2d What can you do with Mercury?",permalink:"/mercury/docs/about/vision"},next:{title:"\ud83d\udc7e Made with Mercury",permalink:"/mercury/docs/about/inspiration"}},c={},l=[];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",hr:"hr",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"-quick-features-overview",children:"\ud83c\udfae Quick Features Overview"}),"\n",(0,r.jsx)(n.p,{children:"Below is a brief overview of several things you can do with Mercury. But this is of course just scratching the surface!"}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.p,{children:"Quick access to playback of samples and change timing and tempo of samples or synthesizers"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"set tempo 89\n\nnew sample kick_909 time(1/4)\nnew sample hat_909 time(3/16)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Make rhythmic patterns with sequences of numbers and probabilities"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"list loBeat [1 0 0 1 0.5]\nlist hiBeat [0 1 0.2 0]\n\nnew sample tabla_lo time(1/8) play(loBeat)\nnew sample tabla_hi time(1/8) play(hiBeat)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Generate psuedorandom melodic content for a synthesizer in a range and set a scale"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"set scale minor d\nset randomSeed 31415\n\nlist melody random(16 0 24)\n\nnew synth saw note(melody) time(1/16) shape(4 100)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Design sounds with various effects"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"new sample chimes time(2) speed(0.25) fx(reverb 0.3 15) fx(drive 10) fx(lfo 1/8 sine)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Easily give multiple instruments the same effects"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"new sample chimes time(2)\nnew sample harp_down time(3)\nnew sample gong_lo time(5)\n\nset all fx(lfo 1/16) fx(delay) fx(reverb 0.5 11)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Sync audio loops to the tempo of your music"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-java",children:"set tempo 97\n\nnew loop amen time(1)\nnew sample kick_house time(1/4)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Generate sequences algorithmically by combining list-functions to compose complex structures and choose from an extensive library of algorithms to work with"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"set scale minor a \n\nlist rhythm euclidean(32 13)\n\nlist melody spread(5 0 24)\nlist melody palinedrome(melody)\nlist melody clone(melody 0 5 7 3)\nlist melody lace(melody melody)\n\nnew synth triangle note(melody 1) shape(1 80) play(rhythm)\n"})}),"\n",(0,r.jsx)(n.p,{children:"Control external midi devices or applications by sending midi and cc "}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-java",children:'new midi "Your Awesome Midi Device" time(1/16) note(7 1) name(mDev)\n set mDev length(1/16) gain(0.8) chord(off)\n set mDev control(10 [20 50 100])\n'})}),"\n",(0,r.jsx)(n.p,{children:"Control other environments via OSC-messages"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"list params [0.25 0.5 0.75]\n\nnew emitter osc address(yourDevice) theParam(params) time(1/4)\n\n// emits => /yourDevice/theParam 0.25\n// /yourDevice/theParam 0.5\n// /yourDevice/theParam 0.75\n// /yourDevice/theParam 0.25\n// etc...\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Easily control parameters in Mercury via external OSC-messages (",(0,r.jsxs)(n.em,{children:["only when running MercuryPlayground ",(0,r.jsx)(n.a,{href:"/mercury/docs/getting-started#-without-internet",children:"localhost"})," or Mercury4Max"]}),")"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-js",children:"new synth triangle fx(reverb '/synth/verb') fx(filter low '/synth/cutoff' 0.4) time(1) shape(1 'synth/length')\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Sequence Hyrda visuals with instruments (",(0,r.jsx)(n.em,{children:"experimental and MercuryPlayground only"}),")"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-java",children:"list hydras ['osc(10,0.1,2).out()' 'osc(20,-0.5,5).out()' 'osc(5,1,12).out()']\n\nnew sample kick_min time(1/16) play([1 0 0 1 0]) visual(hydras)\n"})})]})}function m(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var r=s(6540);const t={},a=r.createContext(t);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ebfee794.0eb9da97.js b/assets/js/ebfee794.0eb9da97.js new file mode 100644 index 00000000..bd0487f6 --- /dev/null +++ b/assets/js/ebfee794.0eb9da97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[386],{3414:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var i=r(4848),o=r(8453);const s={title:"\ud83d\udc4b Welcome",slug:"/",sidebar_position:0},t="\ud83c\udf15 Mercury Live Coding Environment",a={id:"welcome",title:"\ud83d\udc4b Welcome",description:"Welcome to Mercury! \u270c\ufe0f \u262e\ufe0f Make Music, Not War! \u262e\ufe0f \u270c\ufe0f",source:"@site/docs/welcome.md",sourceDirName:".",slug:"/",permalink:"/mercury/docs/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"\ud83d\udc4b Welcome",slug:"/",sidebar_position:0},sidebar:"tutorialSidebar",next:{title:"\ud83d\udcdf About",permalink:"/mercury/docs/about"}},c={},l=[{value:"\u262e\ufe0f Make Music, Not War!",id:"\ufe0f-make-music-not-war",level:2},{value:"\ud83d\udd0b Powered By",id:"-powered-by",level:2},{value:"\ud83d\ude4f Thanks",id:"-thanks",level:2},{value:"\u2728 Inspiration",id:"-inspiration",level:2},{value:"\ud83d\udcc4 Licenses",id:"-licenses",level:2}];function h(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"-mercury-live-coding-environment",children:"\ud83c\udf15 Mercury Live Coding Environment"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Welcome to Mercury! \u270c\ufe0f \u262e\ufe0f Make Music, Not War!"})," \u262e\ufe0f \u270c\ufe0f"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Mercury is a free/open-source, beginner-friendly, minimal and human-readable language for the live coding of algorithmic electronic music performances"})}),"\n",(0,i.jsxs)(n.p,{children:["In the menu on the left side you can find everything you need, from ",(0,i.jsx)(n.a,{href:"about",children:"About"})," and ",(0,i.jsx)(n.a,{href:"getting-started",children:"Getting Started"})," to Tips&Tricks, How-To's and the ",(0,i.jsx)(n.a,{href:"/mercury/docs/reference/syntax",children:"Reference"}),". Also make sure you check out the ",(0,i.jsx)(n.a,{href:"collaborate",children:"Collaborative Coding"})," chapter, because making music together is fun!"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://mercury.timohoogland.com/",children:(0,i.jsx)(n.strong,{children:"\ud83d\ude80 Start coding directly in the playground!"})})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://ko-fi.com/tmhglnd",children:(0,i.jsx)(n.strong,{children:"\ud83d\ude4f Support Mercury by buying me a coffee ko-fi"})})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://discord.gg/vt59NYU",children:(0,i.jsx)(n.strong,{children:"\ud83d\udcac Join the Discord Community!"})})}),"\n",(0,i.jsx)(n.h2,{id:"\ufe0f-make-music-not-war",children:"\u262e\ufe0f Make Music, Not War!"}),"\n",(0,i.jsxs)(n.admonition,{title:"Life on earth is in crisis. Please support a charity! No one is too small to make a difference!",type:"info",children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"We live in a war-torn world, where millions of people have their lives destroyed by conflict. On top of that our climate is changing faster than scientists predicted and the stakes are high."})}),(0,i.jsx)(n.p,{children:"If you enjoy the work I do and consider donating money for my efforts, then please instead (or also) consider donating that money to a charity like:"}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://www.icrc.org/en/donate",children:(0,i.jsx)(n.strong,{children:"International Committee of the Red Cross"})})," | ",(0,i.jsx)(n.a,{href:"https://donate.doctorswithoutborders.org/secure/rr-donate-monthly-web?source=ADU2011U0W46",children:(0,i.jsx)(n.strong,{children:"Doctors Without Borders"})})," | ",(0,i.jsx)(n.a,{href:"https://www.oxfam.org/en?form=general",children:(0,i.jsx)(n.strong,{children:"Oxfam International"})})," | ",(0,i.jsx)(n.a,{href:"https://support.savethechildren.org/site/Donation2?df_id=1620&1620.donation=form1",children:(0,i.jsx)(n.strong,{children:"Save the Children"})})," | ",(0,i.jsx)(n.a,{href:"https://protect.worldwildlife.org/page/65220/donate/1?en_og_source=Web_Donation&ea.tracking.id=Web_Topnav&supporter.appealCode=AWE2402OQ18299A01179RX",children:(0,i.jsx)(n.strong,{children:"World Wildlife Fund"})})," | ",(0,i.jsx)(n.a,{href:"https://rebellion.global/",children:(0,i.jsx)(n.strong,{children:"Extinction Rebellion"})})," | ",(0,i.jsx)(n.a,{href:"https://fridaysforfuture.org/what-we-do/contact-us/#countries",children:(0,i.jsx)(n.strong,{children:"Future For Fridays"})})," | ",(0,i.jsx)(n.a,{href:"https://engage.us.greenpeace.org/onlineactions/GB7jeaDze0eR5tWt3kWG_w2?sourceid=1015094",children:(0,i.jsx)(n.strong,{children:"Greenpeace"})})]}),(0,i.jsxs)(n.p,{children:["Or find another high-rated charity you like to support on for example ",(0,i.jsx)(n.a,{href:"https://www.charitywatch.org/",children:"CharityWatch"})," and ",(0,i.jsx)(n.a,{href:"https://www.charitynavigator.org/",children:"CharityNavigator"})]})]}),"\n",(0,i.jsx)(n.h2,{id:"-powered-by",children:"\ud83d\udd0b Powered By"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Mercury was granted funding from ",(0,i.jsx)(n.a,{href:"https://stimuleringsfonds.nl/en/",children:(0,i.jsx)(n.strong,{children:"Creative Industries Fund NL"})})]}),"\n",(0,i.jsxs)(n.li,{children:["Mercury was granted in-kind funding from ",(0,i.jsx)(n.a,{href:"https://creativecodingutrecht.nl/",children:(0,i.jsx)(n.strong,{children:"Creative Coding Utrecht"})})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"-thanks",children:"\ud83d\ude4f Thanks"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://axolot.cat/about/lina-bautista/",children:"Lina Bautista"})," for working together on developing functionalities in Mercury to control modular synths via cv"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://mimicproject.com/about",children:"SEMA/MIMIC project"})," team (Thor Magnusson, Chris Kiefer and Francisco Bernardo) for their awesome full week workshop at Sussex University in Brighton on designing a live coding language in the browser combined with machine learning"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://roaldvandillewijn.nl/",children:"Roald van Dillewijn"})," for working together on osc and midi functionalities combined with his ",(0,i.jsx)(n.a,{href:"https://roaldvandillewijn.nl/projects/digilog",children:"Digilog modified guitar-pedals"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.guillemgongora.com/",children:"Guillem Gongora Moral"})," for using Mercury as a composition tool and sharing valuable feedback in the process"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://anneveinberg.com/",children:"Anne Veinberg"})," for working with Mercury and a Mercury extensions for the ",(0,i.jsx)(n.a,{href:"https://codeklavier.space/",children:"CodeKlavier"})," project"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.rafaele-andrade.com/",children:"Rafaele Maria Andrade"})," for collaboration on ",(0,i.jsx)(n.a,{href:"https://www.youtube.com/watch?v=7UWywv_DPHI&t=4s",children:"networked performance"})," between Mercury and Knurl"]}),"\n",(0,i.jsx)(n.li,{children:"Live performance image by Zuzanna Zgierska"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"-inspiration",children:"\u2728 Inspiration"}),"\n",(0,i.jsx)(n.p,{children:"During the development of Mercury (both the playground and the full version) I've found inspiration in many other live coding environments, practices and platforms. Some of these are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://hydra.ojack.xyz/",children:"Hydra"})," - Live coding visual synthesizer by Olivia Jack"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://sema.codes/about",children:"Sema"})," - Live coding language design platform combined with Machine Learning"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://mimicproject.com/about",children:"MIMIC Project"})," - a web platform for the artistic exploration of musical machine learning and machine listening."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://tidalcycles.org/index.php/Welcome",children:"Tidal"})," - Live coding of patterns"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://sonic-pi.net/",children:"Sonic Pi"})," - The live coding synth for everyone"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://tonejs.github.io/",children:"Tone.js"})," - Webaudio framework for programming synths and sequencers"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://nearley.js.org/",children:"Nearley"})," - Parsing toolkit"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"-licenses",children:"\ud83d\udcc4 Licenses"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Main Source - ",(0,i.jsx)(n.a,{href:"https://choosealicense.com/licenses/gpl-3.0/",children:"The GNU GPL v.3 License"})," (c) Timo Hoogland 2019-2024"]}),"\n",(0,i.jsxs)(n.li,{children:["Sound Files - Individually licensed, listed under ",(0,i.jsx)(n.a,{href:"/mercury/docs/usage/sounds",children:"Sounds in Mercury"})]}),"\n",(0,i.jsxs)(n.li,{children:["Documentation - ",(0,i.jsx)(n.a,{href:"https://creativecommons.org/licenses/by-sa/4.0/",children:"The CC BY-SA 4.0 License"})," (c) Timo Hoogland 2019-2024"]}),"\n",(0,i.jsxs)(n.li,{children:["Examples - ",(0,i.jsx)(n.a,{href:"https://creativecommons.org/licenses/by-sa/4.0/",children:"The CC BY-SA 4.0 License"})," (c) Timo Hoogland 2019-2024"]}),"\n",(0,i.jsx)(n.li,{children:"Max8 - Proprietary Software, Max (c) 1990-2024 Cycling'74 / IRCAM All rights reserved"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.'})]})}function d(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>t,x:()=>a});var i=r(6540);const o={},s=i.createContext(o);function t(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ebfee794.28c92be6.js b/assets/js/ebfee794.28c92be6.js deleted file mode 100644 index f5acb8f5..00000000 --- a/assets/js/ebfee794.28c92be6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[386],{3414:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var i=r(4848),o=r(8453);const t={title:"\ud83d\udc4b Welcome",sidebar_position:0},s="\ud83c\udf15 Mercury Live Coding Environment",a={id:"welcome",title:"\ud83d\udc4b Welcome",description:"Welcome to Mercury! \u270c\ufe0f \u262e\ufe0f Make Music, Not War! \u262e\ufe0f \u270c\ufe0f",source:"@site/docs/welcome.md",sourceDirName:".",slug:"/welcome",permalink:"/mercury/docs/welcome",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{title:"\ud83d\udc4b Welcome",sidebar_position:0},sidebar:"tutorialSidebar",next:{title:"\ud83d\udcdf About",permalink:"/mercury/docs/category/-about"}},c={},l=[{value:"\u262e\ufe0f Make Music, Not War!",id:"\ufe0f-make-music-not-war",level:2},{value:"\ud83d\udd0b Powered By",id:"-powered-by",level:2},{value:"\ud83d\ude4f Thanks",id:"-thanks",level:2},{value:"\u2728 Inspiration",id:"-inspiration",level:2},{value:"\ud83d\udcc4 Licenses",id:"-licenses",level:2}];function h(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"-mercury-live-coding-environment",children:"\ud83c\udf15 Mercury Live Coding Environment"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Welcome to Mercury! \u270c\ufe0f \u262e\ufe0f Make Music, Not War!"})," \u262e\ufe0f \u270c\ufe0f"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Mercury is a free/open-source, beginner-friendly, minimal and human-readable language for the live coding of algorithmic electronic music performances"})}),"\n",(0,i.jsxs)(n.p,{children:["In the menu on the left side you can find everything you need, from ",(0,i.jsx)(n.a,{href:"about",children:"About"})," and ",(0,i.jsx)(n.a,{href:"getting-started",children:"Getting Started"})," to Tips&Tricks, How-To's and the ",(0,i.jsx)(n.a,{href:"/mercury/docs/reference/syntax",children:"Reference"}),". Also make sure you check out the ",(0,i.jsx)(n.a,{href:"collaborate",children:"Collaborative Coding"})," chapter, because making music together is fun!"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://mercury.timohoogland.com/",children:(0,i.jsx)(n.strong,{children:"\ud83d\ude80 Start coding directly in the playground!"})})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://ko-fi.com/tmhglnd",children:(0,i.jsx)(n.strong,{children:"\ud83d\ude4f Support Mercury by buying me a coffee ko-fi"})})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://discord.gg/vt59NYU",children:(0,i.jsx)(n.strong,{children:"\ud83d\udcac Join the Discord Community!"})})}),"\n",(0,i.jsx)(n.h2,{id:"\ufe0f-make-music-not-war",children:"\u262e\ufe0f Make Music, Not War!"}),"\n",(0,i.jsxs)(n.admonition,{title:"Life on earth is in crisis. Please support a charity! No one is too small to make a difference!",type:"info",children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"We live in a war-torn world, where millions of people have their lives destroyed by conflict. On top of that our climate is changing faster than scientists predicted and the stakes are high."})}),(0,i.jsx)(n.p,{children:"If you enjoy the work I do and consider donating money for my efforts, then please instead (or also) consider donating that money to a charity like:"}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://www.icrc.org/en/donate",children:(0,i.jsx)(n.strong,{children:"International Committee of the Red Cross"})})," | ",(0,i.jsx)(n.a,{href:"https://donate.doctorswithoutborders.org/secure/rr-donate-monthly-web?source=ADU2011U0W46",children:(0,i.jsx)(n.strong,{children:"Doctors Without Borders"})})," | ",(0,i.jsx)(n.a,{href:"https://www.oxfam.org/en?form=general",children:(0,i.jsx)(n.strong,{children:"Oxfam International"})})," | ",(0,i.jsx)(n.a,{href:"https://support.savethechildren.org/site/Donation2?df_id=1620&1620.donation=form1",children:(0,i.jsx)(n.strong,{children:"Save the Children"})})," | ",(0,i.jsx)(n.a,{href:"https://protect.worldwildlife.org/page/65220/donate/1?en_og_source=Web_Donation&ea.tracking.id=Web_Topnav&supporter.appealCode=AWE2402OQ18299A01179RX",children:(0,i.jsx)(n.strong,{children:"World Wildlife Fund"})})," | ",(0,i.jsx)(n.a,{href:"https://rebellion.global/",children:(0,i.jsx)(n.strong,{children:"Extinction Rebellion"})})," | ",(0,i.jsx)(n.a,{href:"https://fridaysforfuture.org/what-we-do/contact-us/#countries",children:(0,i.jsx)(n.strong,{children:"Future For Fridays"})})," | ",(0,i.jsx)(n.a,{href:"https://engage.us.greenpeace.org/onlineactions/GB7jeaDze0eR5tWt3kWG_w2?sourceid=1015094",children:(0,i.jsx)(n.strong,{children:"Greenpeace"})})]}),(0,i.jsxs)(n.p,{children:["Or find another high-rated charity you like to support on for example ",(0,i.jsx)(n.a,{href:"https://www.charitywatch.org/",children:"CharityWatch"})," and ",(0,i.jsx)(n.a,{href:"https://www.charitynavigator.org/",children:"CharityNavigator"})]})]}),"\n",(0,i.jsx)(n.h2,{id:"-powered-by",children:"\ud83d\udd0b Powered By"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Mercury was granted funding from ",(0,i.jsx)(n.a,{href:"https://stimuleringsfonds.nl/en/",children:(0,i.jsx)(n.strong,{children:"Creative Industries Fund NL"})})]}),"\n",(0,i.jsxs)(n.li,{children:["Mercury was granted in-kind funding from ",(0,i.jsx)(n.a,{href:"https://creativecodingutrecht.nl/",children:(0,i.jsx)(n.strong,{children:"Creative Coding Utrecht"})})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"-thanks",children:"\ud83d\ude4f Thanks"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://axolot.cat/about/lina-bautista/",children:"Lina Bautista"})," for working together on developing functionalities in Mercury to control modular synths via cv"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://mimicproject.com/about",children:"SEMA/MIMIC project"})," team (Thor Magnusson, Chris Kiefer and Francisco Bernardo) for their awesome full week workshop at Sussex University in Brighton on designing a live coding language in the browser combined with machine learning"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://roaldvandillewijn.nl/",children:"Roald van Dillewijn"})," for working together on osc and midi functionalities combined with his ",(0,i.jsx)(n.a,{href:"https://roaldvandillewijn.nl/projects/digilog",children:"Digilog modified guitar-pedals"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.guillemgongora.com/",children:"Guillem Gongora Moral"})," for using Mercury as a composition tool and sharing valuable feedback in the process"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://anneveinberg.com/",children:"Anne Veinberg"})," for working with Mercury and a Mercury extensions for the ",(0,i.jsx)(n.a,{href:"https://codeklavier.space/",children:"CodeKlavier"})," project"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://www.rafaele-andrade.com/",children:"Rafaele Maria Andrade"})," for collaboration on ",(0,i.jsx)(n.a,{href:"https://www.youtube.com/watch?v=7UWywv_DPHI&t=4s",children:"networked performance"})," between Mercury and Knurl"]}),"\n",(0,i.jsx)(n.li,{children:"Live performance image by Zuzanna Zgierska"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"-inspiration",children:"\u2728 Inspiration"}),"\n",(0,i.jsx)(n.p,{children:"During the development of Mercury (both the playground and the full version) I've found inspiration in many other live coding environments, practices and platforms. Some of these are:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://hydra.ojack.xyz/",children:"Hydra"})," - Live coding visual synthesizer by Olivia Jack"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://sema.codes/about",children:"Sema"})," - Live coding language design platform combined with Machine Learning"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://mimicproject.com/about",children:"MIMIC Project"})," - a web platform for the artistic exploration of musical machine learning and machine listening."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://tidalcycles.org/index.php/Welcome",children:"Tidal"})," - Live coding of patterns"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://sonic-pi.net/",children:"Sonic Pi"})," - The live coding synth for everyone"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://tonejs.github.io/",children:"Tone.js"})," - Webaudio framework for programming synths and sequencers"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://nearley.js.org/",children:"Nearley"})," - Parsing toolkit"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"-licenses",children:"\ud83d\udcc4 Licenses"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Main Source - ",(0,i.jsx)(n.a,{href:"https://choosealicense.com/licenses/gpl-3.0/",children:"The GNU GPL v.3 License"})," (c) Timo Hoogland 2019-2024"]}),"\n",(0,i.jsxs)(n.li,{children:["Sound Files - Individually licensed, listed under ",(0,i.jsx)(n.a,{href:"/mercury/docs/usage/sounds",children:"Sounds in Mercury"})]}),"\n",(0,i.jsxs)(n.li,{children:["Documentation - ",(0,i.jsx)(n.a,{href:"https://creativecommons.org/licenses/by-sa/4.0/",children:"The CC BY-SA 4.0 License"})," (c) Timo Hoogland 2019-2024"]}),"\n",(0,i.jsxs)(n.li,{children:["Examples - ",(0,i.jsx)(n.a,{href:"https://creativecommons.org/licenses/by-sa/4.0/",children:"The CC BY-SA 4.0 License"})," (c) Timo Hoogland 2019-2024"]}),"\n",(0,i.jsx)(n.li,{children:"Max8 - Proprietary Software, Max (c) 1990-2024 Cycling'74 / IRCAM All rights reserved"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.'})]})}function d(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>s,x:()=>a});var i=r(6540);const o={},t=i.createContext(o);function s(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f6471318.df420c1f.js b/assets/js/f6471318.ad2c1413.js similarity index 74% rename from assets/js/f6471318.df420c1f.js rename to assets/js/f6471318.ad2c1413.js index d09f8082..1f4f7470 100644 --- a/assets/js/f6471318.df420c1f.js +++ b/assets/js/f6471318.ad2c1413.js @@ -1 +1 @@ -"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[295],{416:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>c});var s=i(4848),r=i(8453);const t={sidebar_position:4,id:"editors"},l="\u2328\ufe0f External Editors",o={id:"usage/editors",title:"\u2328\ufe0f External Editors",description:"Instead of using the built-in editor that comes with Mercury4Max (an editor that is running with OpenGL in the Jitter visual environment) or the CodeMirror editor that is running in the MercuryPlayground, you can also work with external code editors and just use Mercury4Max as the sound engine.",source:"@site/docs/usage/editors.md",sourceDirName:"usage",slug:"/usage/editors",permalink:"/mercury/docs/usage/editors",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,id:"editors"},sidebar:"tutorialSidebar",previous:{title:"\ud83e\ude73 Short-keys",permalink:"/mercury/docs/usage/shortkeys"},next:{title:"\ud83d\udea7 Troubleshooting",permalink:"/mercury/docs/usage/troubleshooting"}},d={},c=[{value:"\ud83d\udc7e Flok",id:"-flok",level:2},{value:"\u269b\ufe0f Pulsar",id:"\ufe0f-pulsar",level:2},{value:"\ud83d\udcbb Install (OSX/Linux)",id:"-install-osxlinux",level:3},{value:"\ud83d\udcbe Install (Windows)",id:"-install-windows",level:4},{value:"\ud83c\udfae Usage",id:"-usage",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"\ufe0f-external-editors",children:"\u2328\ufe0f External Editors"}),"\n",(0,s.jsx)(n.p,{children:"Instead of using the built-in editor that comes with Mercury4Max (an editor that is running with OpenGL in the Jitter visual environment) or the CodeMirror editor that is running in the MercuryPlayground, you can also work with external code editors and just use Mercury4Max as the sound engine."}),"\n",(0,s.jsx)(n.h2,{id:"-flok",children:"\ud83d\udc7e Flok"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://flok.cc/",children:(0,s.jsx)(n.strong,{children:"Flok"})})," is a web-based P2P collaborative editor for live coding music and graphics developed by Dami\xe1n Silvani (a.k.a. Munshkr). Similar to Etherpad, but focused on code evaluation for livecoding. While the main focus is on collaborative coding, you can also use flok as an external editor for your solo coding."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./../collaborate",children:(0,s.jsx)(n.strong,{children:"Start using Flok with the manual in \ud83d\udc69\u200d\ud83d\udcbb\ud83d\udc68\u200d\ud83d\udcbb Collaborative Coding"})})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"\ufe0f-pulsar",children:"\u269b\ufe0f Pulsar"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://pulsar-edit.dev/",children:(0,s.jsx)(n.strong,{children:"Pulsar"})})," is a Community-led Hyper-Hackable Text Editor that you can install for Windows, OSX and Linux. You can extend the editor with custom plugins."]}),"\n",(0,s.jsxs)(n.p,{children:["After installing the ",(0,s.jsx)(n.code,{children:"mercury-pulsar"})," plugin you can type code in the editor and send it via OSC-messages as ",(0,s.jsx)(n.code,{children:'/mercury-code ""'})," over UDP to port ",(0,s.jsx)(n.code,{children:"4880"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"-install-osxlinux",children:"\ud83d\udcbb Install (OSX/Linux)"}),"\n",(0,s.jsxs)(n.p,{children:["Make sure that ",(0,s.jsx)(n.code,{children:"ppm"})," (Pulsar Package Manager) is installed. On linux, it should be automatically installed with Atom. On OSX, go to the ",(0,s.jsx)(n.code,{children:"Pulsar"})," menu and click ",(0,s.jsx)(n.code,{children:"Install Shell Commands"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Download the ",(0,s.jsx)(n.a,{href:"http://github.com/tmhglnd/mercury-pulsar",children:(0,s.jsx)(n.strong,{children:"plugin"})})," or clone via ",(0,s.jsx)(n.code,{children:"$ git clone http://github.com/tmhglnd/mercury-pulsar"})]}),"\n",(0,s.jsxs)(n.li,{children:["Navigate to the directory ",(0,s.jsx)(n.code,{children:"$ cd mercury-pulsar"})," and install the dependencies ",(0,s.jsx)(n.code,{children:"ppm install"})]}),"\n",(0,s.jsxs)(n.li,{children:["Load the package ",(0,s.jsx)(n.code,{children:"$ ppm link ."})]}),"\n",(0,s.jsx)(n.li,{children:"Restart Pulsar"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"-install-windows",children:"\ud83d\udcbe Install (Windows)"}),"\n",(0,s.jsxs)(n.p,{children:["Windows doesn't support ",(0,s.jsx)(n.code,{children:"ppm"}),", instead use ",(0,s.jsx)(n.code,{children:"npm"})," and the following steps:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Download this repository via ",(0,s.jsx)(n.code,{children:"$ git clone http://github.com/tmhglnd/mercury-pulsar"})]}),"\n",(0,s.jsxs)(n.li,{children:["Navigate to the directory and install the dependencies with ",(0,s.jsx)(n.code,{children:"npm"})," instead of ",(0,s.jsx)(n.code,{children:"ppm"}),":","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$ cd mercury-pulsar"})," and ",(0,s.jsx)(n.code,{children:"npm install"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Manually copy-paste the entire folder ",(0,s.jsx)(n.code,{children:"mercury-pulsar"})," to ",(0,s.jsx)(n.code,{children:"C:\\Users\\\\.pulsar\\packages"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"-usage",children:"\ud83c\udfae Usage"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Start Mercury4Max or the MercuryPlayground (running locally!, ",(0,s.jsx)(n.a,{href:"/mercury/docs/getting-started#%F0%9F%8C%91-without-internet",children:(0,s.jsx)(n.strong,{children:"see instructions here"})}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Create an empty file in Pulsar and write your code. This can be a plain ",(0,s.jsx)(n.code,{children:".txt"})," file."]}),"\n",(0,s.jsxs)(n.li,{children:["Go to ",(0,s.jsx)(n.code,{children:"Menu"})," > ",(0,s.jsx)(n.code,{children:"Packages"})," > ",(0,s.jsx)(n.code,{children:"Open Package Manager"}),", find the ",(0,s.jsx)(n.code,{children:"mercury"})," package and click on ",(0,s.jsx)(n.code,{children:"Enable"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["The package should be automatically activated","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["You can also toggle the package on/off with ",(0,s.jsx)(n.code,{children:"cmd + shift + p"})]}),"\n",(0,s.jsxs)(n.li,{children:["Search for ",(0,s.jsx)(n.code,{children:"mercury:toggle"})," and ",(0,s.jsx)(n.code,{children:"enter"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Type some code and:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Evaluate with ",(0,s.jsx)(n.code,{children:"cmd/ctrl/alt + enter"})]}),"\n",(0,s.jsxs)(n.li,{children:["Silence the sound with ",(0,s.jsx)(n.code,{children:"cmd/ctrl/alt + ."})]}),"\n",(0,s.jsxs)(n.li,{children:["Randomize variables ",(0,s.jsx)(n.code,{children:"cmd/ctrl/alt + shift + r"})]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>o});var s=i(6540);const r={},t=s.createContext(r);function l(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[295],{416:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>c});var s=i(4848),r=i(8453);const t={sidebar_position:4,id:"editors"},l="\u2328\ufe0f External Editors",o={id:"usage/editors",title:"\u2328\ufe0f External Editors",description:"Instead of using the built-in editor that comes with Mercury4Max (an editor that is running with OpenGL in the Jitter visual environment) or the CodeMirror editor that is running in the MercuryPlayground, you can also work with external code editors and just use Mercury4Max as the sound engine.",source:"@site/docs/usage/editors.md",sourceDirName:"usage",slug:"/usage/editors",permalink:"/mercury/docs/usage/editors",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4,id:"editors"},sidebar:"tutorialSidebar",previous:{title:"\ud83e\ude73 Short-keys",permalink:"/mercury/docs/usage/shortkeys"},next:{title:"\ud83d\udea7 Troubleshooting",permalink:"/mercury/docs/usage/troubleshooting"}},d={},c=[{value:"\ud83d\udc7e Flok",id:"-flok",level:2},{value:"\u269b\ufe0f Pulsar",id:"\ufe0f-pulsar",level:2},{value:"\ud83d\udcbb Install (OSX/Linux)",id:"-install-osxlinux",level:3},{value:"\ud83d\udcbe Install (Windows)",id:"-install-windows",level:4},{value:"\ud83c\udfae Usage",id:"-usage",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"\ufe0f-external-editors",children:"\u2328\ufe0f External Editors"}),"\n",(0,s.jsx)(n.p,{children:"Instead of using the built-in editor that comes with Mercury4Max (an editor that is running with OpenGL in the Jitter visual environment) or the CodeMirror editor that is running in the MercuryPlayground, you can also work with external code editors and just use Mercury4Max as the sound engine."}),"\n",(0,s.jsx)(n.h2,{id:"-flok",children:"\ud83d\udc7e Flok"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://flok.cc/",children:(0,s.jsx)(n.strong,{children:"Flok"})})," is a web-based P2P collaborative editor for live coding music and graphics developed by Dami\xe1n Silvani (a.k.a. Munshkr). Similar to Etherpad, but focused on code evaluation for livecoding. While the main focus is on collaborative coding, you can also use flok as an external editor for your solo coding."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"./../collaborate",children:(0,s.jsx)(n.strong,{children:"Start using Flok with the manual in \ud83d\udc69\u200d\ud83d\udcbb\ud83d\udc68\u200d\ud83d\udcbb Collaborative Coding"})})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"\ufe0f-pulsar",children:"\u269b\ufe0f Pulsar"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://pulsar-edit.dev/",children:(0,s.jsx)(n.strong,{children:"Pulsar"})})," is a Community-led Hyper-Hackable Text Editor that you can install for Windows, OSX and Linux. You can extend the editor with custom plugins."]}),"\n",(0,s.jsxs)(n.p,{children:["After installing the ",(0,s.jsx)(n.code,{children:"mercury-pulsar"})," plugin you can type code in the editor and send it via OSC-messages as ",(0,s.jsx)(n.code,{children:'/mercury-code ""'})," over UDP to port ",(0,s.jsx)(n.code,{children:"4880"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"-install-osxlinux",children:"\ud83d\udcbb Install (OSX/Linux)"}),"\n",(0,s.jsxs)(n.p,{children:["Make sure that ",(0,s.jsx)(n.code,{children:"ppm"})," (Pulsar Package Manager) is installed. On linux, it should be automatically installed with Atom. On OSX, go to the ",(0,s.jsx)(n.code,{children:"Pulsar"})," menu and click ",(0,s.jsx)(n.code,{children:"Install Shell Commands"}),"."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Download the ",(0,s.jsx)(n.a,{href:"http://github.com/tmhglnd/mercury-pulsar",children:(0,s.jsx)(n.strong,{children:"plugin"})})," or clone via ",(0,s.jsx)(n.code,{children:"$ git clone http://github.com/tmhglnd/mercury-pulsar"})]}),"\n",(0,s.jsxs)(n.li,{children:["Navigate to the directory ",(0,s.jsx)(n.code,{children:"$ cd mercury-pulsar"})," and install the dependencies ",(0,s.jsx)(n.code,{children:"ppm install"})]}),"\n",(0,s.jsxs)(n.li,{children:["Load the package ",(0,s.jsx)(n.code,{children:"$ ppm link ."})]}),"\n",(0,s.jsx)(n.li,{children:"Restart Pulsar"}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"-install-windows",children:"\ud83d\udcbe Install (Windows)"}),"\n",(0,s.jsxs)(n.p,{children:["Windows doesn't support ",(0,s.jsx)(n.code,{children:"ppm"}),", instead use ",(0,s.jsx)(n.code,{children:"npm"})," and the following steps:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Download this repository via ",(0,s.jsx)(n.code,{children:"$ git clone http://github.com/tmhglnd/mercury-pulsar"})]}),"\n",(0,s.jsxs)(n.li,{children:["Navigate to the directory and install the dependencies with ",(0,s.jsx)(n.code,{children:"npm"})," instead of ",(0,s.jsx)(n.code,{children:"ppm"}),":","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"$ cd mercury-pulsar"})," and ",(0,s.jsx)(n.code,{children:"npm install"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Manually copy-paste the entire folder ",(0,s.jsx)(n.code,{children:"mercury-pulsar"})," to ",(0,s.jsx)(n.code,{children:"C:\\Users\\\\.pulsar\\packages"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"-usage",children:"\ud83c\udfae Usage"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Start Mercury4Max or the MercuryPlayground (running locally!, ",(0,s.jsx)(n.a,{href:"/mercury/docs/getting-started#-without-internet",children:(0,s.jsx)(n.strong,{children:"see instructions here"})}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Create an empty file in Pulsar and write your code. This can be a plain ",(0,s.jsx)(n.code,{children:".txt"})," file."]}),"\n",(0,s.jsxs)(n.li,{children:["Go to ",(0,s.jsx)(n.code,{children:"Menu"})," > ",(0,s.jsx)(n.code,{children:"Packages"})," > ",(0,s.jsx)(n.code,{children:"Open Package Manager"}),", find the ",(0,s.jsx)(n.code,{children:"mercury"})," package and click on ",(0,s.jsx)(n.code,{children:"Enable"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["The package should be automatically activated","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["You can also toggle the package on/off with ",(0,s.jsx)(n.code,{children:"cmd + shift + p"})]}),"\n",(0,s.jsxs)(n.li,{children:["Search for ",(0,s.jsx)(n.code,{children:"mercury:toggle"})," and ",(0,s.jsx)(n.code,{children:"enter"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Type some code and:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Evaluate with ",(0,s.jsx)(n.code,{children:"cmd/ctrl/alt + enter"})]}),"\n",(0,s.jsxs)(n.li,{children:["Silence the sound with ",(0,s.jsx)(n.code,{children:"cmd/ctrl/alt + ."})]}),"\n",(0,s.jsxs)(n.li,{children:["Randomize variables ",(0,s.jsx)(n.code,{children:"cmd/ctrl/alt + shift + r"})]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>o});var s=i(6540);const r={},t=s.createContext(r);function l(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.394613b1.js b/assets/js/main.394613b1.js deleted file mode 100644 index d91aa436..00000000 --- a/assets/js/main.394613b1.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.394613b1.js.LICENSE.txt */ -(self.webpackChunkmercury_docs=self.webpackChunkmercury_docs||[]).push([[792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),a=n.n(r),o=n(4054);const i={"14eb3368":[()=>Promise.all([n.e(869),n.e(969)]).then(n.bind(n,7247)),"@theme/DocCategoryGeneratedIndexPage",7247],17896441:[()=>Promise.all([n.e(869),n.e(674),n.e(401)]).then(n.bind(n,2719)),"@theme/DocItem",2719],"1f391b9e":[()=>Promise.all([n.e(869),n.e(674),n.e(61)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],"23c07e7b":[()=>n.e(196).then(n.bind(n,6225)),"@site/docs/reference/global.md",6225],"2730afdf":[()=>n.e(888).then(n.bind(n,3942)),"@site/docs/usage/howto.md",3942],"2bac5d97":[()=>n.e(856).then(n.t.bind(n,9896,19)),"~docs/default/category-mercurydocs-tutorialsidebar-category-usage-67c.json",9896],"2c9d0a4b":[()=>n.e(258).then(n.bind(n,3986)),"@site/docs/about/vision.md",3986],"3025b0a2":[()=>n.e(866).then(n.bind(n,7428)),"@site/docs/usage/sounds.md",7428],"393be207":[()=>n.e(134).then(n.bind(n,6022)),"@site/src/pages/markdown-page.md",6022],"46fe9eed":[()=>n.e(991).then(n.bind(n,4701)),"@site/docs/usage/mercury4max.md",4701],"4ba7e5a3":[()=>n.e(591).then(n.bind(n,6467)),"@site/docs/contribute.md",6467],54934235:[()=>n.e(410).then(n.t.bind(n,4912,19)),"~docs/default/category-mercurydocs-tutorialsidebar-category-about-ae0.json",4912],"5e95c892":[()=>n.e(647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"610af566":[()=>n.e(470).then(n.bind(n,285)),"@site/docs/usage/mercury-playground.md",285],"643a29c7":[()=>n.e(452).then(n.bind(n,8586)),"@site/docs/usage/extending.md",8586],"6c9bc4e1":[()=>n.e(868).then(n.bind(n,5998)),"@site/docs/reference/effects.md",5998],"8232b325":[()=>n.e(316).then(n.bind(n,6045)),"@site/docs/collaborate.md",6045],"83adf833":[()=>n.e(503).then(n.bind(n,4908)),"@site/docs/usage/shortkeys.md",4908],"89be51a8":[()=>n.e(716).then(n.bind(n,659)),"@site/docs/reference/actions.md",659],"935f2afb":[()=>n.e(581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],a63bd564:[()=>n.e(485).then(n.bind(n,7163)),"@site/docs/usage/embedding.md",7163],a7bd4aaa:[()=>n.e(98).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a94703ab:[()=>Promise.all([n.e(869),n.e(48)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],b096b7b7:[()=>n.e(464).then(n.bind(n,1818)),"@site/docs/usage/coding.md",1818],ba4e2648:[()=>n.e(613).then(n.bind(n,3985)),"@site/docs/reference/syntax.md",3985],bbca2b71:[()=>n.e(283).then(n.bind(n,9030)),"@site/docs/reference/instruments.md",9030],c4f5d8e4:[()=>Promise.all([n.e(869),n.e(634)]).then(n.bind(n,8848)),"@site/src/pages/index.js",8848],c6a20f18:[()=>n.e(168).then(n.t.bind(n,4866,19)),"~docs/default/category-mercurydocs-tutorialsidebar-category-reference-233.json",4866],ceb5ae55:[()=>n.e(992).then(n.bind(n,4285)),"@site/docs/about/about.md",4285],d44737fc:[()=>n.e(707).then(n.bind(n,398)),"@site/docs/reference/list-functions.md",398],d589d3a7:[()=>n.e(924).then(n.bind(n,8578)),"@site/docs/getting-started.md",8578],d744ed8e:[()=>n.e(522).then(n.bind(n,2176)),"@site/docs/usage/troubleshooting.md",2176],da3fe09b:[()=>n.e(15).then(n.t.bind(n,4061,19)),"/Users/timohoogland/Desktop/mercury/docs/mercury-docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",4061],e59418e5:[()=>n.e(28).then(n.bind(n,2472)),"@site/docs/about/inspiration.md",2472],e92cf459:[()=>n.e(543).then(n.bind(n,4249)),"@site/docs/about/features.md",4249],ebfee794:[()=>n.e(386).then(n.bind(n,3414)),"@site/docs/welcome.md",3414],f0204682:[()=>n.e(131).then(n.t.bind(n,1966,19)),"/Users/timohoogland/Desktop/mercury/docs/mercury-docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",1966],f6471318:[()=>n.e(295).then(n.bind(n,416)),"@site/docs/usage/editors.md",416]};var l=n(4848);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(6921),c=n(3102);function d(e,t){if("*"===e)return a()({loading:s,loader:()=>n.e(237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,l.jsx)(c.W,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},p=[],f=[],m=(0,u.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),a().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;return delete a.__context,(0,l.jsx)(c.W,{value:i,children:(0,l.jsx)(o,{...a,...n})})}})}const p=[{path:"/mercury/",component:d("/mercury/","974"),exact:!0},{path:"/mercury/markdown-page",component:d("/mercury/markdown-page","fd2"),exact:!0},{path:"/mercury/docs",component:d("/mercury/docs","443"),routes:[{path:"/mercury/docs",component:d("/mercury/docs","895"),routes:[{path:"/mercury/docs",component:d("/mercury/docs","cc1"),routes:[{path:"/mercury/docs/about/",component:d("/mercury/docs/about/","eec"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/about/features",component:d("/mercury/docs/about/features","187"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/about/inspiration",component:d("/mercury/docs/about/inspiration","fab"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/about/vision",component:d("/mercury/docs/about/vision","d02"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/category/-about",component:d("/mercury/docs/category/-about","a9a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/category/-reference",component:d("/mercury/docs/category/-reference","941"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/category/-usage",component:d("/mercury/docs/category/-usage","bf2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/collaborate",component:d("/mercury/docs/collaborate","3d1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/contribute",component:d("/mercury/docs/contribute","475"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/getting-started",component:d("/mercury/docs/getting-started","077"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/reference/actions",component:d("/mercury/docs/reference/actions","733"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/reference/effects",component:d("/mercury/docs/reference/effects","f2a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/reference/global",component:d("/mercury/docs/reference/global","fd0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/reference/instruments",component:d("/mercury/docs/reference/instruments","11c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/reference/list-functions",component:d("/mercury/docs/reference/list-functions","52d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/reference/syntax",component:d("/mercury/docs/reference/syntax","dd8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/coding",component:d("/mercury/docs/usage/coding","a3d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/editors",component:d("/mercury/docs/usage/editors","3ba"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/embedding",component:d("/mercury/docs/usage/embedding","ab8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/extending",component:d("/mercury/docs/usage/extending","da4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/howto",component:d("/mercury/docs/usage/howto","25c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/mercury4max-overview",component:d("/mercury/docs/usage/mercury4max-overview","282"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/playground-overview",component:d("/mercury/docs/usage/playground-overview","2a2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/shortkeys",component:d("/mercury/docs/usage/shortkeys","721"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/sounds",component:d("/mercury/docs/usage/sounds","b11"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/usage/troubleshooting",component:d("/mercury/docs/usage/troubleshooting","f83"),exact:!0,sidebar:"tutorialSidebar"},{path:"/mercury/docs/welcome",component:d("/mercury/docs/welcome","b51"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>o,x:()=>i});var r=n(6540),a=n(4848);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},8536:(e,t,n)=>{"use strict";var r=n(6540),a=n(5338),o=n(4625),i=n(545),l=n(8193);const s=[n(119),n(6134),n(6294),n(1043)];var u=n(8328),c=n(6347),d=n(2831),p=n(4848);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(5260),g=n(4586),h=n(6025),y=n(6342),b=n(1003),v=n(2131),w=n(4090),k=n(2967),x=n(440),S=n(1463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,v.o)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,p.jsxs)(m.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.A)(),{pathname:r}=(0,c.zy)();return e+(0,x.applyTrailingSlash)((0,h.A)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{property:"og:url",content:a}),(0,p.jsx)("link",{rel:"canonical",href:a})]})}function _(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,y.p)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.w})]}),n&&(0,p.jsx)(b.be,{image:n}),(0,p.jsx)(C,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.A,{tag:k.Cy,locale:e}),(0,p.jsx)(m.A,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const A=new Map;function T(e){if(A.has(e.pathname))return{...e,pathname:A.get(e.pathname)};if((0,d.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return A.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return A.set(e.pathname,t),{...e,pathname:t}}var j=n(6125),N=n(6988),L=n(205);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),R("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class D extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(P,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(c.qh,{location:t,render:()=>e})})}}const I=D,M="__docusaurus-base-url-issue-banner-container",F="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${M}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(6921);const Z=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Z.has(e))(e))return!1;Z.add(e);const t=(0,d.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(Q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),O(e))},te=Object.freeze(ee),ne=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.vd,{children:(0,p.jsx)(o.Kd,{children:(0,p.jsx)(W,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},l=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};O(window.location.pathname).then(l)}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),a=n(4784);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/mercury/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/mercury/docs","mainDocId":"welcome","docs":[{"id":"about/about","path":"/mercury/docs/about/","sidebar":"tutorialSidebar"},{"id":"about/features","path":"/mercury/docs/about/features","sidebar":"tutorialSidebar"},{"id":"about/inspiration","path":"/mercury/docs/about/inspiration","sidebar":"tutorialSidebar"},{"id":"about/vision","path":"/mercury/docs/about/vision","sidebar":"tutorialSidebar"},{"id":"collaborate","path":"/mercury/docs/collaborate","sidebar":"tutorialSidebar"},{"id":"contribute","path":"/mercury/docs/contribute","sidebar":"tutorialSidebar"},{"id":"getting-started","path":"/mercury/docs/getting-started","sidebar":"tutorialSidebar"},{"id":"reference/actions","path":"/mercury/docs/reference/actions","sidebar":"tutorialSidebar"},{"id":"reference/effects","path":"/mercury/docs/reference/effects","sidebar":"tutorialSidebar"},{"id":"reference/global","path":"/mercury/docs/reference/global","sidebar":"tutorialSidebar"},{"id":"reference/instruments","path":"/mercury/docs/reference/instruments","sidebar":"tutorialSidebar"},{"id":"reference/list-functions","path":"/mercury/docs/reference/list-functions","sidebar":"tutorialSidebar"},{"id":"reference/syntax","path":"/mercury/docs/reference/syntax","sidebar":"tutorialSidebar"},{"id":"usage/coding","path":"/mercury/docs/usage/coding","sidebar":"tutorialSidebar"},{"id":"usage/editors","path":"/mercury/docs/usage/editors","sidebar":"tutorialSidebar"},{"id":"usage/embedding","path":"/mercury/docs/usage/embedding","sidebar":"tutorialSidebar"},{"id":"usage/extending","path":"/mercury/docs/usage/extending","sidebar":"tutorialSidebar"},{"id":"usage/howto","path":"/mercury/docs/usage/howto","sidebar":"tutorialSidebar"},{"id":"usage/mercury4max-overview","path":"/mercury/docs/usage/mercury4max-overview","sidebar":"tutorialSidebar"},{"id":"usage/playground-overview","path":"/mercury/docs/usage/playground-overview","sidebar":"tutorialSidebar"},{"id":"usage/shortkeys","path":"/mercury/docs/usage/shortkeys","sidebar":"tutorialSidebar"},{"id":"usage/sounds","path":"/mercury/docs/usage/sounds","sidebar":"tutorialSidebar"},{"id":"usage/troubleshooting","path":"/mercury/docs/usage/troubleshooting","sidebar":"tutorialSidebar"},{"id":"welcome","path":"/mercury/docs/welcome","sidebar":"tutorialSidebar"},{"id":"/category/-about","path":"/mercury/docs/category/-about","sidebar":"tutorialSidebar"},{"id":"/category/-usage","path":"/mercury/docs/category/-usage","sidebar":"tutorialSidebar"},{"id":"/category/-reference","path":"/mercury/docs/category/-reference","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/mercury/docs/welcome","label":"welcome"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"3.2.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.2.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.2.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.2.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.2.1"}}}');var u=n(4848);const c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},d=r.createContext(c);function p(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});var r=n(6540),a=n(8193),o=n(5260),i=n(440),l=n(781),s=n(3102),u=n(4848);function c(e){let{error:t,tryAgain:n}=e;return(0,u.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,u.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,u.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,u.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,u.jsx)(s.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)(p,{children:(0,u.jsxs)(g,{fallback:()=>(0,u.jsx)(c,{error:t,tryAgain:n}),children:[(0,u.jsx)(o.A,{children:(0,u.jsx)("title",{children:"Page Error"})}),(0,u.jsx)(l.A,{children:(0,u.jsx)(c,{error:t,tryAgain:n})})]})})}const m=e=>(0,u.jsx)(f,{...e});class g extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(545),a=n(4848);function o(e){return(0,a.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),a=n(4625),o=n(440),i=n(4586),l=n(6654),s=n(8193),u=n(3427),c=n(6025),d=n(4848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.A)(),{withBaseUrl:k}=(0,c.h)(),x=(0,u.A)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=p||f;const C=(0,l.A)(E),_=E?.replace("pathname://","");let A=void 0!==_?(T=_,y&&(e=>e.startsWith("/"))(T)?k(T):T):void 0;var T;A&&C&&(A=(0,o.applyTrailingSlash)(A,{trailingSlash:v,baseUrl:w}));const j=(0,r.useRef)(!1),N=n?a.k2:a.N_,L=s.A.canUseIntersectionObserver,R=(0,r.useRef)(),P=()=>{j.current||null==A||(window.docusaurus.preload(A),j.current=!0)};(0,r.useEffect)((()=>(!L&&C&&null!=A&&window.docusaurus.prefetch(A),()=>{L&&R.current&&R.current.disconnect()})),[R,A,L,C]);const O=A?.startsWith("#")??!1,D=!b.target||"_self"===b.target,I=!A||!C||!D||O;return h||!O&&I||x.collectLink(A),b.id&&x.collectAnchor(b.id),I?(0,d.jsx)("a",{ref:S,href:A,...E&&!C&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,d.jsx)(N,{...b,onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,L&&e&&C&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=A&&window.docusaurus.prefetch(A))}))})),R.current.observe(e))},to:A,...n&&{isActive:g,activeClassName:m}})}const f=r.forwardRef(p)},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>u,T:()=>s});var r=n(6540),a=n(4848);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function l(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return o(l({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=l({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>a,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{A:()=>l,h:()=>i});var r=n(6540),a=n(4586),o=n(6654);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.A)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.z)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6988);function o(){return(0,r.useContext)(a.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(6125);function o(){return(0,r.useContext)(a.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540);const a=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>o});var r=n(6540),a=n(4848);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),l=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:l,children:t})}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>g,vT:()=>p,Gy:()=>c,HW:()=>h,ht:()=>d,r7:()=>m,jh:()=>f});var r=n(6347),a=n(4586),o=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>{try{return function(e,t,n){void 0===t&&(t=o.W),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(5947),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},6134:(e,t,n)=>{"use strict";var r=n(1765),a=n(4784);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(8692)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(4164),a=n(1312),o=n(6342),i=n(8774),l=n(3427);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(4848);function c(e){let{as:t,id:n,...c}=e;const d=(0,l.A)(),{navbar:{hideOnScroll:p}}=(0,o.p)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const f=(0,a.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,u.jsxs)(t,{...c,className:(0,r.A)("anchor",p?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(4848);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},781:(e,t,n)=>{"use strict";n.d(t,{A:()=>ft});var r=n(6540),a=n(4164),o=n(7489),i=n(1003),l=n(6347),s=n(1312),u=n(5062),c=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,s.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var h=n(7559),y=n(4090);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(g,{className:b.skipToContent})}var w=n(6342),k=n(5041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:a,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.A)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const C={content:"content_knG7"};function _(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,a.A)(C.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function T(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.Mj)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,c.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,c.jsx)("div",{className:A.announcementBarPlaceholder}),(0,c.jsx)(_,{className:A.announcementBarContent}),o&&(0,c.jsx)(E,{onClick:n,className:A.announcementBarClose})]})}var j=n(9876),N=n(3104);var L=n(9532),R=n(5600);const P=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,j.M)(),t=(0,R.YL)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,L.ZC)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,c.jsx)(P.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(P);if(!e)throw new L.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,R.YL)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:D(o)})),[a,o,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=I();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,a.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var F=n(5293),z=n(2303);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,z.A)(),l=(0,s.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,s.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,a.A)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,a.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,a.A)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,a.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,F.G)();return r?null:(0,c.jsx)(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var W=n(3465);function Q(){return(0,c.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.M)();return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(Q,{}),(0,c.jsx)(V,{className:"margin-right--md"}),(0,c.jsx)(K,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:l,prependBaseUrlToHref:s,...u}=e;const d=(0,X.A)(r),p=(0,X.A)(t),f=(0,X.A)(a,{forcePrependBaseUrl:!0}),m=o&&a&&!(0,J.A)(a),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[o,m&&(0,c.jsx)(te.A,{...l&&{width:12,height:12}})]})};return a?(0,c.jsx)(Z.A,{href:s?f:a,...u,...g}):(0,c.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...u,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,c.jsx)(ne,{className:(0,a.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,a.A)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,c.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),le=n(9169),se=n(4586);const ue={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,c.jsxs)("div",{ref:s,className:(0,a.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,a.A)("navbar__link",o),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ce,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:o,onClick:i,...s}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.A)(),{pathname:t}=(0,l.zy)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),(0,c.jsxs)("li",{className:(0,a.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,c.jsx)(ne,{role:"button",className:(0,a.A)(ue.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...s,onClick:e=>{e.preventDefault(),f()},children:s.children??s.label}),(0,c.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Ce,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,c.jsx)(r,{...n})}var me=n(2131);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const he="iconLanguage_nlXk";var ye=n(418);const be={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,a.A)(n,be.navbarSearchContainer),children:t})}var we=n(4070),ke=n(1754);var xe=n(5597);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.A)(),p=(0,me.o)(),{search:f,hash:m}=(0,l.zy)(),g=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,s.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(fe,{...o,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(ge,{className:he}),h]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(ye.A,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,c.jsx)(i,{className:(0,a.A)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,ke.QB)(t,r),l=o?.path===i?.path;return null===i||i.unlisted&&!l?null:(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>l||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.zK)(r),i=(0,ke.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ke.Vd)(r)[0],i=t??o.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,c.jsx)(oe,{...a,label:i,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:u,hash:d}=(0,l.zy)(),p=(0,we.zK)(n),f=(0,we.jh)(n),{savePreferredVersionName:m}=(0,xe.g1)(n),g=[...a,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...o],h=(0,ke.Vd)(n)[0],y=t&&g.length>1?(0,s.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):h.label,b=t&&g.length>1?void 0:Se(h).path;return g.length<=1?(0,c.jsx)(oe,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(fe,{...i,mobile:t,label:y,to:b,items:g,isActive:r?()=>!1:void 0})}};function Ce(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ee[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(a,{...n})}function _e(){const e=(0,j.M)(),t=(0,w.p)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ce,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ae(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(s.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Te(){const e=0===(0,w.p)().navbar.items.length,t=I();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Ae,{onClick:()=>t.hide()}),t.content]})}function je(){const e=(0,j.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,c.jsx)(M,{header:(0,c.jsx)(Y,{}),primaryMenu:(0,c.jsx)(_e,{}),secondaryMenu:(0,c.jsx)(Te,{})}):null}const Ne={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Le(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,a.A)("navbar-sidebar__backdrop",e.className)})}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.p)(),i=(0,j.M)(),{navbarRef:l,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.A)("navbar","navbar--fixed-top",n&&[Ne.navbarHideable,!d&&Ne.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Le,{onClick:i.toggle}),(0,c.jsx)(je,{})]})}var Pe=n(440);const Oe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function De(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ie(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Oe.errorBoundaryError,children:n})}class Me extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Fe="right";function ze(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,j.M)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,c.jsx)(ze,{})})}const $e={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Me,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(Ce,{...e})},t)))})}function qe(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function He(){const e=(0,j.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Fe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,c.jsx)(qe,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Be,{}),(0,c.jsx)(Q,{}),(0,c.jsx)(Ue,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(Ue,{items:r}),(0,c.jsx)(V,{className:$e.colorModeToggle}),!a&&(0,c.jsx)(ve,{children:(0,c.jsx)(ye.A,{})})]})})}function Ge(){return(0,c.jsx)(Re,{children:(0,c.jsx)(He,{})})}function Ve(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,l=(0,X.A)(n),s=(0,X.A)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Z.A,{className:"footer__link-item",...r?{href:o?s:r}:{to:l},...i,children:[a,r&&!(0,J.A)(r)&&(0,c.jsx)(te.A,{})]})}function We(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(Ve,{item:t})},t.href??t.to)}function Qe(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(We,{item:e},t)))})]})}function Ke(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(Qe,{column:e},t)))})}function Ye(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(Ve,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ze,{item:e}),t.length!==n+1&&(0,c.jsx)(Ye,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Ke,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(1122);const tt={footerLogoLink:"footerLogoLink_BH7S"};function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.h)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.A,{className:(0,a.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(Z.A,{href:t.href,className:tt.footerLogoLink,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function at(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,c.jsx)("footer",{className:(0,a.A)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function it(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,c.jsx)(ot,{style:a,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(at,{copyright:t})})}const lt=r.memo(it),st=(0,L.fM)([F.a,k.oq,N.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,c.jsx)(R.y_,{children:(0,c.jsx)(j.e,{children:(0,c.jsx)(O,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(st,{children:t})}var ct=n(1107);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.A,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(De,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(Ie,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.J)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.be,{title:l,description:s}),(0,c.jsx)(v,{}),(0,c.jsx)(T,{}),(0,c.jsx)(Ge,{}),(0,c.jsx)("div",{id:d,className:(0,a.A)(h.G.wrapper.main,pt.mainWrapper,r),children:(0,c.jsx)(o.A,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(lt,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(8774),a=n(6025),o=n(4586),i=n(6342),l=n(1122),s=n(4848);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.A)(t.src),dark:(0,a.A)(t.srcDark||t.src)},i=(0,s.jsx)(l.A,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,o.A)(),{navbar:{title:n,logo:l}}=(0,i.p)(),{imageClassName:c,titleClassName:d,...p}=e,f=(0,a.A)(l?.href||"/"),m=n?"":t,g=l?.alt??m;return(0,s.jsxs)(r.A,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:g,imageClassName:c}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});n(6540);var r=n(5260),a=n(4848);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.A,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6540),a=n(4164),o=n(2303),i=n(5293);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(4848);function u(e){let{className:t,children:n}=e;const u=(0,o.A)(),{colorMode:c}=(0,i.G)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.A)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:o},e)}))})}function c(e){const{sources:t,className:n,alt:r,...a}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>y,u:()=>u});var r=n(6540),a=n(8193),o=n(205),i=n(3109),l=n(4848);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return p(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function m(e){if(!a.A.canUseDOM)return e?c:d}function g(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:o}),(0,l.jsx)(t,{ref:c,style:u?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(c.current,n),i?.(n))},className:s,children:a})}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,o.A)((()=>{t||i(!0)}),[t]),(0,o.A)((()=>{a&&u(t)}),[a,t]),a?(0,l.jsx)(g,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?h:g;return(0,l.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{Mj:()=>g,oq:()=>m});var r=n(6540),a=n(2303),o=n(9466),i=n(9532),l=n(6342),s=n(4848);const u=(0,o.Wf)("docusaurus.announcement.dismiss"),c=(0,o.Wf)("docusaurus.announcement.id"),d=()=>"true"===u.get(),p=e=>u.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.p)(),t=(0,a.A)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&p(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(f.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>y,a:()=>h});var r=n(6540),a=n(8193),o=n(9532),i=n(9466),l=n(6342),s=n(4848);const u=r.createContext(void 0),c="theme",d=(0,i.Wf)(c),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>a.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),g=e=>{d.set(f(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.p)(),[a,o]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&g(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[a,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new o.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},5597:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>y,g1:()=>v});var r=n(6540),a=n(4070),o=n(7065),i=n(6342),l=n(1754),s=n(9532),u=n(9466),c=n(4848);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,u.Wf)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.Wf)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.Wf)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=r.createContext(null);function g(){const e=(0,a.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return(0,c.jsx)(m.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return l.C5?(0,c.jsx)(h,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function b(){const e=(0,r.useContext)(m);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.W);const t=(0,a.ht)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},6588:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,t:()=>u});var r=n(6540),a=n(9532),o=n(4848);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new a.dV("DocsSidebarProvider");return e}},2252:(e,t,n)=>{"use strict";n.d(t,{n:()=>l,r:()=>s});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new a.dV("DocsVersionProvider");return e}},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>f,M:()=>m});var r=n(6540),a=n(5600),o=n(4581),i=n(6347),l=n(9532);function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6342),c=n(4848);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,a.YL)(),{items:t}=(0,u.p)().navbar;return 0===t.length&&!e.component}(),t=(0,o.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=p();return(0,c.jsx)(d.Provider,{value:n,children:t})}function m(){const e=r.useContext(d);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>u,YL:()=>s,y_:()=>l});var r=n(6540),a=n(9532),o=n(4848);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new a.dV("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.dV("NavbarSecondaryMenuContentProvider");const[,l]=o,s=(0,a.Be)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>a,J:()=>o});var r=n(6540);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(6540),a=n(8193);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,l]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){l(function(e){if(!a.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},1754:(e,t,n)=>{"use strict";n.d(t,{d1:()=>A,Nr:()=>m,w8:()=>b,C5:()=>p,$S:()=>g,cC:()=>f,B5:()=>_,Vd:()=>S,QB:()=>C,fW:()=>E,OF:()=>x,Y:()=>w});var r=n(6540),a=n(6347),o=n(2831),i=n(4070),l=n(5597),s=n(2252),u=n(6588);function c(e){return Array.from(new Set(e))}var d=n(9169);const p=!!i.Gy;function f(e){const t=(0,s.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=m(t);if(e)return e}}(e):void 0:e.href}function g(){const{pathname:e}=(0,a.zy)(),t=(0,u.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.ys)(e,t),y=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||y(e.items,t))}function v(e,t){switch(e.type){case"category":return b(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||b(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.ys)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.ys)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function x(){const e=(0,u.t)(),{pathname:t}=(0,a.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,l.g1)(e),a=(0,i.r7)(e);return(0,r.useMemo)((()=>c([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function C(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t}=e;const n=(0,a.zy)(),r=(0,s.r)(),i=t.routes,l=i.find((e=>(0,a.B6)(n.pathname,e)));if(!l)return null;const u=l.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,o.v)(i),sidebarName:u,sidebarItems:c}}function A(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!m(e)))}},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>d,Jx:()=>m});var r=n(6540),a=n(4164),o=n(5260),i=n(3102);function l(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(6025),u=n(4586);var c=n(4848);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const l=function(e){const{siteConfig:t}=(0,u.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.h)(),p=a?d(a,{absolute:!0}):void 0;return(0,c.jsxs)(o.A,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),l=(0,a.A)(i,t);return(0,c.jsxs)(p.Provider,{value:l,children:[(0,c.jsx)(o.A,{children:(0,c.jsx)("html",{className:l})}),n]})}function m(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(f,{className:(0,a.A)(r,o),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>u,ZC:()=>l,_q:()=>i,dV:()=>s,fM:()=>c});var r=n(6540),a=n(205),o=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,a.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,a.A)((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),a=n(8328),o=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>p,Tv:()=>u,gk:()=>f});var r=n(6540),a=n(8193),o=n(2303),i=(n(205),n(9532)),l=n(4848);const s=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(s.Provider,{value:n,children:t})}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>a.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(d()),o=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,o.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},2967:(e,t,n)=>{"use strict";n.d(t,{Cy:()=>r,tU:()=>a});n(4586);const r="default";function a(e,t){return`docs-${e}-${t}`}},9466:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>s});n(6540);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),a=n(6347),o=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.A)(),{pathname:s}=(0,a.zy)(),u=(0,o.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),a=n(6347),o=n(9532);function i(e){const t=(0,a.zy)(),n=(0,o.ZC)(t),i=(0,o._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(4586);function a(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(2566);function a(e){return e.endsWith("/")?e:`${e}/`}function o(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=a,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),l="/"===i||i===r?i:(s=i,n?a(s):o(s));var s;return e.replace(i,l)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=o},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},440:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(2983);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return a.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return a.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return a.removeTrailingSlash}});var o=n(2566);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return o.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return o.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return o.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return o.removePrefix}});var i=n(253);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>_,yJ:()=>f,sC:()=>T,AO:()=>p});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(1561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},6969:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,t,n)=>{const r=n(6969),a=n(8380),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),o.add(e)}))}i.silent=!1,e.exports=i},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++a;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=p.substring(m+f.length),b=[];g&&b.push.apply(b,i([g])),b.push(h),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(Prism)},8692:(e,t,n)=>{var r={"./":8722};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=8692},3157:(e,t,n)=>{var r={"./":8722};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=3157},8380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;a(m);){for(var g in p={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(p[e]=!0)}))}for(var y in d)if(!(y in c))for(var b in f(y))if(b in c){p[y]=!0;break}for(var v in m=p)c[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var a,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)a=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));o?a=o(p,(function(){return r(e)})):r(e)}return l[e]=a}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(9982);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n