●Linux上で、SBLive! (emu10k1)の内蔵MIDI音源を使用する方法
※ SBLive! や emu10k1その他の語句は、Creative Technology Ltd. と E-mu社の登録商標、もしくはその略記です。

  この分野では古くから、現在Erlangen-Nuernberg大学で研究されている
岩井 隆 博士が開発されたドライバやユーティリティが重用されています。
  現在の所、ALSAのドライバとAWE32用のSoundFontローダーを用いること
で内蔵MIDIを使用することができるそうです。

  インストールと設定の方法は、博士のALSA-projectでのWeb Site

http://www.alsa-project.org/~iwai/

にあります。日本語の解説文が、

http://www.alsa-project.org/~iwai/alsa-jp.html

にあり、明快に記述されています。おそらく岩井氏御自身の他には、これ程
まとまった情報を提供されている人はいないと思われます。
 


-多少の留意点- 

○ /etc/modules.conf (あるいは、/etc/modprobe.conf)の中で、ver.0.5.x
では snd-card-emu10k1 となっていた所は、ver.0.9以降、snd-emu10k1 と書か
ねばなりません。

○sfxloadにはOSS互換の ライブラリが必要なので、最近のalsaでは alsa-oss
パッケージもインストールする必要があります。

○alsaドライバーインストール 後は、make installで注意されるとおり、ボリュ
ームが0になっているので、aumixなどで調整しないと音が出ないのはよく知られ
ていることであります。

○まれに音が出ても発振してしまう ことがありますが、これは、Playerチャネ
ルであるべきものがRecoderチャネルになっているためで、例えばaumixで
Volumeに "R" のマークがついているときは発振します。aumixでスペースを押
すと選択したチャネルの "P" と "R" が切り替わります。

○sfxloadのインストール

岩井氏の作成されたドライバやユーティリティのサイト
"http://www.alsa-project.org/~iwai/awedrv.html" から、
awesfx-xxx.tar.bz2をダウンロードします。 そして、以下のよう
に/usr/localにインストールします。

# tar xvfI awesfx-xxx.tar.bz2
# cd awesfx-xxx
# xmkmf
# make Makefiles
# make all
# make install

最後に必ず、/etc/ld.so.confに/usr/local/libが含まれていること
を確認し、

# ldconfig

を実行します。

○SoundFontのコピーについて
 SBLive!カードに付属のCD-ROMをマ ウントし、
# cp /mnt/cdrom/AUDIO/COMMON/SFBANK/8MBGMSFX.SF2 /usr/local/lib/sfbank/8mbgmsfx.sf2

としてSoundFontをコピーします。なお、コピー先はどこでも構
いません。以下 /somewhere/somedir としておきます。

○SoundFontのロードについて
 起動時に、SoundFontのロードが解説の 通りにはできない場合、
/etc/rc.d/rc.localなどに、

/usr/local/bin/sfxload -P /somewhere/somedir 8mbgmsfx.sf2

を追記すれば良いようです。
  ところで、氏が述べられている、モジュールのロード時に自動的に読み込ませ
る方法は、私の環境では働きませんでした。  /etc/modules.conf に書いた
post-installの項目が有効にならない場合もあるようです。カーネルを自分で
コンパイルした場合には、コンパイル時の設定に不都合があれば、モジュールの
ロードなどでよく不具合があるものですが、ディストリビューションをそのまま
使う場合にもこういうことは時々あります。

○一例

参考までに、x86_64版Fedora Core 3で動かした例を示します。まず、alsa-driver、
alsa-lib、alsa-utils及びawesfxをインストールし、次に、サウンドフォントを
/usr/local/share/sounds/sf2にコピーします。さらに、/etc/modprobe.conf 
に以下の内容を追加します。

alias snd-card-0 snd-emu10k1
options snd-card-0 index=0
alias snd-major-14 soundcore
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss

最後に、/etc/rc.d/rc.local に以下の内容を追加する必要がありました。

echo "Load module snd_seq_oss"
/sbin/modprobe snd_seq_oss
sleep 2s
echo "Load a sound font"
/usr/local/bin/sfxload -P /usr/local/share/sounds/sf2 8mbgmsfx.sf2

私の環境では、なぜか途中で2秒も待たないといけない。

※ところで、Fedora Core 3 for x86_64では、playmidiのコンパイルにも僅かに修
正を要します。変更すべきは以下の通り。なお、libvgaとgtkは無視してコンパイル
されます。

[akira@localhost playmidi-2.4]$ diff Makefile Makefile.bak
15c15
< LIBNC = -L/usr/lib64 -lncurses
---
> LIBNC = -L/usr/local/lib -lncurses
18,20c18,20
< LIBX11        = -L/usr/X11R6/lib64 -lXaw -lXmu -lXt -lX11 -lXext -lSM -lICE
< LIBGTK        = -L/usr/X11R6/lib64 -lgtk-1.1 -lgdk-1.1 -lglib-1.1 -lX11 -lXext -lm
< LIBVGA        = -L/usr/local/lib64 -lvgagl -lvga
---
> LIBX11        = -L/usr/X11R6/lib -lXaw -lXmu -lXt -lX11 -lXext -lSM -lICE
> LIBGTK        = -L/usr/X11R6/lib -lgtk-1.1 -lgdk-1.1 -lglib-1.1 -lX11 -lXext -lm
> LIBVGA        = -L/usr/local/lib -lvgagl -lvga




○playmidi及びxplaymidiのオプション
オプションは、awe32では -a でしたが、SBLiveでは、-a の他、 外部出力用の
-e オプションでも良いようです。

$ playmidi -a foo.mid
$ xplaymidi -a hoge.mid

で演奏されます。


  戻る