Tweet


* Skype [#r11c8a25]
チャットで話題になったので,入れてみる.
以前入れていたのだが,ライブラリをアップデートしたら動かなくなってしまったのでアンインストールしてたのである.
debian etch の場合は SuSE の rpm から alien で deb ファイルに変換してインストールすれば,何となく動くように.

で,アドレス帳を見ると,以前使ってたときのものがそのまま残っている.
が,Skype Test Call なんていう見慣れない宛先が登録されている.
その名のとおり,テスト用の自動応答の相手の接続である.

マイクの調整を兼ねて,かけてみる.
すると…
ミキサの入力ゲインがどんどん下がっていく.
入力のオーバフローを検出して Skype が勝手にレベル調整するらしい.
で,下げるのはいいんだけど,まったく上げてくれないのは困る.
というわけで,テスト先にはまったく音声は届かず.

というわけで,インストールしたはいいけどお蔵入り,かな.

* オシロスコープもどき [#re5669f9]
で,Skype がレベルを勝手に下げる,という結論に達するまでいろいろチェックしていたのである.

例えば
 $ hexdump /dev/dsp
とか.
単に open して read しただけでは
:サンプリング周波数|8000Hz
:チャネル数|1
:出力形式|unsigned 8 bit 0x80 がゼロレベルで 0, 255 が最大振幅.

の出力が得られる.

これだとあまり直感的ではないので,ちょろちょろっとプログラムを書いてみる.

 #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
で実行.

* 本日のツッコミ [#n4a4e3fc]
#comment


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS