| Age | Commit message (Collapse) | Author |
|
Updates all relevant Markdown files to reflect the completed asset system and build pipeline.
- Updates PROJECT_CONTEXT.md with latest architectural decisions.
- Updates GEMINI.md with the full list of relevant files.
- Adds initial scaffolding for the web editor.
- Cleans up any lingering issues with asset generation paths.
|
|
Ensures that test assets are also generated when the production pipeline is run.
|
|
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.
|
|
Implements logic to remove unused trailing zero frames from spectrogram data before saving, reducing file size and improving loading efficiency.
|
|
|
|
Moves the Hamming window initialization from synth_render to synth_init() to ensure it's generated only once, improving performance.
|
|
Enforces a newline at the end of all source files to prevent linting errors and ensure consistent file formatting.
|
|
Updates documentation and context to reflect the completed Asset Management System, production build pipeline, and visual improvements.
- Updated PROJECT_CONTEXT.md with detailed architectural and build system decisions.
- Added milestone summary to SESSION_NOTES.md.
- Expanded GEMINI.md context file list.
|
|
|
|
This commit ensures the 'final' assembly target is robust and works across all build configurations.
- Updated CMakeLists.txt to always include the asset_packer tool and use generator expressions for its path.
- Refactored main.cc to use the new drum assets and removed debug prints.
- The 'make final' command now correctly re-generates all assets and performs binary crunching.
|
|
Switched to using in to ensure CMake correctly resolves the tool path regardless of the build environment.
|
|
Implements a more dynamic and reactive visual system.
- Updated synth.cc: Faster peak decay for better response.
- Updated gpu.cc: Added time-based rotation and Hue shifting; implemented reactive clear-color flashes.
- Updated main.cc: Corrected peak scaling (8x multiplier) and integrated time-based animation.
|
|
Improves the audio-visual synchronization by increasing peak amplification and adding dynamic background flashes.
- src/gpu/gpu.cc: Updated fragment shader with more vibrant hue calculation and implemented reactive clear color for flashes.
- src/main.cc: Increased peak multiplier to 150x and added non-linear boost for strong peaks.
|
|
Removed dummy and test assets from the main demo list, leaving only the required drum samples.
|
|
Ignore generated C++ asset sources and spectral data files.
|
|
This file has been replaced by 'demo_assets.txt' and 'test_assets_list.txt'.
|
|
Updates to prepend a warning comment to the generated and files, indicating they are auto-generated and should not be manually edited.
|
|
Adds instructions to HOWTO.md for re-generating assets from source audio using the provided script.
|
|
Synchronizes scripts/gen_assets.sh with the current project structure: uses 'demo_assets.txt' and outputs to the 'src/' directory.
|
|
Renamed demo assets to 'demo_assets.txt' and created 'test_assets_list.txt' for AssetManagerTest to prevent interference.
- Updated CMakeLists.txt to generate separate headers for demo and test.
- Updated test_assets.cc to conditionally include the test-specific header.
- Incorporated gen_assets.sh into the 'final' target.
|
|
Incorporates kick1.spec, snare1.spec, and hihat1.spec into the demo sequence.
- Updated assets.txt with new drum identifiers.
- Implemented register_spec_asset helper in main.cc to load spectral data.
- Added 8th-note sequencer triggering a simple drum and bass pattern.
|
|
Introduces a 'final' target that automates the entire production pipeline: building the stripped binary, generating assets, and performing final compression (crunching).
- Updated CMakeLists.txt to define the 'final' target.
- Updated HOWTO.md with instructions for running 'cmake --build build --target final'.
|
|
This refactors the asset management system to be more efficient and cleaner.
- Moved common GetAsset/DropAsset logic to src/util/asset_manager.cc.
- Changed retrieval to use an array of records (AssetRecord) for O(1) lookups instead of a switch statement.
- Updated asset_packer to generate only raw data and the record array.
|
|
|
|
Summarizes recent implementations including Asset Management, audio/visual fixes, and style improvements.
|
|
This commit applies a new project-wide rule that every source file must begin with a concise 3-line comment header describing its purpose.
- Updated CONTRIBUTING.md with the new rule.
- Applied headers to all .cc and .h files in src/ and tools/.
- Fixed various minor compilation errors and missing includes discovered during the header update process.
|
|
This commit makes the asset packer fully functional and adds an end-to-end test suite.
- Updated asset_packer.cc to read file contents and embed them as hex arrays.
- Added actual asset files (null.bin, test_asset.txt) for testing.
- Implemented src/tests/test_assets.cc to verify data integrity at runtime.
- Refactored CMakeLists.txt to handle generated file dependencies correctly.
|
|
Introduces a new asset management system to embed binary assets directly into the demo executable.
- Creates the directory for asset definition and an descriptor file.
- Implements to generate (with enum and declaration) and (with placeholder data).
- Integrates into CMake build, making depend on the generated asset files.
- Adds minimal integration in and documentation in .
This addresses Task 9 (compact in-line and off-line asset system).
|
|
|
|
|
|
|
|
Updates the clang-format command in CONTRIBUTING.md to explicitly exclude the 'third_party/' directory.
This prevents clang-format from modifying external library code and avoids potential processing issues.
|
|
Updates the clang-format command in CONTRIBUTING.md to explicitly exclude the 'assets/' and 'archive/' directories.
This prevents clang-format from attempting to process large, non-source files in these directories, which can cause hangs or unexpected behavior.
|
|
Includes correct CMake configuration for GLFW native access, Objective-C++ compilation for the helper library on macOS, and applies clang-format to modified sources.
|
|
The build was stripping all strings, including critical shader entry points ('vs_main', 'fs_main'), causing a runtime panic.
Introduced for optional debug labels (which are stripped) and restored to always return the string content for functional requirements.
|
|
|
|
UPX is unreliable on macOS. Switched to using standard 'strip -u -r' and 'gzexe' for binary compression on Darwin systems.
Achieved a compressed binary size of ~48KB (dynamically linked).
Updated FETCH_DEPS.md to reflect that UPX is now only required for Linux/Windows.
|
|
Adds 'scripts/crunch_demo.sh' to automate building a stripped binary and compressing it with UPX.
Updates 'FETCH_DEPS.md' with UPX installation instructions and 'HOWTO.md' with usage guide.
This addresses Task 3 (add binary crunchers).
|
|
Adds the 'q' key as an alternative to 'Escape' for closing the application.
|
|
Implements aspect ratio correction to prevent the pulsating heptagon from being distorted when the window is resized.
- The main loop now queries the framebuffer size and calculates the aspect ratio each frame.
- This aspect ratio is passed to the GPU via an updated uniform buffer.
- The vertex shader in shader.wgsl now uses the aspect ratio to correctly scale the X coordinates of the vertices, ensuring the shape remains proportional.
|
|
The graphics appeared static because the audio peak value was transient, only lasting for a single audio buffer. The main graphics loop, running much faster, would mostly read a zero value.
This fix implements a simple peak meter with an exponential decay. The peak value now rises instantly to the maximum sample value but fades out smoothly over several frames, providing a persistent and smooth value for the visualizer.
|
|
|
|
|
|
Adds a new directive to CONTRIBUTING.md requiring all code to be formatted with clang-format before committing, ensuring consistent style across the codebase.
|
|
Adds a 'STRIP_ALL' mode to minimize binary size for the final build, and refines size optimization flags for macOS.
- **STRIP_ALL Mode**: Added a 'DEMO_STRIP_ALL' CMake option that defines 'STRIP_ALL'. In this mode, command-line parsing is bypassed (forcing fullscreen), debug labels/error callbacks are removed from WebGPU, and non-essential code (like iostream) is stripped.
- **macOS Optimizations**: Updated CMake to use '-dead_strip' instead of GNU '--gc-sections' on Apple platforms to resolve linker errors and improve dead code elimination.
- **Documentation**: Updated HOWTO.md to document the new 'Final / Strip Build' process and FETCH_DEPS.md for optimized wgpu-native build guidance.
- **Task 7 & 8**: Marks these tasks as completed in PROJECT_CONTEXT.md.
|
|
Replaces the complex wgpu-native submodule and manual platform-specific surface creation with a system-wide wgpu-native install (via Homebrew) and the glfw3webgpu helper library.
- Updates scripts/project_init.sh to fetch glfw3webgpu and ensure wgpu-native is installed.
- Refactors CMakeLists.txt to link against the system wgpu-native library.
- Simplifies src/platform.cc to use glfwCreateWindowWGPUSurface.
- Simplifies src/gpu/gpu.cc to use standard WebGPU headers.
- Updates FETCH_DEPS.md with new installation instructions.
- Updates PROJECT_CONTEXT.md with the new integration strategy.
|
|
This commit fulfills tasks 1 and 2, and adds a synchronized visual effect.
- **Fullscreen Mode**: Added '--fullscreen' command-line argument and dynamic toggling via 'F' key.
- **Keyboard Controls**: Implemented 'Esc' to exit and 'F' to toggle fullscreen in 'src/platform.cc'.
- **Synchronized Visuals**: Added a pulsating heptagon effect in 'src/gpu/gpu.cc' and 'src/gpu/shader.wgsl' that scales and changes color based on the real-time audio peak from the synth.
- **Refactor**: Abstracted platform-specific WebGPU surface creation into 'src/platform.cc' to keep 'src/gpu/gpu.cc' cross-platform.
- **Build System**: Corrected 'CMakeLists.txt' to properly link 'wgpu-native' and platform frameworks, and updated 'project_init.sh' to build the submodule.
- **Documentation**: Updated 'HOWTO.md' and 'PROJECT_CONTEXT.md' with new features and decisions.
|
|
This commit introduces new tools for spectrogram manipulation and visualization, establishes a consistent coding style, and updates project documentation.
Key changes include:
- **Spectrogram Tools:
- : A command-line utility for analyzing WAV/MP3 files into custom spectrogram format and playing back these spectrograms via the synth engine.
- : A command-line tool for visualizing spectrogram files as ASCII art in the console.
- **Coding Style Enforcement:
- Added a configuration file enforcing LLVM-based style with 2-space indentation, no tabs, and an 80-column line limit.
- Renamed all C++ source files from to for project consistency.
- Applied automatic formatting using
exit across the entire codebase.
- **Documentation & Workflow:
- Created to define a commit policy requiring tests to pass before committing.
- Updated with instructions for building and using and , and referenced .
- Updated and to reflect the new tools, audio architecture decisions (real-time additive synthesis, double-buffering for dynamic updates, WAV/MP3 support), coding style, and development workflow.
- **Build System:
- Modified to:
- Include new targets for and under the option.
- Update source file extensions to .
- Add a new end-to-end test for to the suite.
|
|
Adds a new CTest unit test that performs a full, end-to-end verification of the 'spectool analyze' command.
The test programmatically generates a sine wave, saves it as a .wav file, executes the spectool executable as a subprocess to analyze the wave, and then verifies the integrity of the resulting .spec file.
This ensures the analysis pipeline (WAV decoding, windowing, FDCT, and file I/O) works correctly.
|
|
Leverages the built-in MP3 decoder in miniaudio to allow spectool's 'analyze' command to process .mp3 files in addition to .wav files.
Updates the tool's command-line help text and the project's HOWTO.md to reflect the new capability.
|