1 个不稳定版本
0.3.0 | 2024年3月16日 |
---|
#153 在 音频
44KB
960 代码行
scope-tui
适用于终端的简单示波器/矢量示波器/光谱仪
在这里观看操作演示,使用 Planets(由 Jerobeam Fenderson 编写的示波器音乐)
为什么
我非常喜欢 cava。它为您提供了音乐的一个粗糙但令人愉悦的频率图:仅显示基本的引子、独奏和贝斯线。我想看到波形,但据我所知,没有这样的工具。有一些声卡示波器软件可用,但通常图形GUI过时,破坏了魔法。因此,我决定亲自解决这个问题!在一个夜晚的捣鼓 pulseaudio(通过 libpulse-simple-binding)和一些 TUI 图形(通过 tui-rs)之后,第一个版本的 scope-tui
就开发出来了,只通过命令行提供非常基本的设置,但内置了一个矢量示波器模式。
安装
目前没有提供二进制文件或软件包,您必须自己编译。
如果您还没有安装rust工具链,请使用 rustup 获取它
一旦您有了 rustc
和 cargo
,只需使用 cargo install
$ CARGO_NET_GIT_FETCH_WITH_CLI=true cargo install --git https://git.alemi.dev/scope-tui.git
(注意,我的git服务器不支持智能http克隆,设置fetch-with-cli允许dumb http克隆)
生成的二进制文件将位于 $HOME./cargo/bin
。您可以将此文件夹添加到您的 $PATH
,或将生成的二进制文件复制到您的 $PATH
中的某个位置。
源代码
始终可用一个非常粗糙的文件源,它可以是一个命名管道。虽然这允许将 scope-tui
连接到很多东西,但它并不非常方便,并且当有更专业的源可用时,应该使用更专业的源。
目前仅在Linux上实现了PulseAudio源,但计划在未来通过模块化源结构实现更多源。
在编译时通过传递相应的功能标志来启用源: --features=pulseaudio,...
。使用 --no-default-features
禁用默认功能。
pulseaudio
:使用 LibPulse 简单绑定的 pulseaudio 实现 (默认启用)
用法
$ scope-tui [OPTIONS] <COMMAND>
Commands:
pulse use PulseAudio Simple api to read data from an audio sink
file use a file from filesystem and read its content
help Print this message or the help of the given subcommand(s)
Options:
--channels <N> number of channels to open [default: 2]
--tune <NOTE> tune buffer size to be in tune with given note (overrides buffer option)
-b, --buffer <SIZE> size of audio buffer, and width of scope [default: 8192]
--sample-rate <HZ> sample rate to use [default: 44100]
-r, --range <SIZE> max value, positive and negative, on amplitude scale [default: 20000]
--scatter use vintage looking scatter mode instead of line mode
--no-reference don't draw reference line
--no-ui hide UI and only draw waveforms
--no-braille don't use braille dots for drawing lines
-h, --help Print help information
-V, --version Print version information
音频缓冲区大小直接影响资源使用、延迟和刷新率,其限制由音频刷新率给出。较大的缓冲区速度较慢但资源消耗较少。一个不错的起始值可能是 8192
或调整到第 0 个八度。
要更改音频缓冲区大小,必须重新启动 PulseAudio 客户端。因此,此选项只能在启动时进行配置。
控制
- 使用
q
或CTRL+C
退出 - 使用
s
切换散射模式 - 使用
h
切换界面 - 使用
r
切换参考线 - 使用
<SPACE>
暂停和恢复显示 - 使用
<LEFT>
和<RIGHT>
增加或减少 X 范围 - 使用
<UP>
和<DOWN>
增加或减少 Y 范围 - 使用
<ESC>
将视图设置还原为默认值 - 使用
<TAB>
在模式之间切换- 示波器:
- 使用
t
切换触发模式 - 使用
e
切换边沿触发模式(上升/下降) - 使用
p
切换峰值显示 - 使用
<PG-UP>
和<PG-DOWN>
增加或减少触发阈值 - 使用
-
/_
和=/
+
增加或减少触发消抖
- 使用
- 频谱仪:
- 使用
<PG-UP>
和<PG-DOWN>
增加或减少平均值计数
- 使用
- 矢量仪:
- 示波器:
- 将增减命令与
<SHIFT>
结合使用以增加或减少 10 倍 - 将增减命令与
<CTRL>
结合使用以增加或减少 5 倍 - 将增减命令与
<ALT>
结合使用以增加或减少 1/5 倍
关于精度
当“散点”图模式与样本的精确度以及终端的允许程度相匹配时,“线”图模式仅在每个点之间绘制一条直线,这意味着高频数据无法得到适当的表示。
由于缓冲区和块的大小较小,因此延迟保持在最低。
采样率可以自由指定,但最终将受限于源的实际采样率。
减小/增大终端字体大小以增加/减小范围分辨率。
开发
任何帮助都受欢迎,如果您想贡献,请随时联系我。
我计划开发的一些功能和想要添加的功能
- 示波器
- 矢量仪
- Linux音频源
- 简单控制
- 简单触发
- 多通道
- 频谱仪
- 文件源
- Mac音频源
- Windows音频源
- 改进文件音频源
- 网络源
- GUI前端
- 串行源
- USB源
- SDR源
依赖关系
~4–11MB
~112K SLoC