chordStats 程序将读取标准的 vmstat 程序,并在不缓冲的情况下把通知事件写入 FluidSynth 的 stdin。用命令 perl chordStats.pl |fluidsynth Hammered_Instruments.sf2 -c10000 -z10000 >/dev/null 启动 chordStats 程序。请记住,-c 和 -z 参数适用于扩大声音缓冲选项,而且可能需要进一步调整才能用于特殊的系统。
现在 chordStats 程序已经运行,尝试启动 Mozilla。首先要注意的是用管钟和钢片琴表示的 CPU 使用量的增加和磁盘 I/O 活动。如果用 wget 在 Mozilla 中装入一个较大的页面或下载文件,您将听到电子钢琴在网络链接饱和时发出更加刺耳的音调。
修改 chordStats
除了基本的系统负载之外,可以轻松地修改 chordStats 来表示计算环境的各个方面。回想 vmstat 1 将在每秒钟生成一张值列表。这可用于提供通知值,以及创建基本的节拍命令。修改 chordStats 的一种简单方法是将 vmstat 命令替换为刷新速度更快的事件生成器。例如,代码发行版归档附带的 fastUpdate.pl 程序将每五分之一秒扫描一次可用内存、当前进程和以太网中断。要使用最新更新的版本,请修改 chordStats.pl 程序以包含以下更改。
把命令从:
my $vmStatCmd = "vmstat 1";
更改为:
my $vmStatCmd = "./fastUpdate.pl 0.2 "
并把标题描述区域从:
for( split " ", "r b swpd free buff cache si so bi bo in cs us sy id wa" ){
更改为:
for( split " ", "memFree ethInt proc" ){
在主程序循环中,代码无需忽略标题行和输入的前两行。您可以根据需要移除这些条件。fastUpdate.pl 脚本的输出已被调整为范围在 0 到 100 之间,因此把 sendNote 事件从:
# user cpu usage
$note = $currLine[ $fields{us} ];
sendNote( $note, 14, 12, 96 );
# conglomerate disk i/o fields to one stat
$note = $currLine[ $fields{bi} ] + $currLine[ $fields{bo} ];
if( $note > 1000 ){ $note = 1000; }
$note = $note/10;
sendNote( $note, 8, 12, 96 );
# network throughput on eth0
$note = getNetworkStats();
sendNote( $note, 5, 12, 84 );
更改为:
$note = $currLine[ $fields{memFree} ];
sendNote( $note, 14, 48, 96 );
$note = $currLine[ $fields{ethInt} ];
sendNote( $note, 8, 48, 96 );
$note = $currLine[ $fields{proc} ];
sendNote( $note, 5, 48, 96 );
请注意,此修正版中将最小值增加到了 48。这是对选定的 SoundFont (Electronic_Sounds.sf2) 的特性的补偿。用命令 perl chordStats.pl |fluidsynth Electronic_Sounds.sf2 -c10000 -z10000 >/dev/null 来运行此更新版本的 chordStats,并且您将听到扬声器发射出的优美的 1960s sci-fi/B-movie 声道。
结束语
通过本示例,可以修改 chordStats 来根据所选的任何参数来播放音乐。修改 fastUpdate 以读取 strace 或 gprof 输出,比较构建过程日志文件并监视错误,或将多台计算机和网络设备的性能统计信息组合为通知流。
如果还有兴趣,请尝试根据附加数据修改音量参数。例如,如果信息包的数目保持不变,但中断次数不断增加,则需要增加网络通知的音量以强调对这方面的注意力。尝试移入三度音阶而不是整个八度音阶,或在检测到值发生较大变化时插入一个休止符以强调随后的阶段。