AWEDRV FAQ 日本語版

FAQ ver.1.27

岩井 隆 ( tiwai@suse.de)

原版: http://members.tripod.de/iwai/awedrv-faq.html

オリジナルサイト: http://members.tripod.de/iwai/awedrv-faq-ja.html


1. はじめに
Q1.1: awedrv ってなんですか? 何ができますか?
Q1.2: どこからダウンロードできますか?
Q1.3: どんなサウンドカードに対応してますか?
Q1.4: MIDI ファイルの演奏はどうやるんでしょう? 何が必要ですか?
Q1.5: .MOD ファイルの演奏はどうやるんでしょう? 何が必要ですか?
Q1.6: マニュアルに書いてある sf1to2.exe ってどこにあるんですか?
2. インストール
Q2.1*: どうやって linux にインストールするんですか?
Q2.2*: Linux のカーネルコンフィグで AWE32 用に必要なオプションは何ですか?
Q2.3*: Linux サウンドドライバが私のSB32-PnP カードを認識してくれません。
Q2.4*: ISA PnP tools をインストールしても、AWE32 カードを検出できません。
Q2.5*: サウンドモジュールに自動的に GM ファイルを読み込ませることはできますか?
Q2.6*: Slackware 96 の linux-2.0.0 で動きません。
Q2.7+: どうやって FreeBSD にインストールするんですか?
Q2.8+: FreeBSD で PnP カードをインストールするには?
3. MIDI ファイルを演奏する
Q3.1: drvmidi も playmidi も何にも音が出て来ません。なぜ?
Q3.2: カードに DRAM を載せていないのですが、MIDI の演奏はできますか?
Q3.3: デフォルトの ROM サンプルで演奏するには?
Q3.4: SBK ファイルが付属した MIDI ファイルを聞くにはどうするのですか?
Q3.5: 追加の SoundFont ファイルを読み込ませたら、おかしな音を出すようになりました。
Q3.6: コーラス・リバーブモードを変えても何の変化もありません。なぜ?
Q3.7: クリックノイズが発生します。
Q3.8: 音が大きすぎるよ!
Q3.9: GUS パッチファイルは使えますか?
Q3.10: ドラム(または他の音)の代わりにピアノが聞こえるのですが。
Q3.11: ドラム音が Windows と比べて小さいようですが
Q3.12: drvmidi のダイナミック・ロード機能って何ですか?
Q3.13: デフォルトのオプションを指定したいのですが。
Q3.14: Roland SC88 用の GS MIDI ファイルは演奏できますか?
Q3.15: Yamaha XG フォーマットの MIDI ファイルは演奏できますか?
Q3.16: ver.0.4.3 の音が他のバージョンと違うようなんですけど…
Q3.17: virtual bank file って何ですか?
4. プログラム・その他
Q4.1: MOD プレイヤーの音がひどいんですが。
Q4.2*: Netscape から MIDI ファイルを演奏するには?
Q4.3: AWE32 用の音楽プログラムを作ろうと思うのですが、どうやって AWE32 ドライバを制御するのでしょうか?
アスタリスク(*)の付いた質問は Linux 関連の話です。 プラス(+)の付いた質問は FreeBSD 関連の話です。 マイナス(-)は古いドライバ(v0.3以前)についての質問です。


1. はじめに

Q1.1: awedrv ってなんですか? 何ができますか?

awedrv は CreativeLabs の AWE32 およびコンパチカード(SB32やAWE64シリーズ)の ためのOSS/Free (かつての USS-Lite または VoxWare) の拡張ドライバです。 このドライバは、 FM-OPL3 ドライバや GUS ドライバと同様に、AWE32上の Emu8000 チップを /dev/sequencer/dev/sequencer2 デバイスを通して 制御する機能を提供します。 また、ver.0.3 から、GUS コンパチドライバとしても機能するようになりました。 (モジュールプレイヤーはこの機能を利用しています。) 以下のプログラムにより、MIDI や MODULE ファイルの演奏が可能になります。

現在のドライバは、Linux 2.1.x, 2.0.x カーネル上の OSS/Free の lowlevel ドライバ、 または Linux 1.2.x や FreeBSD 上の OSS/Free-3.0.x (元 VoxWare) への パッチとして提供されています。 どちらの環境でも良好に動いています。 ただし、PnP カードをお使いの方は注意が必要です。 PnP カードのインストールについては、 Q2.3Q2.4 および Q2.8 を御覧下さい。

現在 AWE ドライバをサポートしているプログラムは:


Q1.2: どこからダウンロードできますか?

以下の Web ページからダウンロードできます。

http://members.tripod.de/iwai/awedrv.html


Q1.3: どんなサウンドカードに対応してますか?

基本的には CreativeLabs の AWE32, SB32, AWE64, AWE64 Gold カードで動きます。 AWE64 (Gold) のソフトウェアシンセはサポートされていませんので、 最大32音(DRAM搭載時 30音)しか再生できません。

