Audio visualizer thing
Go to file
Skylar "The Cobra" Widulski 730fb9a2bb
Copyright update
Signed-off-by: Skylar "The Cobra" Widulski <>
2024-01-03 10:07:41 -05:00
screenshots Fix screenshot filenames 2023-12-22 11:53:59 -05:00
src Copyright update 2024-01-03 10:07:41 -05:00
.gitignore Fix plan being #f 2023-12-24 12:05:44 -05:00
COPYING Prepare for publishing 2023-12-21 15:17:27 -05:00 Merge branch 'main' of 2023-12-24 11:26:22 -05:00 Refactor everything for easier system install 2023-12-24 11:25:57 -05:00
config.example.scm Big refactor for pulseaudio addition 2023-12-22 22:17:23 -05:00
yammer Fix plan being #f 2023-12-24 12:05:44 -05:00


Audio visualizer thing in guile scheme



guile-sdl2, fftw

Compiling the library

You need to compile the yammer.c file because it has wrappers and stuff.

To disable FFTW, use export NO_FFTW=1

To disable PulseAudio, use export NO_PULSE=1

To enable debugging symbols, use export DEBUG=1


You may need to adjust PKG_CONFIG_PATH if you use something like Guix System.


Copy config.example.scm to ~/.config/yammer/config.scm

Below is a list of values and what they do

  • using-fftw?: Was compiled using FFTW?

  • using-pulse?: Was compiled using PulseAudio?

  • source: The MPD fifo or PulseAudio source

  • source-type: One of 'mpd or 'pulse

  • pulse-latency: Latency to request from PulseAudio

  • bitrate: The bitrate of the audio coming from the input

  • sample-factor: Proportional to quality, may cause stuttering when >1.

  • fps: Self explanatory

  • resolution: Pixel width of bars

  • scale: Bar height multiplier

  • color: Bar color

  • bgcolor: Background color

  • queue-size: The size of the queue (minimum of 1), delays displaying bars by queue-size frames. Useful if desync is noticed

  • fft: Whether or not to perform a fourier transform to show frequencies (like spectrum mode in most other visualizers)

  • interpolation: Number of points to interpolate between values. <1 means disable

  • smoothing: Smoothing mode. Possible values are:

    • #f: No smoothing or interpolation. Disregards interpolation
    • 'none: No smoothing
    • 'moving-average: Moving average
    • 'exponential: Simple (basic) exponential smoothing
  • moving-average-block-size: Size of the moving average window. Higher is smoother.

  • exponential-factor: Exponential smoothing factor, lower is more smooth.


Either install .libs/, src/c/yammer.h, src/guile/yammer.scm, and src/guile/yammer to their respective systemwide locations, or do the following:

export LD_LIBRARY_PATH=.libs
export GUILE_LOAD_PATH=src/guile

Then, run yammer.



Normal mode

Normal Mode Normal Mode 2

FFT mode

FFT Mode


Exponential FFT Mode

Moving Average

Moving Average FFT Mode


  • Native PipeWire, ALSA, JACK, sndio sources
  • More smoothing modes (one that actually works would be nice)
  • Average over resolution
  • Offload some calculations to the GPU
  • Use more than one core lmao?

Known issues

  • Sometimes the read gets misaligned and just becomes noise
  • When MPD is paused or the program is sleeping for the next frame, the UI doesn't update so you can't exit
  • The surface can't be transparent
  • PulseAudio can be reeaaaaally behind