Tweet

Skype

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

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

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

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

オシロスコープもどき

で,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

で実行.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-01-13 (土) 12:56:46 (4204d)