ひとりごと

翌日:[2003-11-02]  前日:[2003-10-30] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2003/10/31 (金)

・ FreeBSDのおと

Windowsでは運がよければインストールしただけで起動時にジャカジャ音が出てきます。運が悪くてもメーカーの用意しているデバイスドライバを入れたら大抵 音がでます。これに対して FreeBSD では自分の所有しているデバイスを把握した上でカーネルオプションに長い呪文を書いて必要ならパッチを当ててようやく動くようになるので、普通の人は音を出せるようにならない・・・と思っていました。FreeBSD2.xのころにPnPなISAサウンドカードを苦労して動かせなかった(^^;)経緯があるからです。

ところが、ひとさまのWWWページを見ていると、みなさんわりと簡単に動かせている場合が多いのですねー。最近は自動で動くようになったのかな~と思いつつも、うちの機械ではブートメッセージに pcm とか出てこないので『私の機械では動かないのだろう』と思っていたのです。が、何気なくハンドブックをみますと、『カーネルオプションに device pcm を追加しなくてはならない』と書いてあるんですねー。うちのFreeBSDで音が鳴らなかったのは GENERICカーネルに device pcm が入っていなかったからでした(笑)。

てなわけで、さっそく ThinkPad T20(FreeBSD5.1) にてカーネル再構築です。よしよし、ちゃんと

pcm0: <CS461x PCM Audio> on csa0
pcm0: <Cirrus Logic CS4297A AC97 Codec>
と表示されました。ジュークボックス用に WAV ファイルが山ほどありますから、ports/audio/waveplay にて試しに演奏です。

スピーカから音が鳴ります

おぉぉ、歴史的な瞬間!! と思ったのですが、時々ズズズズとノイズが入ります。定期的に鳴っているようなので計ってみるとほぼ30秒おきにノイズが入るようです。プレーヤの問題かな~と思って ports/audio/amp にて mp3 ファイルを再生してみましたが、こちらも30秒問題が発生します。どうやらデバイス側に問題があるようです。

さて、内蔵音源が動いたのなら・・・ということで、今度はUSB-光アダプタ(D2Link)を差し込んでみました。

pcm1: <USB Audio> on uaudio0
uhid0: I-O DATA DEVICE,INC. D2Link USB Audio Device, rev 1.10/1.00, addr 2, iclass 3/0
お、なかなかいい感じではないか。てことで、早速再生してみました。

すごいノイズです(笑)

さきほどのノイズとは違い、もとの曲のテンポでざらざらノイズが再生されます。でもって面白いことに、このUSB-光アダプタは48kHz出力専用なはずなのですが、外付けDAコンバータには44.1kHzと表示されています。明示的に48kHzを指定しなくちゃいかんのかな~と思って
# waveplay -f /dev/dsp1 -S 48000 ファイル名
としてみますと、確かにざらざらノイズはなくなって音楽が演奏されるのですが、テンポが早くなって音程が少し高くなります(笑)。どうやらこのデバイスはソフトウェアでサンプリングレート変換をしてから48kHzで出力してあげないといけないようです。なお、音楽が鳴るといっても30秒ノイズは同じように発生していました。

USB光アダプタが動くのなら・・・ということで、いつもジュークボックスで使っている Sound Blaster Digital Music で試してみました。うまくいけば44.1kHz出力も可能なはずです。

pcm1: <USB Audio> on uaudio0
uhid0: Creative USB Audio, rev 1.10/1.00, addr 2, iclass 3/0
うんうん、いいですねー。で、音を鳴らしてみますと、聴きなれた綺麗な音が出てきます。おぉぉ、完璧!! と思っていると、30秒ノイズが(笑)。う~む、デバイス固有の問題でもなさそうですねー。なんだか意味不明です。

さて、ノイズの問題の原因はT20かFreeBSD5.1にありそうなので、こんどは 4.9-RELEASEを入れたばかりの ThinkPad 560X にて試してみました。いきなり Sound Blaster Digital Music を差し込んでの実験です。

pcm0: <USB Audio> on uaudio0
uhid0: Creative USB Audio, rev 1.10/1.00, addr 2, iclass 3/0
ん? こちらは内蔵音源が認識されていないようですね。で、演奏させてみますと

ちゃんと音楽が鳴ります。ノイズも入りません。

ぱちぱち、完璧ですね。ということで、我が家のFreeBSDでもちゃんと音が鳴ることが確認できました。

□ 関連記事

[つっこみ]

・ FreeBSD音のススメ

音が出るようになったところで、活用方法を検討してみます。

