From 371017a31bedaed179d339b9fe371529f22d9ec4 Mon Sep 17 00:00:00 2001 From: skal Date: Wed, 28 Jan 2026 11:45:09 +0100 Subject: feat(editor): Scaffold web spectrogram editor Initial setup for the spectrogram editor tool. - Created tools/editor/index.html, script.js, and style.css. - Added basic structure for WAV loading, visualization, and tool controls. --- SPEC_EDITOR.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ tools/editor/index.html | 28 ++++++++++++++++++++++++++++ tools/editor/script.js | 11 +++++++++++ tools/editor/style.css | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 SPEC_EDITOR.md create mode 100644 tools/editor/index.html create mode 100644 tools/editor/script.js create mode 100644 tools/editor/style.css diff --git a/SPEC_EDITOR.md b/SPEC_EDITOR.md new file mode 100644 index 0000000..cde0cdd --- /dev/null +++ b/SPEC_EDITOR.md @@ -0,0 +1,44 @@ +# spectrogram editing tool in a browser + +The sub-project is about have an editing tool in a browser +that will allow generating, editing, compacting .spec files + +## the idea + +We want a web page (html+javascript) capable of: + * loading a .wav file and showing the spectrogram (IDCT_SIZE=512) + * compacting this spectrogram if needed + * generating the .spec file + * allowing some editing on the spectrogram + * and most importantly: allowing the compression of this spectrogram using elementary bricks like bezier-curves (with a large stroke width / + brushes), rectangle, noise addition, etc. + +These tools must be available in the web editor (in javascript) as well as +in c++ equivalent too. + +The idea is the compress the .wav spectrogram using elementary bricks and +simple representation (as well as being dynamic) during the demo: we +generate the audio on the fly by 'drawing' the spectrograms and passing them +to the synth + +## the work + +Analyze the requirement for the HTML tool. It must remain simple and easy to +use. Don't over-engineer it. +Still, the tool must have a decent load/save offer, to: + * load the .wav + * save the .spec + * save/export the descriptive compressed version in vectorial form (like the SVG format, in fact) + * be able to load this vectorial form + +Then we need a reader for the vectorial form in c++ to use in the demo. +We also need to elementary tools / bricks to: draw a line / bezier curve / +rectangle, ellipse, etc. in frequency domain, to generate the spectrogram on +the flight. +We also need controllable random noise generation to add some 'texture' to +the spectrogram. + +## the files +the HTML/JS tool should be under tools/editor +the c++ code should be added to the library under src/audio/ + diff --git a/tools/editor/index.html b/tools/editor/index.html new file mode 100644 index 0000000..43a37f9 --- /dev/null +++ b/tools/editor/index.html @@ -0,0 +1,28 @@ + + + + + + Spectrogram Editor + + + +

Spectrogram Editor

+ + + + +
+ +
+

Tools

+ + + + +
+
+ + + + diff --git a/tools/editor/script.js b/tools/editor/script.js new file mode 100644 index 0000000..9311d6d --- /dev/null +++ b/tools/editor/script.js @@ -0,0 +1,11 @@ +// This is the core JavaScript for the Spectrogram Editor. +// It handles file loading, visualization, tool interaction, and saving. + +// Placeholder for core functionality +console.log("Spectrogram Editor script loaded."); + +// TODO: Implement WAV loading and spectrogram calculation +// TODO: Implement canvas drawing and event handling for tools +// TODO: Implement shape generation (strokes, ellipses, noise) +// TODO: Implement JSON save/load functionality +// TODO: Implement .spec export functionality diff --git a/tools/editor/style.css b/tools/editor/style.css new file mode 100644 index 0000000..f610969 --- /dev/null +++ b/tools/editor/style.css @@ -0,0 +1,35 @@ +body { + font-family: sans-serif; + margin: 20px; + background-color: #f4f4f4; +} + +h1, h2 { + color: #333; +} + +#editorContainer { + display: flex; + margin-top: 20px; +} + +#spectrogramCanvas { + border: 1px solid #ccc; + background-color: #fff; + margin-right: 20px; +} + +#controls { + border: 1px solid #ccc; + padding: 15px; + background-color: #eee; + min-width: 200px; +} + +#controls button { + display: block; + width: 100%; + margin-bottom: 10px; + padding: 10px; + cursor: pointer; +} -- cgit v1.2.3