Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
172 lines (161 loc) · 28.1 KB
/
Copy pathindex.html
File metadata and controls
172 lines (161 loc) · 28.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>audiojs: open audio stack for JavaScript</title>
<meta name="description" content="Open audio stack for JavaScript. Decode, process, synthesize and play — same code on Browser, Node, Deno and Bun. 300+ modular packages, 9M+ npm downloads/month. W3C Web Audio, WPT 100%.">
<meta name="theme-color" content="#0b0c0e">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://audio.js.org/">
<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" type="image/png" sizes="512x512" href="/icon-512.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<!-- Open Graph -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://audio.js.org/">
<meta property="og:title" content="audiojs: open audio stack for JavaScript">
<meta property="og:description" content="Decode, process, synthesize and play — same code on Browser, Node, Deno and Bun. 300+ modular packages, 9M+ npm downloads/month. W3C Web Audio, WPT 100%.">
<meta property="og:site_name" content="audiojs">
<meta property="og:image" content="https://audio.js.org/icon-512.png">
<meta property="og:image:width" content="512">
<meta property="og:image:height" content="512">
<!-- Twitter -->
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://audio.js.org/icon-512.png">
<meta name="twitter:site" content="@audio_js">
<meta name="twitter:title" content="audiojs: open audio stack for JavaScript">
<meta name="twitter:description" content="Decode, process, synthesize and play — same code on Browser, Node, Deno and Bun. 300+ modular packages, 9M+ npm downloads/month. W3C Web Audio, WPT 100%.">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://audio.js.org/#org",
"name": "audiojs",
"url": "https://audio.js.org/",
"logo": "https://audio.js.org/icon-512.png",
"sameAs": ["https://github.com/audiojs", "https://www.npmjs.com/org/audiojs", "https://x.com/audio_js"]
},
{
"@type": "SoftwareSourceCode",
"name": "audiojs",
"description": "Open audio stack for JavaScript. Cross-runtime modules for decode, encode, synthesis, analysis and DSP.",
"url": "https://audio.js.org/",
"codeRepository": "https://github.com/audiojs",
"programmingLanguage": "JavaScript",
"license": "https://opensource.org/licenses/MIT",
"author": { "@id": "https://audio.js.org/#org" }
}
]
}
</script>
<link rel="preload" href="/audio/assets/geist.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/audio/assets/tokens.css">
<link rel="stylesheet" href="/bar.css?v=420af901">
<script type="module" src="/bar.js?v=e62aa30a"></script>
<link rel="preload" href="/fonts/geist-mono.woff2" as="font" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/home/index.css">
<script type="module" src="/audio/playground/embed.js"></script>
<script type="module" src="/home/index.js"></script>
</head>
<body>
<a class="skip" href="#main">Skip to content</a>
<div class="dark">
<header class="site-bar">
<div class="site-top">
<a class="site-brand" href="/" aria-label="audiojs home" aria-current="page" draggable="false"><span class="logo" aria-hidden="true"><svg viewBox="-1 -.94 2 1.88" fill="currentColor"><use href="#mark"/></svg><canvas hidden></canvas></span><span class="word">audio</span><span class="js">JS</span></a>
<nav aria-label="Sections"><a class="ticked" href="/modules/">modules</a><a class="ticked" href="/util/">utils</a><a class="ticked" href="/lab/">lab</a><a class="ticked" href="/audio/playground/">playground</a></nav>
<a class="site-gh" href="https://github.com/audiojs" aria-label="audiojs on GitHub"><svg aria-hidden="true" viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C12.1381 15.0539 13.5182 14.0332 14.4958 12.6716C15.4735 11.3101 15.9996 9.6762 16 8C16 3.58 12.42 0 8 0Z"/></svg></a>
</div>
<svg class="site-sprite" aria-hidden="true"><defs><path id="lobes" d="M-1 -0L-0.979 -0L-0.958 -0.001L-0.938 -0.003L-0.917 -0.006L-0.896 -0.012L-0.875 -0.021L-0.854 -0.033L-0.833 -0.048L-0.812 -0.068L-0.792 -0.091L-0.771 -0.118L-0.75 -0.15L-0.729 -0.185L-0.708 -0.225L-0.688 -0.267L-0.667 -0.313L-0.646 -0.362L-0.625 -0.413L-0.604 -0.465L-0.583 -0.518L-0.562 -0.571L-0.542 -0.624L-0.521 -0.675L-0.5 -0.724L-0.479 -0.769L-0.458 -0.811L-0.438 -0.848L-0.417 -0.88L-0.396 -0.905L-0.375 -0.924L-0.354 -0.936L-0.333 -0.94L-0.312 -0.936L-0.292 -0.924L-0.271 -0.903L-0.25 -0.873L-0.229 -0.836L-0.208 -0.79L-0.188 -0.736L-0.167 -0.675L-0.146 -0.607L-0.125 -0.533L-0.104 -0.453L-0.083 -0.368L-0.062 -0.28L-0.042 -0.188L-0.021 -0.095L0 0L0.021 0.095L0.042 0.188L0.062 0.28L0.083 0.368L0.104 0.453L0.125 0.533L0.146 0.607L0.167 0.675L0.188 0.736L0.208 0.79L0.229 0.836L0.25 0.873L0.271 0.903L0.292 0.924L0.312 0.936L0.333 0.94L0.354 0.936L0.375 0.924L0.396 0.905L0.417 0.88L0.438 0.848L0.458 0.811L0.479 0.769L0.5 0.724L0.521 0.675L0.542 0.624L0.562 0.571L0.583 0.518L0.604 0.465L0.625 0.413L0.646 0.362L0.667 0.313L0.688 0.267L0.708 0.225L0.729 0.185L0.75 0.15L0.771 0.118L0.792 0.091L0.812 0.068L0.833 0.048L0.854 0.033L0.875 0.021L0.896 0.012L0.917 0.006L0.938 0.003L0.958 0.001L0.979 0L1 0Z"/></defs><g id="mark"><use href="#lobes" transform="scale(1 1)" opacity="0.042"/><use href="#lobes" transform="scale(1 0.958)" opacity="0.043"/><use href="#lobes" transform="scale(1 0.917)" opacity="0.045"/><use href="#lobes" transform="scale(1 0.875)" opacity="0.048"/><use href="#lobes" transform="scale(1 0.833)" opacity="0.05"/><use href="#lobes" transform="scale(1 0.792)" opacity="0.053"/><use href="#lobes" transform="scale(1 0.75)" opacity="0.056"/><use href="#lobes" transform="scale(1 0.708)" opacity="0.059"/><use href="#lobes" transform="scale(1 0.667)" opacity="0.062"/><use href="#lobes" transform="scale(1 0.625)" opacity="0.067"/><use href="#lobes" transform="scale(1 0.583)" opacity="0.071"/><use href="#lobes" transform="scale(1 0.542)" opacity="0.077"/><use href="#lobes" transform="scale(1 0.5)" opacity="0.083"/><use href="#lobes" transform="scale(1 0.458)" opacity="0.091"/><use href="#lobes" transform="scale(1 0.417)" opacity="0.1"/><use href="#lobes" transform="scale(1 0.375)" opacity="0.111"/><use href="#lobes" transform="scale(1 0.333)" opacity="0.125"/><use href="#lobes" transform="scale(1 0.292)" opacity="0.143"/><use href="#lobes" transform="scale(1 0.25)" opacity="0.167"/><use href="#lobes" transform="scale(1 0.208)" opacity="0.2"/><use href="#lobes" transform="scale(1 0.167)" opacity="0.25"/><use href="#lobes" transform="scale(1 0.125)" opacity="0.333"/><use href="#lobes" transform="scale(1 0.083)" opacity="0.5"/><use href="#lobes" transform="scale(1 0.042)" opacity="1"/></g></svg>
</header>
<main id="main">
<section class="hero wrap" aria-labelledby="title">
<div class="intro">
<h1 id="title">Open audio stack for JavaScript</h1>
<p class="lead">JavaScript packages for audio: decode, encode, measure, process, synthesize and play, the same code in the browser, Node, Deno and Bun.</p>
<div class="start">
<button class="install" id="install" aria-label="Copy npm i audio"><span aria-hidden="true">$</span> npm i audio</button>
<a class="ticked" href="https://github.com/audiojs/audio#start">docs ↗</a>
</div>
</div>
<figure class="scope">
<audio-repl panel="none" display="wave" controls="sound play clock history save loudness rate channels view link" ops="trim(-40) normalize(-1) fade(1, 1) stretch(1.25) pitch(-2) reverse" background="page" ui='{"zoom":{"out":1},"overshoot":0,"scroll":"hover"}' height="320" title="audio playground: a blackbird to play and edit">
<pre><code>// Blackbird by Diana Tudor, xeno-canto.org/1059970, CC BY 4.0, an excerpt
audio('/home/blackbird.mp3')</code></pre>
</audio-repl>
</figure>
</section>
<ul class="stats wrap" aria-label="In numbers">
<li><a href="https://www.npmjs.com/org/audio"><b>9M+</b>npm downloads a month</a></li>
<li><a href="https://www.npmjs.com/org/audio"><b>300+</b>packages</a></li>
<li><a href="/modules/"><b>150+</b>plugins in audio</a></li>
<li><a href="https://github.com/audiojs/web-audio-api/actions/workflows/wpt.yml" title="web-audio-api passes every checked-in W3C Web Platform Test: the CI run"><b>100%</b>W3C web platform tests, <span>web-audio-api</span></a></li>
<li><a href="https://github.com/audiojs/audio/actions/workflows/test.yml"><b>4</b>runtimes in CI: browser, Node, Deno, Bun</a></li>
</ul>
</main>
</div>
<div class="paper">
<section class="grid wrap" aria-label="Sections">
<a class="cell" href="/modules/"><i>01</i><svg viewBox="0 0 56 56" aria-hidden="true" class="dots"><g fill="currentColor" stroke="none"><circle cx="6" cy="10" r="1.6"/><circle cx="15" cy="10" r="1.6"/><circle cx="24" cy="10" r="1.6"/><circle cx="33" cy="10" r="1.6"/><circle cx="42" cy="10" r="1.6"/><circle cx="51" cy="10" r="1.6"/><circle cx="6" cy="19" r="1.6"/><circle cx="15" cy="19" r="1.6"/><circle cx="24" cy="19" r="1.6"/><circle cx="33" cy="19" r="1.6"/><circle cx="42" cy="19" r="1.6"/><circle cx="51" cy="19" r="1.6"/><circle cx="6" cy="28" r="1.6"/><circle cx="15" cy="28" r="1.6"/><circle cx="24" cy="28" r="1.6"/><circle cx="33" cy="28" r="2.6"/><circle cx="42" cy="28" r="1.6"/><circle cx="51" cy="28" r="1.6"/><circle cx="6" cy="37" r="1.6"/><circle cx="15" cy="37" r="1.6"/><circle cx="24" cy="37" r="1.6"/><circle cx="33" cy="37" r="1.6"/><circle cx="42" cy="37" r="1.6"/><circle cx="51" cy="37" r="1.6"/><circle cx="6" cy="46" r="1.6"/><circle cx="15" cy="46" r="1.6"/><circle cx="24" cy="46" r="1.6"/><circle cx="33" cy="46" r="1.6"/><circle cx="42" cy="46" r="1.6"/><circle cx="51" cy="46" r="1.6"/></g></svg><h2 class="ticked">Modules</h2><p><b>150+</b> plugins, one job each: filters, dynamics, reverbs, pitch and time, denoise, synthesis, analysis. audio loads each by name.</p></a>
<a class="cell" href="/util/"><i>02</i><svg viewBox="0 0 56 56" aria-hidden="true"><path d="M4 22v12M9 14v28M14 19v18M19 8v40M24 16v24M29 4v48M34 12v32M39 20v16M44 10v36M49 24v8M54 18v20"/></svg><h2 class="ticked">Utils</h2><p><b data-utils>23</b> tools in the browser: convert, measure loudness, remove noise, split stems, transcribe, tune.</p></a>
<a class="cell" href="/modules/audio/#cli"><i>03</i><svg viewBox="0 0 56 56" aria-hidden="true"><path d="M2 6h52v44H2z"/><path d="M10 18l9 9-9 9M24 38h14"/></svg><h2 class="ticked">CLI</h2><p>The same edits in a terminal: a file in, its edits, a file out; a check that fails a build. <code>npx audio voice.wav trim normalize podcast save clean.mp3</code></p></a>
<a class="cell" href="/lab/"><i>04</i><svg viewBox="0 0 56 56" aria-hidden="true"><circle cx="28" cy="28" r="26"/><circle cx="28" cy="28" r="21"/><circle cx="28" cy="28" r="16"/><circle cx="28" cy="28" r="11"/><circle cx="28" cy="28" r="6"/><circle cx="28" cy="28" r="2.5" fill="currentColor"/></svg><h2 class="ticked">Lab</h2><p>How sound is drawn, set and heard, tried live. Every figure is computed in the page from the sound's samples.</p></a>
<a class="cell" href="/audio/playground/"><i>05</i><svg viewBox="0 0 56 56" aria-hidden="true"><path d="M2 14V2h12M42 2h12v12M54 42v12H42M14 54H2V42"/><path d="M23 19v18l15-9z" fill="currentColor"/></svg><h2 class="ticked">Playground</h2><p>An audio editor in the browser, every edit of it a line of audio code. Connect it to an agent of yours and it edits too.</p></a>
<a class="cell" href="https://github.com/audiojs/audio#mcp"><i>06</i><svg viewBox="0 0 56 56" aria-hidden="true"><circle cx="28" cy="28" r="26"/><circle cx="28" cy="28" r="17"/><path d="M2 28h6c4 0 5-14 10-14s6 28 10 28 5-14 10-14 6 0 16 0"/></svg><h2 class="ticked">Agents</h2><p>audio as an MCP server and an agent skill: an agent measures, edits and plays sound with the same calls. <code>npx -y audio --mcp</code></p></a>
</section>
<section class="featured wrap" id="utils" aria-labelledby="utils-title">
<header>
<h2 id="utils-title"><i>02</i> Utils</h2>
<p>Each in your browser on an audiojs package; nothing is uploaded.</p>
<a class="all ticked" href="/util/">All <b data-utils>23</b> utilities →</a>
</header>
<ol>
<!-- featured: written by scripts/util-pages.mjs, FEATURED -->
<li><a href="/util/metronome/"><span class="t-name ticked">Metronome</span><span class="t-desc">A click from 20 to 300 BPM: tap tempo, accents and muted beats, subdivisions, nine sounds</span><small>Make</small><svg class="fig" viewBox="0 0 200 72" aria-hidden="true"><path class="faint" d="M0 32H200"/><path class="lit" d="M8 46V12M104 46V12"/><path d="M32 40V24M56 40V24M80 40V24M128 40V24M152 40V24M176 40V24M20 32h.01M44 32h.01M68 32h.01M92 32h.01M116 32h.01M140 32h.01M164 32h.01M188 32h.01"/><text x="0" y="66">120 BPM</text><text x="200" y="66" text-anchor="end">4/4</text></svg></a></li>
<li><a href="/util/tuner/"><span class="t-name ticked">Tuner</span><span class="t-desc">Chromatic tuner for guitar, bass, violin, voice</span><small>Measure</small><svg class="fig" viewBox="0 0 200 72" aria-hidden="true"><path d="M12 50V38M20.8 50V44M29.6 50V44M38.4 50V44M47.2 50V44M56 50V38M64.8 50V44M73.6 50V44M82.4 50V44M91.2 50V44M100 50V28M108.8 50V44M117.6 50V44M126.4 50V44M135.2 50V44M144 50V38M152.8 50V44M161.6 50V44M170.4 50V44M179.2 50V44M188 50V38"/><path class="lit" d="M107 54V12"/><circle class="fill" cx="107" cy="54" r="2.5"/><text x="0" y="10">A4</text><text x="200" y="10" text-anchor="end">+4 cents</text><text x="12" y="68" text-anchor="middle">−50</text><text x="100" y="68" text-anchor="middle">0</text><text x="188" y="68" text-anchor="middle">+50</text></svg></a></li>
<li><a href="/util/prosody/"><span class="t-name ticked">Speech prosody editor</span><span class="t-desc">Move syllables to notes, straighten or smooth intonation, change phrase timing</span><small>Voice</small><svg class="fig" viewBox="0 0 200 72" aria-hidden="true"><path class="faint" d="M0 12H200M0 24H200M0 36H200M0 48H200M0 60H200"/><path d="M4 34.5h.01M8 33.5h.01M12 28.5h.01M16 25.9h.01M20 26h.01M24 24.8h.01M28 24.4h.01M32 26.4h.01M36 27.6h.01M40 28.2h.01M44 29.7h.01M48 30.2h.01M52 31h.01M56 28.8h.01M60 28.3h.01M64 28.1h.01M68 26.7h.01M72 23.4h.01M76 24.4h.01M80 23.5h.01M84 25.5h.01M88 26.6h.01M92 26.9h.01M96 31.2h.01M100 36.1h.01M104 39.4h.01M108 43.3h.01M112 46.8h.01M116 50.9h.01M120 53.3h.01M124 53.1h.01M128 53.7h.01M132 55h.01M136 52.8h.01M140 51.2h.01M144 50.6h.01M148 50.1h.01M152 49.2h.01M156 51.2h.01M160 50.7h.01M164 52.3h.01M168 54.2h.01M172 53.3h.01M176 55.4h.01M180 57.2h.01M184 57.4h.01M188 56.6h.01M192 54.5h.01M196 54.3h.01"/><path class="lit" d="M28 24.4V24"/><circle class="fill" cx="28" cy="24" r="3"/><path class="lit" d="M64 28.1V24"/><circle class="fill" cx="64" cy="24" r="3"/><path class="lit" d="M100 36.1V36"/><circle class="fill" cx="100" cy="36" r="3"/><path class="lit" d="M136 52.8V48"/><circle class="fill" cx="136" cy="48" r="3"/><path class="lit" d="M172 53.3V48"/><circle class="fill" cx="172" cy="48" r="3"/></svg></a></li>
<li><a href="/util/recorder/"><span class="t-name ticked">Audio recorder</span><span class="t-desc">Record from the microphone, save as MP3, WAV, FLAC, Opus</span><small>Make</small><svg class="fig" viewBox="0 0 200 72" aria-hidden="true"><path d="M2 34.3V37.7M6 30.6V41.4M10 27.6V44.4M14 23V49M18 18.5V53.5M22 19V53M26 27V45M30 29.4V42.6M34 29.4V42.6M38 20.5V51.5M42 24.2V47.8M46 16V56M50 15.8V56.2M54 22.7V49.3M58 24.2V47.8M62 23.4V48.6M66 30.8V41.2M70 31.9V40.1M74 30.9V41.1M78 28.8V43.2M82 26.1V45.9M86 27V45M90 20.9V51.1M94 23.3V48.7M98 27V45M102 26.3V45.7M106 26.4V45.6M110 15.9V56.1M114 21.6V50.4M118 22.8V49.2M122 15.2V56.8M126 23.7V48.3M130 22.9V49.1M134 30.9V41.1M138 32.9V39.1"/><circle class="fill" cx="146" cy="36" r="5"/><path class="faint" d="M158 36h.01M162 36h.01M166 36h.01M170 36h.01M174 36h.01M178 36h.01M182 36h.01M186 36h.01M190 36h.01M194 36h.01M198 36h.01"/></svg></a></li>
<li><a href="/util/denoise/"><span class="t-name ticked">Noise remover</span><span class="t-desc">Background noise, hum, clicks, wind, plosives, reverb</span><small>Clean up</small><svg class="fig" viewBox="0 0 200 72" aria-hidden="true"><path d="M2 32.4V39.6M6 29.7V42.3M10 32.1V39.9M14 27.6V44.4M18 13.5V58.5M22 12.1V59.9M26 18.8V53.2M30 25V47M34 27.1V44.9M38 29.7V42.3M42 30V42M46 21.2V50.8M50 16.6V55.4M54 12.2V59.8M58 4.4V67.6M62 8.9V63.1M66 15.9V56.1M70 22.8V49.2M74 23.9V48.1M78 21.7V50.3M82 19.3V52.7M86 21.5V50.5M90 27.1V44.9M94 30.1V41.9"/><path class="faint" d="M100 4V68" stroke-dasharray="1 3"/><path d="M104 36h.01M108 36h.01M112 34.2V37.8M116 30.5V41.5M120 18.4V53.6M124 17.7V54.3M128 20.9V51.1M132 28.9V43.1M136 33.6V38.4M140 34.4V37.6M144 32.5V39.5M148 26.2V45.8M152 23.4V48.6M156 15.8V56.2M160 10.9V61.1M164 11V61M168 21.5V50.5M172 28.8V43.2M176 30.7V41.3M180 25.2V46.8M184 22.1V49.9M188 27.5V44.5M192 33.8V38.2M196 36h.01"/></svg></a></li>
<li><a href="/util/convert-audio/"><span class="t-name ticked">Audio converter</span><span class="t-desc">MP3, WAV, FLAC, M4A, ALAC, WavPack, OGG, Opus, AAC, AIFF, CAF, WebM, QOA; reads APE, TTA, Musepack, DSD, tracker modules too</span><small>Convert</small><svg class="fig" viewBox="0 0 200 72" aria-hidden="true"><path d="M2 22.8V25.2M6 21V27M10 19.4V28.6M14 19.5V28.5M18 16.5V31.5M22 18V30M26 16.3V31.7M30 14.5V33.5M34 14.2V33.8M38 12.6V35.4M42 12V36M46 15.3V32.7M50 18.8V29.2M54 19.8V28.2M58 20.5V27.5M62 20.5V27.5M66 21.5V26.5M70 21.9V26.1M74 19.1V28.9M78 19.3V28.7M82 18.7V29.3M86 14.9V33.1M90 9V39M94 9.7V38.3M98 12.9V35.1M102 9.8V38.2M106 12.6V35.4M110 15.8V32.2M114 18.5V29.5M118 18.2V29.8M122 19.5V28.5M126 19.6V28.4M130 21V27M134 20.8V27.2M138 18.9V29.1M142 18V30M146 18.9V29.1M150 15.1V32.9M154 13.2V34.8M158 13.3V34.7M162 16.6V31.4M166 12.8V35.2M170 15.1V32.9M174 15.2V32.8M178 18.6V29.4M182 19.1V28.9M186 20.7V27.3M190 20.9V27.1M194 21.8V26.2M198 22.6V25.4"/><text x="16" y="68" text-anchor="middle">WAV</text><text x="49.6" y="68" text-anchor="middle">FLAC</text><text x="83.2" y="68" text-anchor="middle">MP3</text><text x="116.8" y="68" text-anchor="middle">OGG</text><text x="150.4" y="68" text-anchor="middle">OPUS</text><text x="184" y="68" text-anchor="middle">M4A</text></svg></a></li>
<li><a href="/util/transcribe/"><span class="t-name ticked">Transcribe audio to text and subtitles</span><span class="t-desc">Whisper speech-to-text; TXT, SRT, VTT; sentence or word timestamps</span><small>Voice</small><svg class="fig" viewBox="0 0 200 72" aria-hidden="true"><path d="M2 24.6V27.4M6 20.5V31.5M10 16.3V35.7M14 11.4V40.6M18 9.1V42.9M22 10V42M26 14.5V37.5M30 16.3V35.7M34 19.9V32.1M38 24V28M42 22.6V29.4M46 21.6V30.4M50 17.9V34.1M54 16.6V35.4M58 11.7V40.3M62 9.7V42.3M66 14.3V37.7M70 21.8V30.2M74 20.9V31.1M78 22.8V29.2M82 23.3V28.7M86 19.5V32.5M90 17.4V34.6M94 19.1V32.9M98 18.9V33.1M102 10V42M106 18.3V33.7M110 18.4V33.6M114 21.7V30.3M118 24.3V27.7M122 24V28M126 23.1V28.9M130 21.6V30.4M134 16.3V35.7M138 13.2V38.8M142 16.3V35.7M146 19.3V32.7M150 19.9V32.1M154 23.1V28.9M158 24.1V27.9M162 24.1V27.9M166 20.3V31.7M170 19.1V32.9M174 12.9V39.1M178 14V38M182 8.9V43.1M186 18.1V33.9M190 18.4V33.6M194 21.2V30.8M198 23.2V28.8"/><text x="20" y="68" text-anchor="middle">every</text><text x="60" y="68" text-anchor="middle">word</text><text x="100" y="68" text-anchor="middle">under</text><text x="140" y="68" text-anchor="middle">its</text><text x="180" y="68" text-anchor="middle">sound</text></svg></a></li>
<li><a href="/util/stem-splitter/"><span class="t-name ticked">Stem splitter</span><span class="t-desc">Vocals, drums, bass and other from any song, by the SCNet model; play, mute, solo, rebalance, save</span><small>Separate</small><svg class="fig" viewBox="0 0 200 72" aria-hidden="true"><text x="0" y="12.5">vocals</text><path d="M48 9h.01M52 9h.01M56 9h.01M60 8.4V9.6M64 8.3V9.7M68 7.1V10.9M72 5.9V12.1M76 5.4V12.6M80 4.6V13.4M84 3.3V14.7M88 4.7V13.3M92 4.7V13.3M96 7.1V10.9M100 7.2V10.8M104 7.8V10.2M108 9h.01M112 9h.01M116 9h.01M120 9h.01M124 9h.01M128 9h.01M132 9h.01M136 9h.01M140 7.9V10.1M144 7.5V10.5M148 5.7V12.3M152 5.3V12.7M156 5.9V12.1M160 5.8V12.2M164 3.6V14.4M168 5.6V12.4M172 5.7V12.3M176 7.4V10.6M180 7.9V10.1M184 9h.01M188 9h.01M192 9h.01M196 9h.01"/><text x="0" y="30.5">drums</text><path d="M48 21V33M52 27h.01M56 27h.01M60 27h.01M64 21V33M68 27h.01M72 27h.01M76 27h.01M80 21V33M84 27h.01M88 27h.01M92 27h.01M96 21V33M100 27h.01M104 27h.01M108 27h.01M112 21V33M116 27h.01M120 27h.01M124 27h.01M128 21V33M132 27h.01M136 27h.01M140 27h.01M144 21V33M148 27h.01M152 27h.01M156 27h.01M160 21V33M164 27h.01M168 27h.01M172 27h.01M176 21V33M180 27h.01M184 27h.01M188 27h.01M192 21V33M196 27h.01"/><text x="0" y="48.5">bass</text><path d="M48 41.5V48.5M52 40.8V49.2M56 40.3V49.7M60 40V50M64 40V50M68 40.4V49.6M72 40.9V49.1M76 41.6V48.4M80 42.2V47.8M84 42.7V47.3M88 43V47M92 42.9V47.1M96 42.6V47.4M100 42V48M104 41.4V48.6M108 40.7V49.3M112 40.2V49.8M116 40V50M120 40.1V49.9M124 40.4V49.6M128 41V49M132 41.7V48.3M136 42.3V47.7M140 42.8V47.2M144 43V47M148 42.9V47.1M152 42.5V47.5M156 41.9V48.1M160 41.3V48.7M164 40.6V49.4M168 40.2V49.8M172 40V50M176 40.1V49.9M180 40.5V49.5M184 41.1V48.9M188 41.8V48.2M192 42.4V47.6M196 42.8V47.2"/><text x="0" y="66.5">other</text><path d="M48 60.4V65.6M52 60.4V65.6M56 61.7V64.3M60 61.2V64.8M64 60.5V65.5M68 60.4V65.6M72 59.9V66.1M76 60.4V65.6M80 62V64M84 59.3V66.7M88 59V67M92 59.4V66.6M96 59.2V66.8M100 61.7V64.3M104 61.8V64.2M108 61.6V64.4M112 61.2V64.8M116 59.9V66.1M120 59.7V66.3M124 59.9V66.1M128 60.5V65.5M132 61V65M136 59V67M140 61.7V64.3M144 59.1V66.9M148 61.4V64.6M152 59.1V66.9M156 59.8V66.2M160 61.9V64.1M164 60.9V65.1M168 62V64M172 61.1V64.9M176 60.3V65.7M180 61.8V64.2M184 61.6V64.4M188 59.1V66.9M192 59.4V66.6M196 61.9V64.1"/></svg></a></li>
<!-- /featured -->
</ol>
</section>
<section class="desktop wrap" aria-labelledby="desktop-title">
<div class="about">
<h2 id="desktop-title">Audio for Mac <small>Coming</small></h2>
<p>The playground as a Mac app: a window of its own, sounds opened from Finder and the Dock, the menu bar’s menus, the microphone.</p>
<p class="facts">macOS on Apple silicon</p>
<p class="links"><a class="ticked" href="https://github.com/audiojs/audio/releases">Releases ↗</a><a class="ticked" href="https://github.com/audiojs/audio/tree/main/desktop">Source ↗</a></p>
</div>
<svg class="window" viewBox="0 0 480 240" aria-hidden="true"><rect x=".5" y=".5" width="479" height="239" rx="10"/><path d="M.5 30.5h479"/><circle cx="18" cy="15.5" r="5"/><circle cx="36" cy="15.5" r="5"/><circle cx="54" cy="15.5" r="5"/><path class="wave" d="M24 112h.01M28 112h.01M32 111.3V112.7M36 110.5V113.5M40 109.7V114.3M44 105.5V118.5M48 97.4V126.6M52 98.5V125.5M56 93.4V130.6M60 82.1V141.9M64 92.8V131.2M68 76.3V147.7M72 90.3V133.7M76 92.6V131.4M80 104.4V119.6M84 107.5V116.5M88 109.4V114.6M92 109.1V114.9M96 107.1V116.9M100 98V126M104 80.6V143.4M108 77.8V146.2M112 75.4V148.6M116 74.6V149.4M120 80.6V143.4M124 102V122M128 102.4V121.6M132 106.3V117.7M136 101.7V122.3M140 92V132M144 96.5V127.5M148 101.4V122.6M152 103.9V120.1M156 108.8V115.2M160 112h.01M164 112h.01M168 111.4V112.6M172 110.2V113.8M176 108.5V115.5M180 106.2V117.8M184 105.4V118.6M188 97.3V126.7M192 97.6V126.4M196 80.6V143.4M200 76.8V147.2M204 76.5V147.5M208 82.2V141.8M212 75.1V148.9M216 75.8V148.2M220 93.1V130.9M224 98.7V125.3M228 103.4V120.6M232 100.2V123.8M236 105.7V118.3M240 108.6V115.4M244 109V115M248 108V116M252 99.5V124.5M256 100.3V123.7M260 92.7V131.3M264 76V148M268 87V137M272 90.9V133.1M276 100.9V123.1M280 106.8V117.2M284 110.3V113.7M288 110.7V113.3M292 109.3V114.7M296 106.2V117.8M300 102.9V121.1M304 96.4V127.6M308 95.9V128.1M312 71.3V152.7M316 81.8V142.2M320 81.9V142.1M324 64.8V159.2M328 72.6V151.4M332 96V128M336 90V134M340 104.5V119.5M344 106.1V117.9M348 106.1V117.9M352 106.6V117.4M356 103.8V120.2M360 102.6V121.4M364 99.4V124.6M368 92.2V131.8M372 92.2V131.8M376 72.9V151.1M380 77.2V146.8M384 70.5V153.5M388 82.6V141.4M392 86.2V137.8M396 81.9V142.1M400 92.9V131.1M404 92.8V131.2M408 98.5V125.5M412 100.5V123.5M416 98.2V125.8M420 90.9V133.1M424 94.6V129.4M428 92.3V131.7M432 107.2V116.8M436 109.3V114.7M440 112h.01M444 112h.01M448 112h.01M452 112h.01M456 112h.01"/><path class="faint" d="M24 200.5h432"/><path d="M28 218l8 5-8 5z" class="fill"/></svg>
</section>
<section class="index wrap" aria-label="Index">
<div class="list" id="lab">
<h2><i>04</i> Lab</h2>
<ol>
<li><a href="/lab/words-under-the-waveform/"><div class="t-name ticked">How do you set words under a waveform?</div><div class="t-desc">Words under their sound, with help from typesetting and music engraving</div></a></li>
<li><a href="/lab/waveform/"><div class="t-name ticked">Drawing a waveform</div><div class="t-desc">Every Nth sample, lowest and highest, RMS, brightness by level, true peaks, decibels, colour, stereo</div></a></li>
<li><a href="/lab/spectrogram/"><div class="t-name ticked">Seeing sound</div><div class="t-desc">Frames, windows, frequency axes, colour maps, reassignment, many resolutions, multitapers, Wigner–Ville</div></a></li>
<li><a href="/lab/scrub/"><div class="t-name ticked">Hearing a moment</div><div class="t-desc">Tape, loops, grains, noiscillators, random phase, phase vocoders: what a held caret plays, and what it costs</div></a></li>
<li><a href="/lab/layout/"><div class="t-name ticked">Where the panels go</div><div class="t-desc">Splits, docks, activity bars, inspectors, tabs, floating windows: seven layouts of one audio editor, and the one to keep</div></a></li>
<li><a href="/lab/audio-in-javascript/"><div class="t-name ticked">Audio in JavaScript</div><div class="t-desc">new Audio(), a Web Audio equalizer, files in and out, Node.js, and which library fits which job</div></a></li>
<li><a href="/lab/recording/"><div class="t-name ticked">Recording audio in the browser</div><div class="t-desc">getUserMedia, the formats MediaRecorder gives your browser, every sample to a WAV, latency</div></a></li>
<li><a href="/lab/auditory-illusions/"><div class="t-name ticked">Hearing what isn't there</div><div class="t-desc">Shepard tones, the Risset rhythm, Deutsch's scale illusion, binaural beats, the missing fundamental</div></a></li>
</ol>
</div>
</section>
</div>
<footer class="foot dark">
<div class="wrap">
<a class="site-brand" href="/" aria-label="audiojs home"><span class="logo" aria-hidden="true"><svg viewBox="-1 -.94 2 1.88" fill="currentColor"><use href="#mark"/></svg></span><span class="word">audio</span><span class="js">JS</span></a>
<p>Maintenance is funded by sponsorship: <a class="ticked" href="https://github.com/sponsors/audiojs">become a sponsor</a>, <a class="ticked" href="/funding.json">funding details</a><br><span class="credit">The blackbird: <a href="https://xeno-canto.org/1059970">Diana Tudor, xeno-canto</a>, <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>, an excerpt.</span></p>
<nav aria-label="Elsewhere"><a class="ticked" href="https://github.com/audiojs">GitHub</a><a class="ticked" href="https://www.npmjs.com/org/audio">npm</a><a class="ticked" href="https://x.com/audio_js">X</a><a class="ticked" href="/archive/2026/">Archive</a></nav>
</div>
</footer>
</body>
</html>