SB 64 PCI は対応して*いません*。 名前は似ていますが、Ensoniq の PCI とコンパチブルなカードです。 最近の Linux 2.2.x カーネルにはドライバが含まれています。

SB Live! にも対応して*いません*。 これは全く別のサウンドカードです。 SB Live! 用のドライバは、Creative Labs から入手できます。 http://www.opensource.creative.comを参照して下さい。

いくつかの AWE32 コンパチなサウンドカードでは動作可能です。 CT-1920 を使った "AWE32 upgrade board" は、awedrv で動くことが 確認されています。 その他の CT-1291 から 1294 を使ったアップグレード・ボードも動くと 思われます。


Q1.4: MIDI ファイルの演奏はどうやるんでしょう? 何が必要ですか?

awedrv で MIDI を再生するには、サンプルファイルをドライバにロードするための awesfx ユーティリティ・パッケージと、 awedrv をサポートしたプレイヤープログラムが必要です。 そもそも、awedrv は起動時には何の音情報を内部に持っていません。 そこでユーザーは自分で SoundFont ファイルをロードしなければなりません。 この手続きは ROM サンプルでも必要です(Q3.4参照)。 sfxload ユーティリティ(awesfx パッケージに含まれる)は、上記のサイトからダウンロードできます(Q1.2)。

SoundFont ファイルをロードするには、 sfxload ユーティリティを使います。 例えば、GM SoundFont ファイル synthgm.sbk をロードするには、 以下のコマンドを実行します。

	% sfxload synthgm
注: 古い版 (v0.3.x以前) のドライバおよびユーティリティを用いている場合は、 オプション '-i' が必要です。 このオプションは、このサンプルをロードする前にドライバ上の 全てのサンプルを消去することを意味します。

これで、MIDI ファイルを演奏する準備は整いました。 drvmidi (awemidi パッケージに含まれる) プログラムで演奏してみます。

	% drvmidi sample.mid
MIDI ファイルに付属した特定の SBK または SF2 ファイルを使用する方法は Q3.4 を御覧下さい。

また、新しい版の drvmidi (v0.4.0) は、on demand なサンプルのロードが可能です。 この機能を使うと、大抵の MIDI ファイルで 512kB のメモリだけで 2MB の GM/GS サウンドフォントによる演奏が可能になります。

	% drvmidi -L 2mbgmgs sample.mid
また、8MB の DRAM で 12MB のフォントを用いての演奏も可能です。 awedrv ver.0.4.3 では、新しい機能によってロード時間が短縮されます。 詳しくは Q3.12, Q3.13 を御覧下さい。


Q1.5: .MOD ファイルの演奏はどうやるんでしょう? 何が必要ですか?

これまでのところ、いくつかのモジュールプレイヤーが awedrv を サポートしています(Q1.1)参照)。 現在では xmp、gmod 両方とも AWE ドライバを正式にサポートしています。

awedrv-0.4.3は音量の計算方法が以前のバージョンと異なるため、 再生音が小さすぎたり大きすぎたりするかもしれません。 その場合は、awesfx-0.4.3 パッケージに含まれる aweset ユーティリティを用いて、 以前とのコンパチ・モードにしてから、xmp などで演奏して下さい。

	% aweset newvolume off
	% xmp foo.mod

注: 上記の両プログラムを動かすには、サウンドドライバの構築時に SB16ドライバの MIDI 入力をオンにする必要があります。


2. インストール

Q2.1*: どうやって linux にインストールするんですか?

詳しくは awedrv ソースパッケージの中の INSTALL.awe ファイルを 御覧下さい。 基本的に、root ユーザーになって awedrv ソースディレクトリ上で install.sh スクリプトを実行するだけです。

	% su
	# sh ./install.sh
次に、カーネルを再構築します。 どのオプションを指定するかは Q2.2 を御覧下さい。
	# cd /usr/src/linux
	# make xconfig
		または
	# make menuconfig
次に、カーネルとモジュールを make してインストールします。
	# make
	# make modules; make modules_install


Q2.2*: Linux のカーネルコンフィグで AWE32 用に必要なオプションは何ですか?

基本的に awedrv に必要なオプションは "lowlevel sound driver support" と "AWE32 wave synth" だけです。 (もし OSS/Free-3.0.x (旧 VoxWare)をお使いの場合は、 後者だけが現れます。) AWE32ボードでは、全てのデータ転送は I/O ポートだけを介して行われます。 awedrv はこれらの I/O ポートを自動的に検出するので、 特に アドレスや IRQ を指定する必要はありません。

もちろん、デジタルサウンドの再生や録音、FM シンセ、ミキサーといった SoundBlaster の機能も必要でしょう。 awedrv 自体は Emu8000 チップ制御のためのドライバなので、上記の機能は 他の SB ドライバがサポートしています。 したがって、他の SB16 のオプションは全て Yes にしたほうが良いでしょう。

私の場合、.config ファイルのサウンド部分は以下のようになります:

