- Implement radix-2 Cooley-Tukey FFT algorithm
- Add windowing functions: Hann, Hamming, Blackman, Rectangular
- Support configurable frequency bin count
- Add peak detection with configurable decay rate
- Include temporal smoothing for visualization
- Add spectrum analysis example program
- Proper memory management with init/close lifecycle
Bug-fix: Add buffer bounds checking to prevent overflow when sample count is not power of 2
Signed-off-by: Srikanth Patchava <spatchava@meta.com>
* Add audio_raw_stream_callback.c
* Update audio_raw_stream_callback.c to more closely follow raylib coding conventions
* Remove spaces before asterisks in comments in audio_raw_stream_callback.c
* Put SetTargetFPS(30) before while(!WindowShouldClose()) in audio_raw_stream_callback.c
* Add audio_stream_callback.c
* Delete examples/audio/audio_raw_stream_callback.c
* Delete examples/audio/audio_raw_stream_callback.png
* Update audio_raw_stream.c to more closely follow raylib coding conventions
Drawing code wasn't tabbed in
* Remove screenshot code in audio_stream_callback.c
* Update raylib version and copyright year in audio_raw_stream.c
* Update audio_stream_callback.c
Used if instead of switch to compact code; seemed more readable in this case.
The original logic iterated through the world and broke at the first found voxel that intersected the ray. This broke in some cases, removing a voxel out of view. I changed the algorithm to track the closest found voxel, and remove it at the end of the loop if one was found.
* Update audio_raw_stream.c
* Update audio_raw_stream.c to more closely follow raylib coding conventions
* Update audio_raw_stream.c to more closely follow raylib coding conventions
I accidentally put the file in the wrong folder.
* Delete examples/audio_raw_stream.c
* Remove spaces before asterisks in comments in audio_raw_stream.c
* Put SetTargetFPS(30) before while (!WindowShouldClose()) in audio_raw_stream.c
ADDED: `rlUnloadShader()` to unload shaders (that function was missing and compute shaders leak memory)
RENAMED: `rlCompileShader()` to p `rlLoadShader()` to be consistent with `rlUnloadShader()`
RENAMED: `rlLoadShaderCode()` to `rlLoadShaderProgram()`, more descriptive of return
RENAMED: `rlLoadShaderProgram()` to `rlLoadShaderProgramEx()`
RENAMED: `rlLoadComputeShaderProgram()` to `rlLoadShaderProgramCompute()`
RENAMED: Some functions parameters for consistency