User:Lieven Van Speybroeck/Prototyping/2-CPUtter: Difference between revisions

From XPUB & Lens-Based wiki
No edit summary
No edit summary
Line 94: Line 94:
@head {
@head {
\$time_sig 4/4
\$time_sig 4/4
\$tempo 520
\$tempo 250
}
}
@body {
@body {
Line 101: Line 101:
\$length 60
\$length 60
\$octave 5
\$octave 5
END
\$strum 8
# use bend to create the sequential sound with different pitches
 
cat <<END
cat <<END
%bend f {
END


cat log | sed -f filter.sed > score.txt
cat log | sed -f filter.sed > score.txt
Line 117: Line 115:




# go through every line, compare it to the scale and convert it to a tone + pitch value (the heigher the tone, the heigher the CPU-usage)
# go through every line, compare it to the scale and convert it to a tone (the heigher the tone, the heigher the CPU-usage)


while read line;
while read line;
do
do
if [ "$line" -lt "$lowest" ];
if [ "$line" -lt "$lowest" ];
then echo "4-2"
then echo "c"
elif [ "$line" -lt "$low" ];
elif [ "$line" -lt "$low" ];
then echo "4-1"
then echo "d"
elif [ "$line" -lt "$normal" ];
elif [ "$line" -lt "$normal" ];
then echo "4+0"
then echo "f"
elif [ "$line" -lt "$heigh" ];
elif [ "$line" -lt "$heigh" ];
then echo "4+1"
then echo "g"
elif [ "$line" -gt "$heigh" ];  
elif [ "$line" -gt "$heigh" ];  
then echo "4+2"
then echo "a"
fi
fi
done < score.txt
done < score.txt


cat <<END
cat <<END
}
}
}
}
}

Revision as of 14:56, 21 October 2010

CPUtter

Description

The CPU... the brain of our computer systems. And yet, it's so quiet while making it's calculations. Not like those fans, hard disks and DVD-drives that tend to manifest themselves with all sorts of bleeps and buzzes. Therefore, i thought about making a voice for the processor. An intuitive representation of all it's hard work in the background. This is my attempt.


Structure

  • Check user cpu usage for an amount of time and log it in a file.
  • Filter the logfile so the result is a list of numbers that represent the cpu-usage over time.
  • Create a scale from "low usage" to "high usage", compare each line of the file to that scale and convert it into a tone with pitch value.
  • Use bending to create an ongoing sequence between the tones and pitch values.
  • Let it sing!


Source

For making a log-file of the cpu-usage, i used "iostat", which does pretty much the same as "top" does, but you can filter a bit more:

iostat -c 1 250 > log

This will put 250 cpu-usage (-c) reports at 1 second intervals in "log". You can change the speed and amount of lines (amount of statistics) by changing these numbers. This way you could run it as long as you want to get better results.

The output looks a bit like this:

Linux 2.6.32-25-generic (Lieven) 	10/21/2010 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.52    0.10    0.69    0.28    0.00   97.42

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.55    0.00    0.00    0.51    0.00   96.94

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           3.98    0.00    0.00    0.00    0.00   96.02

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.10    0.00    2.05    0.00    0.00   93.85

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           7.61    0.00    1.52    0.00    0.00   90.86

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.02    0.00    1.01    0.00    0.00   94.97

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.01    0.00    2.01    0.00    0.00   95.98

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.05    0.00    0.00    0.00    0.00   98.95

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.42    0.00    1.48    0.00    0.00   93.10

... and so on


Code

With sed regular expressions i get rid of all the info that is useless.

[filter.sed]

1d
s/[a-z]//g
s/%//g
s/^[ ]*//g
s/[-:]//g
s/\.//g
s/   /r/g
s/rrrr//g
s/r /r/g
/^$/d
s/r.*//

s/^0\(.*\)/\1/
s/^0\(.\)/\1/

Use bash to prepare everything for midge:

[cputter.sh]

cat <<END
@head {
	\$time_sig 4/4
	\$tempo 250
}
@body {
	@channel 1 {
		\$patch 53
		\$length 60
		\$octave 5
		\$strum 8

cat <<END

	cat log | sed -f filter.sed > score.txt

# define the scale of 'low usage' to 'high usage'

	lowest=400
	low=1200
	normal=2400
	heigh=4000


# go through every line, compare it to the scale and convert it to a tone (the heigher the tone, the heigher the CPU-usage)

	while read line;
		do
			if [ "$line" -lt "$lowest" ];
				then echo "c"
			elif [ "$line" -lt "$low" ];
				then echo "d"
			elif [ "$line" -lt "$normal" ];
				then echo "f"
			elif [ "$line" -lt "$heigh" ];
				then echo "g"
			elif [ "$line" -gt "$heigh" ]; 
				then echo "a"
			fi
		done < score.txt

cat <<END
	}
}
END


Start recording your processor activity. Browse, code, watch some (flash) movies, read some mails and get a drink. Do some 3D rendering if you wish! (set the last iostat value high enough then though):

iostat -c 1 250 > log

When that's done:

bash cputter.sh | midge -o cputter.mid
timidity cputter.mid

enjoy!


Output file

File:Cputter.ogg

the file works when i fire it up in terminal but not through here... anyone has a clue why?