FreeBSD向けのシリアルポート用VoxWare Midiドライバと
LGSND向けMidiシーケンサ/インタフェースドライバ

谷村 正剛井口 剛
和訳: 谷村 正剛

English|Japanese

注目! MPU401が動くようになり、高精度タイマを実装しました! (1999年7月6日)

最も良く使われるMidiインタフェース、MPU401が動くようになりました。新たに開発した、周期156usの高精度タイマがMPU401をVoxWareのような可聴遅延を生じることなく動作させます。

目次

  1. はじめに: 何ができるようになるの?
  2. 必要なハードウェア
  3. ドライバのインストール
  4. フレームワークの解説
  5. 要望、コメント

  1. はじめに: 何ができるようになるの?
  2. 本ドライバはVoxWareおよびLGSNDのシリアルポート用Midiドライバです。VoxWare用のものはLinuxからFreeBSDに移植されたものです。 最初に井口 剛さんが3.1-STABLE VoxWareへ移植し、私(谷村 正剛)が4.0-CURRENT VoxWareへ移植しました。さらにLGSND上で作業を継続中です。

    このドライバを使うと、computer portつきのmidi音源をシリアルポートに接続し、 playmidiやrosegarden、その他VoxWareに対応したポピュラーなmidiプレイヤーや ツールが使えます。重いexclusiveを使うシーケンスを再生してみましたが、 sbmidiのようなテンポの遅れが全くありませんでした。さらに、Luigiの新しい サウンドドライバ上であなたのお好きな曲を聞くこともできます。

    井口さんと私は本ドライバをCURRENTへマージする作業をしています。 本ドライバに興味をお持ちの方を対象に、公開テストをしています。テストへの参加ありがとうございます!

    最初へ戻る

  3. 必要なハードウェア
    1. FreeBSD 3.x-{RELEASE, STABLE}または(できれば)4.0-CURRENTが動いているPC
    2. もちろんありますよね!

    3. サウンドカードやMidiインタフェースカード
    4. 現在、サウンドカード上のOPL3、MPU401 Midiインタフェース(SB midiなどの互換品を含む)、シリアルポートが使用できます。

    5. Midi音源や楽器
    6. Midi音源や楽器はMPU401 Midiインタフェースを通してPCに接続できます。 RolandのSC-{55,88}シリーズなど、最近のmidi音源には{computer, host, etc}ポートが ついています。このような音源はシリアルポートに接続できます。{computer, host, etc}ポートの 見かけはごく普通のmidiポートとは異なり、むしろMacのシリアルポートに似ています(Rolandの音源の場合)。 38.4kbpsの速度で受信できる{computer, host, etc}ポートが必要です。

    7. Midi cable
    8. MPU401を使う場合。

    9. シリアルポートのケーブル
    10. Midi音源をPCのシリアルポートに接続するケーブルが必要です。 詳しくはmidi音源の製造元にお尋ね下さい。

    最初に戻る

  4. ドライバのインストール
    1. パッチを手に入れて下さい。
    2. 現在、3.1-STABLEおよび4.0-CURRENT向けのパッチがあります。

    3. 3.1-STABLE(たぶん3.xでも大丈夫でしょう)向け:
    4. http://www.eie.yz.yamagata-u.ac.jp/~a95516/zinnia/hack/rsmidi/uart16550patch.tar.gz http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/uart16550-31stable-19990511.diff.gz(uart16550-19990509.diff.gzまでのMFC、時々rebootするとの報告あり)
      http://www.sfy.gr.jp/~zinnia/archives/uart16550-stable.19990609.patch.gz(uart16550-19990605.diff.gzまでのMFC)

    5. 4.0-CURRENT(new-bus以前)向け:
    6. http://www.eie.yz.yamagata-u.ac.jp/~a95516/zinnia/hack/rsmidi/uart16550.egcsfixed.diff.gz

    7. 4.0-CURRENT(new-bus以後)向け:
    8. このパッチはドライバのファイルにcommitがあった時に更新します。一番下にあるのが最新版です。

      http://www.eie.yz.yamagata-u.ac.jp/~a95516/zinnia/hack/rsmidi/uart16550-19990420.diff.gz(new-busのマージ)
      http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/uart16550-19990424.diff.gz(sioreg.hがsys/isaに移動)
      http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/uart16550-19990501.diff.gz(忘れ物、i386/isa/sound/{midi_synth, midibuf}.c 指摘者: Juergen Lock <nox@jelal.kn-bremen.de>)
      http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/uart16550-19990509.diff.gz(LGSNDで曲が流れます! バンザイ!)
      http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/uart16550-19990517.diff.gz(LGSNDでOPL3が動くようになりました)
      http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/uart16550-19990523.diff.gz(書き忘れていたioctlとcallbackを実装、flagsのさらなる使用)
      http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/uart16550-19990605.diff.gz(OPLでpnpを使ったprobe/attachをさせました。writerawとreadrawをsynthdev_infoに移動)
      http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/uart16550-19990619.diff.gz(HEADS UP: newbus化完了までOPL3のpnpを止めています! midi(4)とseq(4)をそれぞれ別のソースファイルに移動し、newbus化の準備をしています)
      http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/newmidi-19990627.diff.gz(HEADS UP: midi(4)とseq(4)のメジャーナンバーが変わりました! newbusを使うようにしました、pcm(4)に依存しなくなりました。)
      http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/patches/newmidi-19990706.diff.gz(MPU401が動くようになりました。周期156usの高精度タイマを導入しました。新しいioctl(2) MIO{S,G}PASSTHRUを導入し、ドライバが使用中でなければmidiメッセージのパススルーができるようになりました。)

    9. マニュアル:
    10. http://www.naklab.dnj.ynu.ac.jp/~tanimura/freebsd-serialmidi/midimanual.tar.gz(midi(4)およびseq(4)のnroff man pages)

    11. カーネルのソースにパッチを当てて下さい。
    12. SB AWEシリーズのEMU8000向けの対策を使用可能/不可にする(4.0-CURRENT向けのuart16550-19990517.diff.gzからuart16550-19990619.diff.gzまで)。
    13. SB AWEのカードでは、EMU8000のチップをそのままにしておくとOPL3からの音が出力されません。 EMU8000を立ち上げて初期化するための対策を組み込み、OPL3からの音が聞こえるようにしました。 newmidi-19990627.diff.gz以降では、EMU8000向けにmidiデバイスを設定すれば十分です。

      sys/i386/isa/snd/opl.cに、以下のような行があります:

      #define EMU8K_HACK_PORT 0x620

      EMU8000がポート0x620にあれば、そのままで構いません。 EMU8000がない場合は(SB16など)、この行をコメントアウトして下さい。 EMU8000が0x620以外のポートにある場合は、値を適切なものに変更して下さい。

    14. カーネルのコンフィグレーションを変更して下さい。
      1. Midi信号をシリアルポートから出力する場合は、Midi出力に用いるsioデバイスをコメントアウトして下さい。例:
      2. #device sio0 at isa? port "IO_COM1" flags 0x10 tty irq 4

        または使用不可にして下さい。例:

        device sio0 at isa? disable port "IO_COM1" flags 0x10 tty irq 4

      3. 使用するデバイスを追加して下さい。デバイス名はVoxWare向けシリアルポートは'uartsio'、LGSND向けは全て'midi'です。
      4. # VoxWareをお使いですか?
        controller snd0 # お忘れなく!
        device uartsio0 at isa? port 0x3f8 irq 4

        # それともLGSND?
        controller pnp0 # ISA pnpサポート。
        device midi0 at isa? port 0x3f8 irq 4 # シリアルポート。
        device midi1 at isa? port 0x388 # OPL3シンセサイザ。
        device midi2 at isa? port 0x620 # EMU8000 wavetableシンセサイザ、OPLの音を出すだけです。
        #device midi2 at isa? port ? irq ? drq ? # pnpによる自動設定(現在は使えません!)。
        device midi3 at isa? port 0x330 # MPU401、irqは自動認識します。
        pseudo-device seq 1 # これがシーケンサです。

        もちろん、{uartsio0, midi*}のポートとirqは異なるかもしれません。

      5. pnpカードを使う場合は、/kernel.configでデバイスを設定して下さい。例:
      6. pnp 1 0 os enable irq0 5 drq0 1 drq1 5 port0 0x220 port1 0x330 port2 0x388

    15. 新しいカーネルをmake(1)し、普通にインストールしてPCをリブートして下さい。
    16. midiドライバのデバイスノードを作り直して下さい。(newmidi-19990627.diff.gz以降)
    17. pcm(4)とmidi(4)/seq(4)を別々に設定できるようにするため、midi(4)とseq(4)に新しいメジャー ナンバーを与えました。今のところ200となっており、公式なものを予約できたらもう一度変更する 予定です。midi(4)とseq(4)を使うにはデバイスノードを作り直す必要があります。例:

      # cd /dev # rm midi* sequencer* # mknod midi0 c 200 2 ; chmod 666 midi0 # mknod midi1 c 200 18 ; chmod 666 midi1 # ln -s midi0 midi # mknod sequencer0 c 200 1 ; chmod 666 sequencer0 # ln -s sequencer0 sequencer # mknod midistat c 200 6 ; chmod 666 midistat

    18. newmidi-19990627.diff.gz以降であれば/dev/midistat、その他の場合は/dev/sndstatをcat(1)して下さい。 VoxWareではこのような表示が出るはずです:
    19. Card config:
      (中略)
      16550 UART Midi at 0x3f8 irq 4

      Midi devices:
      0: SoundBlaster 16 Midi
      1: uart16550A MIDI

      LGSNDならこんな感じです:

      FreeBSD Midi Driver (newmidi) Jul 6 1999 09:00:07
      Installed devices:
      midi0: <OPL FM Synthesizer> at 0x388
      midi1: <16550 uart midi> at 0x3f8 irq 4
      midi2: <EMU8000 Wavetable Synth> at 0x620, 0xa20, 0xe20
      midi3: <MPU401 midi> at 0x330
      seq: 1 unit(s) configured.

      イタリックになっているところを確認して下さい。

    20. おしまい!

    最初に戻る

  5. フレームワークの解説
  6. こちらのページをお読み下さい(英語のみ)。解説は製作中です。

    Back to the top

  7. 要望、コメント
  8. 井口さんに直接メールを送るか、 freebsd-hackers/ freebsd-multimedia/ freebsd-users-jpで 議論ができます。

    最初に戻る

私のページに戻る

$Id: index-j.html,v 1.23 1999/07/06 05:43:00 tanimura Exp $