Ubuntu Weekly Recipe

第160回オーディオインターフェイスを使う ― Firewire導入編

今回はオーディオインターフェイス特集第2弾ということで、Firewire接続のものをUbuntuに導入してみます。

Firewire/IEEE1394とは

Firewireとはもともと米国のApple社が提唱し、1995年に同じく米国のThe Institute of Electrical and Electronics Engineers, Inc.(IEEE)によってIEEE1394として標準化された規格です。2002年に、この規格の愛称としてAppleの商標の「Firewire」を使うことが発表されました。

2000年には上位互換のIEEE1394a規格(Firewire 400)が、2002年には高速化を図ったIEEE1394b規格(Firewire 800)が出されました。規格としてはこれ以降にもいくつか出されているようですが、筆者はあいにく見たことがありません。

IEEE1394aが現在一般的で、主にラップトップコンピュータに実装されている4ピンのコネクタと、バスパワーが供給できる6ピンのコネクタがあります。

Firewire接続のオーディオインターフェイスとFFADO

Firewire接続のオーディオインターフェイスを使う場合は、サウンドドライバとしてALSAではなく、FFADOプロジェクトの提供しているものを使います。FFADOは24ビットサンプル、192kHzまでのサンプリング周波数への対応、MIDI入出力、SPDIF入出力、ADAT/SMUX入出力、ワードクロック切り替えなどに対応しています。

FFADO公式ウェブサイトのDevice support databaseにて、対応するサウンドデバイスを調べることができます。M-Audio社、Echo社、Focusrite社、Presonus社、MOTU社、Mackie社などの特定の製品が掲載されています。このうち、Echo社とFocusrite社とは直接の協力関係を結んでいて、技術情報を直接提供いただいているそうです。

さて、UbuntuにFirewire接続のオーディオインターフェイスを導入するには、IEEE1394インターフェイスの確保を含む以下の4ステップを踏む必要があります。

  1. IEEE1394インターフェイスの導入
  2. IEEE1394用カーネルモジュールの有効化
  3. デバイスファイルへのアクセス許可
  4. FFADOライブラリパッケージのインストール

ここでは、筆者が所有しているEcho社のAudiofire Pre 8の導入例を、筆者がデバッグテストに参加している、Ubuntuの次期リリースのNattyに関する状況を交えてお伝えしていきます。

IEEE1394インターフェイスの導入

Firewire接続のオーディオインターフェイスを使いたいので、コンピュータ側にIEEE1394インターフェイスが必要です。もしお使いのコンピュータがIEEE1394インターフェイスを搭載していない場合は、別途導入する必要があります。デスクトップであればPCI/PCI-Expressバス接続のものが、ラップトップであればPCMCIA接続のカードタイプが一般的です。

IEEE1394インターフェイス用ドライバについて

次に、このIEEE1394インターフェイス用ドライバが必要です。Linuxには新しいドライバセットと旧いドライバセットがあり、Ubuntuの場合、Lucid、Maverick、Nattyでそれぞれインストール状況が異なっています。ちょうど移行期間にあたっていると考えてください。まとめると以下のようになります。

表1 IEEE1394/Firewire用カーネルモジュールセットのインストール状況と標準のモジュール
バージョンインストール状況標準のモジュール
10.04(Lucid)新旧
10.10(Maverick)新旧
11.04(Natty)新のみ

IEEE1394インターフェイスの中には新ドライバセットが対応していないものもあるようですが、新しいドライバは旧いドライバセットと比べて効率がよく、一般的なIEEE1394インターフェイスに対して、よりよい動作が期待できます。FFADOライブラリは新しいドライバセットでも動きますが、最新の2.0.1リリースにおいても新ドライバセットへの対応は実験的(experimental)で、可能なら旧いドライバセットを使ってもらいたいということです。

表から判断するに、LucidとMaverickは旧ドライバセットを、Nattyでは新ドライバセットを使うのがよいでしょう。そうなると、現在の最新リリースであるMaverickでは、旧ドライバセットへ切り替える必要があります。

以降はLinuxの作法に従い、ドライバをカーネルモジュールと呼んでいきます。このIEEE1394用カーネルモジュールに関して詳しく知りたい方はLinux FireWire wikiを参照してください。

カーネルモジュールの切り替え

現在システムで有効化しているカーネルモジュールを確認するには、端末で以下のコマンドを実行します。

MaverickとNattyにおける出力結果
$ lsmod | egrep '(1394|firewire)';
firewire_ohci          30801  0 
firewire_core          54903  1 firewire_ohci
crc_itu_t              12331  1 firewire_core
Lucidにおける出力結果
$ lsmod | egrep '(1394|firewire)';
ohci1394               27024  0 
ieee1394               81069  1 ohci1394