#
# Sound
#
CONFIG_SOUND=m
# CONFIG_PAS is not set
CONFIG_SB=y
CONFIG_ADLIB=y
# CONFIG_GUS is not set
# CONFIG_MPU401 is not set
# CONFIG_UART6850 is not set
# CONFIG_PSS is not set
# CONFIG_GUS16 is not set
# CONFIG_GUSMAX is not set
# CONFIG_MSS is not set
# CONFIG_SSCAPE is not set
# CONFIG_TRIX is not set
# CONFIG_MAD16 is not set
# CONFIG_CS4232 is not set
# CONFIG_MAUI is not set
CONFIG_AUDIO=y
CONFIG_MIDI=y
CONFIG_YM3812=y
SBC_BASE=220
SBC_IRQ=7
SBC_DMA=1
SB_DMA2=7
SB_MPU_BASE=300
SB_MPU_IRQ=-1
DSP_BUFFSIZE=65536
CONFIG_LOWLEVEL_SOUND=y
# CONFIG_ACI_MIXER is not set
CONFIG_AWE32_SYNTH=y

なお、この設定値をそのままコピーしないで下さい。 SBカードの IRQ や DMA の値はそれぞれのマシンによって違います。 通常、MPU base アドレスは 0x330 になっているでしょう。 私は SCSI カードとの衝突を避けるためにこの値に設定しています。 (Q2.3isapnp.conf の設定は Neal のマシンのものですから、0x330 になってます。)


Q2.3*: Linux サウンドドライバが私のSB32-PnP カードを認識してくれません。

これは PnP の初期化の問題です。 Linux カーネルは PnP の初期化をサポートしていないので、 サウンドドライバをロードする前に特殊な処理が必要になります。 これを解決するには幾つかの方法があります。

  1. Linux ISA PnP suport を使う (2.3.x カーネルのみ)
  2. Linux PnP driver を使う (2.0.x 及び 2.1.x カーネルのみ)
  3. ISA PnP tools を使う (カーネルバージョンに関係なし)
  4. DOS 上で PnP card を初期化した後 loadlin で Linux をブートする

最初の手法は最近の Linux-2.3.x カーネルのみ可能です。 これは awedrv-0.4.4 からサポートされています。 カーネル構築時に ISA PnP support を使用可能に設定して下さい。 ISA PnP を付けてコンパイルすると、awe_wave モジュールに isapnp オプションが加わります。 通常は 1 に設定されていて、PnP の自動検出、初期化を行います。 もし 非 PnP カードを使っているのなら、この値を 0 に設定して下さい。

2番目の手法は、 Linux 上で Plug'n'Play driver を用いるものです。 これは、Tom Lees が開発したドライバで、 カーネル上で PnP デバイスの制御が可能です。 サウンドドライバ(SB16, MPU401, OPL3, AWE32) やその他の PnP ISA カードを 自動的に認識するためのパッチを含んでいます。 パッチを当てたカーネルの再構築が必要です。 最新の awedrv (v0.4.3) は既に PnP ドライバのインターフェイスが組み込んであるので、awedrv 自体にパッチを当てる必要はありません。 詳しくは、PnP driver project のホームページを御覧下さい。

http://www-jcr.lmh.ox.ac.uk/~pnp/

3番目の手法については、 Neal Sanche (neal@nsdev.ocunix.on.ca) が ISAPnP ツールの使い方を まとめてくれました。

Linux で SoundBlaster 32 PnP をセットアップする

SoundBlaster 32 PnP は他の plug and play デバイスと同様に、 デバイスドライバをロードする前に初期化する必要があります。 すなわち、音を聞くにはある種の初期化手段が必要だ、ということです。 現在、多くの PnP プロジェクト (たとえば http://www.redhat.com/linux-info/pnp) が開発されてきています。 私は、ISAPnP という簡単なツールを使っています。 これは以下の所で入手できます:
http://www.redhat.com/linux-info/pnp/other.html

サウンドを機能させるのに必要なステップは以下の通りです。

  1. Linux カーネルをモジュール機能をオンにしてコンパイルし、 サウンドドライバをモジュール化する。 Linux 上で PnP カードを初期化した *後* にドライバをロードしなければ ならないので、モジュール化する必要があるわけです。
  2. 起動スクリプト(rc.local や 最近の RedHat では rc.modules など)のどこかで、 サウンドカードを初期化します。 ISAPnP は簡単に設定でき、信頼できます。
  3. サウンドモジュールをロードします。ミキサーを設定します。

例えば、これは私の起動スクリプトの設定です。

#!/bin/sh

# initialize PnP devices
if [ -x /sbin/isapnp ]; then
  echo "Configuring PnP devices"
  /sbin/isapnp /etc/isapnp.conf
fi
 
echo "Loading sound module"
/sbin/modprobe -a sound

ISAPnP は極めて簡単に設定できるプログラムです。 以下は私の isapnp.conf ファイルのコピーです。 各ポートと IRQ 設定については(SB マニュアルからの)デフォルト値を使っています。 2つの I/O ポート (0xA20 と 0xe20) を WaveTable に追加するのを忘れないように! これらのポートは pnpdump では検出されませんが、初期化する必要があります。 (Q2.4参照)

(READPORT 0x0273)
(ISOLATE)
(IDENTIFY *)

# Card 1: (serial identifier 6d 00 0e b0 52 44 00 8c 0e)
# CTL0044 Serial No 962642 [checksum 6d]
# Version 1.0, Vendor version 1.0
# ANSI string -->Creative SB32 PnP<--
#
# Logical device id CTL0031
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE CTL0044/962642 (LD 0
# ANSI string -->Audio<--
  (INT 0 (IRQ 5 (MODE +E)))
  (DMA 0 (CHANNEL 1))
  (DMA 1 (CHANNEL 5))
  (IO 0 (BASE 0x0220))
  (IO 1 (BASE 0x0330))
  (IO 2 (BASE 0x0388))

  (ACT Y)
))