Thinkpad T20 で音を鳴らそうとしたのは、T20はサーバとして24時間通電しており、メンテナンス中以外は端末操作をすることもありませんから、これにジュークボックスの仕事を任せることが出来たらいいかな~と思ったからです。ただ、30秒ノイズのせいでこれはかなわぬ夢となりました。

次に考えたのは、現在Windows2000で走らせているジュークボックスのFreeBSD化。ジュークボックスの仕事は

です。一つ目は問題なさそうなのですが、二つ目でアウトです。なんたって560XはXを走らせようとすると止まってしまうのですから(笑)。まぁ kon を使えばテキストで表示できなくもなさそうなのですが、もう少し字が大きいほうがいいですしねー。

といっても、FreeBSDで演奏するメリットもあります。

負荷が低い
下記はT20のCDの入っているディレクトリをnfsでマウントして、'waveplay *'を実行して一時間ぐらいほったらかしたものです。
last pid:  4330;  load averages:  0.06,  0.05,  0.01  up 0+14:38:14    13:08:50
27 processes:  1 running, 26 sleeping

Mem: 12M Active, 104M Inact, 24M Wired, 11M Cache, 25M Buf, 568K Free
Swap: 200M Total, 40K Used, 200M Free


  PID USERNAME PRI NICE  SIZE    RES STATE    TIME   WCPU    CPU COMMAND
 4166 takatani  -6   0   880K   376K pcmwr    3:19  1.66%  1.66% waveplay
 4189 takatani   2   0  1904K   964K select   0:22  0.00%  0.00% top
   89 root       2   0  3032K  1636K select   0:06  0.00%  0.00% sendmail
   84 root       2   0  2592K  1348K select   0:02  0.00%  0.00% sshd
 4111 takatani   2   0  5292K  1760K select   0:01  0.00%  0.00% sshd
   82 root      10   0  1024K   620K nanslp   0:01  0.00%  0.00% cron
   73 root       2   0   984K   612K select   0:01  0.00%  0.00% syslogd
 4112 takatani  18   0  1428K  1020K pause    0:00  0.00%  0.00% tcsh
   86 root       2   0   924K   440K select   0:00  0.00%  0.00% usbd
 4109 root       2   0  5292K  1716K sbwait   0:00  0.00%  0.00% sshd
 4330 takatani  30   0  1876K   840K RUN      0:00  0.00%  0.00% top
 4168 takatani  18   0  1388K   952K pause    0:00  0.00%  0.00% tcsh
   92 smmsp     18   0  2936K  1508K pause    0:00  0.00%  0.00% sendmail
  126 root       3   0  1336K   844K ttyin    0:00  0.00%  0.00% csh
 4147 takatani  18   0  1392K   960K pause    0:00  0.00%  0.00% tcsh
 4167 root      10   0  1268K   916K wait     0:00  0.00%  0.00% login
  118 root      10   0  1268K   820K wait     0:00  0.00%  0.00% login
 4146 root      10   0  1268K   916K wait     0:00  0.00%  0.00% login
4.9RではCardBusが使えませんからPCMCIAなNICを使っているのですが、Windowsで動かしたときと比べると驚異的に低い負荷で動作し、メモリもさほど必要としません。
外部からの制御が簡単
Windowsで C++ Builder で書いた簡易ランダム演奏プログラムはとりあえず動いているものの、例えば手元のノートパソコンでネットワーク越しに曲名表示や曲目選択をしようとすると、どうやったらいいのかぜんぜん見当がつきません。これに対して FreeBSD で動いている場合には、たとえネットワークに関するノウハウが全く無くても、Apache を走らせておけばWWWブラウザを通じて演奏の制御や 演奏中の曲目表示はいとも簡単にできます。曲目切り替え時の表示更新もあらかじめ演奏時間を取得しておいてJavaScriptで時間経過後リロードしてやればできそうです。

ということで、FreeBSDから音が出るようになるといろいろ遊べそうですね。T20には30秒ノイズ問題があるといっても、'You've got mail' ぐらいはしゃべらせることができます(^^;)

[つっこみ]
11/02( うっちゃん )
私はWindows XPでも苦労してしまいましたが…

いや音は出るには出るのですが、楽器がぜんぜん違うので
YMF744ドライバあっちこっち探してしまいました。
混乱の原因にS-YXG50 もあったのです。
Win98でほったらかしていたのがあまりに長かったせいもあります。
CD-RWって書いてあるのにCDドライブとしか書かれていない。どうしたものかな。
[つっこみ]

翌日:[2003-11-02]  前日:[2003-10-30] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)