<!doctype linuxdoctr system>
<article>
<title>The Linux MIDI-HOWTO 
<author>By Phil Kerr, <tt/phil@plus24.com/ 
<date>v1.20, May 2002
<trans>日本語訳: 小林雅典, <tt/zap03216@nifty.ne.jp/
<tdate>v1.20j, 20 Dec 2003
<abstract>
<!--
This document describes the hardware, software and procedures needed to
play and sequence using MIDI under Linux.
-->
この文書には Linux で MIDI を演奏したり作成するのに
必要なハードウェアやソフトウェアおよびその手順が記述されています。
</abstract>

<toc>
<!--
<sect>Introduction.
-->
<sect>はじめに
<p>
<!--
It covers:
-->
この文書は、以下の項目を網羅しています。
<itemize> 
<!--
<item>Configuring your MIDI interface
<item>Configuring and using softsynths
<item>Playing MIDI files
<item>Sequencing
<item>Controlling external MIDI equipment
<item>MIDI controlled software based sound synthesis
<item>Example MIDI code
-->
<item>MIDI インタフェースの設定
<item>ソフトウェアシンセサイザの設定と使用
<item>MIDI ファイルの演奏
<item>シーケンサの使用
<item>外部 MIDI 機器の制御
<item>MIDI でコントロールするソフトウェアベースの音響合成
<item>MIDI を使うプログラム例
</itemize>
<!--
<sect>Copyright of this document.<p>
-->
<sect>この文書の著作権<p>
<!--
This HOWTO is copyrighted 2002 Phil Kerr. <p>

The 'HOWTO Use MIDI Sequencers With Softsynths' is copyright 2002 Frank Barknecht.'
-->
この HOWTO 文書の著作権は 2002 Phil Kerr にあります。

「ソフトウェアシンセサイザといっしょに MIDI シーケンサを使う」章の
著作権は 2002 Frank Barknecht にあります。
<!--
This document is distributed under the terms of the GNU Free Documentation License. You should have received a copy along with it. If not, it is available from: 
-->
この文書は GNU フリー文書利用許諾契約書の条件のもとで配布されています。
本文書に付属しているはずですが、そうでない場合は、以下のサイトで
入手できます。
<p>
<url url="http://www.fsf.org/licenses/fdl.html">. 

<!--
<sect>Where to get this document.<p>
-->
<sect>どこでこの文書を入手できるか<p>

<!--
The official version of this document can be obtained from the Linux Documentation Project: <url url="http://www.tldp.org/">.

The homepage for the most recent version of this HOWTO is:  <url url="http://www.midi-howto.com">
-->
この文書の公式バージョンは Linux Documentation Project
から入手できます: <url url="http://www.tldp.org/">

この HOWTO の最新版があるホームページは <url url="http://www.midi-howto.com">
です。
<!--
<sect>Acknowledgments.<p>
-->
<sect>謝辞<p>
<!--
This HOWTO is an expansion of the MIDI-SB mini-HOWTO written by Hideki Saito.  Many thanks for his contribution to the Linux community. 
-->
この HOWTO は Hideki Saito によって書かれた MIDI-SB mini-HOWTO の
発展版です。彼の Linux コミュニティーへの貢献に深く感謝します。
<!--
This HOWTO now contains Frank Barknecht's 'HOWTO Use MIDI Sequencers With Softsynths'.  Many thanks Frank.
-->
この HOWTO 文書には現在、Frank Barknecht による 'HOWTO Use MIDI Sequencers With Softsynths'
が含まれています。Frank に深く感謝します。
<!--
Many of the code samples contained in this HOWTO originated from the Linux Audio Developers (LAD) mailinglist.  Many thanks to them for allowing their inclusion.
-->
この HOWTO に含まれているプログラム例の多くは
Linux Audio Developers (LAD) メーリングリスト由来のものです。
プログラム例をこの文書に含めることを許可してくれた彼らに深く感謝します。
<!--
<sect>Disclaimer.<p>
-->
<sect>免責<p>
<!--
Use the information in this document at your own risk. 

I disavow any potential liability for the contents of this document. 
-->
この文書に記載されている情報は、自己責任にて用いてください。

筆者はこの文書の内容について、いかなる責任も負いません。
<!--
Use of the concepts, examples, and/or other content of this document is entirely at your own risk.  

All copyrights are owned by their owners, unless specifically noted otherwise.  

Use of a term in this document should not be regarded as affecting the validity of any trademark or service mark.
-->
この文書に記載されている概念、実例、その他の内容については、
完全な自己責任において用いてください。

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

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

<!--

Naming of particular products or brands should not be seen as endorsements.

You are strongly recommended to take a backup of your system before major installation and backups at regular intervals.
-->
特定の製品名やブランド名を支持しているとみなしてはなりません。

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

<!--
<sect>Background to MIDI.
-->
<sect>MIDI についての予備知識
<p>
<!--
MIDI is a set of hardware and software protocols used by electronic musical instruments to communicate.   It was first released in 1982 and has become the de-facto communication standard between electronic musical instruments.  The protocol specifies the physical hardware parameters for the cable and interfaces, and provides a well defined set of communication protocols to exchange musical and timing data.
-->
MIDI とは、ハードウェアとソフトウェアのプロトコルがひとつのセットになったもので、
電子楽器が通信するために用いられます。最初に制定されたのは 1982 年のことで、
事実上電子楽器間の標準通信手段になりました。このプロトコルはケーブルおよび
インタフェースの物理的なハードウェア上のパラメータを規定し、音楽や時間の
データを交換するための通信プロトコルのきちんと定義されたセットを提供します。

<!--
Prior to MIDI there were several analog, and later basic digital, connection protocols.  The earliest, circa. 1974, would transmit note information as a voltage though a wire from one keyboard to another.  Later, 1980 - 1981,  Roland created a basic digital protocol, DCB.  The MIDI Manufacturers Association (MMA), working with the equipment manufacturers, defined a standard protocol and physical connection which allowed equipment from all complying manufacturers to connect and communicate with each other.
-->
MIDI 以前にも、アナログの通信プロトコルや
その後にできた初歩的なデジタルの通信プロトコルがいくつか存在しました。
1974 年ごろの最も初期のものは、音符の情報を電圧として、
あるキーボードから別のキーボードへと電線経由で送信しました。
その後、1980 年 から 1981 年に、ローランド社は初歩的なデジタルの
プロトコルである DCB を作成しました。
MIDI Manufacturers Association (MMA) は機器メーカーとの共同作業で、
規格に従ったメーカー製の機器すべてが互いに接続し通信できるようにする
標準プロトコルと物理的な接続規格を制定しました。

<!--
From 1985 MIDI interfaces started to appear on home computers and soon after sequencing programs appeared.
-->
1985 年から MIDI インタフェースが家庭用コンピュータに姿を現しはじめ、
その後すぐにシーケンサのプログラムが登場しました。

<!--
<sect>Configuring MIDI devices.
-->
<sect>MIDI デバイスの設定
<p>
<!--
MIDI devices can be integrated into the soundcard or be a separate device.  External MIDI interfaces may be attached to either the serial or USB port.
<p>
The first *and most important* thing you should do is check if your card is supported!
-->
MIDI デバイスはサウンドカードと一体になっていることもあれば、
独立したデバイスになっていることもあります。
外部 MIDI インタフェースは、シリアルポートか USB ポートのどちらかに
取り付けることができます。
<p>
最初にやるべきであり、なおかつ「最も重要な」ことは、
お使いのカードがサポートされているかどうかチェックすることです!
<p>
<url url="http://www.alsa-project.org/soundcards.php3">
<p>
<url url="http://www.4front-tech.com/osshw.html">

<!--
Configuring MIDI devices varies with Linux distributions.  A well supported card may be configured when you install the OS.   
-->
MIDI デバイスの設定法は、Linux ディストリビューションによって様々です。
よくサポートされているカードだと、OS のインストール時に設定できます。

<!--
The Linux kernel includes the OSS drivers and in the 2.5 kernel the ALSA drivers.  Most distributions provide a configuration tool (mostly for soundcards), but if you are using the MIDI port of a sound card it should be configured.  Under RedHat you would use sndconfig, under SuSE yast, and Mandrake, DrakConf. 
-->
(訳注: 2.4 以前の)Linux カーネルには OSS ドライバが、2.5 のカーネルには
ALSA ドライバが含まれています。たいていのディストリビューションには
(おもにサウンドカード向けの) 設定ツールが用意されています。
でも、サウンドカードについている MIDI ポートを使うのなら、
MIDI ポート向けの設定をする必要があるでしょう。Red Hat では sndconfig を、
SuSE では yast を、Mandrake では DrakConf を使います。

<!--
If none of the above tools will configure your MIDI interface, or you are experiencing problems, the following steps should be taken:

Does lsmod show any MIDI related modules?  Here's a typical output from an OSS based system.
-->
上記のツールでお使いの MIDI インタフェースを設定できない、もしくは
問題がある場合は、次の段階を踏むべきです。

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