# Logical device id CTL0021
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE CTL0044/962642 (LD 2
# ANSI string -->WaveTable<--
  (IO 0 (BASE 0x0620))
  (IO 1 (BASE 0x0a20))
  (IO 2 (BASE 0x0e20))
  (ACT Y)
))

# Logical device id CTL7001
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE CTL0044/962642 (LD 3
#     Compatible device id PNPb02f
#     ANSI string -->Game<--
#     Logical device decodes 16 bit IO address lines
#         Minimum IO base address 0x0200
#         Maximum IO base address 0x0200
#         IO base alignment 1 bytes
#         Number of IO addresses required: 8
# (IO 0 (BASE 0x0200))
# (ACT Y)
))

# Logical device id CTL0051
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE CTL0044/962642 (LD 4
#     ANSI string -->StereoEnhance<--
#     Logical device decodes 16 bit IO address lines
#         Minimum IO base address 0x0100
#         Maximum IO base address 0x03f8
#         IO base alignment 8 bytes
#         Number of IO addresses required: 1
  (IO 0 (BASE 0x0108))
(ACT Y)))

これでおしまいです。将来的には、Linux カーネルで Plug and Play をサポートして、 isapnp ツールは必要なくなるでしょう。


Q2.4*: ISA PnP tools をインストールしても、AWE32 を検出できません。

/etc/isapnp.conf ファイルの WaveTable エントリーを 調べてみて下さい。 AWE32 は3つの I/O ポート (0x620, 0xa20, 0xe20) を用いますが、 pnpdump の出力では最初の1つのポートしか検出されません。 この場合は、残りの2つを自分で追加する必要があります。 例えば、このような具合です。

# Logical device id CTL0021
(CONFIGURE CTL0044/962642 (LD 2
# ANSI string -->WaveTable<--
  (IO 0 (BASE 0x0620))
  (IO 1 (BASE 0x0A20))
  (IO 2 (BASE 0x0E20))
  (ACT Y)
))

