運行 chordStats
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 輸出,比較構建過程日志文件并監視錯誤,或將多臺計算機和網絡設備的性能統計信息組合為通知流。
如果還有興趣,請嘗試根據附加數據修改音量參數。例如,如果信息包的數目保持不變,但中斷次數不斷增加,則需要增加網絡通知的音量以強調對這方面的注意力。嘗試移入三度音階而不是整個八度音階,或在檢測到值發生較大變化時插入一個休止符以強調隨后的階段。