Changelog
Changelog
oav-p5 0.8 · framework 0.1
Written in Markdown in docs/changelog.md; this page is generated from it. GitHub ↗
What changed, newest first: what you can do now, and where the handbook explains it. oav-p5, the one line for p5.js sketches (p5.js in one line), has its own version: 🎹 → 🩺 shows it on any sketch that loads it. The framework and the site are listed by day. Every entry links its commit; the whole history is the commit log.
oav-p5#
0.8.4#
2026-10-20 · e9ad495
- 🥁 opens the drums quiet. 🥁 in the 🎹 panel, and the drums it brings back after a reload, show the grid with its play box
unticked: nothing sounds until someone ticks it. A sketch that calls
startDrums()itself still plays at once. startDrums
0.8.3#
2026-10-20 · 8a9be83
- How many frames ago.
lastKickFrameCount,lastSnareFrameCount,lastHatFrameCount,lastBeatFrameCountandlastNoteFrameCountare theframeCountof the frame that saw the hit:frameCount - lastKickFrameCountis 0 in the frame wherekickIsDetectedis true, then 1, 2, 3 …, for a shape that lasts a fixed number of frames. lastKickFrameCount
0.8.2#
2026-10-20 · b0ebbd7
- A hit as a value, like
mouseIsPressed.kickIsDetected,snareIsDetectedandhatIsDetectedare true in the one frame after a kick, a snare or a hat (the drum machine's, or the microphone's when no drums play).lag()takestrueas 1, solag(kickIsDetected, 0, 0.3)is a number that flashes to 1 and fades: an alpha, a size. kickIsDetected - When the last one came.
lastKickTs,lastSnareTs,lastHatTs,lastBeatTsandlastNoteTsare on themillis()clock, somillis() - lastKickTsis how many ms ago;-Infinityuntil the first. lastKickTs
0.8.1#
2026-10-20 · 096914f
- The 🎹 panel goes where you want it. Two buttons on the panel: Dock cycles bottom → top → floating (drag a
floating panel by its bar), Size cycles small → medium → large. This browser remembers both. With no
dockoption the panel now opens at the bottom, OpenProcessing included: at the top it covered the sketch. The 🎹 moves out of the panel's way only when they share an edge. dock - A reload brings back what you had on. Cmd+Enter on OpenProcessing (or any reload of the same page) opens the panel again if it was open, and restarts drums you started from its 🥁 on the line and tempo you ended on. A sketch that starts its own drums keeps its own; close the panel or stop the drums and they stay off.
- With the drums playing, a kick is one kick. The microphone's kick, snare, hat and beat no longer reach the sketch
while the drum machine plays: it mostly heard the drums out of the speakers, so
snareDetectedfired on kicks.micLeveland the three bands still follow the microphone. kickDetected - OpenProcessing's console stays shut. It opens over the sketch for every console line, so there oav-p5 no longer
prints what it says on its own (the wiring, a hint that is on a card, "sound on"). An error in your code, a call made
wrong and 🩺 still print;
debugbrings the rest back.
0.8.0#
2026-10-16 · 9bdde95
- Note names wherever a note number goes.
noteIsDown('C4')isnoteIsDown(60),midi.play('C#4', 0.8)sends note 61, and the newmidi.isDown('Eb3')asks a key by name.C4,c#4,Db3,F♯2,C-1(0) up toG9(127); C4 is 60 (some software, Ableton and Yamaha among them, calls 60 "C3"). Strudel's lower-case spelling (c4 e4 g4) works. A name that is not one stops with a card saying how to write it. Numbers behave exactly as before, andnotePressed(note, velocity)still gets a number. Note names - Three converters:
noteNumber('C4')gives60,noteName(61)gives'C#4'({ flats: true }for'Db4',{ octave: false }for'C#'),noteFreq('A4')gives440Hz for a sketch that makes its own sound. - Ready-made sketch:
p5/examples/note-names/(example 24).
0.7.0#
2026-10-15 · 89c05ac
- The grid and the line of rhythm are one thing. Click a cell and the line is rewritten the way a person would write
it (
bd*4,bd(3,8),[~ sd]*2); type in the line and the grid follows once you pause. A typo is marked red and the drums keep playing the last line that worked. ↶ or ⌘Z steps back, Copy gives youstartDrums("…", 120), and Open in Strudel takes the same rhythm to strudel.cc. One line of rhythm drawRhythm(x, y, w, h, 'circle'): the rhythm drawn on the canvas in three styles (grid,circle,spiral), turning withdrumPhase, so a recording has it. The rhythm on the canvas- Values over time, like TouchDesigner's CHOPs:
lag(micLevel, 0.03, 0.4)(Lag CHOP, in TouchDesigner's seconds: about the time to follow 90%),env('kick', 0.01, 0.3)(Trigger),speed(),spring(),trail(),slope(),count(), one call each indraw(), nothing to declare;scope(value, 'label')plots a value in a corner (never recorded) anddrawTrail()plots it on the canvas. New package@openav/chop. - With Strudel: load the line in strudel.cc and the knobs, a phone and the microphone become Strudel's parameters;
notes Strudel sends with
.midi('OAV Virtual MIDI')reachnotePressedat their timestamps (4.5 ms at most, measured), its clock leads the drum machine anddrumPhase, andlink=<room>carries notes and clock to another tab or computer. New page: With Strudel. - Ready-made sketches:
p5/examples/rhythm-visual/,p5/examples/lag/,p5/examples/with-strudel/.
0.6.0#
2026-10-15 · 5e75007
- The drums keep time when the picture is heavy. The drum machine is scheduled ahead on the audio clock: with a
draw()that keeps the page busy 30 ms a frame, the kick-to-kick interval varies by 0.000 ms (0.5.0: 15 ms). In a background tab the drums keep playing and the bars keep counting.?oav_drums=framebrings back the 0.5 drum machine. Drum machine - One line of rhythm:
startDrums("bd*4, [~ sd]*2, hh*8"). The notation comes from TidalCycles and Strudel; OAV implements it independently, from the public documentation (@openav/pattern). A typo gets a card that says which word and why. One line of rhythm - The drum card names its tracks in the browser's language, shows the bar number, and lights the word of the line that is playing.
drumPhaseandbeatPhase: how far into the bar and into the beat, 0 to 1, continuous.rotate(drumPhase * TWO_PI)turns once a bar.- Ready-made sketch:
p5/examples/rhythm/.
0.5.0#
2026-10-15 · 02aa19c
- Record a video with its sound:
startRecording(),stopRecording(),recordingSaved(info). ⏺ and 📷 in the 🎹 panel need no code. Recording - The canvas and every sound the line makes (
startSound(), the drums, an open microphone, p5.sound 1.x) go into one file: MP4 where the browser can record it, WebM elsewhere. On a phone, the card's Share button saves it to the photo library. - Every take is checked: no sound, WebM, an all-black video, a nearly empty file. The card says what happened and why.
- 📷 saves the canvas as a PNG.
- Ready-made sketch:
p5/examples/record/.
0.4.0#
2026-10-15 · e629115
- Sound:
startSound('piano'). Every note from a keyboard, the 🎹 on screen or a phone is heard; 🔊 in the panel switches instruments. Sound - A drum machine:
startDrums(), a 16-step grid with four tracks and five patterns. Each hit calls the microphone's ownkickDetected(),snareDetected()andhatDetected(), so a microphone sketch follows the drums unchanged. Drum machine - A timeline of bars:
cue(5, 'bloom')→cueFired(),barStarted(),stepStarted(). Timeline - What went wrong, said on the page: a card beside the 🎹, in the browser's language: what happened, why, what to press. When something goes wrong
- 🩺 Check-up: 🩺 in the panel (or
OAVp5.check()) puts the version, the microphone, MIDI, sound, drums and the wiring on one card to screenshot. micLevelfollows how loud it sounds, with the room's own noise as 0;micSensitivity()sets how sensitive. A knob the sketch reads itself is no longer also wired to an OPC slider: one knob, one job.- Ready-made sketches:
p5/examples/keys/,p5/examples/drums/.
0.3.0#
2026-10-15 · d874044
- The microphone, in the same line:
micLevel,bass/mid/treble,beatDetected(). No p5.sound, p5 1.x and 2.x. Nothing asks for the microphone until the sketch reads one of these names. The microphone - In Hydra too: load the same file with
loadScript(), thenosc(10, 0.1, () => knob1 * 2).out(). In Hydra - Ready-made sketch:
p5/examples/mic/.
0.2.4#
2026-10-14 · d2572c3 · tag p5-v0.2.4
The first tagged version; it gathers 0.1 to 0.2.4 (from 2026-10-13).
- Read a controller the way p5 reads the mouse:
knob1…knob8,fader1…,pad1…,notePressed(). A MIDI controller, the controller on screen (🎹) and a phone all come in as the same MIDI. Read it like the mouse - OpenProcessing: OP Configurator variables follow the knobs, in the order they are declared. With OP Configurator
- The handbook chapter, in English and Chinese. Tested on openprocessing.org with p5 2.3.4.
- Ready-made sketches:
p5/examples/particles/,p5/examples/opc/.
Framework and site#
2026-10-15#
- MIDI controller library: every controller has its own page with its full MIDI map, in English and Chinese. New: Novation Launchkey 25 and 37 MK4, Launchpad Pro MK3, DJ TechTools Midi Fighter Twister, AKAI APC40 mkII, and the teenage engineering OP-1 field (contributed by Miffy Chen, pull request #2). How to choose a controller, LED feedback, a request form. Controllers
- Examples: fifteen examples in five routes, each with a guide card. New: 14 timeline and 15 p5.js in one line; 02 chord garden now grows The Last Input's L-system branches. Examples
- New pages: /p5/ and /check/, what this device supports. The handbook says what each browser can do, and the homepage says so when a device has no Web MIDI.
- Mapping and timeline: mappings export, import and load from
?map=. The timeline package has curves, loops, cues that fire and recording. - Phones: the live examples take a phone remote over the public relay, with a QR code; in portrait the stage stays on top.
- New packages:
@openav/pattern(one line of rhythm),@openav/fab(can it be 3D-printed: a check, and STL, OBJ, GLB, STEP files),@openav/out(page parameters to WLED lights, serial motor boards and OSC, with a watchdog). Packages - For agents and search engines: llms.txt in English and Chinese, one sitemap, and MCP tools for controller
profiles:
list_controllers,read_profile,validate_profile,scaffold_profile. - A new README, and
tools/release.sh: every change ships in one fixed order. - The site catches up with oav-p5: this page (the changelog), "oav-p5 version · framework version" on the home page and the handbook headers, a fourth door on the home page ("I use p5.js / OpenProcessing"), the ready-made sketches listed on /p5/, and example paths in the handbook that you can click. The entry script (
/p5/oav-p5.js) reaches every sketch about a minute after a release. - The site catches up with oav-p5, part two: the ready-made p5 sketches are examples now, each with a guide card and a thumbnail: 16 keys with sound, 17 microphone, 18 drums and bars, 19 one line of rhythm, 20 rhythm you can see, 21 record a video, 22 lag, 23 with Strudel (Examples). Three more questions on the home page (sound, drums and video; smoothing like a Lag CHOP; Strudel), a link from /p5/ to With Strudel, and the quick start, troubleshooting, roadmap and README now say what oav-p5 does.