対象とするUbuntuのバージョン
- 全て
本Tipsは下記のトピック、 https://forums.ubuntulinux.jp/viewtopic.php?id=7803&p=1 での内容を纏めたものです。初版の編集者は本Tipsで扱う機器を所持していないため、コードや設定の妥当性検証が不十分である可能性があります。内容については適宜関連サイトの情報などと併せて参照願います。
本Tipsでは、ハードウェアMIDI音源として、Roland社製のSC-55MK2を例にとり、設定方法を解説します。
なお、うまくいかない場合は下記トピックを参照して、timidity、および、Fluid (R3) General MIDI SoundFontなどのソフトウェアMIDI音源での再生を検討下さい。
【HowTo】TiMidity++の基本的な使い方とちょっとしたTips
Alert
--->8--->8--->8--- (snip) --->8--->8--->8---
は出力を省略し、一部だけ表示することを表します。 $で始まる行はコマンドを表します。端末を開いてコマンドを入力して下さい。
ALSAの仕様確認
本Tipsでは、ALSA(Advanced Linux Sound Architecture)のsnd-serial-u16550モジュールでハードウェアMIDI音源を駆動します。下記を参照し使用しようとしているデバイスがサポートされているかを確認して下さい。
併せて、書式なども確認して下さい。
setserialによるシリアルポートの設定、および、snd-serial-u16550のロード
端末を開き、
$ which setserial
を実行し、setserialがインストールされているか、確認して下さい。もし入っていなければ、パッケージマネージャなどを使って、setserialパッケージを導入して下さい。 シリアルポートは/dev/ttyS0を使用すると仮定します。
$ sudo /bin/setserial /dev/ttyS0 uart none
を実行し、続いて、
$ sudo /bin/setserial /dev/ttyS0
を実行して、/dev/ttyS0のPort Address、IRQを確認します。 ここでは、
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
であったと仮定します。
次に、確認したPort Address、IRQで、snd-serial-u16550をロードします。一例を下記に示します。
$ sudo /sbin/modprobe snd-serial-u16550 port=0x3f8 irq=4 speed=38400
カーネルモジュールが正常にロードされたかを
$ cat /proc/asound/cards
を実行して、確認して下さい。出力例を下記に示します。
1 [UART16550A ]: Serial - Serial MIDI (UART16550A) Serial MIDI (UART16550A) [Soundcanvas] at 0x3f8, irq 4
ここまでで、特にエラーがなければ設定はひとまず完了です。
ハードウェアMIDI音源のClient番号、Port番号の確認
それでは、認識されているか確認してみましょう。端末で、
$ cat /proc/asound/seq/clients
、もしくは、
$ aplaymidi -l
を実行して、Client番号、および、Port番号を確認します。
$ cat /proc/asound/seq/clients 実行時の出力例
Client info --->8--->8--->8--- (snip) --->8--->8--->8--- Client 20 : "Serial MIDI (UART16550A)" [Kernel] Port 0 : "Serial MIDI 1" (RWeX) --->8--->8--->8--- (snip) --->8--->8--->8---
$ aplaymidi -l 実行時の出力例
Port Client name Port name --->8--->8--->8--- (snip) --->8--->8--->8--- 20:0 Serial MIDI (UART16550A) Serial MIDI 1 --->8--->8--->8--- (snip) --->8--->8--->8---
この場合は、Client番号が20、Port番号が0となります。
MIDIファイルの再生確認
確認したClient番号とPort番号で、$ aplaymidiを起動しファイルを再生してみます。-pオプションに続く一つ目の数値がClient番号で、:で区切られた二つ目の番号がPort番号です。[midifile_name]には再生するMIDIファイルのフルパス名に置き換えて下さい。
$ aplaymidi -p20:0 [midifile_name]
設定の恒久化
音がでることが確認できたら、起動時にシリアルポートやALSAの設定がされるようにするのも良いでしょう。
シリアルポート設定
$ gksudo gedit /etc/serial.confなどとして管理者権限で/etc/serial.confをテキストエディタで開き、1行目に
###AUTOSAVE###
と書いて改行し、保存して下さい。
その後、シリアルポートの設定コマンドを実行し、再起動して、/etc/serial.confが更新されていることを確認して下さい。 コマンドの一例を下記に示します。
$ sudo /sbin/setserial /dev/ttyS0 uart none
ALSA設定
$ gksudo gedit /etc/modprobe.d/alsa-base.confなどとして管理者権限で/etc/modprobe.d/alsa-base.confをテキストエディタで開き、設定内容を記述して下さい。下記に一例を示します。
options snd-serial-u16550 port=0x3f8 irq=4 speed=38400 index=1 alias snd-card-1 snd-serial-u16550 alias snd-slot-1 snd-card-1 install snd-serial-u16550 /bin/setserial /dev/ttyS0 uart none; /sbin/modprobe --ignore-install snd-serial-u16550 $CMDLINE_OPTS
次に、$ gksudo gedit /etc/modulesなどとして管理者権限で/etc/modulesをテキストエディタで開き、
snd-serial-u16550
を追記して保存して下さい。