Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
37d5709
Fix typos across docs, shaders, and input sources
oxyzenQ Nov 29, 2025
4fb70ff
A little improvement on README.md
oxyzenQ Nov 29, 2025
b0e992e
added pipewire and alsa to cavacore lib
karlstav Nov 6, 2025
e7d6488
small adjustment to hardcoded eq, a little more bass
karlstav Nov 6, 2025
4915465
happy linter
karlstav Dec 10, 2025
0a7a7e4
update .gitignore
rohanb1216 Dec 11, 2025
9721afb
allow device selection on windows
rohanb1216 Dec 11, 2025
85e29ac
linter
rohanb1216 Dec 11, 2025
e460674
exit with error if device not found
rohanb1216 Dec 13, 2025
3575a9c
update .gitignore
rohanb1216 Dec 11, 2025
cf3c429
allow device selection on windows
rohanb1216 Dec 11, 2025
89ecb16
linter
rohanb1216 Dec 11, 2025
284f72a
exit with error if device not found
rohanb1216 Dec 13, 2025
9c96505
Merge branch 'karlstav:master' into device_selection_from_config_win
rohanb1216 Dec 15, 2025
f76cc83
fix device specification check
rohanb1216 Dec 15, 2025
47d7235
Merge pull request #713 from rohanb1216/device_selection_from_config_win
karlstav Dec 16, 2025
d5e79b7
add option to mirror stereo horizontally in horizontal orientation #717
karlstav Jan 2, 2026
b8786b9
feat(hardening): add live config auto-reload and tighten long-running…
oxyzenQ Jan 4, 2026
6a69649
Merge pull request #718 from oxyzenQ/master
karlstav Jan 4, 2026
6dccaec
allocate arrays for right bars in horizontal stereo #717
karlstav Jan 4, 2026
f386b58
free arrays used by horizontal stereo even if not enabled
karlstav Jan 5, 2026
30a2e38
initialize arrays used by horisontal stereo to null
karlstav Jan 5, 2026
ce537b0
#718 set the example config default value of live-config to 0
karlstav Jan 5, 2026
a6c86c6
#717 disable horizontal stereo if orientation is not horizontal
karlstav Jan 7, 2026
4b0486c
fix: shell quote the variable '$/f' to prevent potential issues with …
oxyzenQ Jan 11, 2026
67179f0
Merge pull request #723 from oxyzenQ/master
karlstav Jan 12, 2026
bbfbd05
bump hardcoded version to 0.10.7
karlstav Jan 12, 2026
29bcdc5
Disable blank issue creation
karlstav Jan 13, 2026
6081406
input/pipewire: satisfy clang-format 9 case formatting
oxyzenQ Jan 15, 2026
21f3197
output/shaders: add Orion circle shaders
oxyzenQ Jan 15, 2026
ea06f0a
chore: enhancements
oxyzenQ Jan 15, 2026
031d115
chore: orion optimize long endurance
oxyzenQ Jan 15, 2026
0ccefbd
fix: Fix applied clang-format-lint diff in output/sdl_glsl.c
oxyzenQ Jan 15, 2026
6c2bd6b
docs: clarify sdl_glsl example config options
oxyzenQ Jan 15, 2026
11b3d45
fix linter #726
karlstav Jan 15, 2026
99facc5
add vertical stereo split mode #722
karlstav Jan 11, 2026
d697972
pass config object to noncurses terminal draw function
karlstav Jan 13, 2026
642a3da
noncurses can now flip through all orientations
karlstav Jan 14, 2026
75734ae
fix sdl not loading foreground and background color from theme file #734
karlstav Jan 18, 2026
f2871a0
remove reduntant guard for too high values after merging sdl_glsl_gain
karlstav Jan 18, 2026
ee4a534
fix some potentialy unused/uninitialized warnings
karlstav Jan 18, 2026
e996295
shaders/orion: add saturn shaders and improve stability
oxyzenQ Jan 17, 2026
1e3e98c
chore(config): improve config readability and consistency
oxyzenQ Jan 22, 2026
6e910de
cli: add --help/--version/--config and stricter arg parsing
oxyzenQ Jan 22, 2026
b23a44c
fix: zero-init config params before first load_config
oxyzenQ Jan 22, 2026
0df0451
Update config (#4)
oxyzenQ Jan 22, 2026
51e232a
add note in config about default values
karlstav Jan 22, 2026
fc13301
feat(build): add WiX installer support for Windows
amnweb Jan 27, 2026
89abb64
replace nuget with vcpkg for resolving dependencies on windows (#744)
rohanb1216 Feb 2, 2026
ecec9ae
Update windows README regarding vcpkg #744
karlstav Feb 2, 2026
6de3920
Delete cava_win/INSTALL.txt
karlstav Feb 2, 2026
7f9fcaa
Small cleanup: script formatting + comment typos
oxyzenQ Feb 12, 2026
e6f53f2
try to fix WiX Toolset workflow action by specifying version
karlstav Feb 15, 2026
436b113
second attempt fixing wix extension version mismatch
karlstav Feb 15, 2026
ef9af0b
Update WiX extension installation commands
karlstav Feb 15, 2026
f98a9b6
docs: fix typos and improve grammar in the example config
opticteadrop Feb 21, 2026
20a5997
docs: one last micro change
opticteadrop Feb 21, 2026
0cc460a
Replace broken AX_CHECK_GL with manual check
Yurakaii Feb 28, 2026
9068048
Merge remote-tracking branch 'upstream/master' into upstream_sync
LukashonakV Mar 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .codespellrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[codespell]
skip = ./.git,./.deps,./.libs,./autom4te.cache,./build,./third_party,./yasb,./cava_win/packages,./cava_win/x64,./cava_win/vcpkg_installed,./cava_win/meson-private,./m4,./Makefile,./Makefile.in,./aclocal.m4,./ar-lib,./compile,./config.guess,./config.sub,./configure,./depcomp,./install-sh,./libtool,./ltmain.sh,./missing,./version,./cava
ignore-words-list = datas
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blank_issues_enabled: false
12 changes: 7 additions & 5 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: Build CAVA Android

on:
'on':
workflow_dispatch:

jobs:
Expand Down Expand Up @@ -32,12 +33,13 @@ jobs:

- name: Export NDK path
run: |
echo "ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/25.2.9519653" >> $GITHUB_ENV
echo "$ANDROID_SDK_ROOT/ndk/25.2.9519653" >> $GITHUB_PATH
echo "ANDROID_NDK_HOME=${ANDROID_SDK_ROOT}/ndk/25.2.9519653" \
>> "${GITHUB_ENV}"
echo "${ANDROID_SDK_ROOT}/ndk/25.2.9519653" >> "${GITHUB_PATH}"

- name: Clone fftw3-android
run: |
cd $GITHUB_WORKSPACE
cd "${GITHUB_WORKSPACE}"
git clone https://github.com/Lauszus/fftw3-android

- name: Build fftw3-android
Expand All @@ -50,7 +52,7 @@ jobs:
run: |
cd cava/cavandroid
./gradlew assembleRelease \
-Pcmake.fftw3.dir="$GITHUB_WORKSPACE/fftw3-android"
-Pcmake.fftw3.dir="${GITHUB_WORKSPACE}/fftw3-android"

- name: Upload APK
uses: actions/upload-artifact@v4
Expand Down
263 changes: 169 additions & 94 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
@@ -1,106 +1,181 @@
---
name: build-and-test
on: [push, pull_request, workflow_dispatch]

'on':
push:
pull_request:
workflow_dispatch:

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: DoozyX/clang-format-lint-action@v0.5
with:
source: '.'
exclude: './third_party'
extensions: 'h,c'
- uses: actions/checkout@v4
- uses: DoozyX/clang-format-lint-action@v0.5
with:
source: .
exclude: ./third_party
extensions: h,c

build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install libfftw3-dev libasound2-dev libncursesw5-dev libpulse-dev libtool automake autoconf-archive libiniparser-dev portaudio19-dev libsndio-dev libsdl2-2.0-0 libsdl2-dev squeezelite pulseaudio libpipewire-0.3-dev
- name: Generate configure
run: ./autogen.sh
- name: Run ./configure
run: ./configure
- name: Run make
run: make CFLAGS='-Werror'
# - name: Run make distcheck
# run: make distcheck
- name: Prepare tests
run: |
pulseaudio -D
squeezelite -o pulse -v -m 51:fb:32:f8:e6:9f -z
- name: run non zero test
run: ./cava -p example_files/test_configs/non_zero_test > /dev/null
- name: run pulseaudio test
run: ./cava -p example_files/test_configs/pulse_zero_test > /dev/null
- name: run fifo test
run: ./cava -p example_files/test_configs/fifo_zero_test > /dev/null
- name: run shmem test
run: ./cava -p example_files/test_configs/shmem_zero_test > /dev/null
- name: build cavacore test application
run: gcc -I include -c -g cavacore_test.c
- name: link cavacore test application
run: gcc -o cavacore_test cavacore_test.o cava-cavacore.o -lm -lfftw3
- name: run cavacore test application
run: ./cavacore_test
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libfftw3-dev \
libasound2-dev \
libncursesw5-dev \
libpulse-dev \
libtool \
automake \
autoconf-archive \
libiniparser-dev \
portaudio19-dev \
libsndio-dev \
libsdl2-2.0-0 \
libsdl2-dev \
squeezelite \
pulseaudio \
libpipewire-0.3-dev
- name: Generate configure
run: ./autogen.sh
- name: Run ./configure
run: ./configure
- name: Run make
run: make CFLAGS='-Werror'
# - name: Run make distcheck
# run: make distcheck
- name: Prepare tests
run: |
pulseaudio -D
squeezelite -o pulse -v -m 51:fb:32:f8:e6:9f -z
- name: run non zero test
run: ./cava -p example_files/test_configs/non_zero_test > /dev/null
- name: run pulseaudio test
run: ./cava -p example_files/test_configs/pulse_zero_test > /dev/null
- name: run fifo test
run: ./cava -p example_files/test_configs/fifo_zero_test > /dev/null
- name: run shmem test
run: ./cava -p example_files/test_configs/shmem_zero_test > /dev/null
- name: build cavacore test application
run: gcc -I include -c -g cavacore_test.c
- name: link cavacore test application
run: gcc -o cavacore_test cavacore_test.o cava-cavacore.o -lm -lfftw3
- name: run cavacore test application
run: ./cavacore_test

build-linux-meson:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install libfftw3-dev libasound2-dev libncursesw5-dev libpulse-dev libtool automake autoconf-archive libiniparser-dev portaudio19-dev libsndio-dev libsdl2-2.0-0 libsdl2-dev squeezelite pulseaudio libpipewire-0.3-dev meson
- name: configure project
run: meson setup -Dcpp_std=c++20 -Dbuild_target=all build
- name: Run make
run: ninja -C build
- name: Prepare tests
run: |
pulseaudio -D
squeezelite -o pulse -v -m 51:fb:32:f8:e6:9f -z
- name: run non zero test
run: ./build/cava -p example_files/test_configs/non_zero_test > /dev/null
- name: run pulseaudio test
run: ./build/cava -p example_files/test_configs/pulse_zero_test > /dev/null
- name: run fifo test
run: ./build/cava -p example_files/test_configs/fifo_zero_test > /dev/null
- name: run shmem test
run: ./build/cava -p example_files/test_configs/shmem_zero_test > /dev/null
- name: build cavacore test application
run: gcc -I include -c -g cavacore_test.c
- name: link cavacore test application
run: gcc -I include -o cavacore_test cavacore_test.c build/libcava.so.p/cavacore.c.o -lm -lfftw3
- name: run cavacore test application
run: ./cavacore_test
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libfftw3-dev \
libasound2-dev \
libncursesw5-dev \
libpulse-dev \
libtool \
automake \
autoconf-archive \
libiniparser-dev \
portaudio19-dev \
libsndio-dev \
libsdl2-2.0-0 \
libsdl2-dev \
squeezelite \
pulseaudio \
libpipewire-0.3-dev \
meson
- name: Generate configure
run: meson setup -Dcpp_std=c++20 -Dbuild_target=all build
- name: Run make
run: ninja -C build
- name: Prepare tests
run: |
pulseaudio -D
squeezelite -o pulse -v -m 51:fb:32:f8:e6:9f -z
- name: run non zero test
run: ./build/cava -p example_files/test_configs/non_zero_test > /dev/null
- name: run pulseaudio test
run: ./build/cava -p example_files/test_configs/pulse_zero_test > /dev/null
- name: run fifo test
run: ./build/cava -p example_files/test_configs/fifo_zero_test > /dev/null
- name: run shmem test
run: ./build/cava -p example_files/test_configs/shmem_zero_test > /dev/null
- name: build cavacore test application
run: gcc -I include -c -g cavacore_test.c
- name: link cavacore test application
run: |
gcc -I include -o cavacore_test cavacore_test.c -L./build -lcava -lm -lfftw3
env:
LD_LIBRARY_PATH: ./build:$LD_LIBRARY_PATH
- name: run cavacore test application
run: |
LD_LIBRARY_PATH=./build:$LD_LIBRARY_PATH ./cavacore_test

build-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
brew install fftw libtool automake portaudio iniparser sdl2
ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
- name: Generate configuresdl2
run: PATH="/opt/homebrew/opt/libtool/libexec/gnubin:$PATH" ./autogen.sh
- name: Run ./configure
run: LDFLAGS="-L/opt/homebrew/lib" CPPFLAGS="-I/opt/homebrew/include" ./configure
- name: Run make
run: make CFLAGS='-Werror'
- name: run non zero test
run: ./cava -p example_files/test_configs/non_zero_test > /dev/null
- uses: actions/checkout@v4
- name: Install dependencies
run: |
brew install fftw libtool automake portaudio iniparser sdl2
ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
- name: Generate configuresdl2
run: |
PATH="/opt/homebrew/opt/libtool/libexec/gnubin:$PATH" ./autogen.sh
- name: Run ./configure
run: |
LDFLAGS="-L/opt/homebrew/lib" \
CPPFLAGS="-I/opt/homebrew/include" \
./configure
- name: Run make
run: make CFLAGS='-Werror'
- name: run non zero test
run: ./cava -p example_files/test_configs/non_zero_test > /dev/null

build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Install dependencies
run: nuget restore cava_win\cava_win.sln
- name: Run msbuild
run: msbuild /p:Configuration=Debug cava_win\cava_win.sln
- uses: actions/checkout@v4
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Install vcpkg
run: |
git clone https://github.com/microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat
- name: Set VCPKG_ROOT
run: |
echo "VCPKG_ROOT=$(pwd)\vcpkg" >> $env:GITHUB_ENV
- name: Install vcpkg dependencies
run: |
cd cava_win
& $env:VCPKG_ROOT\\vcpkg install
cd ..
- name: Run msbuild with vcpkg
run: |
msbuild /p:Configuration=Release /p:VcpkgEnabled=true /p:VcpkgRoot=$env:VCPKG_ROOT /p:VcpkgTriplet=x64-windows cava_win\cava_win.sln
- name: Install WiX Toolset
run: dotnet tool install --global wix --version 6.0.2
- name: Install WiX extensions
run: |
wix extension add WixToolset.UI.wixext/6.0.2
wix extension add WixToolset.Util.wixext/6.0.2
- name: Build MSI installer
run: |
$versionLine = Select-String -Path cava_win\setup.iss -Pattern '^AppVersion=' | Select-Object -First 1
$cavaVersion = $versionLine.Line.Split('=')[1].Trim()
wix build -arch x64 cava_win\cava.wxs -d CavaVersion=$cavaVersion -ext WixToolset.UI.wixext -ext WixToolset.Util.wixext -o cava_win\cava_win_x64_install.msi
- name: Upload MSI artifact
uses: actions/upload-artifact@v4
with:
name: cava-msi
path: cava_win\cava_win_x64_install.msi

build-mingw:
runs-on: windows-latest
Expand All @@ -111,12 +186,12 @@ jobs:
run:
shell: msys2 {0}
steps:
- uses: actions/checkout@v4
- uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.msystem}}
pacboy: cc cmake fftw glew ninja SDL2
- name: Run cmake build
run: |
cmake -B bin
cmake --build bin
- uses: actions/checkout@v4
- uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
pacboy: cc cmake fftw glew ninja SDL2
- name: Run cmake build
run: |
cmake -B bin
cmake --build bin
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,14 @@ cava
build/*
cava_win/packages/*
cava_win/x64/*
yasb/*
cava_win/vcpkg_installed/vcpkg/*
cava_win/vcpkg_installed/x64-windows/*
cava_win/meson-private

*~
*.orig
*.rej

!.codespellrc
!.github/
!.github/**
8 changes: 4 additions & 4 deletions CAVACORE.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@ the raw output data from fftw will not look very nice when used directly in a vi
to improve the look of the visualization:


## adjustable bandwith
## adjustable bandwidth

Theoretically the human ear can hear frequencies up to 20kHz, but the information above 10k is hard to separate from eachother
Theoretically the human ear can hear frequencies up to 20kHz, but the information above 10k is hard to separate from each other
and does not give much feedback by itself when visualizing audio. Similarly audio down to 20Hz can be heard, but the frequencies
below 50Hz does not directly provide anything to the visualizing of the audio.


## spread the output logarithmically

The human ear hears different frequencies logarithmically, so notes that are 2x and 4x higher than eachother, will be preceived
as beeing a fixed amount higher than eachother. Therefore cavacore outputs the frequencies logarithmically. Cavacore will also
The human ear hears different frequencies logarithmically, so notes that are 2x and 4x higher than each other will be perceived
as being a fixed amount higher than each other. Therefore cavacore outputs the frequencies logarithmically. Cavacore will also
group the output in the desired number of samples.


Expand Down
Loading
Loading