About me
Simon HENRY
2D animation supervisor at CARIBARA Angouleme
worked on two Blender projects :
creator of sound2mesh :
Admo - Aftershock
Amusement - SSKGCCULT
Calm Down - Chris Jones
finding ways to visualize sound
The Idea
(youtube examples)
The Idea
MIDI visualization
“Fast Fourier Transform” tests
(inspired by 3blue1brown)
finding ways to visualize sound
(personal work)
Summary
Spectrogram ?
.mp3 to .png
“A spectrogram is a visual representation
of the [...] frequencies of a signal”
- Wikipedia
Spectrogram ?
Spectrogram ?
waveform
spectrogram
Spectrogram ?
Time
waveform
Amplitude
Time
spectrogram
Frequency
Amplitude
Prototype
moving vertices
Prototype (spectrogram)
base grid
displacement
texture
Prototype (spectrogram)
UV scroll
Waveform
immediate response
Prototype (waveform)
spectrogram
spectrogram + waveform
Shader
color narrative
Prototype (shaders)
base texture
Prototype (shaders)
base texture
height gradient
Prototype (shaders)
base texture
height gradient
custom
Prototype (shaders)
Prototype (shaders)
slopes
valleys
ridges
Prototype (shaders)
Having Fun
♫♪
Having Fun
♪♫ Fruko y Orquesta - Mambo No. 5 (1993)
Having Fun
♪♫ Digging My Potato - The Seatbelts (1998)
Having Fun
♪♫ Cats On Mars - Yōko Kanno (1998)
Having Fun
♪♫ Daft Punk - Touch (2013)
Digging My Potato - The Seatbelts (1998)
close-up view
Having Fun
Having Fun (shape)
arc
Having Fun (shape)
tube (exterior)
Having Fun (shape)
tube (interior)
Having Fun (shape)
camera view
Retrowave
♪♫ Plastic Love - Mariya Takeuchi
Disco
♪♫ Holding Out for a Hero - Jennifer Saunders
Mountains
♪♫ Riding (Day) - The Legend of Zelda: Breath of the Wild
Neon
♪♫ Touch - Daft Punk
Nebula
♪♫ Alfonsina y èl Mar - Rita Payès
sound2mesh
part 1 : FFmpeg to the rescue
Generate spectrogram (Audioalter)
https://audioalter.com/spectrogram
Generate spectrogram (FFmpeg)
https://ffmpeg.org/
Generate spectrogram (FFmpeg)
https://xkcd.com/2347/
Generate spectrogram (FFmpeg)
[…]
showcqt()
showcwt()
showfreqs()
showspectrum()
showvolume()
showwaves
showwavespic
[…]
showspectrumpic()
FFmpeg - showspectrumpic
showspectrumpic(color, limit, frange)
spectrogram color
volume limit
frequency range
FFmpeg - showspectrumpic
showspectrumpic(color, limit, frange)
spectrogram color
FFmpeg - showspectrumpic
channel
cividis
cool
fiery
fire
fruit
green
intensity
magma
moreland
nebulae
plasma
rainbow
terrain
viridis
FFmpeg color gradients
FFmpeg - showspectrumpic
image
luminance
displacement
Blender uses the -luminance -
to calculate displacement
(no matter the hue)
FFmpeg - showspectrumpic
spectrogram
luminance
displacement
Blender uses the -luminance -
to calculate displacement
(no matter the hue)
FFmpeg - showspectrumpic
channel
cividis
cool
fiery
fire
fruit
green
intensity
magma
moreland
nebulae
plasma
rainbow
terrain
viridis
FFmpeg color gradients
FFmpeg - showspectrumpic
showspectrumpic(color, limit, frange)
volume limit
-48 dB
-24 dB
0 dB
audio
spectrogram
FFmpeg - showspectrumpic
faint sound
=
low brightness
loud sound
=
high brightness
FFmpeg - showspectrumpic
without compensation
showspectrumpic()
with
compensation
ffvolumedetect()
showspectrumpic()
use ffvolumedetect() to get the �max volume of the sound
feed the value into showspectrumpic()-
to always get max brightness
FFmpeg - showspectrumpic
-48 dB
-24 dB
0 dB
audio
spectrogram
(with compensation)
same brightness all around !
FFmpeg - showspectrumpic
showspectrumpic(color, limit, frange)
frequency range
FFmpeg - showspectrumpic
lin
log
(linear)
(logarithmic)
FFmpeg - showspectrumpic
lin
log
(linear)
(logarithmic)
FFmpeg - showspectrumpic
github.com/FFmpeg/FFmpeg/blob/master/libavfilter/avf_showspectrum.c
FFmpeg - showspectrumpic
github.com/FFmpeg/FFmpeg/blob/master/libavfilter/avf_showspectrum.c
FFmpeg - showspectrumpic
FFmpeg - showspectrumpic
Uses the formula to -distort UVs-
Can interpolate between lin and log -from a single image-
FFmpeg - showspectrumpic
linear
logarithmic
Allows for both -precise-
and -artistic- control !
Precision Control
0.000000000000001
Geonodes - dynamic graduations
spectrogram
graduations
Geonodes - dynamic graduations
Multiply index
Visualize Numeric Attributes in Geometry Nodes by Ilir Beqiri : youtu.be/_W47HfoeFsg
Geonodes - dynamic graduations
Delete at endpoints
Geonodes - dynamic graduations
Merge by distance
Geonodes - dynamic graduations
Accurate and dynamic feedback for the user !
Artistic Control
♫♪
Geonodes - artistic control
Smooth
Geonodes - artistic control
Contrast
if x < 0.5:
return (x^(k+1))*0.5
if x > 0.5:
return (1-(1-x^(k+1)))*0.5
Geonodes - artistic control
EQ Curve
Geonodes - artistic control
fast and dynamic
slow and gentle
UI
buttons & labels
developing in VScode
User Interface
VScode
Blender
GitHub
User Interface
User Interface
Main Panel
- manage spectrograms in scene
- manage waveforms
- manage volume
User Interface
Settings Panel
- manage selected spectrogram
- manage values + material
User Interface (spectrogram)
- create new spectrogram
- update current spectrogram
Main Panel
User Interface (spectrogram)
- manage multiple spectrograms in scene
- manage waveforms
Main Panel
User Interface (spectrogram)
- spectrogram control (distort UVs)
Settings
User Interface (spectrogram)
- control the shape / resolution of the spectrogram
Geometry
User Interface (spectrogram)
- tools meant for artistic control
Modifiers
User Interface (spectrogram)
- simple toggle displays
Overlays
User Interface (spectrogram)
- gradient presets
Material
User Interface (waveform)
- UI changes based on selection
User Interface (waveform)
- 4 different line types
Line Type
User Interface (waveform)
- adjust waveform thickness, resolution and shape
Settings
User Interface (waveform)
- default emission material
Material
Demo
Flowerboy (by Flowerhead)
Tips
if (fail) : learn
refrain from overusing
buttons and icons
Tips
- often a false solution to a real ergonomic problem
- don’t know where to click ?
multiple buttons, icons everywhere…
Tips
one single button !
icons when needed !
simplify the UI instead !
- clearer and more accessible
- Blender’s UI already offers good ergonomic solutions !
Tips
share your work
- allows for feedback
- helps you focus on the user
Tips
share your work
- allows for feedback
- helps you focus on the user
Tips
2023
2025
commit !
Tips
first commit
bcon 2025
call for content
2023
2025
commit !
Thanks !
Links
github.com/holybobine/blender-sound2mesh
sound2mesh-
- available on github
- free and open source
Links
youtube.com/@sound2mesh
sound2mesh-
- available on youtube :
ma famille, le bon Idaupe, Guillaume, Laly, Célian & Sylvie & les flûtes, Florian & Claire (Jörmna aussi <3), Katoche & Eloïse Pluzune, Romain, l’autre Romain, Maëvé, Vincent, Pilip, Anthony, tous les gens de Caribara Angouleme qui ont patiemment écouté mon frangliche, Mathilde L, Alexis P, Arnaud M, Joël, Emma-Claire Fierce, Mike Hodgetts, et le Plan B qui m’a chouchouté pendant la genèse de ce projet
Thanks !
geonodes & shaders : Simon Thommes, Blender Guru, cgMatter, PolyFjord, Erindale, Ilir Beqiri
python : Dr. Sybren A. Stüvel, blender.stackexchange.com, blenderartists.org
All the wonderful people who supported this project :
My main sources of knowledge :
audioalter.com, FFmpeg, gifcap.dev, ezgif.com
Resources : (without which this conference wouldn’t exist)
github.com/holybobine/blender-sound2mesh
youtube.com/@sound2mesh