(Re-titled with wmctrl -r 'Default - Wine desktop' -N 'Geiss @ visdriver (800x600)'
)
visdriver is a Wine/Windows application that uses Winamp plug-ins to visualize audio without actual Winamp/WACUP, in particular with MinGW on GNU/Linux. It is written in C99, uses plain win32api, and is licensed under the "GPL v3 or later" license.
It needs:
- One input plug-in binary
(e.g.
in_line.dll
[source] [binary] orin_mad.dll
[source] [binary] for MP3 playback), - One output plugin binary
(e.g.
out_wave_gpl.dll
[source] [binary]), - One vis plugin binary
(e.g.
vis_geis.dll
[source] [binary] orvis_avs.dll
[source] [binary]), - A MinGW compiler (or Visual Studio),
- Wine (or Windows),
- CMake >=3.0 (and potentially GNU make or Ninja).
If would you like to download ready-to-run Windows binaries
built by the CI off the latest code on branch main
,
there are two options:
Just click the latest workflow run there for either of these, and its page will list artifacts for download near the bottom.
# cmake -DCMAKE_TOOLCHAIN_FILE=cmake/mingw-toolchain.cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build
# make -C build -j$(nproc) VERBOSE=1
# cmake -G "Visual Studio 17 2022" -A Win32 -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build
# cmake --build build
Let visdriver tell you what it needs:
# WINEDEBUG=-all wine ./build/visdriver.exe --help
Usage: visdriver [OPTIONS] --in PATH/IN.dll --out PATH/OUT.dll --vis PATH/VIS.dll [--] [AUDIO_FILE ..]
or: visdriver --help
or: visdriver --version
visdriver uses Winamp plug-ins to visualize audio.
-h, --help show this help message and exit
-V, --version show the version and exit
Plug-in related arguments:
-I, --in=<str> input plug-in to use
-O, --out=<str> output plug-in to use
-W, --vis=<str> vis plug-in to use
Software libre licensed under GPL v3 or later.
Brought to you by Sebastian Pipping <[email protected]>.
Please report bugs at https://github.com/hartwork/visdriver -- thank you!
If you end up with errors about missing DLLs, copying these files in place should help. E.g. for MinGW DLLs on Ubuntu 20.04 it would be:
# cp -v \
/usr/i686-w64-mingw32/lib/libwinpthread-1.dll \
/usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll \
/usr/lib/gcc/i686-w64-mingw32/9.3-posix/libstdc++-6.dll \
.
The locations of these files vary among GNU/Linux distros.
If you would like to force a fullscreen vis plugin into using a Window, there are two options:
- a) Wine's built-in virtual desktop feature
- b) Using Xephyr for a quick way to a nested Xorg server, that your distro has already packaged.
For Wine's virtual desktop feature, this wrapper should do:
#! /usr/bin/env bash
exec wine explorer /desktop=visdriver,1024x768 ./build/visdriver.exe "$@"
For Xephyr, a wrapper script like this should do:
#! /usr/bin/env bash
set -x -e -u
NESTED_DISPLAY=:1
Xephyr -screen 1024x768 "${NESTED_DISPLAY}" &
xorg_pid=$!
kill_xorg() { kill -2 "${xorg_pid}"; }
trap kill_xorg EXIT
export DISPLAY=${NESTED_DISPLAY}
wine ./build/visdriver.exe "$@"
If you need help getting that set up, please reach out.
Please expect some rough edges, and potentially even crashes with some plug-ins.
In particular, known limitations are:
- Waveform/spectrum needs 16bit stereo samples input, at the moment.
- Unicode in- and output plug-ins are yet to be supported.
in_linein.dll
(SHA17ab08fcc5bc9ebfcc9a8e3d729fadf2cb05e173a
) of Winamp 5.66 crashes right after loading for an unknown reason.
Sebastian Pipping, Berlin, 2023