yammer/README.md

3.1 KiB

Yammer

Audio visualizer thing in guile scheme

Build

Dependencies

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

./compile.sh

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

Configuration

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

Below is a list of values and what they do

  • using-fftw?: Was libyammer.so compiled using FFTW?

  • using-pulse?: Was libyammer.so 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.

Running

Either install .libs/libyammer.so, 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.

./yammer

Screenshots

Normal mode

Normal Mode Normal Mode 2

FFT mode

FFT Mode

Exponential

Exponential FFT Mode

Moving Average

Moving Average FFT Mode

Wishlist

  • 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