跨平台音訊視覺化器
作者:卡爾‧斯塔夫斯特蘭德
示範影片
它是什麼
安裝中
從源頭
套件管理器
捕捉音訊
脈衝音頻
管線
阿薩斯
MPD
斯迪奧
開放原始碼軟體
傑克
擠壓石
macOS
視窗
透過 ssh 運行
故障排除
用法
控制
配置
在其他應用程式中使用 cava
卡瓦科雷
原始輸出
貢獻
Cava 是一款適用於終端機或桌面 (SDL) 的條形頻譜音訊視覺化工具。
適用於:
Linux
自由BSD
macOS
視窗
該程序不適用於科學用途。當用於視覺化音樂時,它的設計看起來反應靈敏且美觀。
所需組件:
FFTW
庫工具
汽車製造商
autoconf-archive(設定 OpenGL 所需)
軟體套件設定檔
建構要點
初始解析器
推薦組件:
這些音訊框架之一的開發庫,具體取決於您的發行版:
阿薩斯
脈衝音頻
管線
波塔迪奧
斯迪奧
傑克
可選組件:
SDL2 開發文件
ncursesw 開發文件(捆綁在 arch 中的 ncurses 中)
CAVA 編譯實際上只需要 FFTW、iniparser 和建置工具,但這只會讓您能夠讀取 fifo 檔案。若要直接從系統 pipeline、pulseaudio、alsa、sndio、jack 或 portaudio 開發檔案擷取音訊(取決於您使用的音訊系統)。
如果您對預設輸出方法有問題,可以使用 Ncurses 作為替代輸出方法。但這不是必要的。
所有要求都可以輕鬆安裝在所有主要發行版中:
自由BSD
pkg install autoconf autoconf-archive automake fftw3 iniparser jackit libglvnd libtool pkgconf psftools sdl2 sndio
此外,在建置之前在 FreeBSD 上執行這些命令:
export CFLAGS="-I/usr/local/include" export LDFLAGS="-L/usr/local/lib"
Debian/Ubuntu:
sudo apt install build-essential libfftw3-dev libasound2-dev libpulse-dev libtool automake autoconf-archive libiniparser-dev libsdl2-2.0-0 libsdl2-dev libpipewire-0.3-dev libjack-jackd2-dev pkgconf
ArchLinux:
pacman -S base-devel fftw alsa-lib iniparser pulseaudio autoconf-archive pkgconf
開放SUSE:
zypper install alsa-devel fftw3-devel libpulse-devel libtool autoconf-archive pkgconf
軟呢帽:
dnf install alsa-lib-devel fftw3-devel pulseaudio-libs-devel libtool autoconf-archive iniparser-devel pkgconf
蘋果系統:
如果您還沒有安裝自製軟體,請先安裝:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然後安裝先決條件:
brew install fftw libtool automake autoconf-archive pkgconf portaudio iniparser
Intel Mac 和 Apple Silicon Mac 之間的 Homebrew 軟體包的安裝位置不同。因此,命令會略有不同。您可以在這裡找到您的類型
對於兩台機器,執行以下命令來修復 macOS 找不到 libtool 的問題:
export LIBTOOL=`which glibtool` export LIBTOOLIZE=`which glibtoolize` ln -s `which glibtoolize` /usr/local/bin/libtoolize
請注意,根據版本的不同,檔案名稱可能會略有不同,但目錄應該相同。
此外,在 Apple Silicon Mac 上執行這些命令,以便 ./configure 可以找到 Homebrew 軟體包:
export LDFLAGS="-L/opt/homebrew/lib" export CPPFLAGS="-I/opt/homebrew/include"
英特爾 Mac 指令在 macOS Big Sur 上進行了測試。
Apple Silicon 指令在 macOS Ventura 上進行了測試。
視窗:
請參閱cava_win
資料夾中單獨的自述文件。
首先克隆這個 repo 並 cd 到它,然後運行:
./autogen.sh ./configure make
如果您安裝了建議的元件,但不想使用它(也許在一台機器上建置二進位檔案以便在另一台機器上使用),則可以在設定過程中停用相應的功能(有關詳細信息,請參閱configure --help)。
對於 Windows, cava_win
資料夾中有一個 VS 解決方案檔案。
將cava
安裝到預設的/usr/local
:
make install
或者您可以更改PREFIX
,例如:
./configure --prefix=前綴
make uninstall
所有發行版特定的安裝來源可能已過時。請在此處報告任何問題之前檢查版本。
pkg install cava
Tumbleweed 使用者的倉庫中有 cava。他們可以只使用:
zypper in cava
Leap用戶需要先加入media:apps儲存庫:
zypper ar -f obs://multimedia:apps/openSUSE_Leap_42.2 multimedia
如果您使用其他版本,只需將openSUSE_Leap_42.2替換為openSUSE_13.2 ,然後將其調整為您的版本。
Cava 在 Fedora 26 及更高版本中可用。 您可以透過執行以下命令來安裝 Cava:
dnf install cava
卡瓦酒 (Cava) 位於 AUR。
pacaur -S cava
sudo apt install cava
Harshal Sheth 已將 CAVA 添加到他的 PPA 中,可以透過以下方式安裝:
add-apt-repository ppa:hsheth2/ppa apt update apt install cava
卡瓦酒是自製的。
brew install cava
只需確保您已經安裝了pulseaudio開發文件,並且cava已經建立了pulseaudio支援(如果找到開發文件,它應該是自動的)。
如果你幸運的話,你所要做的就是運行卡瓦酒。
如果沒有任何反應,您可能必須使用預設來源以外的來源。預設值也可能是您的麥克風。查看設定檔以取得協助。
放
method = pipewire
預設來源是auto
,很可能是您目前選擇的輸出。如果您執行wireplumber,則可以使用wpctl
取得所需裝置的object.path
或object.serial
進行視覺化。
例如
source = alsa:pcm:3:front:3:playback
放
method = alsa
在設定檔中。
ALSA 可能很困難,因為沒有本地方法可以從輸出中取得音訊。如果您想直接從輸出(不僅僅是麥克風或線路輸入)捕獲音頻,則必須創建 ALSA 環回接口,然後將音頻同時輸出到環回和普通接口。
要建立環回接口,只需運行:
sudo modprobe snd_aloop
希望您的aplay -l
現在應該包含一個環回介面。
為了使其在啟動過程中保持不變,請將snd-aloop
行加入到「/etc/modules」中。為了防止它作為第一個聲卡加載,請將行options snd-aloop index=1
添加到“/etc/modprobe.d/alsa-base.conf”,這會將其加載到“1”。您可以將“1”替換為音訊設定中最有意義的內容。
透過 Loopback 介面播放音訊可以讓 cava 捕捉它,但揚聲器中不會有聲音。為了在環回接口和實際接口上播放音頻,您必須使用 ALSA 多通道。
查看包含的範例檔案example_files/etc/asound.conf
了解如何使用多通道。我可以使用 HDA Intel PCH 音效卡來完成這項工作,但使用 USB DAC 則不然。
請在此閱讀有關 ALSA 方法的更多資訊。
如果您在 Rasberry PI 上使用 alsa 方法時遇到問題,請嘗試透過將下列行新增至/boot/config.txt
並重新啟動來啟用mmap
:
dtoverlay=i2s-mmap
@reluekiss,能夠使 cava 與 dmix 一起工作。查看example_files/etc/asound_dmix.conf
中的範例設定和問題 534。
在 mpd 中加入這些行:
audio_output { type "fifo" name "my_fifo" path "/tmp/mpd.fifo" format "44100:16:2" }
在設定檔中取消註解並將輸入法變更為fifo
。
fifo的路徑可以用source
參數指定。
我在同步方面遇到了一些問題(視覺化工具領先於聲音)。減少 mpd 中的 ALSA 緩衝區修復了這個問題:
audio_output { type "alsa" name "My ALSA" buffer_time "50000" # (50ms); default is 500000 microseconds (0.5s) }
放
method = sndio
Sndio 是 OpenBSD 上使用的音訊框架,但它也可以在 FreeBSD、NetBSD 和 Linux 上使用。到目前為止,這僅在 FreeBSD 上進行了測試,但在其他作業系統上可能非常相似。以下範例示範如何在 FreeBSD 上為 sndio 設定 CAVA(請參閱 OSS 部分,以更深入地解釋本範例中的各種pcmX
聲音裝置和對應的/dev/dspX
音訊裝置)。
$ 貓 /dev/sndstat 已安裝設備: pcm0:<Realtek ALC1220(後置模擬)>(播放/錄音)預設值 pcm1:<Realtek ALC1220(前置模擬麥克風)>(錄音) pcm2:<USB 音訊>(播放/錄音) 沒有從用戶空間安裝任何設備。
Sndio 對裝置描述符進行操作。一般來說,每個/dev/dspX
音訊裝置都有一個對應的rsnd/X
sndio 原始裝置描述符。在這個例子中,有rsnd/0
、 rsnd/1
和rsnd/2
(它們沒有在/dev
中列出,sndio 使用這些描述符在內部存取對應的音訊裝置)。 Sndio 也處理隱式default
裝置描述符,它的作用類似於與預設音訊裝置/dev/dsp
對應的原始裝置描述符的符號連結。在此範例中,它的作用類似於rsnd/0
的符號鏈接,因為預設音訊裝置/dev/dsp
符號連結到/dev/dsp0
。 Sndio 也評估環境變數AUDIODEVICE
和AUDIORECDEVICE
。如果設定了其中之一(如果兩者都設定了,則AUDIORECDEVICE
將覆蓋AUDIODEVICE
)並且 sndio 感知程式嘗試開啟default
裝置描述符或未指定的裝置描述符,則程式將使用環境變數中指定的裝置描述符。
現在為了在 CAVA 中可視化麥克風輸入,設定檔中的source
值必須設定為對應的音訊描述符:
source = default # default; symlink to rsnd/0 in this example; AUDIORECDEVICE and AUDIODEVICE evaluation source = # unspecified device descriptor; same as default above source = rsnd/0 # for the pcm0 mic on the rear source = rsnd/1 # for the pcm1 mic on the front source = rsnd/2 # for the pcm2 mic on the USB headset
使用source = default
可以在命令列上切換視覺化,而無需再次變更設定檔:
$ 音訊設備=rsnd/0 cava $ 音訊設備=rsnd/1 cava $ 音訊設備=rsnd/2 cava
Sndio 無法僅使用原始設備描述符記錄播放的音頻,即透過rsnd/0
在外部立體聲揚聲器上播放的音樂播放器或瀏覽器發出的聲音不會在 CAVA 中可視化。為此,必須啟動 sndio 伺服器並建立監控子設備。以下範例顯示如何啟動伺服器並從rsnd/0
建立監控子設備snd/0
,然後啟動 CAVA,並將AUDIODEVICE
指向新的監控子設備:
$ sndiod -f rsnd/0 -m 播放,mon $ 音訊設備=snd/0 卡瓦
在揚聲器和 USB 耳機之間切換:
$ sndiod -f rsnd/2 -m 播放,mon -s usb -f rsnd/0 -m 播放,mon -s 揚聲器 $ AUDIODEVICE=snd/usb cava $ AUDIODEVICE=snd/揚聲器卡瓦
有關 sndio 伺服器配置和啟動的更多信息,請參閱線上說明頁sndiod(8)
。
放
method = oss
FreeBSD 上使用的音訊系統是開放式聲音系統 (OSS)。以下範例示範如何在 FreeBSD 上為 OSS 設定 CAVA:
$ 貓 /dev/sndstat 已安裝設備: pcm0:<Realtek ALC1220(後置模擬)>(播放/錄音)預設值 pcm1:<Realtek ALC1220(前置模擬麥克風)>(錄音) pcm2:<USB 音訊>(播放/錄音) 沒有從用戶空間安裝任何設備。
此系統有 3 個pcm
聲音設備: pcm0
、 pcm1
和pcm2
。 pcm0
對應背面的類比輸出插孔,可插入外部立體聲揚聲器,以及類比輸入插孔,可插入麥克風。因為它封裝了輸出和輸入,所以它被標記為play/rec
。它也被設定為default
聲音設備。 pcm1
對應於前端麥克風的另一個類比輸入插孔,並標記為rec
。將帶有整合式麥克風的 USB 耳機插入 USB 端口,系統為其創建了具有play/rec
功能的pcm2
聲音設備。
一般來說,每個pcmX
設備都有一個對應的/dev/dspX
音訊設備。在此範例中,有/dev/dsp0
、 /dev/dsp1
和/dev/dsp2
(系統在需要時建立它們,如果目前未使用它們,則不會透過ls /dev
列出它們)。系統還創建一個隱式/dev/dsp
,其作用類似於default
音頻設備的符號鏈接,在本例中為/dev/dsp0
。
現在為了在 CAVA 中可視化麥克風輸入,設定檔中的source
值必須設定為對應的音訊設備:
source = /dev/dsp # default; symlink to /dev/dsp0 in this example source = /dev/dsp0 # for the pcm0 mic on the rear source = /dev/dsp1 # for the pcm1 mic on the front source = /dev/dsp2 # for the pcm2 mic on the USB headset
OSS 無法自行錄製輸出音頻,即透過/dev/dsp0
在外部立體聲揚聲器上播放的音樂播放器或瀏覽器發出的聲音不會在 CAVA 中可視化。一個解決方案是使用虛擬OSS。它可以從現有的音訊設備創建虛擬音訊設備,特別是它可以從/dev/dsp0
創建一個環回音訊設備,並且可以將播放的音訊輸入 CAVA:
$ doas pkg 安裝 virtual_oss $ doas virtual_oss -r44100 -b16 -c2 -s4ms -O /dev/dsp0 -R /dev/null -T /dev/sndstat -l dsp.cava $ 貓 /dev/sndstat 已安裝設備: pcm0:<Realtek ALC1220(後置模擬)>(播放/錄音)預設值 pcm1:<Realtek ALC1220(前置模擬麥克風)>(錄音) pcm2:<USB 音訊>(播放/錄音) 從使用者空間安裝的設備: dsp.cava:<虛擬 OSS>(播放/錄製)
它從/dev/dsp0
建立了一個虛擬環回裝置/dev/dsp.cava
。現在,音訊在設定檔中使用source = /dev/dsp.cava
在 CAVA 中可視化。播放程式必須具有使用/dev/dsp.cava
裝置的配置。對於無法執行此操作的程式(例如始終使用/dev/dsp
程式),請將-l dsp.cava
替換為-l dsp
。虛擬 OSS 可以作為 FreeBSD 上的服務進行設定和啟動。
放
method = jack
JACK 音訊連線套件 (JACK) 是一個專業的聲音伺服器 API,可在多種作業系統上使用,例如 FreeBSD 和 Linux。
CAVA 是一個 JACK 用戶端,其基本客戶端名稱為cava
,並遵循標準伺服器啟動和停止行為,即,如果尚未運行 JACK 伺服器並且定義了環境變數JACK_START_SERVER
,則CAVA 會啟動JACK 伺服器,在這種情況下,當所有伺服器都停止時,伺服器也會停止客戶已經退出。 CAVA 設定檔中的source
指定 CAVA 嘗試連線的 JACK 伺服器的名稱。預設值為default
,這也是預設的 JACK 伺服器名稱。該值可以為空,在這種情況下它意味著default
。因此以下三個條目是等效的:
; source = default source = default source =
一個例外是空source
條目和環境變數JACK_DEFAULT_SERVER
的組合。如果定義了環境變量,例如export JACK_DEFAULT_SERVER=foo
,則下列項目等效:
source = foo source =
有關 JACK 伺服器設定和啟動的更多信息,請參閱線上說明頁jackd(1)
。
CAVA 建立終端音訊類型(因此不支援 MIDI)輸入連接埠。這些端口可以連接到其他JACK客戶端的輸出端口,例如連接到音樂播放器的輸出端口,CAVA將可視化音樂。目前CAVA最多支援兩個輸入端口,即支援單聲道和立體聲。輸入連接埠的數量可以透過設定檔輸入部分中的channels
選項進行控制:
channels = 1 # one input port, mono channels = 2 # two input ports, stereo (default)
此連接埠的簡稱為M
(表示單聲道), L
和R
(表示立體聲)。根據基本客戶端名稱,輸入連接埠的全名是cava:M
(單聲道)、 cava:L
和cava:R
(立體聲)。
autoconnect
選項控制CAVA端口到其他客戶端端口的連接策略:
autoconnect = 0 # don't connect to other ports automatically autoconnect = 1 # only connect to other ports during startup autoconnect = 2 # reconnect to new ports regularly (default)
自動連接策略掃描實體終端輸入端口,即實際輸出聲音的真實音訊設備,並將相同的連接應用於CAVA的連接埠。透過這種方式,CAVA 預設可以視覺化來自 JACK 用戶端的播放音訊。
為了控制和管理CAVA的連接埠與其他客戶端程式的連接埠之間的連接,有JACK的連接管理程式。一些著名的具有圖形使用者介面的連接管理器是 QjackCtl 和 Cadence。 JACK 套件本身通常附帶 CLI 工具。根據作業系統的不同,可能需要單獨安裝它們,例如在 FreeBSD 上:
$ doas pkg 安裝 jack-example-tools
這些工具包括程式jack_lsp
和jack_connect
。這兩個工具足以在命令列上列出和連接連接埠。以下範例示範如何使用這些工具設定連線:
$ 傑克_lsp 系統:capture_1 系統:capture_2 系統:playback_1 系統:playback_2 卡瓦酒:L 元數據:輸出0 元數據:輸出1 卡瓦酒:R
此清單顯示目前可用的所有完整連接埠名稱。它們對應於兩個外部 JACK 客戶端cava
和moc
以及一個內部 JACK 客戶端system
。連接埠之間的類型和目前活動連接可以使用jack_lsp
的-p
和-c
開關列出。為了連接 CAVA 和 MOC 的端口,使用jack_connect
:
$ jack_connect cava:L moc:output0 $ jack_connect cava:R moc:output1
現在 CAVA 可以視覺化從 MOC 輸出的音訊。
squeezelite 是可用於 Logitech Media Server 的多種軟體用戶端之一。 Squeezelite 可以將其音訊資料匯出為共享內存,這正是該輸入模組所使用的。只需調整您的配置:
method = shmem source = /squeezelite-AA:BB:CC:DD:EE:FF
其中AA:BB:CC:DD:EE:FF
是squeezelite 的MAC 位址(如果不確定,請檢查LMS Web GUI(設定>訊息))。注意:squeezelite 必須以-v
標誌啟動才能啟用視覺化工具支援。
注意:Cava 在預設 macOS 終端機中無法正確渲染。為了獲得最佳顯示效果,請安裝 Kitty。請注意,您可能會遇到 #109 中提出的問題;不過,可以用這個來解決。
背景音樂
安裝自動提供環回介面的背景音樂。安裝並運行後,只需編輯您的配置即可將此介面與 portaudio 一起使用:
method = portaudio source = "Background Music"
音花
Soundflower 還可以建立環回介面。使用音訊 MIDI 設定來配置一個虛擬接口,該接口將音頻輸出到揚聲器和環回接口,遵循本節。透過創建多輸出設備,您將失去控制鍵盤音量的能力。因此,我們推薦背景音樂應用程序,它仍然為您提供鍵盤控制。
然後編輯您的配置以將此介面與 portaudio 一起使用:
method = portaudio source = "Soundflower (2ch)"
應自動從預設輸出設備擷取音訊。
若要透過 ssh 運行到外部監視器,請將輸出重定向到/dev/console
:
~# ./cava <> /dev/console >&0 2>&1
使用 ctrl+z 退出,然後運行“bg”以使其在登出後保持運行。
(您必須是 root 才能重定向到控制台。簡單的 sudo 是不夠的:首先運行sudo su
。)
最有可能的問題#399。需要正確設定區域設定才能使 cava 正常運作。
這是管道的已知問題。嘗試此處描述的解決方法
這要不是字體問題,就是終端模擬器中啟用的行間距問題。嘗試變更字體或停用行距。
由於圖形只是基於字符,因此請嘗試減小字體大小。
有些終端模擬器速度很慢。 Cava 在基於 GPU 的終端(如 kitty 或 alacritty)中看起來效果最好。您也可以嘗試增加字體大小
如果您在 TTY 中執行 cava(如 ctrl+alt+F2),程式會將字體變更為包含的cava.psf
(實際上是稍作修改的「unifont」)。
在控制台字體中,似乎只支援 256 個 Unicode 字符,可能是因為它們是點陣字體。我找不到帶有 Unicode 字元 2581-2587 的字體(每個條頂部使用的 1/8 - 7/8 區塊以提高解析度)。
因此,在cava.psf
中,字元 1-7 實際上被 Unicode 字元 2581-2587 取代。當 cava 退出時,它會將字體變更回來。如果 cava 異常退出,並且您發現 1-7 被部分區塊替換,只需使用setfont
更改字體即可。
實際上, setfont
應該會傳回預設字體,但這通常沒有設定。我還沒有找到其他方法來獲取當前字體。因此cava在中斷時將字型設定為「Lat2-Fixed16」。所有主要發行版都應該有它。重啟後它將恢復為預設字體。
Konsole 根本不支持這一點。第194章
Usage : cava [options] Visualize audio input in terminal. Options: -p path to config file -v print version
使用 ctrl+c 或 q 退出。
如果 cava 意外退出或強制終止,則必須使用stty -echo
手動開啟 echo。
鑰匙 | 描述 |
---|---|
上/下 | 增加/減少靈敏度 |
左/右 | 增加/減少條形寬度 |
前/後 | 改變前景色/背景色 |
r | 重新載入配置 |
c | 僅重新載入顏色 |
q或CTRL-C | 退出卡瓦 |
從版本 0.4.0 開始,所有選項都在設定檔中完成,不再需要命令列參數!
預設情況下,首次啟動時會在$XDG_CONFIG_HOME/cava/config
或$HOME/.config/cava/config
中建立設定文件,但也可以透過-p
選項使 cava 使用不同的檔案。
向 cava 發送 SIGUSR1 訊號,將強制 cava 重新載入其設定檔。因此,它的行為就像用戶在終端機中按r一樣。可以使用pkill
或killall
發送 SIGUSR1 訊號。例如:
$ pkill -USR1 cava
同樣,向 cava 發送 SIGUSR2 訊號只會從設定檔重新載入顏色,這與在終端中按c相同。這比重新載入整個配置稍快,因為音訊處理不需要重新初始化。
$ pkill -USR2 cava
有關均衡器工作原理的範例:
[eq] 1=0 2=1 3=0 4=1 5=0
[eq] 1=2 2=2 3=1 4=1 5=0.5
cava 中的核心處理引擎已拆分為單獨的庫cavacore
。有關詳細信息,請參閱 CAVACORE.md。
您也可以透過使用原始輸出模式將 Cava 的輸出用於其他程序,該模式會將條形資料寫入STDOUT
,然後透過管道傳輸到其他進程。有關此選項的詳細資訊記錄在範例設定檔中。
可以在此處找到用 python 編寫的使用原始資料的有用起點範例腳本。
請在打開拉取請求之前閱讀 CONTRIBUTING.md。
由於:
天海象
紅豆
利維貝特
在此專案的早期開發中做出了重大貢獻。
也要感謝 dpayne 弄清楚如何找到pulseaudio預設接收器名稱。