Skype †チャットで話題になったので,入れてみる. 以前入れていたのだが,ライブラリをアップデートしたら動かなくなってしまったのでアンインストールしてたのである. debian etch の場合は SuSE の rpm から alien で deb ファイルに変換してインストールすれば,何となく動くように. で,アドレス帳を見ると,以前使ってたときのものがそのまま残っている. が,Skype Test Call なんていう見慣れない宛先が登録されている. その名のとおり,テスト用の自動応答の相手の接続である. マイクの調整を兼ねて,かけてみる. すると… ミキサの入力ゲインがどんどん下がっていく. 入力のオーバフローを検出して Skype が勝手にレベル調整するらしい. で,下げるのはいいんだけど,まったく上げてくれないのは困る. というわけで,テスト先にはまったく音声は届かず. というわけで,インストールしたはいいけどお蔵入り,かな. オシロスコープもどき †で,Skype がレベルを勝手に下げる,という結論に達するまでいろいろチェックしていたのである. 例えば $ hexdump /dev/dsp とか. 単に open して read しただけでは
の出力が得られる. これだとあまり直感的ではないので,ちょろちょろっとプログラムを書いてみる. #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <stdlib.h> #define COLS 79 #define ROWS 24 #define M 5 main ( int argc, char *argv[] ) { int fd = 0; if ( argc >= 2 ) { fd = open ( argv[1], O_RDONLY ); if ( fd < 0 ) { perror ( NULL ); exit ( -1 ); } } for (;;) { int m; unsigned char buf[COLS + 2], b[M]; memset ( buf, ' ', COLS ); buf[COLS] = '\n'; buf[COLS+1] = '\0'; if ( read ( fd, b, sizeof(b) ) < sizeof(b) ) return 0; for ( m = 0; m < M; ++m ) { int x; x = b[m] * (COLS-1) / 255; buf[x] = '*'; } write ( 1, buf, sizeof(buf) ); } return 0; } 書きはじめると,ついついいろんな機能を付けようと凝りそうになるが,このぐらいにしておく. 使いかたは $ gcc osc.c -o osc でコンパイルして $ osc /dev/dsp で実行. |