<code>
[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 
</code>


<!--
Look for mpu401, olp3, uart401 and oss.  

If you are using USB devices don't forget to check if the USB modules are there.


To check the config cat the sndstat file:
-->
mpu401, olp3, uart401, oss を探してください。

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

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

<code>
[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)
</code>


<!--
We see here that the MIDI device is a mad16 and this is listed in the lsmod output above.


If you see nothing related to MIDI check the contents of your /etc/modules.conf file.
-->
ここで MIDI デバイスが mad16 ひとつであることがわかります。上記 lsmod の出力にも
リストアップされていましたね。

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

<code>
[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
</code>


<!--
Here's the output of /proc/modules to check to see if the MIDI modules are loaded into the Kernel.
-->
MIDI のモジュールがカーネルにロードされているかどうかを、/proc/modules を
出力してチェックします。

<code>
[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
</code> 


<!-- 
You should see something similar to the above.  If not you'll need to install MIDI drivers.

If you are going to be using ALSA 0.5x divers, which you shouldn't do, I suggest a good read of Valentijn Sessink's Alsa-sound-mini-HOWTO which can be found at the link below:
-->
あなたのところでも、上記に似た結果になったはずです。そうでなければ、
MIDI ドライバをインストールする必要があります。

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

<!--
<url url="http://www.linuxdoc.org/HOWTO/mini/Alsa-sound.html">
-->
<url url="http://www.tldp.org/HOWTO/Alsa-sound.html">

<!--
You are strongly recommended to use ALSA greater than version 0.9.  For ALSA drivers later than 0.9x you should have a good read of the ALSA-HOWTO by Madhu Maddy.
-->
バージョン 0.9 より新しい ALSA を使うことを、強く推奨します。
0.9 より後の ALSA ドライバ向けには、Madhu Maddy 著の ALSA-HOWTO を
よく読むとよいです。

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

<!--
<sect1>ALSA 0.9 quick install<p>
Below is a very quick install run-though for installing the ALSA 0.9 drivers and libs which is a required configuration for most MIDI apps.
-->
<sect1>ALSA 0.9 の手早いインストール法<p>
以下は、ALSA 0.9 ドライバと、たいていの MIDI アプリケーションが
必要とするライブラリをとても手早くインストールする手順です。

<code>
[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

</code>


<!--
Now you will need to edit /etc/modules.conf, or the ALSA file in your modules directory on some distributions.  There may be entries for other, non-MIDI, devices, so be careful when you are editing the file.
-->
次に、/etc/modules.conf を編集する必要があります。もしくは、
ディストリビューションによっては、modules ディレクトリにある
ALSA 向けファイルを編集する必要があります。

他にも、MIDI 以外のデバイス向けのエントリがあるかもしれないので、
ファイルを編集する際は注意してください。
<!--
A typical system may have old ALSA or OSS configurations in the file, you will need to remove, or better still comment them out.

Below is a typical modules.conf file showing the ALSA config with OSS.
-->
典型的なシステムには、ファイル中に古い ALSA か OSS の設定があるかもしれないので、
消すか、コメントアウトする必要があります。

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

<!--
<code>
alias char-major-116 snd
alias char-major-14 soundcore

alias snd-card-0 (MIDI/Sound card)
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
</code>
-->
<code>
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
</code>


<!--
Change the (MIDI/Sound card) entry to that of your card.  This information can normally be found on the ALSA website.  

With the ALSA drivers installed, now you will need to install the header library files needed by ALSA based programs.  This is what is contained in the alsa-libs package.

Make sure you have a matching pair of alsa-drivers and alsa-libs!
-->
(MIDI/サウンドカード) のエントリをお使いのカードのものに変更します。
ここの情報は通常、ALSA のウェブサイトで見つかります。

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

<code>
[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

</code>


<!--
Your system should now be configured :)

You can check this with a simple C program, if it compiles and can be executed then your system should be ok.
-->
お使いのシステムの設定が完了しました :)

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

<code>
// 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(&amp;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;
}


</code>


<!--
<sect1>Latency<p>
-->
<sect1>レイテンシ<p>
<!--
MIDI is a real-time protocol and latency issues are a serious problem. 

There are now several developers working on improving the latency times and improvements in the kernel are making Linux a fine platform for MIDI.

Although stock Linux distributions may run fine, pro set-ups should apply low-latency patches.  More information can be found here:
-->
MIDI はリアルタイムのプロトコルなので、レイテンシは重大な問題です。

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

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

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

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

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

<!--
Low Latency Mini Howto<p>
-->
ロウレイテンシ Mini Howto<p>
<!--
<url url="http://www.boosthardware.com/LAU/guide/Low_latency-Mini-HOWTO.html">
-->
<url url="http://www.djcj.org/LAU/guide/Low_latency-Mini-HOWTO.php3">
<!--
<sect>Software.
-->
<sect>ソフトウェア
<p>
<!--
Interest in Linux based MIDI is growing and this list will probably not reflect the true amount of MIDI software available, but should provide a reasonable selection of applications.<p>
If you are developing, or know of, any other MIDI apps not listed here please drop me a note.<p>
-->
Linux ベースの MIDI システムへの関心が高まるにつれて、このリストは
入手可能な MIDI ソフトウェアの正確な数をたぶん反映しなくなっていくでしょう。
でも、アプリケーションの妥当な選択にはなっているはずです。
もしあなたが他の、ここにリストアップされていない MIDI アプリケーションを
開発している、もしくはご存知ならば、著者にメールをください。
<!--
<sect1>Drivers<p>

<sect2>Alsa Driver<p>
-->
<sect1>ドライバ<p>

<sect2>Alsa ドライバ<p>

<!--
The Advanced Linux Sound Architecture is composed of several parts. The first is a fully modularized sound driver which supports module autoloading, devfs, isapnp autoconfiguration, and gives complete access to analog audio, digital audio, control, mixer, synthesizer, DSP, MIDI, and timer components of audio hardware. It also includes a fully-featured kernel-level sequencer, a full compatibility layer for OSS/Free applications, an object-oriented C library which covers and enhances the ALSA kernel driver functionality for applications (client/server, plugins, PCM sharing/multiplexing, PCM metering, etc.), an interactive configuration program for the driver, and some simple utilities for basic management. 
-->

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

<url url="http://www.alsa-project.org/">

<sect2>OSS<p>
<!--
OSS provides sound card drivers for most popular sound cards under Linux and FreeBSD. These drivers support digital audio, MIDI, synthesizers, and mixers found on sound cards. These sound drivers comply with the Open Sound System API specification. OSS provides a user-friendly GUI which makes the installation of sound drivers and configuration of sound cards very simple. It supports over 200 brand name sound cards, and provides automatic sound card detection, Plug-n-Play support, support for PCI audio soundcards, and support for full duplex audio. 
-->
OSS は Linux と FreeBSD でたいていの一般的なサウンドカード向けの
サウンドカードドライバを提供します。ドライバは、サウンドカードの
デジタルオーディオ、MIDI、シンセサイザ、ミキサーの機能を
サポートします。サウンドドライバは Open Sound System API の仕様書に
完全準拠します。OSS はサウンドドライバのインストールやサウンドカードの
設定がとても簡単になるユーザフレンドリーな GUI を提供します。
200 を超える種類のサウンドカードをサポートし、サウンドカードの
自動検出、プラグアンドプレイ、PCI オーディオサウンドカード、
フルデュープレックスオーディオのサポートが提供されています。

<url url="http://www.opensound.com/">


<sect2>Notemidi<p>

<!--
Notemidi is a device driver for MIDI output via the RS-232 serial port on notebook/laptop computers. Notemidi can be used with the MIDIator MS-124W interface, Roland Sound Canvas sound modules, or Yamaha MU-x series sound modules. 
-->

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

<url url="http://www.michaelminn.com/linux/notemidi">

<!--
<sect1>MIDI file players
-->
<sect1>MIDI ファイルプレイヤー
<p>

<sect2>KMid<p>
<!--
KMid is an X11 / KDE based midi player for Linux and FreeBSD. It displays the text of karaoke files and changes its colour as it is being played so that the tune can be easily followed. KMid uses /dev/sequencer as output device supporting external synths, AWE , FM and GUS cards. 
-->
KMid は、Linux と FreeBSD に対応した X11 / KDE ベースの MIDI プレイヤーです。
カラオケファイルの歌詞を表示する際、演奏されている箇所の色が変化するので、
曲が簡単に追えます。KMid は、/dev/sequencer を外部シンセサイザ、
AWE、FM、GUS カードをサポートする出力デバイスとして使います。

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

<sect2>Pmidi<p>
<!--
Pmidi is a straightforward command line program to play Midi files through the ALSA sequencer. 
-->
Pmidi は、ALSA シーケンサ経由で MIDI ファイルを演奏する簡単なコマンドラインの
プログラムです。

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

<sect2>TiMidity++<p>
<!--
TiMidity is a MIDI to WAVE converter that uses Gravis Ultrasound(*)-compatible patch files to generate digital audio data from General MIDI files. The audio data can be played through any sound device or stored on disk. On a fast machine, music can be played in real time. 
-->
TiMidity は MIDI から WAVE へのコンバータです。
一般的な MIDI ファイルからデジタルオーディオデータを
生成するのに Gravis Ultrasound シリーズ互換のパッチファイルを使います。
生成されたオーディオデータは、任意のサウンドデバイス経由での演奏や
ディスクへの保存が可能です。速いマシンだと、リアルタイムで演奏できます。

<!--
<url url="http://www.goice.co.jp/member/mo/timidity/">
-->
<url url="http://www.onicos.com/staff/iz/timidity/">

<!--
<sect1>Sequencers
-->
<sect1>シーケンサ
<p>

<sect2>Brahms<p>

<!--
Brahms is a sequencer and music notation program with several editing methods so far including Score-, Pianoroll-, Drum-, and Mastertrack Editors. For C++ programmers, it is easy to implement further editors by deriving from a general editor-class. MIDI Import and Export is also implemented. In combination with aRts-0.3.4, one can play wave-files and make use of the midibus to send midi-events to the software synthesizer. 
-->
Brahms はシーケンサ兼楽譜作成プログラムです。現時点で、スコア、ピアノロール、
ドラム、マスタートラックエディタを含む様々な編集方法を備えています。
C++ プログラマであれば、一般的なエディタクラスを借用してさらなるエディタを
実装するのは簡単です。MIDI のインポートとエキスポートも実装されています。
aRts-0.3.4 と組み合わせると、wave ファイルの再生が可能になり、
MIDI イベントをソフトウェアシンセに送信するのに aRts の MIDI
バスが使用できるようになります。

<p>
<!--
Formerly known as KooBase
-->
以前は KooBase という名前で知られていました。

<url url="http://brahms.sourceforge.net/"> 

<sect2>Anthem<p>

<!--
Anthem is an advanced open source MIDI sequencer. Anthem allows you to record, edit and playback music using a sophisticated and acclaimed object oriented song technology.
-->
Anthem は先進的なオープンソースの MIDI シーケンサです。Anthem では、洗練された
評価の高いオブジェクト指向の技術を使って、音楽の録音、編集、再生が
可能です。

<!--img src="anthem.png"-->

<url url="http://anthem.sourceforge.net/">

<sect2>Jazz++<p>
<!--
JAZZ++ is a full featured, audio capable midi sequencer for Linux and Windows.
-->
JAZZ++ は完全な、オーディオ対応の MIDI シーケンサです。
Linux と Windows に対応しています。
<!--img src="jazzshot.png"-->
<p>

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

<sect2>Linux Ultimate Music Editor<p>

<!--
UltiMusE-LX (the Ultimate Music Editor) is a composing program. No, it doesn't compose for you; it's a "word processor" for music.  You draw sheet music on the screen using the mouse and/or computer keyboard. Up to 16 parts or voices fit on up to seven staves (staffs).  Most standard musical notations are supported, as are MIDI instrument patch changes, events, and real-time clocks. 
-->
UltiMusE-LX (the Ultimate Music Editor) は作曲プログラムです。といっても、
あなたのために作曲してくれるわけではありません。音楽向けの「ワープロ」
です。マウスや、コンピュータのキーボードを使って、画面上で楽譜が書けます。
16 パートもしくは 16 声までの音符を、7 つまでの譜表に書き込めます。
たいていの標準的な音楽記号がサポートされています。MIDI 楽器パッチの変更、
MIDI イベント、リアルタイムクロックもサポートされています。

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

<sect2>Melys<p>

<!--
Melys is a Midi sequencer application for the Advanced Linux Sound Architecture (ALSA). Melys uses the sequencer support of ALSA, along with the GNOME libraries to produce a powerful and easy to use sequencer. 
-->
Melys は Advanced Linux Sound Architecture (ALSA) 対応の MIDI
シーケンサアプリケーションです。
Melys は ALSA のシーケンササポートを使用します。GNOME ライブラリ
のおかげでシーケンサをパワフルかつ簡単に操作できます。

<!--img src="melsys.png"-->

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

<sect2>MidiMountain Sequencer<p>
<!--
MidiMountain is a sequencer to edit standard MIDI files. Its easy-to-use interface should help beginners to edit and create MIDI songs (sequences), and it is designed to edit every definition known to standard MIDI files and the MIDI transfer protocol, from easy piano roll editing to changing binary system exclusive messages. 
-->

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

<!--img src="thumb_mm_main.jpg"-->

<url url="http://www.midimountain.com/">

<sect2>MusE<p>

<!--
MusE is a Qt 2.1-based MIDI sequencer for Linux with editing and recording capabilities. While the sequencer is playing you can edit events in realtime with the pianoroll editor or the score editor. Recorded MIDI events can be grouped as parts and arranged in the arrange editor. 
-->
MusE は Qt 2.1 ベースの Linux 向けシーケンサで、編集も録音もできます。
シーケンサの再生中でも、ピアノロールエディタやスコアエディタを使って
リアルタイムでイベントを編集できます。記録された MIDI イベントは
パートごとにグループ分けすることができ、アレンジエディタで編曲
できます。

<!--img src="musemain.png"-->

<url url="http://muse.seh.de/">

<sect2>Rosegarden<p>

<!--
Rosegarden is an integrated MIDI sequencer and musical notation editor.
-->
Rosegarden は、MIDI シーケンサと楽譜エディタが統合されたソフトウェアです。

<!--img src="r21-seq-small.gif"-->

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


<sect1><!--MIDI Trackers-->MIDI トラッカー
<p>

<sect2>tektracker<p>

<!--
ttrk (tektracker) is a console MIDI sequencer with a tracker-style step editor. It is built for live playing, with convenient track mute buttons and loop control.  ttrk supports both sending and syncing to MIDI clock pulses. 
-->
ttrk (tektracker) は、トラッカースタイルのステップエディタを備えた
コンソール MIDI シーケンサです。ライブ演奏向けに作られており、
使いやすいトラックミュートボタンとループコントロール機能が
あります。ttrk は MIDI クロックパルスの送信と同期の両方を
サポートしています。

<url url="http://div8.net/ttrk/">

<sect2>ShakeTracker
<p>
<!--
ShakeTracker aims to be a fully-featured MIDI sequencer with a tracker interface. It currently works well and supports most tracker effects. Anyone who has used Impulse Tracker before will feel at home, and for the new users, a simple but extensive help system is provided. Most commands and shortcuts resemble their tracker counterparts.
-->

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

<url url="http://reduz.com.ar/shaketracker/">

<sect1><!--Drum editors-->ドラムエディタ
<p>

<sect2>DrumPatterns<p>

<!--
DrumPatterns is a free, open source, web oriented drum patterns generator, whose purpose is to help teach drum patterns. It can teach the rudiments as well as advanced rhythms. It can output characters, score, or Midi, and includes hours of samples. 
-->
DrumPatterns はフリーでオープンソースの、web 指向のドラムパターン
ジェネレータです。用途はドラムパターンを教える手助けをすることです。
高度なリズムも初歩のリズムも教えることができます。
文字、スコア、MIDI での出力が可能で、何時間ものサンプルが含まれています。

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

<sect1><!--Patch editors-->パッチエディタ
<p>

<sect2>JSynthLib<p>

<!--
SynthLib is an Open Source Universal Synthesizer Patch Editor / Librarian written in the Java Language. The project aims to eventually provide support for all existing Synthesizers by providing methods and documentation which allow users to develop drivers and editors for unsupported synths and contribute them to the project.
-->
JSynthLib はオープンソースの、様々な環境で使えるシンセサイザパッチエディタ/
ライブラリアンソフトで、Java 言語で書かれています。
サポートされていないシンセ用のドライバやエディタをユーザが開発し
プロジェクトに寄贈できるように、そのやり方と技術文書を提供することによって、
最終的には実在するすべてのシンセサイザをサポートすることを
このプロジェクトは志しています。

<sect1><!--Software synths-->ソフトウェアシンセ
<p>

<sect2>Spiral Synth<p>

<!--
Spiral Synth is a physically modeled polyphonic analogue synthesizer. It is capable of creating the kind of sounds made by hardware analogue synths, the noises used in electronic music. You can also use it to make stranger sounds too. MIDI is supported, and it uses the standard OSS/Free sound output (/dev/dsp). 
-->
Spiral Synth はポリフォニックアナログシンセサイザを物理モデル化した
ソフトウェアです。
ハードウェアアナログシンセによって作られるたぐいの音や、
電子音楽に使われるノイズの作成が可能です。
もっと奇妙な音の作成にも使えます。MIDI がサポートされており、
また、標準的な OSS/Free サウンド出力 (/dev/dsp) を使用します。

<url url="http://www.pawfal.org/SpiralSynth/">

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

<url url="http://www.pawfal.org/Software/SSM/">

<sect2>UltraMaster Juno-6<p>

<!--
UltraMaster Juno-6 is a faithful virtual reproduction of a Roland Juno-6 Polyphonic Synthesizer. It features realtime 64-bit internal ULTRANALOG wave synthesis, an early 80's style arpeggiator and chorus, and 100s of patches to save your own custom settings. All parameters can be controlled in realtime, via on-screen GUI or external MIDI controllers. 
-->
UltraMaster Juno-6 は、Roland Juno-6 ポリフォニックシンセサイザを
忠実にソフトウェアで再現したものです。リアルタイム 64 ビット
インターナル ULTRANALOG ウェーブシンセシス、80 年代初期スタイルの
アルペジエーターとコーラス、利用者自身のカスタムセッティングを
保存するための 100 のパッチが特色です。すべてのパラメータは
リアルタイムで、スクリーン上の GUI もしくは 外部の MIDI コントローラ
経由でコントロールできます。

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


<sect2>Pure-Data (PD)<p>

<!--
"Pd" stands for "pure data". Pd is a real-time software system for live musical and multimedia performances. It is in active development by Miller Puckette , and perhaps others. The system is unfinished, but quite useable for sophisticated projects. It has been ported to Linux, IRIX, and many flavors of Windows.
-->
Pd は pure data の略称です。Pd は音楽やマルチメディアの
ライブパフォーマンスのためのリアルタイムソフトウェアシステムです。
Miller Puckette 他によって活発に開発されています。
システムは未完成ですが、高度なプロジェクトにも十分使えます。
すでに Linux, IRIX, 各種 Windows にポートされています。
<p>
訳注: 現在では Mac OSX にもポートされています。

<url url="http://www.pure-data.org/">

<sect2>Csound<p>

<!--
Csound is a software synthesis program. But more than that, Csound doesn't suffer the same kinds
 of limitations that other software & hardware synthesizers have. There are no limits to the amount
 of oscillators or filters one can use. Csound is also completely modular, so that any function in
 Csound can be used in an array of ways.
-->
Csound はソフトウェア音響合成のプログラムです。でも単なるそれを超えています。
Csound では、他のソフトウェア/ハードウェアシンセサイザに存在するような
制限を受けることがありません。ひとつのプログラムが使用できる
オシレータやフィルタの総数に制限がないのです。さらに、Csound
は完全なモジュール方式です。ですから、Csound のどの機能も
多種多様なやり方で使用できます。


<url url="http://www.csound.org/">

<sect2>Bristol synthesiser emulator<p>

<!--
Bristol is a synthesizer emulation package. It includes a Moog Mini, Moog Voyager, Hammond B3, Prophet 5, Juno 6, DX 7, and others. 
-->
Bristol はシンセサイザエミュレーションのパッケージです。
Moog Mini, Moog Voyager, Hammond B3, Prophet 5, Juno 6,
DX 7 などが含まれています。


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

<sect1><!--Plugins-->プラグイン
<p>

<sect2>xmms-midi<p>

<!--
Adds midi file support for x11amp (via timidity). A crude mixer interface is provided via the configuration dialog. 
-->
xmms (旧名 x11amp) に、(timidity を経由させることによって)
MIDI ファイルのサポートを追加します。
そっけないミキサーインタフェースが、設定ダイアログによって提供されます。

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

<sect1><!--Notation-->楽譜作成
<p>

<sect2>Mup<p>

<!--
Mup takes a text file as input and produces PostScript output for printed music. It can handle both regular notation and tablature notation. (It can also produce MIDI output.) 
-->
Mup はテキストファイルを入力に用いて、楽譜印刷用の PostScript を出力します。
普通の楽譜とタブ譜の両方が扱えます (MIDI での出力も可能です)。

<url url="http://www.arkkra.com/">

<sect2>Lilypond<p>

<!--
LilyPond is a music typesetter. It produces beautiful sheet music using a high level description file as input. LilyPond is part of the
  GNU Project. 
-->
LilyPond は譜面用の植字ソフトです。概要が記述されたファイルを
入力に用いて、美しい譜面を生成します。LilyPond は
GNU Project の一部です。


<url url="http://www.lilypond.org/">



<sect1><!--Development-->開発<p>

<sect2>sfront<p>

<!--
Sfront compiles MPEG 4 Structured Audio (MP4-SA) bitstreams into efficient C programs that generate audio when executed. MP4-SA is a standard for normative algorithmic sound, that combines an audio signal processing language (SAOL) with score languages (SASL, and the legacy MIDI File Format). Under Linux, sfront supports real-time, low-latency audio input/output, local MIDI input from soundcards, and networked MIDI input using RTP and SIP. A SIP server hosted on the Berkeley campus manages sessions. The website includes an online book about MP4-SA. 
-->

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

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

<sect2>jMax<p>

<!--
jMax allows one to interactively design dataflow circuits. The basic data types that can go through are integers, symbols, lists, etc. It is an event-driven system and has been used for MIDI processing. A second part of the system (DSP) allows a continuous signal to flow through a circuit, which is most useful for PCM sound (ie. microphone, sound files, etc). The system is extensible by using shared libraries, you may add data processor types, data types, GUI elements, device types, and more. Data processors may also be designed as circuits and reused. 
-->
jMax を使えば、対話的にデータフロー回路を設計できます。
使用できる基本的なデータタイプは整数、シンボル、リストなどです。
イベントドリブンのシステムで、MIDI の処理に使われていました。
システムの別の部分 (DSP) では、回路に継続的な信号を流すことができます。
これは、PCM サウンド (すなわち、マイク経由の音やサウンドファイルなど)
にとって最も有用です。システムはシェアードライブラリの使用によって
拡張可能なので、データプロセッサタイプ、データタイプ、GUI 要素、
デバイスタイプ、その他を追加できます。データプロセッサも回路としての
設計や再利用が可能です。



<p>

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

<sect2>TSE3
<p>

<!--
TSE3 is a powerful open source sequencer engine written in C++. It is a 'sequencer engine' because it provides the actual driving force elements of a sequencer but provides no form of user interface.  Sequencer applications or multimedia presentation packages will incorporate the TSE3 libraries to provide a user with MIDI sequencing facilities.
-->
TSE3 は C++ で書かれたパワフルなオープンソースのシーケンサエンジンです。
なぜ「シーケンサエンジン」なのかというと、TSE3 はシーケンサの
実動部分を提供するだけで、ユーザインタフェースのフォームを提供しないからです。
TSE3 ライブラリを使えば、シーケンサアプリケーションや
マルチメディアプレゼンテーションパッケージを作成する際、
MIDI シーケンスの扱いが楽になります。


<url url="http://TSE3.sourceforge.net/">

<sect2>KeyKit
<p>

<!--
KeyKit is a multi-tasking interpreted programming language (inspired by awk) designed exclusively for realtime and algorithmic MIDI manipulation. KeyKit's GUI provides several dozen tools for algorithmic music experimentation, including a multi-track sequencer and drum pattern editor. The GUI and all tools are completely written in the KeyKit language itself. This allows users to add new tools and operations to the existing tools, even while the system is running.
-->
KeyKit はマルチタスクのインタプリタ型プログラム言語です
(awk に触発されています)。
リアルタイムかつアルゴリズミックな MIDI の操作に特化して
設計されています。KeyKit の GUI は、アルゴリズミックな
音楽実験用の様々なツールを何ダースも供給します。その中には
マルチトラックシーケンサやドラムパターンエディタも含まれています。
GUI とすべてのツールは、完全に KeyKit 言語それ自体で書かれています。
おかげで、ユーザはたとえシステムの動作中でも、存在しているツールに
新たなツールや命令を追加できます。

<url url="http://nosuch.com/keykit/">


<sect><!--MIDI Development.-->MIDI を扱うプログラムの開発
<p>

<!--
For those looking to develop MIDI applications, good examples are often needed to get you started.
-->
MIDI アプリケーションの開発志望者にとって、開発に着手するために良いプログラム例が
必要となることはありがちです。

<!--
The following examples were posted to the LAD mailing list in a thread about examples and documentation/tutorials.
-->

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


<sect1><!--Example 1-->例 1<p>
<!--
Below is a little sequencer routine from Dr. Matthias Nagorni.  More examples can be obtained from Matthias's site which is listed in the Links section. 

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

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

<code>
[phil@beatbox] $ gcc seqdemo.c -o seqdemo -lasound


#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;alsa/asoundlib.h&gt;

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(&amp;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, &amp;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);
    }  
  }
}

