Weekly notes 4 — ISOBMFF, ArrayBuffer and darbouka


Another week of lockdown, stayed inside, modified some text files in very precise way, did some video calls.


Continuing my work to trim AAC-in-MP4 files. It’s of course a lot more complicated than anticipated, but I’m seeing the end of it. I wrote a lot more test-cases, and still don’t understand how Safari manages to find the correct duration of an AAC file produced using the standard tool afconvert, but I haven’t spent too much time on it yet. Files produced using ffmpeg (which means most files), will soon be sample-accurate in Firefox. This matters a great deal when decoding and looping files.

The main issue I had this week was that the machine I use for Windows development is starting to be unusable for work. I don’t know exactly what it is (maybe the disk? memtest86+ says everything is fine, same for the DELL online diagnosing utility) but it BSODs quite frequently, and does internal compiler errors on both rustc and clang, so I need to run mach build four or five times to get a Firefox build. Thankfully Mozilla’s IT is sending me a replacement laptop, and I might buy another M.2 NVME drive to reinstall a Windows and see what’s up with the current one. It’s still a ridiculously fast machine, but I think we’re hitting the hardware a bit too hard when working, and it doesn’t last very long.


Again, that was the majority of my week. Read some issue comments, wrote some issue comments. It seems like we’re making progress on the two topics I really care about: time representation (converging on timestamps in microsecond int64_t), and memory access patterns, allowing direct decode of audio data into a regular ArrayBuffer or SharedArrayBuffer, in addition to AudioBuffer, that is useful for ergonomic reasons, for folks that use native Web Audio API nodes.

The Web Codecs editors, of which I am part of, have presented Web Codecs during the W3C Games Community Group’s call. I hope to have the video and slides available, because I think Web Codecs is going to solve lots of problems games developers face. I tried to explain it by contrast with what the Web offers today, drawing from my long experience working on audio standards on the Web, and answering game developers (real) issues with (in particular) the Web Audio API.


Not much again. I overhauled my personal website,, to go from a set of hand-written HTML pages to a static site generated using Hugo. The goal was to easily add content of various nature. I’m constantly doing lots of things, but never sharing it outside my close friends circle, and sometimes I find it a bit sad to have worked for quite some times on random things, but never sharing it.

Anyways, I did a new mix, with an emphasis on percussions. It contains only tracks I’ve bought or downloaded recently, with no genre or tempo range constraints. It’s improvised, I literally imported all the music I had wish-listed on BandCamp and bought during their last Friday, and added a couple records I had only on vinyl and downloaded using the little mp3 download card often present in the record sleeve. Traktor analyzed it, I used the double sort by tempo and key, and pressed play on the first track.

It’s called Les percussions du Samedi, clocking in at about 2h, and is available, with the other mixes, at the new

Unrelated, I kind of want to code-golf and optimize the animation on the front page. Maybe it’s because I haven’t done any demoscene related coding lately?