試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

TiMidity++のncursesインターフェースと日本語タイトルの文字化けについて

再生トレースが表示可能なXAWインターフェース(GUI)とncursesインターフェース(TUI)

TiMidity++-iatオプションを付けるとXAWのインターフェース*1で起動し、再生状態(トレース)を詳細に表示することができる(画像は公式サイトを参照)。
端末でも同じような再生状態の表示が可能で、これにはncurses*2インターフェースを用いる。指定するオプションは-int

$ timidity -int [MIDIファイルやRCPファイル]

日本語タイトルの文字化けについてとその対処

UTF-8環境上で日本語のタイトルが付けられたMIDIデータを再生したときに表示が化ける。

背景

2009年現在、GNU/Linux上の日本語環境で最も広く使用されるロケールエンコーディングUTF-8*3で、端末上でもUTF-8エンコーディングが用いられることが多いのだが、以前*4EUC-JPのエンコーディングが用いられていた。
TiMidity++はそのEUC-JPが広く用いられていた時期に作られ、EUC-JP環境上では-t eucオプションを付けることで正しく日本語タイトルを表示できていたものと思われるが、UTF-8が広く用いられるようになっても-tオプションがUTF-8に対応することはなく、日本語タイトルを化けずに表示させることはできなくなってしまった。

対処

起動時にエンコーディングの指定できる端末エミュレータEUC-JPのエンコーディングで新しく起動し、その中でTiMidity++-t eucオプション付きで実行するという方法をとる。ここではmltermを用いた。

$ mlterm -E EUC-JP -e timidity -t euc -int [MIDIファイルやRCPファイル]

下はシェルのエイリアスを用いて実行する方法。

$ alias timidity-ncurses='mlterm -E EUC-JP -e timidity -t euc -int'
$ timidity-ncurses [MIDIファイルやRCPファイル]

このようにして実行すると

タイトル部分が正常に表示される。ただ、(タイトルの上にある)ファイル名に日本語が含まれる場合、その部分は化けてしまう(端末がUTF-8エンコーディングのときでも化ける)。

使用したバージョン:

  • TiMidity++ 2.13.2
  • mlterm 2.9.4

*1:Mandriva Linuxでは「TiMidity++-interfaces-extra」パッケージが本体と別に必要

*2:端末の画面を制御するライブラリ

*3:ロケールを示す文字列は「ja_JP.UTF-8」など

*4:2003年に出たFedoraのバージョン1(Fedora Core 1)からUTF-8が用いられたあたりが境目で、それよりも前