%% mgp2ps sound.mgp | psnup -s0.95 | psnup -m0.5cm -4 -l > hoge.ps %include "default.mgp" %default 1 bgrad 100 100 128 0 0 "#4466bb" "#001144" "#000044" "#000044" "#000044" "#000044" "#114488" %page %nodefault %center %size 7 48KHzを堪能する %size 6 (CF-B5(E)Rとのつきあいかた) %size 5 Zinnia %size 4 (zinnia@risky-safety.org) %right %size 3 version 1.00 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page CF-B5Rシリーズのサウンド YMF743というチップが載っている AC'97 revision 2.0 準拠 FreeBSDでは4.3-RELEASEで対応予定 48KHz、16ビット、2chでの録音、再生性能をもつ VRA/VRMを持たない 再生/録音のサンプルレートは48KHz固定 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page FreeBSD / Linuxのサウンド設定のしかた ioctl(/dev/dspのfd, 設定する種類, &変数) 変数に設定した値へのポインタを入れる ioctlに失敗すると-1がかえってくる ioctlに成功すると、実際に設定された値が変数に帰ってくる 例 dspfd = open("/dev/dsp", O_WRONLY); rate = 44100; ioctl(dspfd, SOUND_PCM_WRITE_RATE, &rate); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page 48KHz固定の問題点 48KHz以外のレートでしか動かないアプリケーションは そのレートにセットできずに失敗する そのレートにセットできていないにもかかわらずそのまま使ってしまう(実際は48KHz) 結果、プログラムが動かない/動いてもちょっと早送りで聞こえるなどの問題が起きる %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page 解法(1) どこかでレートを48KHzに変換するための処理をする必要がある アプリケーションレベル コマンドラインオプションで指定する mpg123なら -r 48000 ソースをいじる 44100を48000に置換するなど(取り扱い注意) ドライバレベル ドライバで48000Hzに強制的に変換する 現状では不可能 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page 解法(2) サウンドサーバを置く アプリケーションが直接/dev/dspなどをいじらない サーバに対してデータを送ることで演奏してもらう サウンドサーバの例 EsounD aRts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page サウンドサーバの特徴 複数のアプリケーションの間で同時にサウンドを使える(mixing) ネットワーク透過 実際に音を出すまでにいろんな処理を行うことができる アプリケーションごとのボリュームの設定 エフェクト レート変換など レート変換はいずれにしろ必須 複数アプリケーションが異なるサンプルレートで接続した場合はどうする? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page サウンドサーバ(?) xmms Pluginによる充実したサウンド/動画再生環境 高品質なレート変換 とりあえずオーディオフォーマット(MP3、WAVなどなど)に対応したInput Pluginを書いとけばよい nas Network Audio System 使ったことないので不明... yiff 使ったことないので不明... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page サウンドサーバ(1) EsounD mixing、レート変換をサポート ネットワーク対応 Javaの実装もある かなり多くのアプリケーションが対応している 対応してないアプリケーションも無理矢理対応させるhack(esddsp) レート変換の品質が悪い かなり凶悪なノイズが載る %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page サウンドサーバ(2) aRts 高品質なミキシング エフェクトも充実 コンソール(KDE専用)もある artsdsp(esddspのaRts版) FreeBSDで使うにはちょっと苦労する EsounDとの互換性はない まだマイナー %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page 当面の結論 理想は「Java版EsounDをartddsp経由で動かす」 現状では不可能 JDK1.3のFreeBSD native版が出れば可能だと思われる aRtsが一番か 対応してるものはそのまま使い 対応してないものはartsdsp経由で使う