詳しくは、ISA PnP FAQ ページ ( http://www.roestock.demon.co.uk/isapnptools/isapnpfaq.html ) を御覧下さい。


Q2.5*: サウンドモジュールに自動的に GM ファイルを読み込ませることはできますか?

はい。 モジュールをロードした後に実行されるコマンドを /etc/conf.modules ファイルの post-install コマンドでもって設定することができます。 例えば、

post-install sound	/usr/local/bin/sfxload synthgm
同様に、ミキサーの音量も自動的に設定できます。
post-install sound	/usr/local/bin/setmix -f /etc/mixrc;\
			/usr/local/bin/sfxload synthgm


Q2.6*: Slackware 96 の linux-2.0.0 で動きません。

Slackware 96 は、Linux-2.0.0 システムをインストールします。 AWE ドライバは、このバージョンのサウンドドライバではうまく コンパイルできません。 申し訳ありませんが、あたらしいカーネルバージョンにアップデートして下さい。 (なお、Linux-2.0.x カーネルは安定化バージョンなので、 なるべく最新の版にしたほうが良いでしょう。)


Q2.7+: どうやって FreeBSD にインストールするんですか?

詳しくは awedrv ソースパッケージ内の INSTALL.frbsd ファイルを 参照して下さい。 また、SB32PnP や AWE64 などのPnP カードをインストールする場合は、 Q2.8 を参照して下さい。

  1. 全ソースファイルをシステムディレクトリ /usr/src/sys/i386/isa/sound にコピーします。
  2. 必要なら awe_config.h を編集します。
    awedrv ver.0.4 以降なら、AWE_MAX_SAMPLES および AWE_MAX_INFOS は変更する必要はありません。
  3. カーネルのコンフィグファイルに awe0 を追加します。
              device awe0     at isa? port 0x620 
    
  4. カーネルの再コンパイルとインストールを行います。


Q2.8+: FreeBSD で PnP カードをインストールするには?

詳しくは、甲本氏 (takuya-k@is.aist-nara.ac.jp) による Howto を 参照して下さい。

  1. FreeBSD の PnP パッケージ (FreeBSD-ISA_PnP_June8.tar.gz) を入手します。
  2. この中の pnpinfo プログラムを実行します。 以下のような出力が得られるはずです。
    	Checking for Plug-n-Play devices...
    	Trying Read_Port at 203
    	Trying Read_Port at 243
    	.. 略 ..
    	Card assigned CSN #1
    	Board Vendor ID: CTL009d
    	Board Serial Number: 10005fdc
    	PnP Version: 1.0
    	Vendor Version: 32
    	Device Description: Creative SB AWE64 PnP
    	Logical Device ID: CTL0042 (42008c0e)
    	Device Description: Audio
    	Start Dependent Function
    	.. 略 ..
    
    出力中の、サウンドカードのシリアルナンバーを記憶しておきます。 この例では 10005fdc です。この値はカード毎に異なります。
  3. パッケージに含まれるパッチ(kernel.patch.2.2-current)を カーネルソースに当てます。
    	# cd /usr/src/sys
    	# patch -p0 < kernel.patch.2.2-current
    
  4. /usr/src/sys/i386/isa/pnp.c を編集します。
    34 行目の
    	#include "pnp.h"
    
    	#include "i386/isa/pnp.h"
    
    に変更し、50 〜 103 行目を以下のものと差し替えます。
      {
        0x10005fdc,             /* Serial Number */
        2,             /* Logical Device Number */
        {
          { -1, -1 },     /* Primary IRQ Number, Type */
          { -1, -1 }      /* Second  IRQ Number, Type */
        },
        { -1, -1 },               /* DRQ Number */
        {
          0x620,          /* Ports 1 */
          0xa20,          /* Ports 2 */
          0xe20,          /* Ports 3 */
          -1,          /* Ports 4 */
          -1,          /* Ports 5 */
          -1,          /* Ports 6 */
          -1,          /* Ports 7 */
          -1,          /* Ports 8 */
        },
        {
          { -1, -1, -1 }, /* Memory desc0 - base, ctrl, range */
          { -1, -1, -1 }, /* Memory desc1 - base, ctrl, range */
          { -1, -1, -1 }, /* Memory desc2 - base, ctrl, range */
          { -1, -1, -1 }  /* Memory desc3 - base, ctrl, range */ 
        }
      }
    
    はじめのシリアルナンバーには、自分のカードの値を書いて下さい。
  5. awedrv のソースをコピーします。 Q2.7 と同様に行います。
  6. カーネルコンフィグを編集します。
    	controller      pnp0
    
    	device awe0     at isa? port 0x620 conflicts
    
    を追加します。


3. MIDI ファイルを演奏する

Q3.1: drvmidi も playmidi も何にも音が出て来ません。なぜ?

AWE ドライバは起動時に何の音情報も持っていません。 したがって、まず、SoundFont ファイルをロードする必要があります。 ファイルのロード方法は Q1.4 を見て下さい。


Q3.2: カードに DRAM を載せていないのですが、MIDI の演奏はできますか?

Chris Wedgwood <chris@cyphercom.com> による答え:

はい。 カードに入っているデフォルトの ROM フォントを使えます。 ただし、あまり音は良くありませんが。


Q3.3: デフォルトの ROM サンプルで演奏するには?

Chris Wedgwood <chris@cyphercom.com> による答え:

sfxload を使って ROM フォントをロードしなければなりません。 これには、Windows95 やおそらく Windows3.1 にインストールされた 'synthgm.sbk' (または synthgm.sf2) というファイルが必要です。

Windows システムディレクトリには、このコピーが必ずあるようですし、 しばしば他のCreativeLabs のファイルの中にもあるようです。 普通は、Windows システムディレクトリは \WINDOWS\SYSTEM です。

Windows をインストールしていない「純正主義者」の人は -- 普通の形状では CDROM に入っていない(少なくとも私のには)ので、 おそらくこのファイルを他の場所から手に入れる必要があります。 win95/sfbank/sfbank.lib ファイルにあるアーカイブにあるようですが、 私はこのフォーマットは良く分かりません。

ROM フォントをロードするには:

	% sfxload synthgm.sbk
注: synthgm.sbk がカレントディレクトリおよび サーチパス上にない場合は、パスも含む必要があります。 また、ドラム音が小さい場合は -A で調整できます (Q3.11参照)。

ファイルサイズは約35kで、圧縮すると約14kになるので、 ftp や e-mail で持ってくるのは大した問題ではないでしょう -- ただし著作件問題が絡んでくるでしょうけど。 私は法律家ではないので、分かりませんが。


Q3.4: SBK ファイルが付属した MIDI ファイルを聞くにはどうするのですか?

GM (または GS) サンプルの後に SBK ファイルをロードするだけです。 まず GM サンプルをロードしておきます。 (v0.3.x以前の版では -i が必要です。)

	% sfxload synthgm
次に、SBK サンプルをロードします。 すでに他のサンプルをロードしている場合は、 オプション -x を付けたほうが良いでしょう。 (常に付けておいても問題ありません。)
	% sfxload -x -b 1 foo.sbk
なお、コマンドオプション "-b 1" を付けるのを忘れないように して下さい(
Q3.7参照)。

これで、この MIDI ファイルを演奏できます。

	% drvmidi foo.mid


Q3.5: 追加の SoundFont ファイルを読み込ませたら、おかしな音を出すようになりました。

多くのユーザー定義 SoundFont ファイルは、バンク #1 にロードするように デザインされています。 こうしたサンプルは、 sfxload のオプション "-b 1" を使って下さい (Q3.6参照)。


Q3.6: コーラス・リバーブモードを変えても何の変化もありません。なぜ?

コーラス・リバーブモードを有効にするには、 それぞれ sfxload のオプション -c-r に ゼロ以外の値を設定します。

	% sfxload -c 30 -r 20 synthgm


Q3.7: クリックノイズが発生します。

パン・ポジションが頻繁に変わるような場合であれば、 Emu8000 チップの制限のためです。 この場合は、drvmidi にオプション -P を付けて演奏して下さい。 リアルタイムのパン・ポジション変更を抑制します。 その他の場合は、バグかもしれません。


Q3.8: 音が大きすぎるよ!

そうかもしれませんね。 サンプルの全ボリュームは、ロード時に -V オプションで 変更することができます。

	% sfxload -V 40 synthgm
値は%で、デフォルトは70%です。

もし Linux を使っているのであれば、ミキサーボリュームをサウンドモジュール のロード時に自動的に設定することができます (Q2.5参照)。


Q3.9: GUS パッチファイルは使えますか?

はい。 gusload ユーティリティで直接 GUS パッチファイルを読み込むことができます。 例えば、preset #127 に gunshot.pat をロードするには、

	% gusload -p 127 gunshot.pat
を実行します。


Q3.10: ドラム(または他の音)の代わりにピアノが聞こえるのですが。

いくつかの MIDI ファイルは、チャネル#16 をドラムチャネルとして使いますが、 drvmidi のデフォルトではチャネル#10 だけがドラムとして扱われます。 (GS ファイルの場合、system exclusive message により変化する場合があります。) これを変更するには、'-D' オプションを追加します。 正の値はドラムチャネルを、負の値は通常のチャネルを意味します。 例えば、'-D 16' は、 チャネル#16 をドラムチャネルとして使用することを指定し、 '-D -10' オプションを使えば、 チャネル#10 を通常チャネルに使うこともできます。

他の可能性として、マルチパートのサポートによる問題かも知れません。 drvmidi は 16 以上のトラックをMIDIパートBとして扱います。 この機能は drvmidi の '-T -1' オプションで抑制できます。 これで全てのトラックが1つのMIDIパートとして扱われます。


Q3.11: ドラム音が Windows と比べて小さいようですが。

v0.4.2 以前のバージョンを使っている場合は、sfxload の -A オプション を試してみて下さい。 これは、各サンプルの音量を制御するパラメタで、正の実数値を取ります。 一般に、低い値程ドラム音量が大きくなるようです。 私個人の感じでは、値としては 2.0 程度が良いような気がしますが、 以前のバージョンと同じにするため、デフォルトでは 10.0 に設定してあります。

	% sfxload -A 2 synthgm.sbk

v0.4.3 ドライバは、別の方法でパラメタを計算しています。 このため DOS/Windows に近い音になりますが、以前よりも少し鈍い感じになります。 ボリューム・モードは aweset プログラムで切替える事ができます。

	% aweset newvolume off
ただし、drvmidi は内部でボリューム・モードなどを切替えるので、この設定は 無効になります。playmidi の音質は影響されます。 また、sfxload の -C オプションで、以前の版との互換性を 保つことができます。


Q3.12: drvmidi のダイナミック・ロード機能って何ですか?

v0.4.0 から加わった機能で、個々の MIDI ファイルで用いられるサンプルを あらかじめ調べておいて、必要なものだけをドライバにロードする機能です。 必要なサンプルだけを用いるので、少ない RAM 容量で大きな サウンドフォント・ファイルを使った演奏が可能になります。 大抵の MIDI ファイルでは、512kB の DRAM で 2MB GM/GS サウンドフォント (2mbgmgs.sf2) の利用が可能なようです。 もちろん、2MB の RAM で 8MB、または 8MB の RAM で 12MB の GM/GS フォントを利用する手もあるでしょう。 (ただし、多少ロード時間がかかりますが。) 多くのサウンドフォント・ファイルが web サイト上で無料で配布されているので、 色々試してみて下さい。 AWE ドライバのページにそれらのサイトをリストアップしてみました:

http://members.tripod.de/iwai/awedrv.html#SoundFonts
上記の 2MB フォントは Creative のサイトと、AWE Hot Spot にあります。 AWE64 には、あらかじめ 2MB/4MB のフォントが付属しているらしいので、 そちらを利用してみて下さい。

ダイナミックロード機能を用いるには、以下のようにします。

  1. ROM フォントをあらかじめロードしておく。(これを忘れずに!)
    	% sfxload synthgm
    
  2. 使用するフォントファイルを -L (または --dynamic) オプションで指定して、 drvmidi を起動する。
    	% drvmidi -L 2mbgmgs foo.mid
    

場合によっては、メモリが足りなくなる場合がありますが、この場合は

	preload: couldn't load all fonts.
といったメッセージが現れます。 この場合は、ロードできなかったサンプルの代わりに ROM フォントが用いられます。

dynamic loading のフォントは、デフォルト・オプション設定で指定できます。 (Q3.13 参照)

awedrv ver.0.4.3 では sample sharing 機能によって、 ロード時間がかなり短縮されています。 これは一種の chaching で、DRAM 上に既にサンプルがロードされているかどうかを 事前にチェックして、あった場合はそれを再利用します。 8MB の DRAM で 12MB のフォントを使う場合などは、かなり効果的です。 通常(デフォルト)の設定では、この機能が有効になっています。 この機能をオフにする場合は、drvmidi のオプション --increment=off を設定して下さい。


Q3.13: デフォルトのオプションを指定したいのですが。

sfxload と drvmidi のオプションは、リソースファイルにあらかじめ 設定しておくことが可能です。 sfxload のリソースファイルは /etc/sfxloadrc~/.sfxloadrc で、 drvmidi のリソースファイルは、 /etc/drvmidirc~/.drvmidirc です。

sfxload の場合は、以下のフォーマットのファイルを作成します。

	fontname	options..
	fontname	options..
第1項は、サウンドフォントの名前で、それ以降にはそのファイルで指定する コマンドラインのオプションをそのまま書いておきます。 フォント名 "default" は、特定のフォントが指定されなかった 場合のオプションを指定します。 short または long どちらのオプションを指定しても構いません。 例えば、
	default	--sense=10 --atten=32 -V100
	synthgm	--sense=2 -V100
といった具合です。

drvmidi のリソースファイルも同様の形式を採ります。 ただし、フォント名の部分は "default" だけが有効です。 また、drvmidi 自体は short, long どちらのオプションも受け付けますが、 ver.0.4.2 から採用されている option editor では long オプションだけしか受け付けません。 例えば、

	default --dynamic=2mbgmgs
という設定をすると、オプション指定なしにダイナミック・ロード機能を 用いることができます。


Q3.14: Roland SC88 用の GS MIDI ファイルは演奏できますか?

ver.0.4.2 の drvmidi では、マルチ・パートや SYSEX、TVF コントロールなどの SC88 のエミュレーションが可能です。 デフォルトでは、マルチパートおよび MASTER VOLUME CONTROL の SYSEX メッセージを受け付けます。 また、sysex に関わらず、オプション --multipart=on を追加することで強制的に マルチパート・モードにすることができます。

TVF や EG などのエフェクトコントロールは、デフォルトの状態では エミュレーションを行いません。オプション --usefx=on を追加して下さい。 この機能はまだ実験段階なので、かなり不正確です。 また、soundfont ファイルによって音がかなり異なるので、お使いの soundfont に合わせてパラメタを調整する必要があるでしょう。

なお、上記のオプションおよびパラメタなどは、tkmidi の オプションエディタで 編集可能です。


Q3.15: Yamaha XG フォーマットの MIDI ファイルは演奏できますか?

ver.0.4.2 の drvmidi は XG の バンク・コントロールを受け付けます。 ただし、XG のドラムや SFX プリセットは GS と一部異なるため、そのまま 通常の GS soundfont を使ったのでは正しく再生できません。 そこで、drvmidi では、 通常使われないドラムセットナンバーとバンクナンバーに割り振ることに よって、両者の衝突を避けます。 これを可能にするには、オプション --xgmap=on を追加して下さい。

また、この新しく割り振ったバンクには GS からの音をコピーする必要があります。 これは、awedrv の preset mapping機能を使うことで解決できます。 例えば、synthgs.sbk の後に xgsfx.bnk と xgdrum.bnk をロードします。 (これらのファイルは awesfx / sfxload パッケージに含まれています。)

	% sfxload synthgs
	% sfxload -b0 xgsfx.bnk
	% sfxload -b0 xgdrum.bnk
上記の手順は、virtual bank ファイルを作ると簡単になります。 例えば、以下の内容の bank ファイル (xgdefault.bnk) を作成すれば、
	default synthgs.sbk
	include xgsfx.bnk
	include xgdrum.bnk
このファイルをロードするだけで済みます。
	% sfxload xgdefault.bnk
また、ダイナミック・ロードを行う場合にも同様の bank ファイルを作る必要があります。
	default 2mbgmgs.sf2
	include xgsfx.bnk
	include xgdrum.bnk
このファイルを、drvmidi の --dynmaic オプションで指定すれば、 GS・XG どちらの場合でも適切なファイルを自動的にロードしてくれます。


Q3.16: ver.0.4.3 の音が他のバージョンと違うようなんですけど…

はい。最新版 0.4.3 は以前とは別のパラメタ計算を行っています。 Q3.11 を参照して下さい。


Q3.17: virtual bank file って何ですか?

virtual bank ファイルは、複数の soundfont ファイルによるプリセット、バンク、 キーノートのリストを記述するためのファイルです。 virtual bank ファイルを使うと、soundfont ファイル自体を編集することなく、 一つの soundfont ファイルからある部分の音だけを抜き取って、 他の soundfont ファイルの別の部分と一緒に使うことができます。 すなわち、フォントの一部分を入れ換えることが可能になります。 ドラムセットの1キーノートの入れ換えも可能です。

virtual bank ファイルのフォーマットは以下の通りです:

source:destination:file instr-name
source と destination には、入れ換えを行う楽器を指定します。 楽器の指定は以下の通りです:
preset/bank/keynote
preset には、MIDI プログラム・ナンバー (0 から 127 まで)、bank には MIDI バンク・ナンバー (0 から 128 まで) を指定します。 bank #128 はドラムセットとして扱われます。 keynote には MIDI キーノート (0 から 127 まで) を指定します。 keynote が指定されなかった場合は、その楽器の全てのキーが入れ換えられます。 bank が指定されなかった場合、preset に対応する全ての楽器がが入れ換えられます。 preset にアスタリスク(*)または -1 が指定された場合は、 対応するバンクが入れ換えられます。

virtual bank は、source 項目で指定された楽器を、destination 項目で指定された楽器と入れ換えます。 file 項目には、ロードする soundfont ファイル名を指定します。 一つの virtual bank ファイル内で同一の soundfont ファイルを複数回定義する場合、 file 項目には同一の名前で指定しなければなりません。 soundfont ファイルは sfxload のサーチ・パスに従って探索されます。

instr-name 項目は楽器名を指定するための予備の項目です。 sfxload の現在の版では、この項目は無視されます。

virtual bank ファイルは以下のフォーマットにも対応しています:

source:destination instr-name
上記の場合とは異なり、このフォーマットには file 項目がありません。 これは preset mapping (linking) を指定するフォーマットです。 preset mapping はファイル操作におけるシンボリック・リンクに相当する機能です。 source の楽器は destination の楽器として参照されます。

他に2つの特別なコマンドがあります。


4. プログラム・その他

Q4.1: MOD プレイヤーの音がひどいんですが。

AWE32カードに十分なDRAMが載っていない場合に起こることがあります。 カードのメモリーをアップグレードして下さい。

また、古いドライバはサンプルループの計算にバグがあります。 最新のドライバ(v0.3.3e 以降)を使って下さい。


Q4.2*: Netscape から MIDI ファイルを演奏するには?

Netscape 3.0 を使用している場合
Netscape 3.0 用のプラグインが使えます。 MIDI プラグイン・パッケージをインストールして、 Options メニューの helper リストを設定して下さい。 詳しくはこのパッケージ内のドキュメントを御覧下さい。

コントロールウインドウを用いたプラグインは、 (file://directory/ のような)ディレクトリのページを表示すると bus エラーを起こします。これを避けるには、 Netscape を起動する前にプラグインファイルを preload する必要があります。 netscape を以下のようなスクリプトで置き換えると便利でしょう。

#!/bin/sh
LD_PRELOAD=$HOME/.netscape/plugins/npmidi.so; export LD_PRELOAD
exec /usr/local/bin/netscape
なお、このバグは、ウインドウなしのプラグインでは現れません。

また、以下に示すような MIME タイプをすでに追加している場合は、 これらの設定ファイルを自分で書き換える必要があるでしょう。 (Netscape は単に追加するだけなので。)

その他のブラウザ
~/.mime.types ファイルに以下の行を追加して、 MIDI ファイルの MIME タイプを追加して下さい。
audio/x-midi	exts=mid,midi
次に、~/.mailcap ファイルに以下の行を追加して アプリケーションを指定下さい。
audio/x-midi; drvmidi %s
もちろん、この代わりに他の MIDI プレイヤーを指定することもできます。


Q4.3: AWE32 用の音楽プログラムを作ろうと思うのですが、どうやって AWE32 ドライバを制御するのでしょうか?

awedrv の制御については、 the AWEDRV programming notes を御覧下さい。

ver.0.2 から、awedrv は GUS コンパチのパッチや制御を受け付けるようになりました。 これを使えば、gmod などの GUS ドライバを使うモジュールプレイヤーを わずかに変更するだけで使えるようになります。

例えば、awedrv 用に gmod を使うには、 Sequencer.c の62行あたりの部分を変更して、 カードの検出をサブタイプ 0x20 を受け付けるように変更します。

if (info.synth_type == SYNTH_TYPE_SAMPLE
    && (info.synth_subtype == SAMPLE_TYPE_GUS||info.synth_subtype==0x20))
    gus_dev = i;
(0x20awe_voice.h で定義されている SAMPLE_TYPE_AWE32 の値です。)