Chienomi

Linuxにおけるオーディオインターフェイスに関する基礎知識

Live With Linux::newbie

その昔、Linuxにおいて「周辺機器が動作するか」というのは鬼門であった。

この「周辺機器」にはビデオカードやサウンドカードも含まれ、Linuxを使っていく上でハードウェアが動作するかどうかというのは常につきまとう心配事だった。

そこからすればLinuxは普及し、進歩したためにたいていのハードウェアは普通に動作するようになっており、気にしなければいけないことは大きく減った。

だが、オーディオデバイスは依然として、まだ手強い要素を秘めている。 これは、最近のIntel CPUのラップトップの扱いが一癖あるということで多くのユーザーが直面しやすいものでもある。

そもそもオーディオインターフェイスに関して言えば意外と難しい要素を持っていたりするが、Windowsを使う場合はマニュアルの記載の通りの手順で行えば大抵の場合特別な考慮なく動作するものである。 ところが、Linuxで使う場合はそもそものオーディオインターフェイスに対する知識もしっかり要求されやすい。

本記事では(音楽制作などで使う)オーディオインターフェイスを中心に、Linuxとオーディオシステム、オーディオデバイス全体の解説を初心者向けにしていく。

Linuxのオーディオシステム

Unixで一般的なオーディオドライバ/システムはOSSというものだが、LinuxではOSSは廃止されており、その中核を担うのがALSAである。

ALSAはLinuxのオーディオの基本的な部分を広く担っており、様々なレイヤーでその名前が登場する。 例えば、オーディオドライバであったり、オーディオライブラリであったりだ。

古くから存在する音声を扱うソフトウェアはALSAライブラリを使って音を鳴らすことが多いが、ALSAライブラリはユーザーフレンドリーさがとても欠けている。 そのため、ALSAよりも扱いやすい、高レベルなオーディオライブラリが求められてきた。

こうしたオーディオライブラリは様々な形で存在してきたし、ALSAをベースとしつつもオーディオシステムそのものが様々なものが登場してきた。

そんな戦国時代を終わらせたひとつの結論となるのがPulseAudioである。 PulseAudioはLinux上で音声を扱うためのありとあらゆるものを扱いやすくしてくれる。 PulseAudioのライブラリというものも存在するが、PulseAudioはALSAやOSSなどの互換ライブラリを提供し、ALSA, OSS, EsounDなどで音を鳴らすソフトウェアが改修なしにPulseAudioを使えるようになっている。

ユーザーレベルでは、PulseAudioを使うことでLinuxのサウンドをコントロールできると思って良いだろう。

PipeWireは、PipeWire陣営が「PulseAudioを置き換える」と言っているせいでまるで後継であるかのように思われがちだが、実際はオーディオライブラリ寄りの存在である。 ALSA, OSS, PulseAudio互換ライブラリを用意しているため、サウンドをPipeWireに集約することは可能であるが、PipeWireが提供する機能は非常に限定的であるため、集約した先がない。 PulseAudio互換ライブラリを持つことから、PulseAudioのツール類が動作するため、PulseAudioの生態系に寄生する形でオーディオシステムを形成している。 ただし、100%の互換性を持っているわけではないため、PulseAudioの機能で使えなくなるものも存在する。

いずれにせよ、実際のオーディオ再生はオーディオドライバでもあるALSAが担うのが普通である。 FireWire接続のインターフェイスに関してはFFADOがドライバを提供する。

つまり、もっともオーソドックスな形式は、ALSAの上にPulseAudioがいる形。 このPulseAudioはPipeWireが擬態したものである場合もある。

ソフトウェアから見た場合、ALSA, PulseAudio, PipeWire, OpenAL, SDLなどおのおのお好みのライブラリを利用しており、OpenALのようなLinuxシステムにとってネイティブではないライブラリの場合は、そのライブラリが内部的にALSAなどのライブラリを利用する仕組みになっている。

Jack

PulseAudioやPipeWireとはまた違う仕組みとしてJackというものがある。

Jackはソフトウェアによる仮想コンソールのようなもので、DAWやシンセサイザー、MIDIデバイス、オーディオインターフェイスなどのinとoutをルーティングすることができる。

Jackは基本的に音楽制作において利用するものだ。

また、Jackで扱うことができるオーディオインターフェイスは1台だけであるため、複数のデバイスを使いわけるようなことはできない。

オーディオデバイス

オーディオデバイスは基本的には、ALSAにドライバがあるかどうか、が動作する条件になってくる。 Windowsのようにメーカーがドライバを提供しているというようなケースはごく稀であり、ほとんどの場合オーディオドライバはALSAによって提供される。

「ALSAはLinuxの標準システムだから、追加でいれるものはない」という意味ではないことに注意して欲しい。 典型的には、Sound Open Firmwareというものがあり、最近のIntelラップトップはこれがないと音を鳴らせない。Archlinuxではsof-firmwareというパッケージである。

