Skip to content

🎦 visdriver uses Winamp plug-ins to visualize audio; targets Wine on GNU/Linux primarily

License

Notifications You must be signed in to change notification settings

hartwork/visdriver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build on Linux Build on Windows Enforce clang-format

screenshots/visdriver_geiss_804x627.png

(Re-titled with wmctrl -r 'Default - Wine desktop' -N 'Geiss @ visdriver (800x600)')

What is visdriver?

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:

Download

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.

How to Compile

With MinGW/GCC

# cmake -DCMAKE_TOOLCHAIN_FILE=cmake/mingw-toolchain.cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build
# make -C build -j$(nproc) VERBOSE=1

With Visual Studio

# cmake -G "Visual Studio 17 2022" -A Win32 -DCMAKE_BUILD_TYPE=RelWithDebInfo -S . -B build
# cmake --build build

How to Run

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 <sebastian@pipping.org>.

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.

How to Force Fullscreen Visualization into a Window

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.

Known Limitations

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 (SHA1 7ab08fcc5bc9ebfcc9a8e3d729fadf2cb05e173a) of Winamp 5.66 crashes right after loading for an unknown reason.

Sebastian Pipping, Berlin, 2023