古いYamaha音源(YMFシリーズ)をLinux環境で鳴らす方法

皆さんは物持ちが良い人でしょうか、私はそうです。中々ものが捨てられません。一般的には古くて使えないものもつい勿体無いからと大事に仕舞い込んでしまいます。場所をとるので粗大ゴミの度に脅威に晒されますが(むしろ、ゴミの山に使えそうなのを見つけて欲しくなったことありませんか?)、そういったものに利用価値を見出したり全く違う用途を考えるのも楽しいものです。しかし、そういった品は大抵どこかひと手間かけてやらないと使えません。

最近では、とある古いノートPC(CPUはPentium3!)を実験机で利用しようと思い立ちOSにDebianをインストールしたとき音源が機能しませんでした。それには古いYamaha YMF-724/740/744/754 (DS-1)といった音源が載っています。ここでは古いYamaha音源をLinux環境で動作させるための覚書を残しておこうかと思います。

 

環境

学生時代のやつなので、もう10年以上前のですね。物持ち良く(捨てられず)倉庫に残っていました。

  • Dynabook A2/X10PMC (Satellite 2851)
  • CPU:Pentium3
  • MEM:256 + 256MByte
  • 音源:Yamaha YMFシリーズ
  • OS:Debian 8 jessie(32bit版)
Dynabook A2/X10PMC (Satellite 2851)
Dynabook A2/X10PMC (Satellite 2851)

 

Yamaha YMF音源が機能していない

このノートPCは実験室で使うために倉庫から引っ張り出してきたお古です。ネットワークに接続したいのでアップデートが行われているDebianをインストールすることにしました。しかし画面がまともに出力されず、それを解決しても今度は音が鳴りませんでした。

モジュールが読み込まれているか等を調べてみても、音源に関してはぱっと見では認識しているようだったので理由が分かりません。


~$ lspci | grep -i audio
02:07.0 Multimedia audio controller: Yamaha Corporation YMF-754 [DS-1E Audio Controller]


~$ lsmod | grep snd
snd_ymfpci 32063 0
snd_mpu401_uart 13299 1 snd_ymfpci
snd_rawmidi 22372 1 snd_mpu401_uart
snd_opl3_lib 17206 1 snd_ymfpci
snd_hwdep 12906 1 snd_opl3_lib
snd_seq_device 12980 2 snd_rawmidi,snd_opl3_lib
gameport 13270 1 snd_ymfpci
snd_intel8x0m 17500 0
snd_ac97_codec 96151 2 snd_ymfpci,snd_intel8x0m
snd_pcm_oss 44124 0
snd_mixer_oss 21822 1 snd_pcm_oss
snd_pcm 78128 4 snd_pcm_oss,snd_ymfpci,snd_ac97_codec,snd_intel8x0m
snd_timer 26105 3 snd_ymfpci,snd_pcm,snd_opl3_lib
snd 55101 12 snd_pcm_oss,snd_ymfpci,snd_ac97_codec,snd_hwdep,snd_timer,snd_pcm,snd_rawmidi,snd_mpu401_uart,snd_seq_device,snd_mixer_oss,snd_intel8x0m,snd_opl3_lib
soundcore 12890 1 snd
ac97_bus 12462 1 snd_ac97_codec


 

そこでブートログを見てみると、なにやらfirmwareの読み込みに失敗している旨のエラーメッセージが出力されています。

~$ sudo cat /var/log/messages | grep snd_ymfpci
[ 15.717629] snd_ymfpci 0000:02:07.0: firmware: failed to load yamaha/ds1_dsp.fw (-2)
[ 15.718146] snd_ymfpci 0000:02:07.0: Direct firmware load failed with error -2
[ 15.718153] snd_ymfpci 0000:02:07.0: Falling back to user helper
[ 15.722884] snd_ymfpci 0000:02:07.0: firmware request failed: -12
[ 15.723475] snd_ymfpci: probe of 0000:02:07.0 failed with error -12

以下のサイトを読んでいると、どうも過去にライセンス関係で問題があって必要なファームウェアがDebianパッケージから取り除かれてしまったようです。別途ソースコードからのビルドが必要です。

In linux-2.6 2.6.23-1, the binary-only firmware in this driver was removed (see the package changelog), due to discovered licensing issues. This was also removed from the alsa-source package to resolve bug 483918.

Installation
You are required to supply three firmware files for device use, which can be acquired from the ALSA project.

 

必要なドライバをセットアップする

ビルド環境を構築

まずビルドに必要なパッケージをインストールします。


$ sudo apt-get install alsa-base alsa-utils build-essential

 

ファームウェアをビルド

次にALSA projectのページからファームウェアのソースコードを入手してビルドします。


wget ftp://ftp.alsa-project.org/pub/firmware/alsa-firmware-1.0.29.tar.bz2
tar jxvf alsa-firmware-1.0.29.tar.bz2
cd alsa-firmware-1.0.29
./configure
cd ymfpci
make

$ ls -l *.fw
-rw-r--r-- 1 kiri kiri 12288 Oct 2 13:40 ds1_ctrl.fw
-rw-r--r-- 1 kiri kiri 128 Oct 2 13:40 ds1_dsp.fw
-rw-r--r-- 1 kiri kiri 12288 Oct 2 13:40 ds1e_ctrl.fw

 

ファームウェアを配置してからモジュールを再ロードする

ビルドが完了すると拡張子fwのファイルが3つ出来ていると思います。これを以下のディレクトリにコピーしてから、”snd-ymfpci”モジュールをunload/loadしてやります(再起動でもいいと思います)。

  • ファームウェアコピー先ディレクトリ:/lib/firmware/yamaha

$ sudo mkdir /lib/firmware/yamaha
$ sudo cp *fw /lib/firmware/yamaha/

$ sudo modprobe -r snd-ymfpci
$ sudo modprobe snd-ymfpci

これで音が鳴るようになりました。何か曲を鳴らして確認してみてください。
(ちなみに、Debianに初めから入っているサンプルの音データはすごいノイズ混じり(?)で音源が壊れているのかと勘違いしそうになります。ちゃんとした曲をYoutubeなりで拾ってきて再生してやれば安心出来ます)

 

所感

普通に考えるとオンボロPCを復活するのにかける時間があれば新品か、さもなくばもうちょっとマシな中古品を購入するのが正しいでしょう。かかった時間を考えるとOSインストールして動かないところを調査して~というので安いPCが買えそうです。しかし何故か楽しいからやってしまいます。この記事が、そんなご同類な方の参考になれば幸いです(そんな人いるかな?)。

 

参考

このページは以下のサイトを参考に記載させて頂きました。

コメントを残す

メールアドレスが公開されることはありません。

This blog is kept spam free by WP-SpamFree.