62 lines
2.4 KiB
Markdown
62 lines
2.4 KiB
Markdown
# 02. Integrate cavacore library for audio analysis
|
|
|
|
meta:
|
|
id: real-time-audio-visualization-02
|
|
feature: real-time-audio-visualization
|
|
priority: P0
|
|
depends_on: [real-time-audio-visualization-01]
|
|
tags: [integration, audio-processing]
|
|
|
|
objective:
|
|
- Create a TypeScript binding for the cavacore C library
|
|
- Provide async API for real-time audio frequency analysis
|
|
|
|
deliverables:
|
|
- src/utils/cavacore.ts - TypeScript bindings for cavacore API
|
|
- src/utils/audio-visualizer.ts - High-level audio visualizer class
|
|
- Updated package.json with FFTW dependency
|
|
|
|
steps:
|
|
- Review cavacore.h API and understand the interface:
|
|
- cava_init() - Initialize with parameters
|
|
- cava_execute() - Process samples and return frequencies
|
|
- cava_destroy() - Clean up
|
|
- Create cavacore.ts wrapper with TypeScript types:
|
|
- Define C-style structs as TypeScript interfaces
|
|
- Create bind() function to load shared library
|
|
- Implement async wrappers for init, execute, destroy
|
|
- Create audio-visualizer.ts class:
|
|
- Handle initialization with configurable parameters (bars, sensitivity, noise reduction)
|
|
- Provide execute() method that accepts audio samples and returns frequency data
|
|
- Manage cleanup and error handling
|
|
- Update package.json:
|
|
- Add @types/fftw3 dependency (if available) or document manual installation
|
|
- Add build instructions for linking FFTW library
|
|
- Test basic initialization and execution with dummy data
|
|
|
|
tests:
|
|
- Unit: Test cavacore initialization with valid parameters
|
|
- Unit: Test cavacore execution with sample audio data
|
|
- Unit: Test cleanup and memory management
|
|
- Integration: Verify no memory leaks after multiple init/destroy cycles
|
|
- Integration: Test with actual audio data from ffmpeg
|
|
|
|
acceptance_criteria:
|
|
- cavacore.ts compiles without TypeScript errors
|
|
- audio-visualizer.ts can be imported and initialized
|
|
- execute() method returns frequency data array
|
|
- Proper error handling for missing FFTW library
|
|
- No memory leaks in long-running tests
|
|
|
|
validation:
|
|
- Run: `bun run build` to verify TypeScript compilation
|
|
- Run: `bun test` for unit tests
|
|
- Manual: Test with sample audio file and verify output
|
|
|
|
notes:
|
|
- FFTW library needs to be installed separately on the system
|
|
- On macOS: brew install fftw
|
|
- On Linux: apt install libfftw3-dev
|
|
- The C code will need to be compiled into a shared library (.so/.dylib/.dll)
|
|
- For Bun, we can use `Bun.native()` or `Bun.ffi` to call C functions
|