新旧の見分け方は、名前です。旧カーネルモジュールはsbp2.koを除いて全て「1394」という文字列を含み、新カーネルモジュールはnosy.koを除くすべてが「firewire」という文字列を含みます。Maverick/Nattyでは新カーネルモジュールが、Lucidでは旧カーネルモジュールが有効となっていることがわかります。

Maverickでは旧カーネルモジュールも使えるので、切り替えてみます。切り替えはファイル「/etc/modprobe.d/blacklist-firewire.conf」で行います。コマンド「cat」で内容を見てみましょう。

$ cat /etc/modprobe.d/blacklist-firewire.conf;
# Select the legacy firewire stack over the new CONFIG_FIREWIRE one.

blacklist ohci1394
blacklist sbp2
blacklist dv1394
blacklist raw1394
blacklist video1394

#blacklist firewire-ohci
#blacklist firewire-sbp2

blacklistという構文により、旧カーネルモジュールである「ohci1394」⁠sbp2」⁠dv1394」⁠raw1394」⁠video1394」が、起動時に読み込まれないリストに登録されています。対して新カーネルモジュールは、行頭の「#」によってコメントアウトされ、リストから外されています。そのため、新カーネルモジュールが有効となります。

旧カーネルモジュールを有効にするには、このコメントアウトを逆にします。操作としては、端末にて以下を実行します。

$ gksudo gedit /etc/modprobe.d/blacklist-firewire.conf;

パスワードを入力するとテキストエディタが開きますので、新旧のコメントアウトを逆にして、以下のようにします。

# Select the legacy firewire stack over the new CONFIG_FIREWIRE one.

#blacklist ohci1394
#blacklist sbp2
#blacklist dv1394
#blacklist raw1394
#blacklist video1394

blacklist firewire-ohci
blacklist firewire-sbp2

修正が終わったら、保存してテキストエディタを終了してください。

通常のカーネルモジュール(ALSAプロジェクトのカーネルモジュールなど)であればblacklist設定はこれで終了なのですが、IEEE1394用カーネルモジュールはブートプロセス以前のinitramfsプロセスで有効化されるため[1]⁠、以下のコマンドでinitramfsを再生成しておきます。

$ gksudo update-initramfs -u;

システムを再起動すると、新旧のカーネルモジュールの切り替えができているはずです。端末で確認してみましょう。

$ lsmod | egrep '(1394|firewire)';
ohci1394               27024  0 
ieee1394               81069  1 ohci1394

なお、新カーネルモジュールに切り替えたい場合は、ファイル「/etc/modprobe.d/blacklist-firewire.conf」を書き換えた上で、同様の操作を行ってください。

足りないカーネルモジュールの有効化

旧カーネルモジュールを使う場合には「ieee1394」「ohci1394」の他に、もうひとつ「raw1394」を有効化する必要があります[2]⁠。このカーネルモジュールはシステムが起動した後に必ず有効化されるようにしたいので、ファイル「/etc/modules」に追記します。以下を実行してください。

$ gksudo gedit /etc/modules;

テキストエディタが開きますので、/etc/modulesの末尾に以下の1行を追記して保存します。

raw1394

システムを再起動して、有効となっているカーネルモジュールを確認してみましょう。

$ lsmod | egrep '(1394|firewire)';
raw1394                22462  0 
ohci1394               27024  0 
ieee1394               81069  2 raw1394,ohci1394

このようになれば、Lucid/Maverickでの旧カーネルモジュール設定は完了です。

なお、新旧のカーネルモジュールがどちらも有効となった場合、IEEE1394インターフェイスがうまく使えなくなる可能性があります。もしどちらも有効化されていたら、コマンド「modprobe」の使い方を調べ、不要なモジュールを無効化してみてください。

デバイスファイルの読み書き許可

Linuxの作法のひとつに、⁠デバイスへの読み書きはファイルを通じて行う」というものがあります。デバイスに対する読み書きを、普通のファイルに対する読み書きと同じようにしたい、というわけです。この「デバイス用のファイル」はLinuxの作法では「デバイスファイル」「特殊ファイル」と呼ばれており、パス「/dev」以下に設けられています。

IEEE1394インターフェイスもデバイスのひとつですので、このデバイスファイルを持っています。旧カーネルモジュールを有効にしている場合はファイル「/dev/raw1394⁠⁠、新カーネルモジュールが有効になっていればファイル「/dev/fw*」⁠*は0からの通し番号)となります。

このデバイス用ファイルの状態について、調べてみましょう。以下のコマンドを実行します。

$ ls -la /dev | egrep '(fw|1394)';
crw-------  1 root root  251, 0 2011-01-26 09:34 /dev/raw1394