sofは仕組みにちょっとクセがあるため、PulseAudioで微妙にうまく扱えない。

PCIであろうがUSBであろうが、基本的に「ALSA次第」である。 前述のようにFireWireの場合だけ「FFADO次第」に変わる。

ただし、USB接続の場合はもう少し話が続く。

USBにはUSB Audio Classという、USBによって規定されたデバイスの仕様がある。 これはUSBの仕様で共通のものなので、USB Audio Classに対応したオーディオデバイスは、USB Audio Class driverによって動作する。

このようなオーディオデバイスについて、DTMステーションでは「USBクラスコンプライアント」と表現されていたりする。

こういうふうに説明すると、USB Audio Classに対応したインターフェイスはLinuxでも問題なく使えるように認識されるかもしれないが、実はそんなことはなく、USB Audio Classに対応しているというのは「最低限動作はする」という話でしかない。

オーディオインターフェイスの機能のあり方

USB端子を3.5mm端子に変換するだけのような極めて単純なオーディオデバイスであれば機能なんてものはないも同然だが、音楽制作で使うようなオーディオインターフェイスはかなり複雑な機能を持っている。

そしてこの機能は次のように分類できる

  • 完全にハードウェアが持っているもの
  • ハードウェア内のファームウェアで制御され、ハードウェアインターフェイスでコントロールできるもの
  • ハードウェア内のファームウェアで制御され、ソフトウェア制御であり、ハードウェアコントローラがついているもの
  • ハードウェア内のファームウェアで制御され、ソフトウェア制御であり、アプリケーションからのみ制御できるもの
  • ドライバソフトウェアに搭載されているもの

完全にハードウェアが持っている機能としては、アンプがそうである場合が多い。 これは、ゲインノブは電源が入っていれば動作するものであるという意味だ。 特に、UniversalAudio Voltのように通電していれば動作するタイプのものに関しては、ハードウェア機能は一切の制約なく動作する。

次にファームウェア制御のものだ。 これは通電していれば動く場合もあれば、デバイスとして動作していないと動かないものもある。 いずれにせよ機能自体はハードウェア側にあるわけだが、問題はその制御方法である。

まず当たり前の話だが、ハードウェアにインターフェイスがついていない機能に関しては、アプリケーション(ドライバソフトウェア)で操作するしかない。 ミキサーやエフェクトが機能として搭載されているけれど、ボタンやツマミはない、というケースはかなり多い。

じゃあボタンやツマミがあればいいかというとそうでもなくて、ボタンやツマミがドライバソフトウェアに信号を送るためのコントローラでしかなく、直接ファームウェアの機能をいじれるようになっていないというケースもある。 これは、多くはないが。

オーディオインターフェイスについているインターフェイスで直接ハードウェアに作用できるタイプは、Linuxであっても確実に動作するので非常にありがたい。 だいたい上級モデルはソフトウェア制御になっているので、Linuxerにとっては入門インターフェイスのほうが信頼できるのはあるあるだ。

そして最後はドライバソフトウェアに搭載されているもの。 これはオーディオインターフェイスの機能として記載されているのが普通だが、残念ながらLinuxで動いたとしてもその機能は使えないのが普通だ。

オーディオインターフェイスのインターフェイスとALSA

ここまでの説明だと、「USBクラスドライバで動作し、主要な機能を操作できるツマミとボタンがあれば良い」と受け取るかもしれないが、まだ甘い。

USBオーディオはUSB Mass Storage Classほど単純なものではなく、製品ごとの特徴がある。

実例で見てみよう。

私の手持ちであるものでいうと、M-Audio M-Track Duoは2in-2outのインターフェイスである。 このインターフェイスは、当初「2in or 2out」のデバイスとしてしか扱えなかった。 つまり、マイクとスピーカー(もしくはヘッドフォン)は同時に使えなかったのである。

現在はステレオデュプレックスとして認識させることができるが、これは「ステレオ入力とステレオ出力」として認識されていることを意味する。

だが困ったことにこれは必ずしも正しくない。 確かに入出力ともに2chのデバイスではあるが、入力に関しては「モノラル2系統」として扱いたい場合のほうが多いのだ。 なので、1sink (stereo), 2source (mono)の設定も欲しいのだが、それはない。

ではなぜこうしたことが起きるか。 それは、「ALSA次第」だからだ。

USBクラスドライバで動作したとしても、ちゃんとその機器を正しく認識し、動作させられるかはALSAがどういう設定を持っているかによる。

ちなみに、稀に複数のsinkやsourceを持っている扱いになるデバイスもあるのだが、ほとんどの場合チャンネルにまとめられるようになっている。 だから、V-Drums TD-50Xの場合は「32chのsinkを1つ、32chのsourceを1つ」持っているオーディオデバイスに見える。

複数のsinkを持っているように見えるデバイスとしては、Native Instruments Audio4DJがある。

