debian(etch)で外部midi音源を鳴らすには

etchで外部midi音源を鳴らしてみよう。

usb-midiケーブルの接続確認

$ cat /dev/sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.14 emulation code)
Kernel: Linux jet 2.6.23.1 #1 SMP Sat Jan 19 13:43:27 JST 2008 i686
Config options: 0

Installed drivers:
Type 10: ALSA emulation

Card config:
HDA Intel at 0xf9ff8000 irq 22
Yamaha UX16 at usb-0000:00:1a.1-2, full speed

Audio devices:
0: ALC883 Analog (DUPLEX)

Synth devices: NOT ENABLED IN CONFIG

Midi devices:
1: UX16

Timers:
7: system timer

Mixers:
0: Realtek ALC888
1: mixer10

UX16が存在しているか確認

$lsusb
Bus 002 Device 003: ID 0499:1009 Yamaha Corp.
$ amidi -l
Dir Device    Name
IO  hw:1,0,0  UX16 MIDI 1

UX16に接続したMIDIキーボードの接続確認

UX16のIN側にMIDIキーボードを接続して以下を実行

$ od -t x1 /dev/midi1

UX16へ信号が出力されているかの確認

$ cat > /dev/snd/midiC1D0
kjfadfadfa
fadfasf
dfadfa
^D
$ cat /proc/asound/card1/midi0
UX16

Output 0
  Tx bytes     : 58
  Mode         : native
  Buffer size  : 4096
  Avail        : 4096
Input 0
  Rx bytes     : 6686

pmidiを使って外部MIDI機器でmidiをならす

$ sudo aptitude install pmidi
$ pmidi -l
 Port     Client name                       Port name
 14:0     Midi Through                      Midi Through Port-0
 20:0     UX16                              UX16 MIDI 1
$ pmidi -p "20:0" BWV1046A.MID

timidityを使ってPC内蔵音源でMIDIをならす

$ sudo aptitude install timidity
$ timidity BWV1046A.MID

timidityとpmidiを使ってPC内蔵音源でMIDIをならす

timidityの-iオプションはDをvに変えると非常駐でverbose

$ timidity -Os -iAD
Requested buffer size 32768, fragment size 8192
ALSA pcm 'default' set buffer size 33868, period size 3760 bytes
TiMidity starting in ALSA server mode
Opening sequencer port: 128:0 128:1 128:2 128:3
$ cat /proc/asound/seq/clients
Client info
  cur  clients : 5
  peak clients : 7
  max  clients : 192

Client   0 : "System" [Kernel]
  Port   0 : "Timer" (Rwe-)
  Port   1 : "Announce" (R-e-)
    Connecting To: 15:0
Client  14 : "Midi Through" [Kernel]
  Port   0 : "Midi Through Port-0" (RWe-)
Client  15 : "OSS sequencer" [Kernel]
  Port   0 : "Receiver" (-we-)
    Connected From: 0:1
Client  20 : "UX16" [Kernel]
  Port   0 : "UX16 MIDI 1" (RWeX)
Client 128 : "TiMidity" [User]
  Port   0 : "TiMidity port 0" (-We-)
  Port   1 : "TiMidity port 1" (-We-)
  Port   2 : "TiMidity port 2" (-We-)
  Port   3 : "TiMidity port 3" (-We-)
  Output pool :
    Pool size          : 500
    Cells in use       : 0
    Peak cells in use  : 0
    Alloc success      : 0
    Alloc failures     : 0
  Input pool :
    Pool size          : 1000
    Cells in use       : 0
    Peak cells in use  : 0
    Alloc success      : 0
    Alloc failures     : 0
$ pmidi -l
 Port     Client name                       Port name
 14:0     Midi Through                      Midi Through Port-0
 20:0     UX16                              UX16 MIDI 1
128:0     TiMidity                          TiMidity port 0
128:1     TiMidity                          TiMidity port 1
128:2     TiMidity                          TiMidity port 2
128:3     TiMidity                          TiMidity port 3
$ pmidi -p "128:0" BWV1046A.MID

別にポートは:1でもよい

playmidiでならしてみる(なぜかポートが指定できずならない

すっかり勘違い。aplaymidiでならす。

$ sudo aptitude install playmidi
$ aplaymidi -p 128:0 BWV1046A.MID
$ aplaymidi -p 20:0 BWV1046A.MID

以下はplaymidiとaplaymidiを勘違いしたときの記録。

http://www.linux.or.jp/JF/JFdocs/Sound-Playing-HOWTO-2.html によるとplaymidiによってコマンドラインから鳴らせるらしい。
しかし、ポート指定するオプションがわからない。
ネット上では-Dとかあったのだがdebianのパッケージではなかった。

$ sudo aptitude install playmidi
$ playmidi BWV1046A.MID
Playmidi 2.4 Copyright (C) 1994-1997 Nathan I. Laredo, AWE32 by Takashi Iwai
This is free software with ABSOLUTELY NO WARRANTY.
For details please see the file COPYING.
playmidi: No playback device found.