この出力結果は、Lucid/Maverickで旧カーネルモジュールを有効にした場合です[3]⁠。Linuxのファイルアクセス権に慣れていない人には難しいですが、ログインユーザは読み取りも書き込みもできなくなっていることがわかります。これではログインユーザがFFADOライブラリを通じてデバイスへアクセスできません。そのため、アクセスできるように設定を変更します。

このデバイス用ファイルは、UDEVが管理しています。UDEV(linux Userspace DEVice Management)は、必要に応じてデバイスファイルの作成/削除を行ったり、アクセス権の設定を行なったりします。設定はパス「/lib/udev/rules.d」以下のファイルや、⁠/etc/udev/rules.d」以下のファイルに記述されています。

今回はここに、デバイスファイル「/dev/raw1394」に対する設定ファイルを配置してみましょう。具体的な操作方法は以下のとおりです。

  1. 端末で「$ gksudo gedit /etc/udev/rules.d/60-raw1394.rules」を実行します
  2. パスワードを入力すると、テキストエディタが開きます
  3. 末尾に「KERNEL=="raw1394", OWNER="root", GROUP="audio", MODE="660"」を記述します
  4. テキストエディタ上で保存をクリックすると、ファイルが作成されます
  5. システムを再起動します

デバイス用ファイルが読み取り/書き込み可となっているかを確認してみましょう。以下を実行します。

$ ls -la /dev | egrep '(fw|1394)';
crw-rw----  1 root audio  251, 0 2011-01-26 09:34 /dev/raw1394

「rw-rw----」「audio」が含まれていれば成功です。これは、rootだけではなく、グループ「audio」に所属するユーザも読み取り/書き出しができますということです。

そこで、次にログインユーザをグループ「audio」に加えます。これは、Ubuntuのメニューからシステム、システム管理と進み、ユーザとグループから行います。

図1 ユーザとグループ管理画面
図1 ユーザとグループ管理画面

Nattyでは、デバイスファイル「/dev/fw*」⁠*は0からの通し番号)に対応したUDEVの設定は、パッケージ「libffado2」がインストールするように予定されています。ファイル「/lib/udev/rules.d/60-ffado.rules」です。そのため、ユーザに必要な操作はグループ「audio」への登録だけとなりそうです。

FFADOライブラリパッケージのインストール

さて、ここまででIEEE1394インターフェイスを使う準備が整いましたので、次にFFADOライブラリパッケージをインストールします。Synapticパッケージマネジャーを使うのが最も簡単でしょう。

パッケージ「libffado2」「ffado-tools⁠⁠、⁠ffado-mixer-qt4」をインストールしてください[4]⁠。前者がライブラリで、後者の2つはツール集となります。これらパッケージに含まれるファイル「/usr/share/doc/libffado2/README.gz」で、FFADOプロジェクトに関する詳細や対応デバイス情報を見ることができます。

認識の確認

ここまでの設定が済んだら、再びシステムを再起動し、IEEE1394のケーブルでコンピュータのIEEE1394ジャックとオーディオインターフェイスのFirewireジャックを接続してオーディオインターフェイスの電源を入れます。きちんと設定ができていると、端末でコマンド「$ ffado-test ListDevices;」を実行することで、オーディオインターフェイスの認識を確認できます[5]⁠。

$ ffado-test ListDevices;
-----------------------------------------------
FFADO test and diagnostic utility
Part of the FFADO project -- www.ffado.org
Version: 2.0.1
(C) 2008, Daniel Wagner, Pieter Palmers
This program comes with ABSOLUTELY NO WARRANTY.
-----------------------------------------------

=== 1394 PORT 0 ===
  Node id  GUID                  VendorId     ModelId   Vendor - Model
   0       0x0014860a5b6bdb9b  0x00001486  0x00000AF9   Echo Digital Audio - AudioFirePre8
   1       0x005b47de006cf049  0x00005B47  0x00000000   Linux - ohci1394  - 
no message buffer overruns

もし認識されないようであれば、以下のコマンドで診断プログラムを実行します。

$ ffado-diag;

出力を参照して、IEEE1394のカーネルモジュールが有効となっているか、デバイスファイル「/dev/raw1394」あるいは「/dev/fw*」⁠*は0からの通し番号)へのアクセスが許可されているか、FFADOライブラリが対応しているオーディオインターフェイスなのかを確認してください。フォーラムなどに相談する場合は、この出力も一緒に伝えるといいでしょう。

残念ながら、ここで与えられた文字数が尽きてしまいました。Ubuntuからデバイスへ音声出力をする方法、デバイスから音声を取得する方法、そしてハードウェアミキシングやデイジーチェーンといった、Firewire接続のサウンドデバイスの持つ特性を利用していく方法は、次週にお伝えします。

最後となりましたが、今回の原稿を書くのにあたり、initramfsとIEEE1394用カーネルモジュールの関係に関してご助言くださった松江大雄さんに感謝いたします。

おすすめ記事

記事・ニュース一覧