I got it recording and downloading lossless audio! πŸŽ‰ so it’s:

- creating an AudioContext at 48kHz
- adding a worklet that chunks up 32 bit stereo audio samples to post them to the main thread
- receiving those chunks and writing them into standard sized IndexedDB samples
- (async) iterating through all those samples and creating a WAV blob for the browser to download

I’m very much regretting my goal of β€œno libraries”, but I’ve learned quite a lot in doing so! The next step is to work out how to play the audio in-browser with variable playback speeds (for fast forward/rewind)

#JavaScript #WebAudio

just released Glean - an open source sample browser that lets you find sounds by ear. it maps your whole library by how things actually sound, no uploading, runs right in your browser and it has a built in 16-step #sequencer with filters and eq. its live here https://yonie.github.io/glean/ #opensource #webaudio #musicproduction

Shipped V1.3 of Tessering β€” free browser-based spatial audio workstation. Biggest release since V1.0.

Segment editing: razor split (R key), move, resize, delete, duplicate. Per-stem timeline composition with full undo/redo. Shift+click splits all stems at playhead.

Technical: 6 new CommandStack commands with snapshot-based undo. stem_segments Supabase table. Segment-aware OfflineRenderer.

tessering.com

#SpatialAudio #WebAudio #WebDev #BuildInPublic #IndieHacker #CreativeTools

A oddity of #WebAudio that got my ass for a few hours: When passing in sines and cosines for doing Fourier synthesis with PeriodicWave, the first cosine is a DC offset, /not/ the fundamental. Likewise, the second sine is the fundamental, but the first is completely ignored.

I only needed sines, so I had zero hints as to what was going on aside from a big wiggle in my expected output.

ΠšΡ€Π΅Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: визуализация Π·Π²ΡƒΠΊΠ°

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Π˜Π³ΠΎΡ€ΡŒ Аникин, Frontend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ RUTUBE TECH. ΠœΠ΅Π΄ΠΈΠ°Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅. УвлСкаюсь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ 15 Π»Π΅Ρ‚. Π­Ρ‚ΠΎ нСбольшой мастСр-класс, ΠΊΠ°ΠΊ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊ двумя способами. ВСкст ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ интСрСсна Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°.

https://habr.com/ru/companies/habr_rutube/articles/1028574/

#визуализация #Π·Π²ΡƒΠΊ #webaudio #javascript #touchdesigner

ΠšΡ€Π΅Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: визуализация Π·Π²ΡƒΠΊΠ°

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Π˜Π³ΠΎΡ€ΡŒ Аникин, Frontend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ RUTUBE TECH. ΠœΠ΅Π΄ΠΈΠ°Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅. УвлСкаюсь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ 15 Π»Π΅Ρ‚. Π’Π΅Π΄Ρƒ Telegram-Π±Π»ΠΎΠ³ ΠΏΡ€ΠΎ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Π΄ΠΈΠ° . Π­Ρ‚ΠΎ...

Π₯Π°Π±Ρ€
If you have a Leap Motion, I have used it to enhance my web-based soft synth: https://marquisdegeek.com/slytherin #ProgressiveEnhancement #leapmotion
#javascript #coding #webaudio
Slytherin - SSS - Steevs Soft Synth

5 years ago I released the first video of the @mercury Playground for the browser, for live coding in the web! πŸ™‚

Here's a new short video to celebrate some of the changes and updates that have been made since then:

https://www.youtube.com/watch?v=97hKDQJfgJo

All the code can be downloaded through links in the description of the video.

#mercurylivecoding #webaudio #browserbased #livecoding #web

Extended weekend hack. I was looking for a #nowplaying function that I can use anywhere and do anything with the data. Also, that will work continuously. Because I want to use it to promote artists to the audience during DJ sets. I had a solution that uses Serato Live Playlists, but it is not universal. Now I have this: https://hckr.tv/shazam/. It uses the #WebAudio Worklet, #RxJS, and #ShazamIO WASM to recognize tracks in the music stream directly in your browser.
Now Playing

New FM synth added to the Mercury Playground @mercury, coded with a single AudioWorkletProcessor inside a ToneAudioNode from ToneJS

https://mercury-playground.cc/#Ly8gPT09IFRVVE9SSUFMIDI0MzogRk0gSW5zdHJ1bWVudHMgPT09Ci8vIEZNIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIG1hbnkgZGlmZmVyZW50IGluc3RydW1lbnQgc291bmRzLiBBIHZlcnkgZmFtb3VzIAovLyBGTSBzeW50aGVzaXplciB3YXMgdGhlIFlhbWFoYSBEWDcsIHdoaWNoIGNvbnRhaW5lZCBhIGJ1bmNoIG9mICJhbGdvcml0aG1zIiAKLy8gKGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBvZiBjYXJyaWVyL21vZHVsYXRvcikgYW5kIGRpZmZlcmVudCByYXRpb3MsIAovLyBpbmRleGVzIGFuZCBmbS1zaGFwZXMuIEJlbG93IGFyZSBzdWdnZXN0aW9ucyBmb3IgYSBiYXNzLCB4eWxvcGhvbmUgYW5kIHBsdWNrIAovLyBzb3VuZCBjb21iaW5lZCBpbnRvIGEgc2hvcnQgY29tcG9zaXRpb24uCgpzZXQgdGVtcG8gOTAKc2V0IHNjYWxlIG1pbm9yIGViCgpuZXcgc3ludGggZm0gbm90ZSgwIC0xKSBuYW1lKGJhc3MpIHNoYXBlKDEgMS80KQogICAgc2V0IGJhc3MgdGltZSgxLzQpIHBsYXkoMC43KSAKICAgIHNldCBiYXNzIGluZGV4KDUpIHJhdGlvKDIpIGZtU2hhcGUoNSA0MDApCiAgICAKbmV3IHN5bnRoIGZtIG5vdGUoc3ByZWFkKDcpIFsxIDJdKSBuYW1lKHh5bG8pIHNoYXBlKDEgMS8yKQogICAgc2V0IHh5bG8gdGltZSgxLzgpIHBsYXkoMC41KSByYXRpbyg3OC4zKSBmbVNoYXBlKDEgNDAwKSAKICAgIHNldCB4eWxvIGZ4KHJldmVyYiAwLjUgMTcpCiAgICAKbmV3IHN5bnRoIGZtIG5hbWUocGx1Y2spIG5vdGUoZHJ1bmsoOCAzKSAzKQogICAgc2V0IHBsdWNrIHRpbWUoMS80IDEvOCkgZngoZGVsYXkpCiAgICBzZXQgcGx1Y2sgcmF0aW8oMykgaW5kZXgoNCkgZm1TaGFwZSgwIDMwKSBzaGFwZSgxIDEvOCkKICAgIApzZXQgYWxsIHNjb3BlKCk%3D

It's a basic FM with a single modulator-(envelope)->carrier setup, and can be extended with extra voices and detuning to run 2-3 or more operators.

Syntax: `new synth fm index() ratio() fmShape()`

Some tutorials available on the website

#mercurylivecoding #fmsynthesis #webaudio #audioworkletprocessor #javascript #mercury #browserbased

Shipped V1.2.8 "Vertex" of Tessering β€” a free browser-based spatial audio workstation I'm building solo.
The headline: multi-select keyframes. Lasso, Cmd+click, Cmd+A, copy/paste, duplicate, group drag, arrow nudge, right-click context menu.
tessering.com
#SpatialAudio #WebAudio #IndieGameDev #BuildInPublic #WebDev #8DAudio