簡単な結論

  • USBクラスドライバで動かないやつは希望はほとんどない
  • ALSAのサイトでデバイスを調べろ、載ってるやつは「ちゃんと」動く
  • Google検索で"linux"を付けて分かる場合もある
  • せめて必要な機能に物理的なツマミやボタンがついているものを選べ
  • 最終的には動かしてみないと分からない
  • 時が解決することもある

LinuxerならFocusrite

ここまで言ってなんだが、Linuxをメインで使っていて、USBオーディオインターフェイスを使いたいのであれば、Focusrite Scarlett、もしくはClarettを選ぶのが最も無難である。

Focusriteは、その他のほとんどの会社同様に、Linuxをサポートしていない。 Focusriteのスタンスは「うちの製品はUSBクラスコンプライアントだから動くかもしれないけど、知らん」である。

が、実際Focusrite製品はLinux上でちゃんと動く上に、alsa-scarlett-guiというプロジェクトがあって、さらにscarlett2というファームウェアマネジメントツールもあって、他とくらべてめちゃくちゃちゃんと動く。

特にScarlettに関しては専用設定があるため、より良好に動作する。

手持ちのデバイス

参考として、私の手元にあるオーディオデバイスのLinux上での動作を記載する。

先に結論を言ってしまうならば、USB Audio Classに対応していないデバイスは本当にダメだし、専用設定がちゃんとあるものとはちゃんと差がある。

ここに記載はしていないが、USBヘッドセットのようなものを含め、だいたいのUSBオーディオデバイスは入出力という意味ではちゃんと動く。

TASCAM US-366

一切動かない。

NativeInstuments Audio4DJ

2つのステレオデュプレックスを持つインターフェイスに見える。 実際は2系統それぞれが入力/出力が排他という設計だが、それは関係なくデュプレックスであるように見せてくる。

デフォルトのビット深度が24bitになる。

入力のPHONO切り替え機能があるが、Linuxからはアクセスできない。 また、インプットゲインが4段階で調整できるが、こちらもアクセスできない。

物理ツマミのあるヘッドフォンゲインは調整可能。

M-Audio M-Track Duo

搭載されているすべての機能が、ハードウェア上のインターフェイスから操作可能。 これらの操作は機械的スイッチが採用されており、通電する必要もない。

BurrBrown from Texas Instruments USB AUDIO CODEC として認識される。 名称はPCM2900C Audio CODEC

これは、オーディオチップのレベルで認識されているのであり、M-Trackの製品仕様と齟齬が発生している。 が、実際はそれどころじゃなく齟齬が発生している。

まずプロファイルは、「アナログ入出力」「デジタル入出力」「デジタルサラウンド出力」の組み合わせが存在する。 アナログ出力しかないデバイスにデジタル出力があるかのように認識されることはよくあることではある。

が、このデバイスは16bit, 44100/48000Hzしかサポートしていないのだが、16/20/24bitと最大192kHzをサポートしていると認識される。 これは、USBのgenericドライバの仕様。

初期はデュプレックスのプロファイルがなく、入力/出力が排他だった。

Focusrite Scarlett 2i2 3gen

搭載されているすべての機能が、ハードウェア上のインターフェイスから操作可能。 これらの操作はPCから認識されている必要がある。

プロファイルがDefault, Direct Scarlett2i2 USBの2種類で、Defaultでは1 sink (stereo), 2 source (mono)になる。 Direct Scarlett2i2 USBの場合は、1 sink (stereo), 1 source (stereo)である。

デフォルトのビット深度がsink/sourceともに32bitになる。

alsa-scarlett-guiを使ってソフトウェアからコントロールできるが、すべての機能はハードウェア上のインターフェイスでコントロールできるため、ソフトウェアに必要性がない。

UniversalAudio Volt1

搭載されているすべての機能が、ハードウェア上のインターフェイスから操作可能。 この操作はPCから認識されていなくとも通電していれば可能である。

M-Track同様、アナログステレオ/デジタルステレオ/デジタルサラウンドの組み合わせのプロファイルが存在する。

Volt1は入力が1chだが、sourceはステレオになっている。実際に入力を行うと、両方のチャンネルに同じ音が入る。 ちょっと違和感があるが、PC標準の3極2端子や4極端子もそういう感じなのでPC的には普通なのかもしれない。

PC側からはGenericなUSBオーディオとしてしか認識されないが、ハードウェア側で操作できるため特に困らない。

ただ、Volt1で再生中に他のデバイスから音が鳴る状態が発生すると音が途切れるという問題があり、複数のデバイスを併用しているとちょっと気になる。 これは、実際に音が鳴ったかどうかは関係がなく、当該デバイスの音をミュートにしていても、あるいは再生するサウンドをミュートにしていても発生する。 恐らく、オーディオデバイスがidleからwakeupされるタイミングで発生するものと思われる。

デフォルトのビット深度がsourceについて32bitになる。

Roland TD-27

28chのsinkと4chのsourceを持つデバイスとして認識される。

Roland TD-50X

32chのsinkと32chのsourceを持つデバイスとして認識される。