The cava raw frontend uses ASCII characters to visualize incoming audio data. Each ASCII symbol position corresponds to the value of the audio power pulse. Under the hood: 1. Incoming audio power pulse list is : 12684 2. See [format-icons](https://github.com/Alexays/Waybar/wiki/Module:-Cava#example).Configured array of ASCII codes is: ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" ] So raw cava frontend will give: ▁▂▆█▄ ### Example #### waybar config: ```jsonc "cava": { "cava_config": "$XDG_CONFIG_HOME/cava/waybar_raw.conf", "input_delay": 2, "format-icons" : ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" ], "actions": { "on-click-right": "mode" } }, ```` #### cava config for waybar ```ini ## Configuration file for CAVA. # Remove the ; to change parameters. [general] # Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0 # Accepts only non-negative values. # 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off # new as of 0.6.0 autosens of low values (dynamic range) # 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0 # Manual sensitivity in %. If autosens is enabled, this will only be the initial value. # 200 means double height. Accepts only non-negative values. # The number of bars (0-512). 0 sets it to auto (fill up console). # Bars' width and space between bars in number of characters. bars = 12 # bar_height is only used for output in "noritake" format # For SDL width and space between bars is in pixels, defaults are: # sdl_glsl have these default values, they are only used to calculate max number of bars. # Lower and higher cutoff frequencies for lowest and highest bars # the bandwidth of the visualizer. # Note: there is a minimum total bandwidth of 43Mhz x number of bars. # Cava will automatically increase the higher cutoff if a too low band is specified. # Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and # only check for input once per second. Cava will wake up once input is detected. 0 = disable. sleep_timer = 5 [input] # Audio capturing method. Possible methods are: 'fifo', 'portaudio', 'pipewire', 'alsa', 'pulse', 'sndio', 'oss', 'jack' or 'shmem' # Defaults to 'oss', 'pipewire', 'sndio', 'jack', 'pulse', 'alsa', 'portaudio' or 'fifo', in that order, dependent on what support cava was built with. # On Mac it defaults to 'portaudio' or 'fifo' # On windows this is automatic and no input settings are needed. # # All input methods uses the same config variable 'source' # to define where it should get the audio. # # For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink # (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them). # # For pipewire 'source' will be the object name or object.serial of the device to capture from. # Both input and output devices are supported. # # For alsa 'source' will be the capture device. # For fifo 'source' will be the path to fifo-file. # For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address # # For sndio 'source' will be a raw recording audio descriptor or a monitoring sub-device, e.g. 'rsnd/2' or 'snd/1'. Default: 'default'. # README.md contains further information on how to setup CAVA for sndio. # # For oss 'source' will be the path to a audio device, e.g. '/dev/dsp2'. Default: '/dev/dsp', i.e. the default audio device. # README.md contains further information on how to setup CAVA for OSS on FreeBSD. # # For jack 'source' will be the name of the JACK server to connect to, e.g. 'foobar'. Default: 'default'. # README.md contains further information on how to setup CAVA for JACK. # # The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods: # sample_rate: fifo, pipewire, sndio, oss # sample_bits: fifo, pipewire, sndio, oss # channels: sndio, oss, jack # autoconnect: jack # Other methods ignore these settings. # # For 'sndio' and 'oss' they are only preferred values, i.e. if the values are not supported # by the chosen audio device, the device will use other supported values instead. # Example: 48000, 32 and 2, but the device only supports 44100, 16 and 1, then it # will use 44100, 16 and 1. # [output] # Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl' # or 'sdl_glsl'. # 'noncurses' (default) uses a buffer and cursor movements to only print # changes from frame to frame in the terminal. Uses less resources and is less # prone to tearing (vsync issues) than 'ncurses'. # # 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data # stream of the bar heights that can be used to send to other applications. # 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above. # # 'noritake' outputs a bitmap in the format expected by a Noritake VFD display # in graphic mode. It only support the 3000 series graphical VFDs for now. # # 'sdl' uses the Simple DirectMedia Layer to render in a graphical context. # 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or # use one of the predefined ones. method = raw # Orientation of the visualization. Can be 'bottom', 'top', 'left', 'right' or # 'horizontal'. Default is 'bottom'. 'left and 'right' are only supported on sdl # and ncruses output. 'horizontal' (bars go up and down from center) is only supported # on noncurses output. # Note: many fonts have weird or missing glyphs for characters used in orientations # other than 'bottom', which can make output not look right. # Visual channels. Can be 'stereo' or 'mono'. # 'stereo' mirrors both channels with low frequencies in center. # 'mono' outputs left to right lowest to highest frequencies. # 'mono_option' set mono to either take input from 'left', 'right' or 'average'. # set 'reverse' to 1 to display frequencies the other way around. # Raw output target. A fifo will be created if target does not exist. raw_target = /dev/stdout # Raw data format. Can be 'binary' or 'ascii'. data_format = ascii # Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530). # Ascii max value. In 'ascii' mode range will run from 0 to value specified here # Ascii delimiters. In ascii format each bar and frame is separated by a delimiters. # Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)). bar_delimiter = 0 # sdl window size and position. -1,-1 is centered. # set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none' # 'frequency' displays the lower cut off frequency of the bar above. # Only supported on ncurses and noncurses output. # enable synchronized sync. 1 = on, 0 = off # removes flickering in alacritty terminal emulator. # defaults to off since the behaviour in other terminal emulators is unknown # Shaders for sdl_glsl, located in $HOME/.config/cava/shaders ; for glsl output mode, keep rendering even if no audio # disable console blank (screen saver) in tty # (Not supported on FreeBSD) # show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off # show waveform instead of frequency spectrum, 1 = on, 0 = off [color] # Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow. # Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires # a terminal that can change color definitions such as Gnome-terminal or rxvt. # default is to keep current terminal color # SDL and sdl_glsl only support hex code colors, these are the default: # Gradient mode, only hex defined colors are supported, # background must also be defined in hex or remain commented out. 1 = on, 0 = off. # You can define as many as 8 different colors. They range from bottom to top of screen [smoothing] # Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. # Noise reduction, int 0 - 100. default 77 # the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth # 100 will be very slow and smooth, 0 will be fast but noisy. [eq] # This one is tricky. You can have as much keys as you want. # Remember to uncomment more than one key! More keys = more precision. # Look at readme.md on github for further explanations and examples. ``` #### presentation https://github.com/user-attachments/assets/d6678827-9d1a-43b0-b5c8-062d4a45a118