  The Linux MIDI-HOWTO
  By Phil Kerr, phil@plus24.com
  v1.20, May 2002
  日本語訳: 小林雅典, zap03216@nifty.ne.jp
  v1.20j, 20 Dec 2003

  この文書には Linux で MIDI を演奏したり作成するのに必要なハードウェア
  やソフトウェアおよびその手順が記述されています。
  ______________________________________________________________________

  目次

  1. はじめに
  2. この文書の著作権
  3. どこでこの文書を入手できるか
  4. 謝辞
  5. 免責
  6. MIDI についての予備知識
  7. MIDI デバイスの設定
     7.1 ALSA 0.9 の手早いインストール法
     7.2 レイテンシ

  8. ソフトウェア
     8.1 ドライバ
        8.1.1 Alsa ドライバ
        8.1.2 OSS
        8.1.3 Notemidi
     8.2 MIDI ファイルプレイヤー
        8.2.1 KMid
        8.2.2 Pmidi
        8.2.3 TiMidity++
     8.3 シーケンサ
        8.3.1 Brahms
        8.3.2 Anthem
        8.3.3 Jazz++
        8.3.4 Linux Ultimate Music Editor
        8.3.5 Melys
        8.3.6 MidiMountain Sequencer
        8.3.7 MusE
        8.3.8 Rosegarden
     8.4 MIDI トラッカー
        8.4.1 tektracker
        8.4.2 ShakeTracker
     8.5 ドラムエディタ
        8.5.1 DrumPatterns
     8.6 パッチエディタ
        8.6.1 JSynthLib
     8.7 ソフトウェアシンセ
        8.7.1 Spiral Synth
        8.7.2 UltraMaster Juno-6
        8.7.3 Pure-Data (PD)
        8.7.4 Csound
        8.7.5 Bristol synthesiser emulator
     8.8 プラグイン
        8.8.1 xmms-midi
     8.9 楽譜作成
        8.9.1 Mup
        8.9.2 Lilypond
     8.10 開発
        8.10.1 sfront
        8.10.2 jMax
        8.10.3 TSE3
        8.10.4 KeyKit

  9. MIDI を扱うプログラムの開発
     9.1 例 1
     9.2 例 2
     9.3 例 3

  10. ソフトウェアシンセサイザといっしょに MIDI シーケンサを使う
     10.1 はじめに
     10.2 デバイスの設定
     10.3 MIDI イベントのルーティング
        10.3.1 aconnect
     10.4 グラフィカルな MIDI パッチベイ
        10.4.1 aseqview
     10.5 アプリケーション
     10.6 シーケンサ
        10.6.1 MusE
        10.6.2 ttrk
        10.6.3 Shaketracker
     10.7 ソフトウェアシンセサイザ
        10.7.1 Pure Data
        10.7.2 Csound
        10.7.3 おわりに
     10.8 謝辞

  11. 有用なリンク
  12. フィードバック
  13. 日本語版謝辞

  ______________________________________________________________________

  1.  はじめに

  この文書は、以下の項目を網羅しています。

  o  MIDI インタフェースの設定

  o  ソフトウェアシンセサイザの設定と使用

  o  MIDI ファイルの演奏

  o  シーケンサの使用

  o  外部 MIDI 機器の制御

  o  MIDI でコントロールするソフトウェアベースの音響合成

  o  MIDI を使うプログラム例

  2.  この文書の著作権

  この HOWTO 文書の著作権は 2002 Phil Kerr にあります。

  「ソフトウェアシンセサイザといっしょに MIDI シーケンサを使う」章の著作
  権は 2002 Frank Barknecht にあります。この文書は GNU フリー文書利用許
  諾契約書の条件のもとで配布されています。本文書に付属しているはずです
  が、そうでない場合は、以下のサイトで入手できます。

  <http://www.fsf.org/licenses/fdl.html>.

  3.  どこでこの文書を入手できるか

  この文書の公式バージョンは Linux Documentation Project から入手できま
  す:  <http://www.tldp.org/>

  この HOWTO の最新版があるホームページは  <http://www.midi-howto.com>
  です。

  4.  謝辞

  この HOWTO は Hideki Saito によって書かれた MIDI-SB mini-HOWTO の発展
  版です。彼の Linux コミュニティーへの貢献に深く感謝します。この HOWTO
  文書には現在、Frank Barknecht による 'HOWTO Use MIDI Sequencers With
  Softsynths' が含まれています。Frank に深く感謝します。この HOWTO に含
  まれているプログラム例の多くは Linux Audio Developers (LAD) メーリング
  リスト由来のものです。プログラム例をこの文書に含めることを許可してくれ
  た彼らに深く感謝します。

  5.  免責

  この文書に記載されている情報は、自己責任にて用いてください。

  筆者はこの文書の内容について、いかなる責任も負いません。この文書に記載
  されている概念、実例、その他の内容については、完全な自己責任において用
  いてください。

  特記なきものすべての著作権は著作権者に帰属します。

  この文書で使われる用語が、なんらかの商標やサービスマークの有効性を侵害
  するとみなしてはなりません。

  特定の製品名やブランド名を支持しているとみなしてはなりません。

  大規模なインストール作業の前にシステムのバックアップを取ることと、一定
  の間隔で定期的にバックアップを取ることを強く推奨します。

  6.  MIDI についての予備知識

  MIDI とは、ハードウェアとソフトウェアのプロトコルがひとつのセットに
  なったもので、電子楽器が通信するために用いられます。最初に制定されたの
  は 1982 年のことで、事実上電子楽器間の標準通信手段になりました。このプ
  ロトコルはケーブルおよびインタフェースの物理的なハードウェア上のパラ
  メータを規定し、音楽や時間のデータを交換するための通信プロトコルのきち
  んと定義されたセットを提供します。

  MIDI 以前にも、アナログの通信プロトコルやその後にできた初歩的なデジタ
  ルの通信プロトコルがいくつか存在しました。 1974 年ごろの最も初期のもの
  は、音符の情報を電圧として、あるキーボードから別のキーボードへと電線経
  由で送信しました。その後、1980 年 から 1981 年に、ローランド社は初歩的
  なデジタルのプロトコルである DCB を作成しました。 MIDI Manufacturers
  Association (MMA) は機器メーカーとの共同作業で、規格に従ったメーカー製
  の機器すべてが互いに接続し通信できるようにする標準プロトコルと物理的な
  接続規格を制定しました。

  1985 年から MIDI インタフェースが家庭用コンピュータに姿を現しはじめ、
  その後すぐにシーケンサのプログラムが登場しました。

  7.  MIDI デバイスの設定

  MIDI デバイスはサウンドカードと一体になっていることもあれば、独立した
  デバイスになっていることもあります。外部 MIDI インタフェースは、シリア
  ルポートか USB ポートのどちらかに取り付けることができます。

  最初にやるべきであり、なおかつ「最も重要な」ことは、お使いのカードがサ
  ポートされているかどうかチェックすることです!

  <http://www.alsa-project.org/soundcards.php3>

  <http://www.4front-tech.com/osshw.html>

  MIDI デバイスの設定法は、Linux ディストリビューションによって様々で
  す。よくサポートされているカードだと、OS のインストール時に設定できま
  す。

  (訳注: 2.4 以前の)Linux カーネルには OSS ドライバが、2.5 のカーネルに
  は ALSA ドライバが含まれています。たいていのディストリビューションには
  (おもにサウンドカード向けの) 設定ツールが用意されています。でも、サウ
  ンドカードについている MIDI ポートを使うのなら、 MIDI ポート向けの設定
  をする必要があるでしょう。Red Hat では sndconfig を、 SuSE では yast
  を、Mandrake では DrakConf を使います。

  上記のツールでお使いの MIDI インタフェースを設定できない、もしくは問題
  がある場合は、次の段階を踏むべきです。

  lsmod で MIDI 関係のモジュールが表示されますか? OSS ベースのシステムで
  の典型的な出力はこのようなものです。

  ______________________________________________________________________
  [root@beatbox]# lsmod
  Module                  Size  Used by
  lockd                  32208   1  (autoclean)
  sunrpc                 54640   1  (autoclean) [lockd]
  autofs                  9456   2  (autoclean)
  usb-ohci               12624   0  (unused)
  usbcore                43632   1  [usb-ohci]
  hisax                 470096   0  (autoclean) (unused)
  isdn                  104208   0  (autoclean) [hisax]
  slhc                    4544   0  (autoclean) [isdn]
  eepro100               16144   1  (autoclean)

  #---- Soundcard modules
      opl3                   11376   2
      mad16                   7968   1
      ad1848                 16848   1  [mad16]
      sb                     34752   1  [mad16]
      uart401                 6384   1  [mad16 sb]
      sound                  58368   0  [opl3 mad16 ad1848 sb uart401]

  soundlow                 464   0  [sound]
  soundcore               2800   6  [sb sound]
  nls_cp437               3952   2  (autoclean)
  vfat                    9408   1  (autoclean)
  fat                    30432   1  (autoclean) [vfat]
  ide-scsi                7664   0
  ______________________________________________________________________

  mpu401, olp3, uart401, oss を探してください。

  USB デバイスをお使いなら、USB モジュールがあるかどうかチェックするのを
  忘れずに。

  設定をチェックするには、sndstat ファイルを cat します:

  ______________________________________________________________________
  [root@beatbox]# cat /dev/sndstat
  OSS/Free:3.8s2++-971130
  Load type: Driver loaded as a module
  Kernel: Linux mega 2.2.17-21mdk #1 Thu Oct 5 13:16:08 CEST 2000 i686
  Config options: 0

  Installed drivers:

  Card config:

  Audio devices:
  0: MAD16 WSS (82C930) (DUPLEX)

  Synth devices:
  0: Yamaha OPL3

  Midi devices:
  0: Mad16/Mozart

  Timers:
  0: System clock

  Mixers:
  0: MAD16 WSS (82C930)
  ______________________________________________________________________

  ここで MIDI デバイスが mad16 ひとつであることがわかります。上記 lsmod
  の出力にもリストアップされていましたね。

  もし MIDI 関連のデバイスが見当らなければ、/etc/modules.conf ファイルの
  内容をチェックしてみましょう。

  ______________________________________________________________________
  [root@beatbox]# cat /etc/modules.conf
  alias net-pf-4 ipx
  pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
  alias usb-interface usb-ohci
  alias parport_lowlevel parport_pc
  alias block-major-11 scsi_hostadapter
  pre-install plip modprobe parport_pc ; echo 7 > /proc/parport/0/irq
  alias scsi_hostadapter ide-scsi
  alias eth0 eepro100
  alias eth1 hisax

  #---- Soundcard
      alias sound-slot-0 mad16
      options sound dmabuf=1
      alias midi opl3
      options opl3 io=0x388
      options sb support=1
      options mad16 io=0x530 irq=5 dma=0 dma16=1 mpu_io=0x300 mpu_irq=7 joystick=1
  ______________________________________________________________________

  MIDI のモジュールがカーネルにロードされているかどうかを、/proc/modules
  を出力してチェックします。

  ______________________________________________________________________
  [root@mega /proc]# cat modules
  0000-001f : dma1
  0020-003f : pic1
  0040-005f : timer
  0060-006f : keyboard
  0070-007f : rtc
  0080-008f : dma page reg
  00a0-00bf : pic2
  00c0-00df : dma2
  00f0-00ff : fpu
  0170-0177 : ide1
  01f0-01f7 : ide0
  02f8-02ff : serial(auto)

  #---- MIDI device
      0300-0303 : MPU-401 UART

  0376-0376 : ide1
  0388-038b : Yamaha OPL3
  03c0-03df : vga+
  03f6-03f6 : ide0
  03f8-03ff : serial(auto)
  0530-0533 : MAD16 WSS config
  0534-0537 : MAD16 WSS
  de00-de1f : Intel Speedo3 Ethernet
  f000-f007 : ide0
  f008-f00f : ide1
  ______________________________________________________________________

  あなたのところでも、上記に似た結果になったはずです。そうでなければ、
  MIDI ドライバをインストールする必要があります。

  ALSA 0.5x ドライバを使うのはやめたほうがいいですが、どうしても使う予定
  があるなら、下記リンクで入手できる Valentijn Sessink 著の Alsa-sound-
  mini-HOWTO をよく読むことをおすすめします。

  <http://www.tldp.org/HOWTO/Alsa-sound.html>

  バージョン 0.9 より新しい ALSA を使うことを、強く推奨します。 0.9 より
  後の ALSA ドライバ向けには、Madhu Maddy 著の ALSA-HOWTO をよく読むとよ
  いです。

  <http://www.alsa-project.org/alsa-doc/alsa-howto/>

  7.1.  ALSA 0.9 の手早いインストール法

  以下は、ALSA 0.9 ドライバと、たいていの MIDI アプリケーションが必要と
  するライブラリをとても手早くインストールする手順です。

  ______________________________________________________________________
  [root@beatbox] # tar jxvf alsa-driver....tar.bz2
  [root@beatbox] # cd alsa-driver.....
  [root@beatbox] # ./configure

  messages - no errors

  [root@beatbox] # make

  messages - no errors

  [root@beatbox] # make install

  messages - no errors

  [root@beatbox] # ./snddevices
  ______________________________________________________________________

  次に、/etc/modules.conf を編集する必要があります。もしくは、ディストリ
  ビューションによっては、modules ディレクトリにある ALSA 向けファイルを
  編集する必要があります。

  他にも、MIDI 以外のデバイス向けのエントリがあるかもしれないので、ファ
  イルを編集する際は注意してください。典型的なシステムには、ファイル中に
  古い ALSA か OSS の設定があるかもしれないので、消すか、コメントアウト
  する必要があります。

  以下は modules.conf ファイル中の、典型的な OSS 互換 ALSA の設定箇所で
  す。

  ______________________________________________________________________
  alias char-major-116 snd
  alias char-major-14 soundcore

  alias snd-card-0 (MIDI/サウンドカード)
  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-12 snd-pcm-oss
  ______________________________________________________________________

  (MIDI/サウンドカード) のエントリをお使いのカードのものに変更します。こ
  この情報は通常、ALSA のウェブサイトで見つかります。

  ALSA ドライバをインストールしたら、次に ALSA ベースのプログラムに必要
  なヘッダとライブラリファイルをインストールする必要があります。これは、
  alsa-libs パッケージに含まれています。

  ______________________________________________________________________
  [root@beatbox] # tar jxvf alsa-libs....tar.bz2
  [root@beatbox] # cd alsa-libs.....
  [root@beatbox] # ./configure

  messages - no errors

  [root@beatbox] # make

  messages - no errors

  [root@beatbox] # make install
  ______________________________________________________________________

  お使いのシステムの設定が完了しました :)

  簡単な C のプログラムで、設定がうまくいったかチェックできます。コンパ
  イルと実行ができたら、システムはうまくいっているはずです。

  ______________________________________________________________________
  // Compile this test program like so: gcc alsatest.c -o alsatest -lasound

  #include <stdio.h>
  #include <alsa/asoundlib.h>

  int main (int argc, char *argv[])
  {
    snd_seq_t *seq_handle;

    if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
      fprintf(stderr, "Error opening ALSA sequencer.\n");
      exit(1);
    }

  printf("The ALSA libraries are installed.\n");
  return 0;
  }

  ______________________________________________________________________

  7.2.  レイテンシ

  MIDI はリアルタイムのプロトコルなので、レイテンシは重大な問題です。

  現在、応答時間短縮のための作業をしている何人かの開発者がいます。カーネ
  ルの応答時間が短縮されると、Linux は MIDI 向けのすばらしいプラット
  フォームになっていきます。

  標準の Linux ディストリビューションでも満足に動作するかもしれません
  が、プロ向けの機器にはロウレイテンシパッチをあてるべきです。

  より詳細な情報はここで入手できます:

  <http://www.gardena.net/benno/linux/audio/>

  <http://www.linuxdj.com/audio/lad/resourceslatency.php3>

  ロウレイテンシ Mini Howto

  <http://www.djcj.org/LAU/guide/Low_latency-Mini-HOWTO.php3>

  8.  ソフトウェア

  Linux ベースの MIDI システムへの関心が高まるにつれて、このリストは入手
  可能な MIDI ソフトウェアの正確な数をたぶん反映しなくなっていくでしょ
  う。でも、アプリケーションの妥当な選択にはなっているはずです。もしあな
  たが他の、ここにリストアップされていない MIDI アプリケーションを開発し
  ている、もしくはご存知ならば、著者にメールをください。

  8.1.  ドライバ

  8.1.1.  Alsa ドライバ

  Advanced Linux Sound Architecture は、いくつかの部分で構成されていま
  す。まず第一に挙げられるのは完全にモジュール化されたサウンドドライバ
  で、モジュールの自動ロード、devfs、isapnp の自動設定をサポートし、オー
  ディオハードウェアのアナログオーディオ、デジタルオーディオ、コントロー
  ル、ミキサー、シンセサイザ、DSP、MIDI、タイマーといった各部分への完全
  なアクセスができるようになります。また、完全なカーネルレベルでのシーケ
  ンサ、OSS/Free アプリケーションのための完全な互換性を提供するレイ
  ヤ、ALSA カーネルドライバのアプリケーション向けの機能 (クライアント/
  サーバ、プラグイン、PCM シェアリング/マルチプレクシング, PCM メータリ
  ングなど) をカバーし強化するオブジェクト指向の C ライブラリ、ドライバ
  を対話的に設定するプログラム、基本的な管理を行なういくつかのシンプルな
  ユーティリティも含まれています。

  <http://www.alsa-project.org/>

  8.1.2.  OSS

  OSS は Linux と FreeBSD でたいていの一般的なサウンドカード向けのサウン
  ドカードドライバを提供します。ドライバは、サウンドカードのデジタルオー
  ディオ、MIDI、シンセサイザ、ミキサーの機能をサポートします。サウンドド
  ライバは Open Sound System API の仕様書に完全準拠します。OSS はサウン
  ドドライバのインストールやサウンドカードの設定がとても簡単になるユーザ
  フレンドリーな GUI を提供します。 200 を超える種類のサウンドカードをサ
  ポートし、サウンドカードの自動検出、プラグアンドプレイ、PCI オーディオ
  サウンドカード、フルデュープレックスオーディオのサポートが提供されてい
  ます。

  <http://www.opensound.com/>

  8.1.3.  Notemidi

  Notemidi はノートブック/ラップトップコンピュータの RS-232 シリアルポー
  トを経由して MIDI を出力するためのデバイスドライバです。 Notemidi は
  MIDIator MS-124W インタフェース、 Roland Sound Canvas サウンドモジュー
  ル、 Yamaha MU-x シリーズサウンドモジュールで使用できます。

  <http://www.michaelminn.com/linux/notemidi>

  8.2.  MIDI ファイルプレイヤー

  8.2.1.  KMid

  KMid は、Linux と FreeBSD に対応した X11 / KDE ベースの MIDI プレイ
  ヤーです。カラオケファイルの歌詞を表示する際、演奏されている箇所の色が
  変化するので、曲が簡単に追えます。KMid は、/dev/sequencer を外部シンセ
  サイザ、 AWE、FM、GUS カードをサポートする出力デバイスとして使います。

  <http://perso.wanadoo.es/antlarr/kmid.html>

  8.2.2.  Pmidi

  Pmidi は、ALSA シーケンサ経由で MIDI ファイルを演奏する簡単なコマンド
  ラインのプログラムです。

  <http://www.parabola.demon.co.uk/alsa/pmidi.html>

  8.2.3.  TiMidity++

  TiMidity は MIDI から WAVE へのコンバータです。一般的な MIDI ファイル
  からデジタルオーディオデータを生成するのに Gravis Ultrasound シリーズ
  互換のパッチファイルを使います。生成されたオーディオデータは、任意のサ
  ウンドデバイス経由での演奏やディスクへの保存が可能です。速いマシンだ
  と、リアルタイムで演奏できます。

  <http://www.onicos.com/staff/iz/timidity/>

  8.3.  シーケンサ

  8.3.1.  Brahms

  Brahms はシーケンサ兼楽譜作成プログラムです。現時点で、スコア、ピアノ
  ロール、ドラム、マスタートラックエディタを含む様々な編集方法を備えてい
  ます。 C++ プログラマであれば、一般的なエディタクラスを借用してさらな
  るエディタを実装するのは簡単です。MIDI のインポートとエキスポートも実
  装されています。 aRts-0.3.4 と組み合わせると、wave ファイルの再生が可
  能になり、 MIDI イベントをソフトウェアシンセに送信するのに aRts の
  MIDI バスが使用できるようになります。

  以前は KooBase という名前で知られていました。

  <http://brahms.sourceforge.net/>

  8.3.2.  Anthem

  Anthem は先進的なオープンソースの MIDI シーケンサです。Anthem では、洗
  練された評価の高いオブジェクト指向の技術を使って、音楽の録音、編集、再
  生が可能です。

  <http://anthem.sourceforge.net/>

  8.3.3.  Jazz++

  JAZZ++ は完全な、オーディオ対応の MIDI シーケンサです。 Linux と
  Windows に対応しています。

  <http://www.jazzware.com/cgi-bin/Zope.cgi/jazzware/>

  8.3.4.  Linux Ultimate Music Editor

  UltiMusE-LX (the Ultimate Music Editor) は作曲プログラムです。といって
  も、あなたのために作曲してくれるわけではありません。音楽向けの「ワープ
  ロ」です。マウスや、コンピュータのキーボードを使って、画面上で楽譜が書
  けます。 16 パートもしくは 16 声までの音符を、7 つまでの譜表に書き込め
  ます。たいていの標準的な音楽記号がサポートされています。MIDI 楽器パッ
  チの変更、 MIDI イベント、リアルタイムクロックもサポートされています。

  <http://hometown.aol.com/knudsenmj/myhomepage/umuselx.htm>

  8.3.5.  Melys

  Melys は Advanced Linux Sound Architecture (ALSA) 対応の MIDI シーケン
  サアプリケーションです。 Melys は ALSA のシーケンササポートを使用しま
  す。GNOME ライブラリのおかげでシーケンサをパワフルかつ簡単に操作できま
  す。

  <http://www.parabola.demon.co.uk/melys/>

  8.3.6.  MidiMountain Sequencer

  MidiMountain はスタンダード MIDI ファイルの編集機能があるシーケンサで
  す。簡単に使えるインタフェースは、MIDI の楽曲(シーケンス)を編集・作成
  する初心者の助けになるでしょう。そのうえ MidiMountain は、スタンダード
  MIDI ファイルや MIDI 転送プロトコルのすべての定義簡単なピアノロールの
  編集からバイナリのシステムエクスクルーシブメッセージの変更までが編集で
  きるように設計されています。

  <http://www.midimountain.com/>

  8.3.7.  MusE

  MusE は Qt 2.1 ベースの Linux 向けシーケンサで、編集も録音もできます。
  シーケンサの再生中でも、ピアノロールエディタやスコアエディタを使ってリ
  アルタイムでイベントを編集できます。記録された MIDI イベントはパートご
  とにグループ分けすることができ、アレンジエディタで編曲できます。

  <http://muse.seh.de/>

  8.3.8.  Rosegarden

  Rosegarden は、MIDI シーケンサと楽譜エディタが統合されたソフトウェアで
  す。

  <http://www.all-day-breakfast.com/rosegarden/>

  8.4.  MIDI トラッカー

  8.4.1.  tektracker

  ttrk (tektracker) は、トラッカースタイルのステップエディタを備えたコン
  ソール MIDI シーケンサです。ライブ演奏向けに作られており、使いやすいト
  ラックミュートボタンとループコントロール機能があります。ttrk は MIDI
  クロックパルスの送信と同期の両方をサポートしています。

  <http://div8.net/ttrk/>

  8.4.2.  ShakeTracker

  ShakeTracker は、トラッカーのインタフェースを備えた完全な MIDI シーケ
  ンサを目指しています。目下のところ、申し分なく動作する上、ほとんどのト
  ラッカーのエフェクトをサポートしています。以前 Impulse トラッカーを
  使ったことがある方は、なじみのある感じがするでしょう。はじめて使う方に
  は、簡単ながら広範囲にわたるヘルプシステムが用意されています。コマンド
  とショートカットのほとんどは、トラッカーのそれに似ています。

  <http://reduz.com.ar/shaketracker/>

  8.5.  ドラムエディタ

  8.5.1.  DrumPatterns

  DrumPatterns はフリーでオープンソースの、web 指向のドラムパターンジェ
  ネレータです。用途はドラムパターンを教える手助けをすることです。高度な
  リズムも初歩のリズムも教えることができます。文字、スコア、MIDI での出
  力が可能で、何時間ものサンプルが含まれています。

  <http://www.linux-france.org/prj/drumpatterns/index-en.html>

  8.6.  パッチエディタ

  8.6.1.  JSynthLib

  JSynthLib はオープンソースの、様々な環境で使えるシンセサイザパッチエ
  ディタ/ ライブラリアンソフトで、Java 言語で書かれています。サポートさ
  れていないシンセ用のドライバやエディタをユーザが開発しプロジェクトに寄
  贈できるように、そのやり方と技術文書を提供することによって、最終的には
  実在するすべてのシンセサイザをサポートすることをこのプロジェクトは志し
  ています。

  8.7.  ソフトウェアシンセ

  8.7.1.  Spiral Synth

  Spiral Synth はポリフォニックアナログシンセサイザを物理モデル化したソ
  フトウェアです。ハードウェアアナログシンセによって作られるたぐいの音
  や、電子音楽に使われるノイズの作成が可能です。もっと奇妙な音の作成にも
  使えます。MIDI がサポートされており、また、標準的な OSS/Free サウンド
  出力 (/dev/dsp) を使用します。

  <http://www.pawfal.org/SpiralSynth/>

  訳注: 後継の SpiralSynthModular が、現在活発に開発されています。

  <http://www.pawfal.org/Software/SSM/>

  8.7.2.  UltraMaster Juno-6

  UltraMaster Juno-6 は、Roland Juno-6 ポリフォニックシンセサイザを忠実
  にソフトウェアで再現したものです。リアルタイム 64 ビットインターナル
  ULTRANALOG ウェーブシンセシス、80 年代初期スタイルのアルペジエーターと
  コーラス、利用者自身のカスタムセッティングを保存するための 100 のパッ
  チが特色です。すべてのパラメータはリアルタイムで、スクリーン上の GUI
  もしくは 外部の MIDI コントローラ経由でコントロールできます。

  <http://www.ultramaster.com/juno6/index.html>

  8.7.3.  Pure-Data (PD)

  Pd は pure data の略称です。Pd は音楽やマルチメディアのライブパフォー
  マンスのためのリアルタイムソフトウェアシステムです。 Miller Puckette
  他によって活発に開発されています。システムは未完成ですが、高度なプロ
  ジェクトにも十分使えます。すでに Linux, IRIX, 各種 Windows にポートさ
  れています。

  訳注: 現在では Mac OSX にもポートされています。

  <http://www.pure-data.org/>

  8.7.4.  Csound

  Csound はソフトウェア音響合成のプログラムです。でも単なるそれを超えて
  います。 Csound では、他のソフトウェア/ハードウェアシンセサイザに存在
  するような制限を受けることがありません。ひとつのプログラムが使用できる
  オシレータやフィルタの総数に制限がないのです。さらに、Csound は完全な
  モジュール方式です。ですから、Csound のどの機能も多種多様なやり方で使
  用できます。

  <http://www.csound.org/>

  8.7.5.  Bristol synthesiser emulator

  Bristol はシンセサイザエミュレーションのパッケージです。 Moog Mini,
  Moog Voyager, Hammond B3, Prophet 5, Juno 6, DX 7 などが含まれていま
  す。

  <http://www.slabexchange.org/index.cgi?DOWNLOAD>

  8.8.  プラグイン

  8.8.1.  xmms-midi

  xmms (旧名 x11amp) に、(timidity を経由させることによって) MIDI ファイ
  ルのサポートを追加します。そっけないミキサーインタフェースが、設定ダイ
  アログによって提供されます。

  <http://ban.joh.cam.ac.uk/~cr212/xmms-midi/>

  8.9.  楽譜作成

  8.9.1.  Mup

  Mup はテキストファイルを入力に用いて、楽譜印刷用の PostScript を出力し
  ます。普通の楽譜とタブ譜の両方が扱えます (MIDI での出力も可能です)。

  <http://www.arkkra.com/>

  8.9.2.  Lilypond

  LilyPond は譜面用の植字ソフトです。概要が記述されたファイルを入力に用
  いて、美しい譜面を生成します。LilyPond は GNU Project の一部です。

  <http://www.lilypond.org/>

  8.10.  開発

  8.10.1.  sfront

  Sfront は MPEG 4 Structured Audio (MP4-SA) のビットストリームを、実行
  時にオーディオを生成する効率的な C プログラムにコンパイルします。
  MP4-SA とは、規範に従ったアルゴリズミックなサウンド用の規格で、オー
  ディオシグナル処理言語 (SAOL) とスコア言語 (SASL と旧式の MIDI ファイ
  ル形式) を結合したものです。 Linux では、Sfront はリアルタイム、ロウレ
  イテンシなオーディオ入出力、サウンドカードからのローカル MIDI 入力、
  RTP と SIP を用いてのネットワーク経由での MIDI 入力をサポートしていま
  す。バークレーのキャンパスでホストされた SIP サーバがセッションを管理
  します。この Web サイトには、MP4-SA についてのオンラインブックもありま
  す。

  <http://www.cs.berkeley.edu/~lazzaro/sa/index.html>

  8.10.2.  jMax

  jMax を使えば、対話的にデータフロー回路を設計できます。使用できる基本
  的なデータタイプは整数、シンボル、リストなどです。イベントドリブンのシ
  ステムで、MIDI の処理に使われていました。システムの別の部分 (DSP) で
  は、回路に継続的な信号を流すことができます。これは、PCM サウンド (すな
  わち、マイク経由の音やサウンドファイルなど) にとって最も有用です。シス
  テムはシェアードライブラリの使用によって拡張可能なので、データプロセッ
  サタイプ、データタイプ、GUI 要素、デバイスタイプ、その他を追加できま
  す。データプロセッサも回路としての設計や再利用が可能です。

  <http://www.ircam.fr/equipes/temps-reel/jmax/>

  8.10.3.  TSE3

  TSE3 は C++ で書かれたパワフルなオープンソースのシーケンサエンジンで
  す。なぜ「シーケンサエンジン」なのかというと、TSE3 はシーケンサの実動
  部分を提供するだけで、ユーザインタフェースのフォームを提供しないからで
  す。 TSE3 ライブラリを使えば、シーケンサアプリケーションやマルチメディ
  アプレゼンテーションパッケージを作成する際、 MIDI シーケンスの扱いが楽
  になります。

  <http://TSE3.sourceforge.net/>

  8.10.4.  KeyKit

  KeyKit はマルチタスクのインタプリタ型プログラム言語です (awk に触発さ
  れています)。リアルタイムかつアルゴリズミックな MIDI の操作に特化して
  設計されています。KeyKit の GUI は、アルゴリズミックな音楽実験用の様々
  なツールを何ダースも供給します。その中にはマルチトラックシーケンサやド
  ラムパターンエディタも含まれています。 GUI とすべてのツールは、完全に
  KeyKit 言語それ自体で書かれています。おかげで、ユーザはたとえシステム
  の動作中でも、存在しているツールに新たなツールや命令を追加できます。

  <http://nosuch.com/keykit/>

  9.  MIDI を扱うプログラムの開発

  MIDI アプリケーションの開発志望者にとって、開発に着手するために良いプ
  ログラム例が必要となることはありがちです。

  次に挙げる例は、LAD メーリングリストの、プログラム例と文書・チュートリ
  アルについてのスレッドに投稿されました。

  9.1.  例 1

  以下のプログラムは Dr. Matthias Nagorni による、ちょっとしたシーケンサ
  のルーチンです。リンク集にリストアップされている Matthias のサイトから
  さらに多くの例が入手できます。

  このようにコンパイルします:

  ______________________________________________________________________
  [phil@beatbox] $ gcc seqdemo.c -o seqdemo -lasound

  #include <stdio.h>
  #include <stdlib.h>
  #include <unistd.h>
  #include <alsa/asoundlib.h>

  snd_seq_t *open_seq();
  void midi_action(snd_seq_t *seq_handle);

  snd_seq_t *open_seq() {

    snd_seq_t *seq_handle;
    int portid;

    if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
      fprintf(stderr, "Error opening ALSA sequencer.\n");
      exit(1);
    }
    snd_seq_set_client_name(seq_handle, "ALSA Sequencer Demo");
    if ((portid = snd_seq_create_simple_port(seq_handle, "ALSA Sequencer Demo",
              SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,
              SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
      fprintf(stderr, "Error creating sequencer port.\n");
      exit(1);
    }
    return(seq_handle);
  }

  void midi_action(snd_seq_t *seq_handle) {

    snd_seq_event_t *ev;

    do {
      snd_seq_event_input(seq_handle, &ev);
      switch (ev->type) {
        case SND_SEQ_EVENT_CONTROLLER:
          fprintf(stderr, "Control event on Channel %2d: %5d       \r",
                  ev->data.control.channel, ev->data.control.value);
          break;
        case SND_SEQ_EVENT_PITCHBEND:
          fprintf(stderr, "Pitchbender event on Channel %2d: %5d   \r",
                  ev->data.control.channel, ev->data.control.value);
          break;
        case SND_SEQ_EVENT_NOTEON:
          fprintf(stderr, "Note On event on Channel %2d: %5d       \r",
                  ev->data.control.channel, ev->data.note.note);
          break;
        case SND_SEQ_EVENT_NOTEOFF:
          fprintf(stderr, "Note Off event on Channel %2d: %5d      \r",
                  ev->data.control.channel, ev->data.note.note);
          break;
      }
      snd_seq_free_event(ev);
    } while (snd_seq_event_input_pending(seq_handle, 0) > 0);
  }

  int main(int argc, char *argv[]) {

    snd_seq_t *seq_handle;
    int npfd;
    struct pollfd *pfd;

    seq_handle = open_seq();
    npfd = snd_seq_poll_descriptors_count(seq_handle, POLLIN);
    pfd = (struct pollfd *)alloca(npfd * sizeof(struct pollfd));
    snd_seq_poll_descriptors(seq_handle, pfd, npfd, POLLIN);
    while (1) {
      if (poll(pfd, npfd, 100000) > 0) {
        midi_action(seq_handle);
      }
    }
  }
  ______________________________________________________________________

  9.2.  例 2

  以下は Nick Dowell 作の ALSA 0.9 対応 MIDI リダイレクタです。

  ______________________________________________________________________
  /* ALSA Sequencer MIDI redirector.
     Redirects the input to outputs determined by the MIDI channel
     (as requested by Nathaniel Virgo on Linux-Audio-Dev ;-)
     based on Dr. Matthias Nagorni's ALSA seq example

     Nick Dowell <nixx@nixx.org.uk>
     */

  #include <stdio.h>
  #include <stdlib.h>
  #include <unistd.h>
  #include <alsa/asoundlib.h>

  int
  main()
  {
    snd_seq_t *seq_handle;
    snd_seq_event_t *ev;
    int i;
    int portid;              /* input port */
    int oportid[16];         /* output ports */
    int npfd;
    struct pollfd *pfd;
    char txt[20];

    if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
      fprintf(stderr, "Error opening ALSA sequencer.\n");
      exit(1);
    }

    snd_seq_set_client_name(seq_handle, "MIDI Redirect");

    /* open one input port */
    if ((portid = snd_seq_create_simple_port
         (seq_handle, "Input",
          SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE,
          SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
      fprintf(stderr, "fatal error: could not open input port.\n");
      exit(1);
    }
    /* open 16 output ports for the MIDI channels */
    for (i=0; i<16; i++){
      sprintf( txt, "MIDI Channel %d", i );
      if ((oportid[i] = snd_seq_create_simple_port
           (seq_handle, txt,
            SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ,
            SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
        fprintf(stderr, "fatal error: could not open output port.\n");
        exit(1);
      }
    }

    npfd = snd_seq_poll_descriptors_count(seq_handle, POLLIN);
    pfd = (struct pollfd *)alloca(npfd * sizeof(struct pollfd));
    snd_seq_poll_descriptors(seq_handle, pfd, npfd, POLLIN);

    while (1)  /* main loop */
      if (poll(pfd, npfd, 1000000) > 0){
        do {
          snd_seq_event_input(seq_handle, &ev);
          snd_seq_ev_set_source( ev, oportid[ev->data.control.channel] );
          snd_seq_ev_set_subs( ev );
          snd_seq_ev_set_direct( ev );
          snd_seq_event_output_direct( seq_handle, ev );
          snd_seq_free_event(ev);
        } while (snd_seq_event_input_pending(seq_handle, 0) > 0);
      }
    return 0;
  }
  ______________________________________________________________________

  9.3.  例 3

  以下は Craig Stuart Sapp による、OSS の /dev/midi インタフェースにデー
  タを書き込む例です。

  リンクの節にリストアップされている Craig のサイトには、さらに多くの例
  があります。

  ______________________________________________________________________
  //
  // Programmer:    Craig Stuart Sapp [craig@ccrma.stanford.edu]
  // Creation Date: Mon Dec 21 18:00:42 PST 1998
  // Last Modified: Mon Dec 21 18:00:42 PST 1998
  // Filename:      ...linuxmidi/output/method1.c
  // Syntax:        C
  // $Smake:        gcc -O -o devmidiout devmidiout.c && strip devmidiout
  //

  #include <linux/soundcard.h>
  #include <unistd.h>
  #include <fcntl.h>
  #include <stdio.h>

  int main(void) {
     char* device =  "/dev/midi" ;
     unsigned char data[3] = {0x90, 60, 127};

     // step 1: open the OSS device for writing
     int fd = open(device, O_WRONLY, 0);
     if (fd < 0) {
        printf("Error: cannot open %s\n", device);
        exit(1);
     }

     // step 2: write the MIDI information to the OSS device
     write(fd, data, sizeof(data));

     // step 3: (optional) close the OSS device
     close(fd);

     return 0;
  }
  ______________________________________________________________________

  10.  ソフトウェアシンセサイザといっしょに MIDI シーケンサを使う

  Frank Barknecht  <barknech@ph-cip.uni-koeln.de>

  <http://linux-sound.org/quick-toots/4-sequencers_and_softsynths/quick-
  toot-midisynth_howto.html>
  訳注: 日本語訳は <http://www.linux.or.jp/JF/JFdocs/midisynth-howto/>

  この HOWTO では、MIDI 受信可能なソフトウェアシンセサイザを、 MIDI シー
  ケンサから ALSA 0.9 の仮想的な MIDI 接続経由で制御する際に必要となる設
  定を述べます。本文書は自由に翻訳や配布が可能です。 GNU Free
  Documentation License で公開されています。

  10.1.  はじめに

  Csound, PD, jMax, Spiral Synth Modular のようなソフトウェアシンセサイ
  ザは、既知や未知、尋常もしくは奇抜な音響体験を創造するほとんど無限の自
  由を提供します。ソフトウェアシンセサイザは、高価なハードウェアシンセサ
  イザや、安価なサウンドカードの、音質が悪いことが多い MIDI シンセサイザ
  機能 (いずれにしても Linux でサポートされていればですが) を置き換える
  こともできます。一方、それらのソフトウェアシンセサイザを使って作曲する
  のは退屈な作業になることもありますたとえば Csound では、表計算ソフトの
  ような作法で果てしない数列を記述しなくてはならないのです。これは、音楽
  を作るのに快適なやりかたではありません。

  MIDI シーケンサアプリケーションは、こういった作業により適しています。
  シーケンサは、音符を挿入したりデータを制御したりするインタフェースを使
  いやすいやりかたで楽譜の音符、ピアノロールのマーク、MIDI イベントのリ
  ストといった好みに応じた表現方法で提供します。他の種類の MIDI シーケン
  サには、音符を入力するのにトラッカーのようなステップ入力方式を提供する
  ものがあります。多くの人達が、このやりかたがシーンでの最先端だった古き
  良き時代から慣れ親しんでいる方式です。最後に、忘れてはならない方式があ
  ります。 MIDI シーケンサの中には、鍵盤や他の物理デバイスでの演奏を記録
  できるものもあります。これは、多くのユーザにとって最も自然な作曲方法で
  す。

  ところで、MIDI シーケンサは、通常は音符を MIDI デバイスに出力します。
  普通、MIDI イベントを世界の外側すなわちハードウェアシンセやサンプラー
  に送信するということです。でも仮想 MIDI デバイスを使えば、MIDI データ
  をコンピュータの内側にキープし、同じマシンで実行している他のソフトウェ
  アを制御させることができます。この HOWTO では、この目的に達するために
  必要なすべてを述べます。

  10.2.  デバイスの設定

  この HOWTO における設定では、 ALSA <http://www.alsa-project.org> のラ
  イブラリとドライバモジュールを用います。なぜなら、ALSA は Linux で本格
  的にオーディオや MIDI を使う上での標準的な手段 (あるいはそうなるべき)
  だからです。このチュートリアルでは、ALSA の 0.9.0 ブランチの使用を仮定
  します。でも、仮想 MIDI のモジュールは ALSA 0.5.x にもあるので、以下に
  述べるほとんどは ALSA 0.5.x でも同様に適応できるでしょう。 OSS/Free
  (2.5.x 以前のカーネルにあるサウンドモジュール)や OSS/Linux
  <http://www.opensound.com> サウンドアーキテクチャでは v_midi モジュー
  ルが使えますが、これは本文書の範疇ではありません。

  ALSA の仮想 MIDI カードを使うには、snd-card-virmidi モジュールが存在し
  ていなくてはなりません。最新バージョンの ALSA (や 2.5.x 開発版カーネ
  ル) では snd-card-virmidi は '-card' 接中辞(ミドルフィックス)が取り除
  かれ、snd-virmidi に名前を変えました。このモジュールをビルドしたことを
  確認してください。実際に使っているカードのモジュールをビルドするように
  ALSA を configure しただけでは、おそらくこのモジュールはビルドされてい
  ないでしょう。

  仮想 MIDI ポートを利用可能にするには、virmidi モジュールをロードしなく
  てはなりません。手動で試験的にロードできます:

  ______________________________________________________________________
   $ modprobe snd-virmidi snd_index=1

  ______________________________________________________________________

  訳注:

  alsa-driver 0.9.0rc4 以降、snd_index オプションは index に名称変更され
  ました。最新の alsa をお使いの場合は、index=1 としてください。

  snd_index の値を、空いているカード index のひとつ目になるように設定し
  ます。 (カードがひとつだけなら、そのカードがすでに index 0 なので、
  virmidi は index=1 に設定する) でも、仮想 MIDI カードが必要になった時
  に、自動的に設定がなされるようにモジュールを設定すると、より便利です。
  そのためには、/etc/modules.conf (ディストリビューションによって、別の
  場所にあることもあります) の ALSA に関する箇所に、次の項目を追加しま
  す:

  ______________________________________________________________________
   # OSS の /dev/sequencer と /dev/music (別名 /dev/sequencer2)
   # をサポートするように設定する
   # 岩井隆さんが、これらのサービスをひとつ目のカード、
   # すなわち card 0 以外にエイリアスする必要はないと
   # アドバイスしてくれました
   alias sound-service-0-1 snd-seq-oss
   alias sound-service-0-8 snd-seq-oss

   # カード 1 (ふたつ目のカード) を仮想 MIDI カードに設定する
   alias sound-slot-1 snd-card-1
   alias snd-card-1 snd-virmidi

  ______________________________________________________________________

  ここでは、お使いのサウンドカードのハードウェアがひとつと仮定し、仮想
  MIDI カードを index 1 であるふたつ目のカードとして設定しました (これは
  とても有用だと思います)。もしあなたが筆者のようにふたつ目のサウンド
  カードをすでにお持ちなら、以下を読んで上記設定を変更してください:

  ______________________________________________________________________
   # カード 2 (三つ目のカード) を仮想 MIDI カードに設定する
   alias sound-slot-2 snd-card-2
   alias snd-card-2 snd-virmidi

  ______________________________________________________________________

  もっと多くのカードをお使いでも、以上の説明を応用すれば何をやればいいか
  はもうお分かりですよね

  設定したら、ALSA サウンドシステムを再起動する必要があります。その後、
  仮想 MIDI カードが /proc/asound/cards で確認できるはずです:

  ______________________________________________________________________
  $ cat /proc/asound/cards
   0 [card0          ]: ICE1712 - M Audio Audiophile 24/96
                        M Audio Audiophile 24/96 at 0xb800, irq 5
   1 [card1          ]: EMU10K1 - Sound Blaster Live!
                        Sound Blaster Live! at 0xc800, irq 11
   2 [card2          ]: VirMIDI - VirMIDI
                        Virtual MIDI Card 1

  ______________________________________________________________________

  筆者のマシンの例では、VirMIDI カードが index 2 である三つ目のカードに
  なっています。この構成は、/proc/asound/devices [MIDI デバイスのみ表示
  される]では、次の raw MIDI デバイス群として反映されます。

  ______________________________________________________________________
   $ cat /proc/asound/devices
     8: [0- 0]: raw MIDI
    41: [1- 1]: raw MIDI
    42: [1- 2]: raw MIDI
    75: [2- 3]: raw MIDI
    74: [2- 2]: raw MIDI
    73: [2- 1]: raw MIDI
    72: [2- 0]: raw MIDI

  ______________________________________________________________________

  筆者の場合は、'2-' ではじまるデバイスが仮想 MIDI デバイスです。お使い
  のシステムにあるハードウェアのサウンドカードがひとつだけなら、'1-' で
  はじまるデバイスが仮想 MIDI デバイスになるでしょう。

  ALSA に含まれている aconnect ユーティリティを使うと、もっと分かりやす
  い一覧表が見られます。aconnect は以後様々な用途で必要になるでしょ
  う。-o (もしくは -lo) オプション付きで実行すると、MIDI 出力が可能な
  MIDI デバイスを表示します。また、-i オプション付きで実行すると、MIDI
  入力が可能な MIDI デバイスを表示します:

  ______________________________________________________________________
   $ aconnect -o
   [...]
   client 80: 'Virtual Raw MIDI 2-0' [type=kernel]
       0 'VirMIDI 2-0     '
   client 81: 'Virtual Raw MIDI 2-1' [type=kernel]
       0 'VirMIDI 2-1     '
   client 82: 'Virtual Raw MIDI 2-2' [type=kernel]
       0 'VirMIDI 2-2     '
   client 83: 'Virtual Raw MIDI 2-3' [type=kernel]
       0 'VirMIDI 2-3     '
   $ aconnect -i
   [...]
   client 80: 'Virtual Raw MIDI 2-0' [type=kernel]
       0 'VirMIDI 2-0     '
   client 81: 'Virtual Raw MIDI 2-1' [type=kernel]
       0 'VirMIDI 2-1     '
   client 82: 'Virtual Raw MIDI 2-2' [type=kernel]
       0 'VirMIDI 2-2     '
   client 83: 'Virtual Raw MIDI 2-3' [type=kernel]
       0 'VirMIDI 2-3     '

  ______________________________________________________________________

  表示されたデバイス群は、/proc/asound/dev ディレクトリツリーにある、
  ALSA が提供する OSS 互換の raw MIDI デバイス群と一致します。一例を示す
  と、/proc/asound/dev/midiC2D0 は、index 2 の仮想 MIDI カードにあるひと
  つ目の MIDI デバイスです。これは aconnect では Virtual Raw MIDI 2-0 と
  表示されます。 Debian では、これらのデバイスファイルは /dev/snd/ ディ
  レクトリにもあり、旧来の OSS デバイスの場所である /dev/midiXX へ内部的
  にリンクされています。シンボリックリンクを張った /dev/midiXX から ALSA
  の raw MIDI ポートにアクセスできるのを確認するには:

  ______________________________________________________________________
   $ ln -s /dev/snd/midiC2D0 /dev/midi20
   $ ln -s /dev/snd/midiC2D1 /dev/midi21
   [...]

  ______________________________________________________________________

  でも、これは必要不可欠ではありません。お父さんのマシンでやってはいけま
  せんよ!

  訳注:

  最近の alsa では /proc/asound/dev が廃止され、/dev/snd 以下が正式のデ
  バイスファイルになりました。

  ここまでで仮想 MIDI カードの作成と設定が完了しましたので、他の MIDI デ
  バイスと全く同様に、お使いのアプリケーションで使用することができます。
  好みのシーケンサやシンセサイザのアプリケーションのきちんとした設定箇所
  に、 OSS 互換なら /dev/midi20 のような形式、ALSA MIDI ポートなら 80:0
  のような形式で、必要なデバイス名を記入するだけです。

  10.3.  MIDI イベントのルーティング

  10.3.1.  aconnect

  仮想 MIDI カードの作成と設定をした上で、さらなる準備をしないと、 MIDI
  イベントをシーケンサからソフトシンセに送信することはできません。そのた
  めには、最初にふたつのポートをご想像通り aconnect ユーティリティで接続
  する必要があります。このツールはふたつ、もしくはそれより多くのポートを
  接続します。-i と -o が使用可能なポートを表示するオプションであること
  は、すでに以前説明した通りです。簡単な構文で、これらのポートを一方向に
  接続することができます。

  ______________________________________________________________________
   $ aconnect [送信ポート] [受信ポート]
   $ aconnect 80:0 81:0

  ______________________________________________________________________

  この例では、port 80:0 に送信されたすべての MIDI データを port 80:1 に
  向けてルーティングします。本文書の構成だと、/dev/midi20 に入ってきたす
  べてのイベントは /dev/midi21 に送信されることになるので、/dev/midi21
  から他のアプリケーションはその MIDI イベントを読む(受信する) ことがで
  きます。

  VirMIDI カードをカード index 1 であるふたつ目のカードとして設定した場
  合、これらのポートが存在するはずです:

  ______________________________________________________________________
   $ aconnect -lo
   client 72: 'Virtual Raw MIDI 1-0' [type=kernel]
       0 'VirMIDI 1-0     '
   client 73: 'Virtual Raw MIDI 1-1' [type=kernel]
       0 'VirMIDI 1-1     '
   client 74: 'Virtual Raw MIDI 1-2' [type=kernel]
       0 'VirMIDI 1-2     '
   client 75: 'Virtual Raw MIDI 1-3' [type=kernel]
       0 'VirMIDI 1-3

  ______________________________________________________________________

  この時点で、たとえばポート 72:0 (/dev/midi10) からポート 73:0
  (/dev/midi11) に接続できます:

  ______________________________________________________________________
   $ aconnect 72:0 73:0

  ______________________________________________________________________

  aconnect で -lo や -li オプションを使うと、接続状況を表示できます:

  ______________________________________________________________________
   $ aconnect -lo
   client 72: 'Virtual Raw MIDI 1-0' [type=kernel]
       0 'VirMIDI 1-0     '
           Connecting To: 73:0
   client 73: 'Virtual Raw MIDI 1-1' [type=kernel]
       0 'VirMIDI 1-1     '
           Connected From: 72:0
   client 74: 'Virtual Raw MIDI 1-2' [type=kernel]
       0 'VirMIDI 1-2     '
   client 75: 'Virtual Raw MIDI 1-3' [type=kernel]
       0 'VirMIDI 1-3

  ______________________________________________________________________

  "Virtual Raw MIDI 1-0" が現在 "Virtual Raw MIDI 1-1" に接続されている
  ことが分かります。この時点で、"Virtual Raw MIDI 1-0" に送信された MIDI
  データを "Virtual Raw MIDI 1-1" から読み出すことができます。 OSS 互換
  デバイスだと、/dev/midi10 に送信された MIDI データは /dev/midi11 への
  経路をとり、/dev/midi11 から読み出すことができます。どちらを使うかは、
  お使いのアプリケーションによります。

  ふたつ以上のポートを、ひとつのポートに接続することもできます。以下のよ
  うに aconnect を二度実行すると:

  ______________________________________________________________________
   $ aconnect 72:0 73:0
   $ aconnect 72:0 74:0

  ______________________________________________________________________

  /dev/midi10 に送信したのと同じデータを、/dev/midi11 と /dev/midi12 で
  同様に受信できます。当然、もっとたくさんの仮想 MIDI カードを作成し、そ
  れらをでたらめに接続した場合は、本当にマシンを酷使することになります。
  もうわたしたちを止めるものはなにもありません

  すべてのポートの接続を切るには:

  ______________________________________________________________________
   $ aconnect -x

  ______________________________________________________________________

  接続をひとつだけ切るには:

  ______________________________________________________________________
   $ aconnect -d 72:0 74:0

  ______________________________________________________________________

  10.4.  グラフィカルな MIDI パッチベイ

  Bob Ham 作の ALSA MIDI Patch Bay <http://pkl.net/~node/> は、ALSA の
  MIDI 接続の設定をするのにとても有用なグラフィックフロントエンドです。
  使い方はとても簡単で直感的です: 左側は MIDI イベントを送信可能な MIDI
  ポート群で、もう一方の右側には受信可能な MIDI ポート群があります。左側
  のポートをクリックすると、次にクリックする右側のポートへの新たな接続が
  できるようになります。右側のポートをクリックすると、そのポートが接続さ
  れている場合はそれを切ります。本 HOWTO を余計なものにしてしまいかねな
  いくらいクリーンで簡単なツールです. ;)

  10.4.1.  aseqview

  MIDI イベントをルーティングするためのもうひとつの有用なツールが、 ALSA
  開発者岩井隆さん作の aseqview です。岩井さんのホームページ
  <http://members.tripod.de/iwai/alsa.html> でダウンロードできますが、多
  くのディストリビューションにも含まれています。このグラフィカルなユー
  ティリティは、コンピュータを通過する MIDI イベントを眺めたり変更したり
  する目的で設計されましたが、 aconnect のように、異なる MIDI ポートにイ
  ベントをルーティングすることもできます。 aconnect では時に操作できない
  こともある OSS シーケンサデバイスを使うアプリケーションを扱わなければ
  ならない時に、 aseqview は有用です。コマンドラインオプションなしで
  aseqview を起動すると、きれいな GUI と新たな MIDI ポートが手に入りま
  す。デフォルトは port 128:0 です。このようになります:

  ______________________________________________________________________
   client 128: 'MIDI Viewer' [type=user]
      0 'Viewer Port 0 '

  ______________________________________________________________________

  このポートを使って、これまで説明してきた aconnect の作業すべてが可能で
  す。でも、aseqview のポートを別のポートに接続することだけが必要なら、
  -d オプションを使えば、aseqview だけで実現できます:

  ______________________________________________________________________
   $ aseqview -d 73:0 &

  ______________________________________________________________________

  ちょうど aseqview の起動時から、(使用可能であれば) port 128:0 から
  port 73:0 に接続がなされます。

  これらのツールととてもよく似た機能があるグラフィカルな aconnect ツール
  がほかにもいくつかあります。Maarten de Boer は、オリジナルの aconnect
  のソースコードのほとんどを使って、FLTK ツールキットで "aconnectgui" と
  いうグラフィカルフロントエンドを書きました。
  <http://www.iua.upf.es/~mdeboer/> で、入手できます。筆者の意見では、彼
  のソフトウェアが最も見栄えがよいです。

  個人的に、筆者は kaconnect を使っています。たぶん名前がいちばん短かい
  ので、速くタイプできるからでしょう。kaconnect は Suse の Dr. Matthias
  Nagorni によって、ALSA 向けのツールとソフトシンセのシリーズである
  kalsatools の一部として開発されました。名前に "k" がついているからと
  いって、勘違いしないでください。kaconnect は KDE を必要とせず、QT GUI
  ライブラリだけを使います。kaconnect その他は
  <http://www.suse.de/~mana/kalsatools.html> で、入手できます。

  10.5.  アプリケーション

  最後のこの節では、様々なアプリケーションでの仮想 MIDI 接続の使いかた
  を、いくつかの実例で説明します。システムの中で、仮想 MIDI カードが三つ
  目のカードになっていて、 ALSA MIDI ポートの 80:0 から 83:0 までが、raw
  OSS MIDI デバイスの /dev/midi20 から /dev/midi23 や、ALSA raw MIDI デ
  バイスの /dev/snd/midiC2D0 から /dev/snd/midiC2D3 と一致する環境を仮定
  します。これらのうち、最初のふたつが 'aconnect' されています:

  ______________________________________________________________________
   $ aconnect 80:0 81:0

  ______________________________________________________________________

  これまで説明してきたとおり、これはつまり /dev/midi20 (もしくは port
  80:0 もしくは /dev/snd/midiC2D0) に送られたすべての MIDI データ
  は、/dev/midi21 (もしくは port 80:1 もしくは /dev/snd/midiC2D1) で読め
  ていることを意味しています。

  10.6.  シーケンサ

  10.6.1.  MusE

  MusE は、Werner Schweerによって作られた完全な MIDI シーケンサです。
  <http://muse.seh.de> で入手できます。 ``Config->Midi Ports'' セクショ
  ンで、仮想 MIDI ポートを出力ポートとして設定する必要があります。 MusE
  では、指定するポートは ALSA での名前 'VirMIDI X-X' です:

  ここで、出力ポートに正しいポートを選んでいるか確認してください。つまり
  その MIDI イベントを受信・演奏させたいソフトウェアシンセサイザが待ち受
  けているチャンネルです。

  どういうわけか、筆者は MuSE 0.4.9 で、'VirMIDI 2-0' を出力デバイスとし
  て使うことができませんでした。'VirMIDI 2-1' で受信したい時、'VirMIDI
  2-0' デバイスに送信したかったのですが、そのふたつを逆にして使わなくて
  はならなかったのです。多分筆者がまぬけなせいなのでしょうが、筆者には原
  因が分からないので、あなたはちょっと実験をしなくてはならないかもしれま
  せん。 midi02 や midi2 形式のデバイスを使うことも可能でしょう。

  10.6.2.  ttrk

  Billy Biggs 作の ttrk <http://div8.net/ttrk/> は、シンプルで軽く安定し
  た MIDI シーケンサで、トラッカーのようなステップ入力のインタフェースを
  備えています。このシーケンサは、MIDI データを $HOME/.ttrkrc ファイルで
  設定された MIDI ポートに送信することができます。

  ttrk が /dev/snd/midiC2D0 に送信するようにするには、次の行を
  $HOME/.ttrkrc ファイルに書いてください。

  ______________________________________________________________________
  mididev = /dev/snd/midiC2D0
  ______________________________________________________________________

  これで設定完了です...

  10.6.3.  Shaketracker

  Juan Linietsky 作の Shaketracker <http://reduz.com.ar/shaketracker>
  は、MIDI 上でトラッカーのインタフェースを復活させました。その点は ttrk
  同様ですが、Shaketracker は、古典的なトラッカーのエフェクトを MIDI
  データに、より完璧に変換します。あいにく、MIDI 出力には raw MIDI デバ
  イスではなく OSS シーケンサデバイス (/dev/sequencer) が使われるので、
  筆者は aconnect を用いて動作させることができませんでした。でも
  aseqview を使うなどすれば回避は可能です。 Shaketracker を起動する前に
  aseqview を起動すれば、 Shaketracker は aseqview のポートを認識し、そ
  れを使います。必要な作業は、Shaketracker の 'User Devices' セクション
  でそのポートを選ぶだけです。'User Devices' セクションでは ALSA での名
  前 'Viewer Port 0' として表示されます:

  このユーザデバイスに、'Null Output' のかわりに分かりやすい名前をつける
  と便利です。

  aseqview を、コマンドラインオプションなしで起動した場合、 aseqview の
  ポートをソフトシンセのポートと aconnect する必要があります。でも、以前
  説明したように、接続先ポートの指定つきで直接 aseqview を起動することも
  できます。ソフトシンセに送信する各トラックごとに、この新たなユーザデバ
  イスを使用するのを忘れないでください。筆者はいつも小さなシェルスクリプ
  トを用いて Shaketracker を起動します。これは aseqview を起動し、ポート
  が作られる時間を待ち、それから Shaketracker を起動します:

  ______________________________________________________________________
   #!/bin/sh
   aseqview -d 81:0 &
   # sleep 2 seconds to let aseqview do its work:
   sleep 2
   shaketracker

  ______________________________________________________________________

  10.7.  ソフトウェアシンセサイザ

  10.7.1.  Pure Data

  Miller Puckette は、オープンソースのソフトウェアシンセかつマルチメディ
  ア開発環境の Pure Data <http://crca.ucsd.edu/~msp/software.html> を生
  んだ天才です。PD は MAX から発展し、それが逆に MAX の拡張である MSP の
  基礎となりました。PD では MIDI イベントを読むのに raw MIDI デバイスを
  使うことができます。raw MIDI デバイスは '-midiindev <デバイスの番号>'
  オプションで指定します。しかし、使用するデバイスを指定するやりかたには
  いらいらさせられます。次のような形式です: /dev/midi0 を使うには、PD を
  '-midiindev 1' オプションで起動します。/dev/midi1 を使うには
  '-midiindev 2' で、以下同様です。理解できましたか? このオプションで
  は、実際のデバイス番号に 1 を足した数字を指定しなくてはならないので
  す。別の例です: /dev/midi21 を使うには、'-midiindev 22' オプションで
  PD を起動します。

  PD には 'Test audio and MIDI' という名のヘルプパッチが用意されていま
  す。正しい MIDI デバイスを確認する上で、とても重宝します。

  10.7.2.  Csound

  Csound <http://www.csounds.com> は、いまどきのソフトウェアシンセサイザ
  ほとんどの祖母にあたります。そして、MIDI にも対応がなされていま
  す。'csound --help' を実行すると、MIDI 入力デバイスの設定が必要な箇所
  を表示します:

  ______________________________________________________________________
   -M dnam or --midieventdev=dnam ........ Read MIDI realtime events from device
  ______________________________________________________________________

  よって本書の例では、Csound を以下のように起動する必要があります:

  ______________________________________________________________________
   $ csound -M /dev/midi21 -o devaudio midi.csd
  ______________________________________________________________________

  10.7.3.  おわりに

  ここまでの説明で、MIDI シーケンサで作曲・再生した音楽を、ソフトウェア
  シンセサイザの音で演奏する方法がお分かりになったと思います。もちろ
  ん、aconnect や aseqview のようなツールは、必ずしも MIDI ソフトウェア
  シーケンサといっしょに使う必要がある訳ではありません。外部のシーケンサ
  や外部の MIDI キーボードからマシンに入ってきたイベントを、MIDI シーケ
  ンサを通さずに直接ソフトウェアシンセにリダイレクトすることもできます。
  外部の MIDI デバイスを、お使いのソフトシンセや、サウンドカードのオン
  ボードシンセに 'aconnect' するだけでよいのです。振り返っておさらい:
  PD, Csound, あるいは KeyKit <http://www.nosuch.com/keykit/index.html>
  のような環境では、アルゴリズミックなやりかたで MIDI イベントを作成する
  ことができます。アルゴリズミックな作曲は、古典的な Cubase ライクな
  MIDI シーケンサではほとんど不可能です。aconnect を使うと、生成された
  MIDI イベントを、お使いの MIDI 受信可能なサウンドモジュールならどのよ
  うなものにでもルーティングできます。

  10.8.  謝辞

  筆者は、岩井隆さんに、この記事を準備するにあたっての技術的な援助と、日
  本語に関する貴重なアドバイスをいただいたことを感謝します。隆さん、あり
  がとう!

  11.  有用なリンク

  以下は MIDI と Linux をカバーするサイトと情報源へのリンク一覧です。

  <http://www.linux-sound.org/> Sound & MIDI Software For Linux. MIDI と
  オーディオ関連情報の巨大な情報源。

  <http://www.linuxdj.com/audio/lad/> Linux Audio Developers mailing
  list. 開発者に関連した議論。

  <http://www.linuxdj.com/audio/quality> The Linux Audio Quality HOWTO.
  MIDI カードの節がよい。Linux スタジオを構築するのに必読。

  <http://www.alsa-project.org/> Alsa Project - オーディオ/MIDI ドライバ

  <http://www.4front-tech.com/> OSS - オーディオ/MIDI ドライバ

  <http://www.gardena.net/benno/linux/audio/> Low Latancy patches

  訳注: カーネル 2.4 向けは
  <http://www.zip.com.au/%7Eakpm/linux/schedlat.html> Linux scheduling
  latency

  <http://ccrma-www.stanford.edu/~craig/articles/linuxmidi/>
  Introduction to MIDI programming in Linux.  Craig Stuart Sapp による著
  述は C/C++ での OSS ドライバ対応の基本的な MIDI ユーティリティの書きか
  たを網羅しています。

  <http://www.suse.de/~mana> Dr. Matthias Nagorni によって書かれた ALSA
  0.9 での MIDI と PCM の C プログラム例の優れたコレクション。

  12.  フィードバック

  依然として、本 HOWTO は製作進行中です。Linux で MIDI を使った新たなア
  プリケーションやその他開発中のものについて、フィードバックをいただける
  とありがたいです。

  MIDI カードは種類が多いため、ドライバのサポートや設定オプションの様々
  な段階に応じた設定に苦労することがあります。問題解決のためのベストな参
  照源は、ALSA や OSS のウェブサイト、ニューズグループです。それでも行き
  詰まった場合は、Linux Audio メーリングリストの検索を試してみてくださ
  い。

  13.  日本語版謝辞

  翻訳にあたり貴重なアドバイスをいただいた、武井伸光さん、カーテス典子さ
  んに感謝します。