</code>


<sect1><!--Example 2-->例 2<p>
<!--
Below is a ALSA 0.9 MIDI redirector by Nick Dowell.
-->
以下は Nick Dowell 作の ALSA 0.9 対応 MIDI リダイレクタです。

<code>
/* 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 &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;alsa/asoundlib.h&gt;

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(&amp;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, &amp;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;
}

</code>

<sect1><!-- Example 3 -->例 3<p>
<!--
Below is an example of writing data to the OSS /dev/midi interface by Craig Stuart Sapp.
-->
以下は Craig Stuart Sapp による、OSS の /dev/midi インタフェースに
データを書き込む例です。

<!--
More examples can be found at Craig's site listed in the Links section.
-->
リンクの節にリストアップされている Craig のサイトには、さらに多くの
例があります。

<code>
//
// 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 &lt;linux/soundcard.h&gt;
#include &lt;unistd.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;stdio.h&gt;

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;
}
</code>



<!--
<sect>HOWTO Use MIDI Sequencers With Softsynths.<p>
-->
<sect>ソフトウェアシンセサイザといっしょに MIDI シーケンサを使う<p>

Frank Barknecht  &lt;<tt/barknech@ph-cip.uni-koeln.de/&gt;

<url url="http://linux-sound.org/quick-toots/4-sequencers_and_softsynths/quick-toot-midisynth_howto.html">

訳注: 日本語訳は
<url url="http://www.linux.or.jp/JF/JFdocs/midisynth-howto/">

<!--
This HOWTO describes the needed setup to control a MIDI capable software synthesizer from a MIDI sequencer
through a virtual MIDI connection under ALSA 0.9. This document can be freely translated and distributed. It's
released under the GNU Free Documentation License. 
-->
この HOWTO では、MIDI 受信可能なソフトウェアシンセサイザを、
MIDI シーケンサから ALSA 0.9 の仮想的な MIDI 接続経由で制御する際に
必要となる設定を述べます。本文書は自由に翻訳や配布が可能です。
GNU Free Documentation License で公開されています。


<sect1><!--Introduction-->はじめに<p>
<!--
Software synthesizers like Csound, PD, jMax or Spiral Synth Modular offer nearly endless freedom to create known
or unknown, common or unusual sound experiences. They can also replace pricy hardware synths or the inexpensive,
often bad-sounding MIDI synths on some soundcards, if these are supported under Linux at all. On the other hand,
composing inside those softsynths can be a tedious task: in Csound for example one has to write endless rows of
numbers in a spreadsheet-like manner - not a comfortable way to make music. 
-->
Csound, PD, jMax, Spiral Synth Modular のようなソフトウェアシンセサイザは、
既知や未知、尋常もしくは奇抜な音響体験を創造するほとんど無限の自由を提供します。
ソフトウェアシンセサイザは、高価なハードウェアシンセサイザや、
安価なサウンドカードの、音質が悪いことが多い MIDI シンセサイザ機能
(いずれにしても Linux でサポートされていればですが)
を置き換えることもできます。一方、それらの
ソフトウェアシンセサイザを使って作曲するのは退屈な作業になることもあります―
たとえば Csound では、表計算ソフトのような作法で果てしない数列を記述しなくては
ならないのです。これは、音楽を作るのに快適なやりかたではありません。

<!--
MIDI sequencer applications are more suitable for this task. They provide an interface to insert notes and control
data in convenient ways: as notes in a real score, as marks in a piano roll or as a list of MIDI events, if you prefer this
view. Another kind of MIDI sequencers offer a tracker-like way of entering notes, like many people are used to from
the good old days when that was the state of art in the Scene. Last but not least, some MIDI sequencers allow you to
record your own playing on a keyboard or on another physical device, which is for many users the most natural way of
writing music. 
-->
MIDI シーケンサアプリケーションは、こういった作業により適しています。
シーケンサは、音符を挿入したりデータを制御したりするインタフェースを
使いやすいやりかたで―楽譜の音符、ピアノロールのマーク、MIDI
イベントのリストといった好みに応じた表現方法で―提供します。
他の種類の MIDI シーケンサには、音符を入力するのにトラッカーのような
ステップ入力方式を提供するものがあります。
多くの人達が、このやりかたがシーンでの最先端だった
古き良き時代から慣れ親しんでいる方式です。
最後に、忘れてはならない方式があります。
MIDI シーケンサの中には、鍵盤や他の物理デバイスでの演奏を記録できるものもあります。
これは、多くのユーザにとって最も自然な作曲方法です。

<!--
But MIDI sequencers like to output their notes to MIDI devices that normally route their events to the outside world,
i.e., to hardware synths and samplers. With virtual MIDI devices one can keep the MIDI data inside the computer and
let it control other software running on the same machine. This HOWTO describes all that is necessary to achieve
this goal. 
-->
ところで、MIDI シーケンサは、通常は音符を MIDI デバイスに出力します。
普通、MIDI イベントを世界の外側―すなわちハードウェアシンセやサンプラー―
に送信するということです。でも仮想 MIDI デバイスを使えば、MIDI データを
コンピュータの内側にキープし、同じマシンで実行している他のソフトウェアを
制御させることができます。
この HOWTO では、この目的に達するために必要なすべてを述べます。


<sect1><!--Device Setup-->デバイスの設定<p>
<!--
In our setup we use the ALSA library and driver modules, as this is (or should be) the standard way of doing serious
audio and MIDI on Linux. The tutorial assumes that we are running the 0.9.0 branch of ALSA, but the virtual MIDI
module was also present in ALSA 0.5.x so most of the following should apply for this as well. In the OSS/Free (the
sound modules found in kernels previous to the 2.5.x track) and OSS/Linux sound architectures the v_midi module
can be used, but this is beyond the scope of this document. 
-->
この HOWTO における設定では、
<url url="http://www.alsa-project.org" name="ALSA">
のライブラリとドライバモジュールを用います。なぜなら、ALSA は Linux
で本格的にオーディオや MIDI を使う上での標準的な手段 (あるいはそうなるべき)
だからです。
このチュートリアルでは、ALSA の 0.9.0 ブランチの使用を仮定します。
でも、仮想 MIDI のモジュールは ALSA 0.5.x にもあるので、
以下に述べるほとんどは ALSA 0.5.x でも同様に適応できるでしょう。
OSS/Free (2.5.x 以前のカーネルにあるサウンドモジュール)や
<url url="http://www.opensound.com" name="OSS/Linux">
サウンドアーキテクチャでは v_midi モジュールが使えますが、
これは本文書の範疇ではありません。

<!--
To use ALSA's virtual MIDI card the snd-card-virmidi module must be present. In the most recent versions of
ALSA (and in the 2.5.x development kernel) that module lost its '-card' middle-fix and was renamed to
snd-virmidi. Make sure that you did build this module, it might be missing if you configured ALSA to build only the
modules for your actual card(s). 
-->
ALSA の仮想 MIDI カードを使うには、snd-card-virmidi モジュールが存在して
いなくてはなりません。最新バージョンの ALSA (や 2.5.x 開発版カーネル) では
snd-card-virmidi は '-card' 接中辞(ミドルフィックス)が取り除かれ、snd-virmidi
に名前を変えました。このモジュールをビルドしたことを確認してください。
実際に使っているカードのモジュールをビルドするように ALSA を
configure しただけでは、おそらくこのモジュールはビルドされていないでしょう。

<!--
The virmidi module has to be loaded to make the virtual MIDI ports available. You can test-load it by hand with 
-->
仮想 MIDI ポートを利用可能にするには、virmidi モジュールをロード
しなくてはなりません。手動で試験的にロードできます:

<code>
 $ modprobe snd-virmidi snd_index=1
   
</code>


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

<!--
where snd_index is set appropriately to the first free card index (=1 if you have only one card that already has index
0), but it is more convenient to adapt your modules configuration to have it sitting around already when you need it.
For that we need to extend the ALSA section in /etc/modules.conf (or in another location, depending on your
distribution) with the following: 
-->
snd_index の値を、空いているカード index のひとつ目になるように設定します。
(カードがひとつだけなら、そのカードがすでに index 0 なので、
virmidi は index=1 に設定する)
でも、仮想 MIDI カードが必要になった時に、自動的に設定がなされるように
モジュールを設定すると、より便利です。そのためには、/etc/modules.conf
(ディストリビューションによって、別の場所にあることもあります)
の ALSA に関する箇所に、次の項目を追加します:

<!--
<code>
 # Configure support for OSS /dev/sequencer and 
 # /dev/music (aka /dev/sequencer2)
 # (Takashi Iwai advises that it is unnecessary 
 # to alias these services beyond the first card, i.e., card 0)
 alias sound-service-0-1 snd-seq-oss
 alias sound-service-0-8 snd-seq-oss

 # Configure card 1 (second card) as a virtual MIDI card
 alias sound-slot-1 snd-card-1
 alias snd-card-1 snd-virmidi
   
</code>
-->
<code>
 # 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
   
</code>


<!--
Now you have configured a virtual MIDI card as the second card with index 1, assuming you have one real soundcard
(which would be very useful). If you have a second real card like I do, change the configuration above to read: 
-->
ここでは、お使いのサウンドカードのハードウェアがひとつと仮定し、
仮想 MIDI カードを index 1 であるふたつ目のカードとして設定しました
(これはとても有用だと思います)。
もしあなたが筆者のようにふたつ目のサウンドカードをすでに
お持ちなら、以下を読んで上記設定を変更してください:
<!--
<code>
 # Configure card 2 (third card) as a virtual MIDI card
-->
<code>
 # カード 2 (三つ目のカード) を仮想 MIDI カードに設定する
 alias sound-slot-2 snd-card-2
 alias snd-card-2 snd-virmidi
   
</code>
<!--
If you have even more cards, well, you should know the deal by now... 
-->
もっと多くのカードをお使いでも、以上の説明を応用すれば何をやればいいかはもう
お分かりですよね…

<!--
It might be necessary to restart the ALSA sound system, after which the virtual MIDI card should be seen in
/proc/asound/cards: 
-->
設定したら、ALSA サウンドシステムを再起動する必要があります。
その後、仮想 MIDI カードが
/proc/asound/cards で確認できるはずです:


<code>
$ 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
   
</code>

<!--
In this example of my own machine I have the VirMIDI card as third card, index 2. This setup results in the following
raw MIDI devices, found in /proc/asound/devices [showing only the MIDI devices]: 
-->
筆者のマシンの例では、VirMIDI カードが index 2 である三つ目のカードに
なっています。
この構成は、/proc/asound/devices
[MIDI デバイスのみ表示される]では、次の raw MIDI デバイス群として
反映されます。

<code>
 $ 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
   
</code>

<!--
The devices starting with '2-' are my virtual MIDI devices. Yours would start with '1-' if you only had one physical
card in your system. 
-->
筆者の場合は、'2-' ではじまるデバイスが仮想 MIDI デバイスです。
お使いのシステムにあるハードウェアのサウンドカードがひとつだけなら、'1-'
ではじまるデバイスが仮想 MIDI デバイスになるでしょう。

<!--
You can get a nicer listing with ALSA's own aconnect utility, which we will need anyway. Called with option -o (or
-lo) it will show the MIDI devices capable of MIDI output, while a call with -i shows those with MIDI input
capabilities: 
-->
ALSA に含まれている aconnect ユーティリティを使うと、
もっと分かりやすい一覧表が見られます。aconnect は
以後様々な用途で必要になるでしょう。-o (もしくは -lo) オプション付きで
実行すると、MIDI 出力が可能な MIDI デバイスを表示します。
また、-i オプション付きで実行すると、MIDI 入力が可能な MIDI
デバイスを表示します:
<code>
 $ 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     '
   
</code>

<!--
The devices shown correspond to ALSA's own OSS-compatible raw MIDI devices in the /proc/asound/dev directory
tree. For example /proc/asound/dev/midiC2D0 is the first MIDI device of our virtual MIDI card at index 2, called
Virtual Raw MIDI 2-0 by aconnect. In Debian those devices are available in /dev/snd/ as well, and they also are
internally linked with the old OSS device locations: /dev/midiXX. To make sure that I can get the ALSA raw MIDI
ports from /dev/midiXX I symlinked them with 
-->
表示されたデバイス群は、/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
ポートにアクセスできるのを確認するには:

<code>
 $ ln -s /dev/snd/midiC2D0 /dev/midi20
 $ ln -s /dev/snd/midiC2D1 /dev/midi21
 [...]
   
</code>

<!--
but this should not be necessary, so don't do this at home, kids! 
-->
でも、これは必要不可欠ではありません。お父さんのマシンでやってはいけませんよ!
<p>訳注:
<p>
最近の alsa では /proc/asound/dev が廃止され、/dev/snd 以下が
正式のデバイスファイルになりました。

<!--
Now that we have created and configured a VirtualMIDI card we can use it in our applications just like any other
MIDI devices. Just insert the needed device, be it an OSS-compatible /dev/midi20 or an ALSA MIDI port like 80:0,
at the correct configuration point of your favourite sequencer and synthesizer application. 
-->
ここまでで仮想 MIDI カードの作成と設定が完了しましたので、
他の MIDI デバイスと全く同様に、お使いのアプリケーションで使用することができます。
好みのシーケンサやシンセサイザのアプリケーションのきちんとした設定箇所に、
OSS 互換なら /dev/midi20 のような形式、ALSA MIDI ポートなら 80:0 のような
形式で、必要なデバイス名を記入するだけです。


<sect1><!--Routing MIDI Events-->MIDI イベントのルーティング

<sect2>aconnect<p>

<!--
Without further arrangements we will not be able to send the MIDI events from our sequencer to a softsynth. For
that, we first need to connect two ports with (you guessed it) the aconnect utility. This tool connects two or more
ports. Its -i and -o output above has already shown us the available ports, and with a simple syntax these can now be
connected in a one-way fashion: 
-->
仮想 MIDI カードの作成と設定をした上で、さらなる準備をしないと、
MIDI イベントをシーケンサからソフトシンセに送信することはできません。
そのためには、最初にふたつのポートを―ご想像通り― aconnect
ユーティリティで接続する必要があります。このツールはふたつ、
もしくはそれより多くのポートを接続します。-i と -o が
使用可能なポートを表示するオプションであることは、すでに以前説明した通りです。
簡単な構文で、これらのポートを一方向に接続することができます。
<!--
<code>
 $ aconnect [sender port] [receiver port]
 $ aconnect 80:0 81:0
    
</code>
-->
<code>
 $ aconnect [送信ポート] [受信ポート]
 $ aconnect 80:0 81:0
    
</code>

<!--
This routes all MIDI data sent to port 80:0 over to port 80:1. In our setup this means that every event coming in at
/dev/midi20 gets sent to /dev/midi21, where it can be read ('received') by another application. 
-->
この例では、port 80:0 に送信されたすべての MIDI データを port 80:1
に向けてルーティングします。
本文書の構成だと、/dev/midi20 に入ってきたすべてのイベントは
/dev/midi21 に送信されることになるので、/dev/midi21 から
他のアプリケーションはその MIDI イベントを読む(受信する)
ことができます。

<!--
If you had configured the VirMIDI card as your second card (with card index 1) you should have these ports: 
-->
VirMIDI カードをカード index 1 であるふたつ目のカードとして設定した場合、
これらのポートが存在するはずです:

<code>
 $ 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   
    
</code>

<!--
Here you can connect for example port 72:0 (/dev/midi10) to port 73:0 (/dev/midi11) with: 
-->
この時点で、たとえばポート 72:0 (/dev/midi10) からポート 73:0 (/dev/midi11)
に接続できます:

<code>
 $ aconnect 72:0 73:0
    
</code>

<!--
aconnect can show us what was created with its -lo and -li options: 
-->
aconnect で -lo や -li オプションを使うと、接続状況を
表示できます:

<code>
 $ 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
    
</code>


<!--
You see that 'Virtual Raw MIDI 1-0' now is connected to 'Virtual Raw MIDI 1-1'. Now, depending on your
applications, you can read MIDI data that was sent to 'Virtual Raw MIDI 1-0' from 'Virtual Raw MIDI 1-1', or in
OSS-device speak: What was sent to /dev/midi10 gets routed to /dev/midi11 and can be read from there. 
-->
&dquot;Virtual Raw MIDI 1-0&dquot; が現在 
&dquot;Virtual Raw MIDI 1-1&dquot; に接続されている
ことが分かります。この時点で、&dquot;Virtual Raw MIDI 1-0&dquot;
に送信された
MIDI データを &dquot;Virtual Raw MIDI 1-1&dquot; から読み出すことができます。
OSS 互換デバイスだと、/dev/midi10 に送信された MIDI データは
/dev/midi11 への経路をとり、/dev/midi11 から読み出すことができます。
どちらを使うかは、お使いのアプリケーションによります。

<!--
You can also connect more than one port to a port. If you call aconnect twice like this: 
-->
ふたつ以上のポートを、ひとつのポートに接続することもできます。
以下のように aconnect を二度実行すると:

<code>
 $ aconnect 72:0 73:0
 $ aconnect 72:0 74:0
    
</code>


<!--
you can receive the same data send to /dev/midi10 at /dev/midi11 and at /dev/midi12 as well. And of course you can
really hammer your machine if you create more VirMIDI cards and wildly connect these. There's no stopping us
now... 
-->
/dev/midi10 に送信したのと同じデータを、/dev/midi11 と /dev/midi12
で同様に受信できます。当然、もっとたくさんの仮想 MIDI カードを作成し、
それらをでたらめに接続した場合は、本当にマシンを酷使することになります。
もうわたしたちを止めるものはなにもありません…

<!--
To disconnect all ports use 
-->
すべてのポートの接続を切るには:

<code>
 $ aconnect -x 
    
</code>


<!--
or disconnect only one connection with: 
-->
接続をひとつだけ切るには:

<code>
 $ aconnect -d 72:0 74:0
    
</code>


<sect1><!--Graphical MIDI Patch Bays-->グラフィカルな MIDI パッチベイ<p>

<!--
Bob Ham's ALSA MIDI Patch Bay is a very useful graphic frontend to ALSA's MIDI connection setup. Usage is very
simple and intuitive: On the left are the MIDI ports that are capable of sending MIDI events, while on the right you
see the ports with receiving capability. If you click on a left-side port it gets selected for a new connection to the port
on the right that you click next. Clicking on a right-side port will disconnect the port if it was connected. A clean and
easy tool that has the potential to redundantize this HOWTO. ;) 
-->

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


<sect2>aseqview<p>

<!--
Another useful tool for routing MIDI events is aseqview by ALSA developer Takashi Iwai. You can download it at
Iwai-sama's homepage http//members.tripod.de/iwai/alsa.html, but it is also included in many distributions. This
graphic utility was designed to view and change MIDI events as they pass through your computer, but it also has the
capability to route events to different MIDI ports like aconnect does. This comes in handy when you have to deal with
applications that use the OSS sequencer device, which aconnect is sometimes unable to reach. If you start aseqview
without any options you get a nice GUI and a new MIDI port. The default is port 128:0, and it looks like this: 
-->
MIDI イベントをルーティングするためのもうひとつの有用なツールが、
ALSA 開発者岩井隆さん作の aseqview です。岩井さんのホームページ
<url url="http://members.tripod.de/iwai/alsa.html">
でダウンロードできますが、多くのディストリビューションにも含まれています。
このグラフィカルなユーティリティは、コンピュータを
通過する MIDI イベントを眺めたり変更したりする目的で設計されましたが、
aconnect のように、
異なる MIDI ポートにイベントをルーティングすることもできます。
aconnect では時に操作できないこともある
OSS シーケンサデバイスを使うアプリケーションを扱わなければならない時に、
aseqview は有用です。コマンドラインオプションなしで aseqview を
起動すると、きれいな GUI と新たな MIDI ポートが手に入ります。
デフォルトは port 128:0 です。このようになります:

<code>
 client 128: 'MIDI Viewer' [type=user] 
    0 'Viewer Port 0 ' 
    
</code>


<!--
With this port all the aconnect tricks that we have seen by now are possible. But if you just need to connect the
aseqview port to another port, aseqview can do this by itself with the -d option : 
-->
このポートを使って、これまで説明してきた aconnect の作業すべてが可能です。
でも、aseqview のポートを別のポートに接続することだけが必要なら、
-d オプションを使えば、aseqview だけで実現できます:

<code>
 $ aseqview -d 73:0 &
    
</code>


<!--
This connects port 128:0 (if that was available) to port 73:0 right from the start of aseqview. 
-->
ちょうど aseqview の起動時から、(使用可能であれば) port 128:0 から port 73:0 に接続がなされます。


<!--
There are some more graphical aconnect tools with very similar functionality.  Maarten de Boer used most af the original aconnect source code to write a graphical frontend called "aconnectgui" with the FLTK toolkit. It is available at <url url="http://www.iua.upf.es/~mdeboer/">.  His software has the best looks, in my opinion.
-->
これらのツールととてもよく似た機能があるグラフィカルな aconnect ツールが
ほかにもいくつかあります。Maarten de Boer は、オリジナルの aconnect の
ソースコードのほとんどを使って、FLTK ツールキットで "aconnectgui" という
グラフィカルフロントエンドを書きました。
<url url="http://www.iua.upf.es/~mdeboer/">
で、入手できます。筆者の意見では、彼のソフトウェアが最も見栄えがよいです。

<!--
Personally I use kaconnect, maybe because it has the shortest name, that is the fastest to type. kaconnect was developed by Suse's own Dr. Matthias Nagorni as a part of his series of tools and softsynths for ALSA, the kalsatools. Don't let the "k" in the name fool you, the software does not require KDE, it uses the pure QT GUI libraries. kaconnect and more is available at <url url="http://www.suse.de/~mana/kalsatools.html">.
-->
個人的に、筆者は kaconnect を使っています。たぶん名前がいちばん短かいので、
速くタイプできるからでしょう。kaconnect は Suse の Dr. Matthias Nagorni
によって、ALSA 向けのツールとソフトシンセのシリーズである kalsatools
の一部として開発されました。名前に "k" がついているからといって、
勘違いしないでください。kaconnect は KDE を必要とせず、QT GUI ライブラリ
だけを使います。kaconnect その他は
<url url="http://www.suse.de/~mana/kalsatools.html">
で、入手できます。





<sect1><!--Applications-->アプリケーション<p>

<!--
In this last section I will show some examples, how to use the virtual MIDI connections in various applications. I will
assume a VirMIDI card as a third card in the system, using ALSA MIDI ports 80:0 to 83:0 that correspond to the raw
OSS MIDI devices /dev/midi20 to /dev/midi23 and to the ALSA raw MIDI devices /dev/snd/midiC2D0 to
/dev/snd/midiC2D3. Of these, the first two have been 'aconnected' with 
-->
最後のこの節では、様々なアプリケーションでの仮想 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' されています:

<code>
 $ aconnect 80:0 81:0
   
</code>


<!--
As shown, this means, that all MIDI data sent to /dev/midi20 (or port 80:0 or /dev/snd/midiC2D0) can now be read at
/dev/midi21 (or port 80:1 or /dev/snd/midiC2D1) 
-->
これまで説明してきたとおり、これはつまり
/dev/midi20 (もしくは port 80:0 もしくは /dev/snd/midiC2D0)
に送られたすべての MIDI データは、/dev/midi21 (もしくは port 80:1
もしくは /dev/snd/midiC2D1) で読めていることを意味しています。


<sect1><!--Sequencers-->シーケンサ<p>

<sect2>MusE<p>

<!--
MusE is a full-featured MIDI sequencer written by Werner Schweer, available at http://muse.seh.de. We will need to
configure the the virtual MIDI port as an output port in the section 'Config->MIDI Ports'. In MusE, the ports are
named by their ALSA names 'VirMIDI X-X': 
-->
MusE は、Werner Schweerによって作られた完全な MIDI シーケンサです。
<url url="http://muse.seh.de"> で入手できます。
&ldquo;Config-&gt;Midi Ports&rdquo; セクションで、
仮想 MIDI ポートを出力ポートとして設定する必要があります。
MusE では、指定するポートは ALSA での名前 'VirMIDI X-X' です:

<!--
Now make sure that the right port is selected as the output port for the channel on which you want the software
synthesizer to listen to and play the MIDI events: 
-->
ここで、出力ポートに正しいポートを選んでいるか確認してください。
つまりその MIDI イベントを受信・演奏させたい
ソフトウェアシンセサイザが待ち受けているチャンネルです。

<!--
For some reason I could not use 'VirMIDI 2-0' as output device in MusE 0.4.9. That is the expected device when I
wanted to receive on 'VirMIDI 2-1' but I had to use it the other way around. I don't know why, I'm probably stupid,
and you might have to experiment a bit. One could also use the midi02 or midi2 devices. 
-->
どういうわけか、筆者は MuSE 0.4.9 で、'VirMIDI 2-0' を出力デバイスとして
使うことができませんでした。'VirMIDI 2-1' で受信したい時、'VirMIDI 2-0'
デバイスに送信したかったのですが、そのふたつを
逆にして使わなくてはならなかったのです。
多分筆者がまぬけなせいなのでしょうが、筆者には原因が分からないので、
あなたはちょっと実験をしなくてはならないかもしれません。
midi02 や midi2 形式のデバイスを使うことも可能でしょう。


<sect2>ttrk<p>

<!--
Billy Biggs's ttrk is a simple, quick and tight MIDI sequencer with a tracker interface. It can output its MIDI data to
any MIDI port configured in the file $HOME/.ttrkrc. 
-->
Billy Biggs 作の
<url url="http://div8.net/ttrk/" name="ttrk">
は、シンプルで軽く安定した MIDI シーケンサで、
トラッカーのようなステップ入力のインタフェースを備えています。
このシーケンサは、MIDI データを &dollar;HOME/.ttrkrc ファイルで設定された
MIDI ポートに送信することができます。

<!--
Put this line there to have ttrk write to /dev/snd/midiC2D0: 
and you're good to go... 
-->
ttrk が /dev/snd/midiC2D0 に送信するようにするには、次の行を
&dollar;HOME/.ttrkrc ファイルに書いてください。

<code>
mididev = /dev/snd/midiC2D0

</code>

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


<sect2>Shaketracker<p>

<!--
Juan Linietsky's Shaketracker revives the MIDI tracker interface like ttrk, but it has a more complete translation of
the classic tracker effects to MIDI data. Unfortunatly it uses the OSS sequencer device (/dev/sequencer) for its MIDI
output, not the raw MIDI devices, and I could not get it to work with aconnect. But there is a workaround that
involves aseqview. If we start aseqview before Shaketracker, the tracker will recognize and use the aseqview port. One
just has to select it in the 'User Devices' section of Shaketracker, where it shows up by its ALSA name 'Viewer Port
0': 
-->
Juan Linietsky 作の
<url url="http://reduz.com.ar/shaketracker" name="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' として表示されます:

<!--
It is convenient to give this User Device a good name instead of 'Null Output'. 
-->
このユーザデバイスに、'Null Output' のかわりに分かりやすい名前をつけると便利です。

<!--
If we start aseqview without options we would need to aconnect the aseqview port with the softsynth port, but as
shown previously we could also start aseqview directly with a destination port. Don't forget to use the new User
Device in every track that should go to the softsynth. I always run Shaketracker with a little shell script that starts
aseqview, waits for the creation of ports, and then starts Shaketracker: 
-->
aseqview を、コマンドラインオプションなしで起動した場合、
aseqview のポートをソフトシンセのポートと aconnect する必要が
あります。でも、以前説明したように、接続先ポートの指定つきで直接 aseqview
を起動することもできます。ソフトシンセに送信する各トラックごとに、
この新たなユーザデバイスを使用するのを忘れないでください。
筆者はいつも小さなシェルスクリプトを用いて Shaketracker
を起動します。これは aseqview を起動し、ポートが作られる時間を
待ち、それから Shaketracker を起動します:

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

<sect1><!--Software Synthesizer-->ソフトウェアシンセサイザ<p>

<sect2>Pure Data<p>

<!--
Miller Puckette is the genius behind the open-source software synthesis and multimedia development environment
Pure Data (PD), which evolved out of MAX and in turn was the basis for the MAX-extension MSP. PD can use raw
MIDI devices to read MIDI events that are specified with the option '-midiindev &lt;devnumber&gt;' but it has an
irritating way of specifying which device to use. The formula is as follows: To use /dev/midi0, start PD with 'midiindev
1', to use /dev/midi1 start it with '-midiindev 2' and so on. Got it? You must specify the real device number plus 1
here. Another example: For /dev/midi21 start PD with '-midiindev 22' 
-->
Miller Puckette は、オープンソースのソフトウェアシンセかつマルチメディア
開発環境の
<url url="http://crca.ucsd.edu/~msp/software.html" name="Pure Data">
を生んだ天才です。PD は MAX から発展し、それが逆に MAX の拡張である
MSP の基礎となりました。PD では MIDI イベントを読むのに
raw MIDI デバイスを使うことができます。raw MIDI デバイスは '-midiindev
&lt;デバイスの番号&gt;' オプションで指定します。
しかし、使用するデバイスを指定するやりかたにはいらいらさせられます。
次のような形式です: /dev/midi0 を使うには、PD を '-midiindev 1'
オプションで起動します。/dev/midi1 を使うには '-midiindev 2'
で、以下同様です。理解できましたか? このオプションでは、
実際のデバイス番号に 1 を足した数字を指定しなくてはならないのです。
別の例です: /dev/midi21 を使うには、'-midiindev 22' オプションで
PD を起動します。

<!--
PD has a help patch 'Test audio and MIDI', that is invaluable in locating the right MIDI device: 
-->
PD には 'Test audio and MIDI' という名のヘルプパッチが用意されています。
正しい MIDI デバイスを確認する上で、とても重宝します。


<sect2>Csound<p>

<!--
Csound is the grandmother of most of todays software synthesizers, and it has learned MIDI as well. Running 'csound
&#045;-help' shows where one has to configure the MIDI input device: 
-->
<url url="http://www.csounds.com" name="Csound">
は、いまどきのソフトウェアシンセサイザほとんどの祖母にあたります。
そして、MIDI にも対応がなされています。'csound --help'
を実行すると、MIDI 入力デバイスの設定が必要な箇所を表示します:

<code>
 -M dnam or --midieventdev=dnam ........ Read MIDI realtime events from device
</code>     


<!--
So in our example we need to start Csound as 
-->
よって本書の例では、Csound を以下のように起動する必要があります:

<!--
<code>
 $ csound -M /dev/midi22 -o devaudio midi.csd
</code>     
-->
<!-- 原文の /dev/midi22 は間違いなので修正 -->
<code>
 $ csound -M /dev/midi21 -o devaudio midi.csd
</code>     



<sect2><!--Conclusion-->おわりに<p>

<!--
By now you should know how to use a software synthesizer to orchestrate music composed in and played by a MIDI
sequencer. Of course, tools like aconnect and aseqview don't need to be used with a MIDI software sequencer. You
could also redirect events that come into your machine from an external sequencer or from an external MIDI
keyboard directly to the software synth without the MIDI sequencer step. Just 'aconnect' the external MIDI device to
your softsynth or to the on-board synth of your soundcard. Or go the other way around: PD, Csound or environments
like KeyKit allow you to create MIDI events in algorithmic ways that are nearly impossible with classic Cubase-like
MIDI sequencers. With aconnect you can route these events to any MIDI capable sound module you have. 
-->
ここまでの説明で、MIDI シーケンサで作曲・再生した音楽を、
ソフトウェアシンセサイザの音で演奏する方法がお分かりになったと思います。
もちろん、aconnect や aseqview
のようなツールは、必ずしも MIDI ソフトウェアシーケンサといっしょに使う必要が
ある訳ではありません。外部のシーケンサや外部の MIDI キーボードから
マシンに入ってきたイベントを、MIDI シーケンサを通さずに直接
ソフトウェアシンセにリダイレクトすることもできます。
外部の MIDI デバイスを、お使いのソフトシンセや、サウンドカードの
オンボードシンセに 'aconnect' するだけでよいのです。
振り返っておさらい: PD, Csound, あるいは
<url url="http://www.nosuch.com/keykit/index.html" name="KeyKit">
のような環境では、
アルゴリズミックなやりかたで MIDI イベントを作成することができます。
アルゴリズミックな作曲は、古典的な Cubase ライクな MIDI シーケンサでは
ほとんど不可能です。aconnect を使うと、生成された MIDI イベントを、
お使いの MIDI 受信可能なサウンドモジュールならどのようなものにでも
ルーティングできます。



<sect1><!--Acknowledgments-->謝辞<p>

<!--
The author would like to thank Takashi Iwai for his technical assistance in preparing this article and for his
invaluable advice regarding the Japanese language. Thanks, Takashi ! 
-->
筆者は、岩井隆さんに、この記事を準備するにあたっての技術的な援助と、
日本語に関する貴重なアドバイスをいただいたことを感謝します。
隆さん、ありがとう!








<sect><!--Useful Links.-->有用なリンク
<p>

<!--
Below is a list of links to sites and resources covering MIDI and Linux. 
-->
以下は MIDI と Linux をカバーするサイトと情報源へのリンク一覧です。


<url url="http://www.linux-sound.org/"> Sound & MIDI Software For Linux. <!--A huge resource of MIDI and Audio related information.-->MIDI とオーディオ関連情報の巨大な情報源。<p>


<url url="http://www.linuxdj.com/audio/lad/"> Linux Audio Developers mailing list. <!--  For developer related discussion.-->開発者に関連した議論。

<url url="http://www.linuxdj.com/audio/quality"> The Linux Audio Quality HOWTO.  <!--A good section on MIDI cards, essential reading for building a Linux studio. -->MIDI カードの節がよい。Linux スタジオを構築するのに必読。

<url url="http://www.alsa-project.org/"> Alsa Project - <!--Audio/MIDI Driver-->オーディオ/MIDI ドライバ

<url url="http://www.4front-tech.com/"> OSS - <!--Audio/MIDI Driver-->オーディオ/MIDI ドライバ

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

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

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

<url url="http://www.suse.de/~mana"> <!--Excellent collection of ALSA 0.9 MIDI and PCM example C programs by Dr. Matthias Nagorni.-->Dr. Matthias Nagorni によって書かれた ALSA 0.9 での MIDI と PCM の C プログラム例の優れたコレクション。

<sect><!--Feedback.-->フィードバック
<p>
<!--
As ever, a HOWTO is a work in progress.  You are encouraged to give feedback on new applications and other interesting developments with MIDI under Linux.
-->
依然として、本 HOWTO は製作進行中です。Linux で MIDI を使った
新たなアプリケーションやその他開発中のものについて、
フィードバックをいただけるとありがたいです。

<!--
MIDI cards are, by their wide variety, sometimes difficult to configure as they have various levels of driver support and configuration options.  Your best source of reference for problems are ALSA's and OSS's websites, newsgroups, and if you get stuck please try searching the Linux Audio mailing lists.  
-->

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

<sect>日本語版謝辞
<p>
翻訳にあたり貴重なアドバイスをいただいた、
武井伸光さん、カーテス典子さんに感謝します。

</article>
