穷人的特雷门琴
发表于 2003 年 1 月 28 日
如果您有兴趣体验演奏特雷门琴,但又不想花很多钱或自己构建套件,可以试试由 Seth David Schoen 编写的 “穷人的特雷门琴” (PMT)。
PMT 将配备 802.11b 网卡的笔记本电脑变成类似特雷门琴的乐器,它使用网卡报告的信号强度来控制音高。 要尝试它,首先使用命令 cc -o ttone -lm ttone.c 编译这个名为 ttone 的 C 程序。
#include <math.h>
#include <linux/kd.h>
const int A = 440;
const float r = 1.05946;
int pitch(int base, int observed){
return (int) A * pow(r, (observed-base));
}
int main(int argc, char *argv[]){
int base, observed;
if (strcmp("off", argv[1])){
base = atoi(argv[1]);
observed = atoi(argv[2]);
ioctl(0, KIOCSOUND, 1190000 / pitch(base, observed) );
} else {
ioctl(0, KIOCSOUND, 0);
};
}
将 ttone 可执行文件放在 PATH 环境变量包含的目录中。
现在运行以下名为 pmt.sh 的 shell 脚本,并移动到 802.11b 接入点的范围内。 您可以通过靠近或远离接入点,或者像特雷门琴演奏者那样将手移到 802.11b 天线上来改变音高。
#!/bin/sh
# Poor Man's Theremin
m=100
oldQ=foo
[ $1 ] && m=$1
while :
do
Q=$(iwconfig 2</dev/null | grep Link.Quality | cut -d: -f2 | cut -d/ -f1)
if [ $oldQ != $Q ]
then
./ttone $m $Q
fi
oldQ=$Q
done
穷人的特雷门琴没有真正特雷门琴的音量控制功能,并且音高的变化是离散的,而不是连续的。 实现这些功能留给读者作为练习。
Don Marti 是 Linux Journal 的主编。
电子邮件: dmarti@ssc.com
