2005年11月1日火曜日

(FreeBSDが音痴) VCHANを使うと、音程が狂う

FreeBSDのVCHANというのは、MP3プレーヤーやビデオ再生ソフトなど、複数のソフトからでてくるオーディオデータを、ソフトウェア的にミキシングして、1個しかないPCMオーディオデバイスから音を鳴らす機能のことです。



あたりまえのことをえらそうに・・・という感じですが、Windowsなら、たしかWindows95では、音をだすアプリを1個実行すると、もうほかのアプリからは音が鳴らせなくなってしまいましたが、Windows98のころから複数のアプリで音を鳴らせるようになったと思います。



ちなみに、Macintoshでは、おぼえている範囲では、すでにSystem7(1991年くらい?)のころには、ミキシングできてました。えらい!



今のFreeBSDでは、普通はVCHANは、無効になっています。有効にするには、rootで
 sysctl hw.snd.pcm0.vchans=6
とかやると、6個まで、音を出すプログラムを実行できるようになります。詳しくは、「man sound」してみること。



さて、会社で使っているFreeBSD 5.4-STABLEなパソコンでは、なぜか、VCHANを有効にすると、音程が狂ってしまいます(音が低くなってしまう)。いやーん、気持ち悪いー、ってことでソースコードを探ってみましたところ、あやしげなところが見つかりました。



vchan.cというファイルに、

/* XXX gross ugly hack, murder death kill */

という投げやりなコメントと、

err = chn_setspeed(parent, 44100);

という、あぁ~ん?なんで44100で決めうちなんだよっ!っていうコードが見つかりました。
とりあえず、44100を48000にしてみたら、音程が狂うことはなくなりました。・・・って、手元にある1台のPCのためだけの修正なので、根本的な解決にはなっていませんが。これでは、人のことをいえません。



とはいえ、うれしいことに、これで、xmms、realplayer、mplayerなどを同時に実行できるようになりました。仕事しろよ>>自分



さていろいろ試してみると、1つ困ったことが見つかりました。ボリューム調節が、すべてのアプリで共通になっています。1個で音量をあげると、全部の音量が上がってしまいます。



たしか、ボリューム調節を個別にできるような記述を、以前見た記憶があるんだけど、今、マニュアルを見ても見つかりません。暇なときにソースコードを読むか・・・



0 件のコメント:

コメントを投稿