karlstav / cava

Cross-platform Audio Visualizer
MIT License
4.26k stars 231 forks source link

Gradient + tmux + rxvt-unicode-256c artifacts #288

Closed xexpanderx closed 2 years ago

xexpanderx commented 4 years ago

I have some problems running cava in tmux with urxvt-256. Let me give you my configs:

.Xresources:

URxvt*cursorUnderline: true
URxvt*scrollBar: false 
URxvt*internalBorder: 15
URxvt*externalBorder: 15
URxvt*buffered: true
URxvt*letterSpace: 0
URxvt*inheritPixmap: false
URxvt.termName: xterm-256color

#define font1         RobotoMono Nerd Font Mono
#define font2         DejaVu Sans Mono Nerd Font
#define font3         DejaVu Sans Mono Nerd Font
#define font4         DejaVu Sans Mono Nerd Font

URxvt*font:           xft:font1:pixelsize=18

cava-config:

## Configuration file for CAVA. Default values are commented out. Use either ';' or '#' for commenting.

[general]

# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0
mode = normal

# Accepts only non-negative values.
framerate = 144

# '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
autosens = 1
; overshoot = 20

# Manual sensitivity in %. Autosens must be turned off for this to take effect.
# 200 means double height. Accepts only non-negative values.
; sensitivity = 100

# The number of bars (0-200). 0 sets it to auto (fill up console).
# Bars' width and space between bars in number of characters.
bars = 0
bar_width = 2
bar_spacing = 1

# 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.
; lower_cutoff_freq = 50
; higher_cutoff_freq = 10000

# FFT buffer is set in the exponent of 2 and must be between 8 - 16, 8 = 256, 16 = 65536
# this is the audio buffer used to create the spectrum
# increasing the will improve the accuracy of the visualization, 
# but will also make it slower and increase CPU usage
# anything below 10 and above 13 is considered experimental. 
; FFTbufferSize = 12;

[input]

# Audio capturing method. Possible methods are: 'pulse', 'alsa', 'fifo', 'sndio' or 'shmem'
# Defaults to 'pulse', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
#
# All input methods uses the same config variable 'source'
# to define where it should get the audio.
#
# For pulseaudio '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 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
method = pulse
; source = auto

; method = alsa
; source = hw:Loopback,1

; method = fifo
; source = /tmp/mpd.fifo

; method = shmem
; source = /squeezelite-AA:BB:CC:DD:EE:FF

; method = portaudio
; source = auto 

[output]

# Ouput method. Can be 'ncurses', 'noncurses' or 'raw'. 
# 'noncurses' is for systems that does not suport 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.
method = ncurses

# 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'.
channels = stereo
; mono_option = average

# 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 = binary

# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
; bit_format = 16bit

# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
; ascii_max_range = 1000

# 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 = 59
frame_delimiter = 10

[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.
; background = black
; foreground = cyan

# Gradient mode, only hex defined colors are supported, background must also be defined in hex
# or remain commented out. 1 = on, 0 = off. Warning: for certain terminal emulators cava will
# not able to restore color definitions on exit, simply restart your terminal to restore colors.
gradient = 1
gradient_count = 2
gradient_color_1 = '#318893'
gradient_color_2 = '#d53679'

[smoothing]

# Percentage value for integral smoothing. Takes values from 0 - 100.
# Higher values means smoother, but less precise. 0 to disable.
integral = 0

# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. 
monstercat = 0
waves = 0

# Set gravity percentage for "drop off". Higher values means bars will drop faster.
# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off".
; gravity = 100

# In bar height, bars that would have been lower that this will not be drawn.
; ignore = 0

[eq]

# This one is tricky. You can have as much keys as you want.
# Remember to uncomment more then one key! More keys = more precision.
# Look at readme.md on github for further explanations and examples.
; 1 = 1 # bass
; 2 = 1
; 3 = 1 # midtone
; 4 = 1
; 5 = 1 # treble

tmux-config:

set-option -g mouse on
set -g status off
set-option -g default-shell "/bin/bash"
set -g pane-border-style fg=black
set -g pane-active-border-style "bg=black fg=black"
set-option -g default-terminal "xterm-256color"
set-option -sa terminal-overrides ",xterm-256color:Tc"
# C-c: save into system clipboard (+). With preselection.
bind C-c choose-buffer "run \"tmux save-buffer -b %% - | xclip -i -sel clipboard\" \; run \" tmux display \\\"Clipboard \(+\) filled with: $(tmux save-buffer -b %1 - | dd ibs=1 obs=1 status=noxfer count=80 2> /dev/null)... \\\" \" "
# C-v: copy from + clipboard.
bind C-v run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer" \; run "tmux display \"Copied from \(+\) $(xclip -o -sel clipboard | dd ibs=1 obs=1 status=noxfer count=80 2> /dev/null)... \""

# C-d: save into selection clipboard (*). With preselection.
bind C-d choose-buffer "run \"tmux save-buffer -b %% - | xclip -i\" \; run \" tmux display \\\"Clipboard \(*\) filled with: $(tmux save-buffer -b %1 - | dd ibs=1 obs=1 status=noxfer count=80 2> /dev/null)... \\\" \" "
# C-f: copy from * clipboard.
bind C-f run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer" \; run "tmux display \"Copied from \(*\) $(xclip -o | dd ibs=1 obs=1 status=noxfer count=80 2> /dev/null)... \""

So, to the problem, running cava directly in urxvt, it works perfect: 2019-11-25-134349_712x580_scrot

Running inside tmux:

2019-11-25-134453_712x580_scrot

Just cannot get it to work in tmux, no matter what I do...

xexpanderx commented 4 years ago

tmux-version: 2.9a urxvt: 9.22

karlstav commented 4 years ago

just tested it myself, yes there are some issues. Seems that parts of the bars are not cleared when going down. This is most likely related to #196