Spectrogram Sound Painter
Paint brightness across time and frequency, then hear the image as sound. Every grid row is a continuous sine oscillator between 80 and 4,000 Hz on a logarithmic scale. Each column controls its loudness over time; adjacent columns are interpolated. The browser sums the oscillators with a master-volume bound and a short edge fade, so a painted line becomes a tone and several lines become a layered sound. This is documented additive synthesis, not an inverse transform of an uploaded spectrogram or a restoration of an original recording.
Key features
- Draw or erase cells on a 64-column by 32-row time-frequency canvas with pointer input.
- Use keyboard-accessible column, row and intensity fields to edit an exact cell.
- Choose 0.5–8 seconds, 22.05/44.1 kHz output and bounded master volume.
- Preview synthesized audio and export 16-bit mono PCM WAV plus a labeled PNG painting.
- Save or load a versioned JSON painting with every cell value and synthesis setting.
How to use
- Load the 440-to-880 Hz example or paint with a pointer; use the exact-cell controls for keyboard input.
- Set duration, sample rate, brush intensity and master volume.
- Synthesize and listen to the result, then revise cells if needed.
- Download WAV, painting PNG or editable JSON; reload JSON to continue later.
Use cases
- Create a short rising or layered electronic tone by drawing frequency bands.
- Teach how a visible frequency line changes an audible pitch over time.
- Sketch a sound idea locally and keep the exact painting as JSON.
Frequently asked questions
Is this an inverse spectrogram transform?
No. Every painted row drives a continuous sine oscillator at a fixed logarithmic frequency. Adjacent time-column levels are linearly interpolated, and all row signals are added. There is no phase reconstruction, inverse STFT, imported audio or recovery of instrument timbre.
How do bright cells affect loudness?
Cell brightness from 0 to 100 sets each oscillator's amplitude. The sum is divided by at least the total active gain, then multiplied by the chosen master volume; a 5 ms fade is applied at the start and end. The output stays within the master volume, but this is not perceived-loudness normalization.
Which frequencies can I paint?
The 32 rows cover 80–4,000 Hz logarithmically. The closest row to a requested frequency may be different by several percent. There are no sub-80 Hz or above-4 kHz oscillators, noise sources, harmonics or stereo panning.
Does changing duration alter pitch?
No. A row's oscillator frequency stays fixed. Duration changes how quickly the 64 painted time columns are traversed. Output is mono 16-bit PCM WAV at 22,050 or 44,100 samples per second.
Can I edit without a mouse?
Yes. Enter a time-column number from 0 to 63, a frequency-row number from 0 to 31 and a brush intensity, then choose Paint selected cell or Erase selected cell. The selected cell's frequency and time are stated in text.
Does this send my painting or audio anywhere?
No. The painting, synthesis, playback and exports run in your browser. JSON contains the grid values and settings; WAV contains the generated audio. Clearing removes the in-memory result.
Privacy
Painting and synthesis are local to this browser tab. No file or synthesized audio is submitted to a server API. Only downloads you explicitly request are written to your device.
Comments & questions