Ubuntu Weekly Recipe

第177回 サウンドシステムの使いこなし

この記事を読むのに必要な時間:およそ 4 分

本連載ではこれまで十数回にわたり,Ubuntuでサウンドを扱う話題を紹介してきました。Ubuntuのサウンド環境はALSA,PulseAudioそしてJACKなどといった複数のソフトウェアで構成されているため,そろそろ混乱してくるころです。というわけで今回は,UbuntuもといLinuxの現在のサウンドシステムに関して,MIDIも考慮しながら整理してみたいと思います。

ALSAの役割

ALSAとはAdvanced Linux Sound Architectureの略称で,Linuxにおける高機能なサウンドシステムを提供するためのソフトウェア群です。⁠Advanced」ということは「Advancedでない」ものがあるわけで,それが本連載の第144回でお伝えしたOpen Sound Systemです。Open Sound Systemには同時に音声を出力出来るソフトウェアの最大数が4つ,多チャンネルのサラウンド音声を扱うことができずステレオ音声だけ,といった弱点があり,ALSAはその弱点を克服するために生まれました。

ALSAは2つの大きな部品から構成されています。ひとつは「ALSAカーネルモジュール」で,その名の通りカーネルモジュールの形で提供される「サウンドデバイスのためのドライバー」です。もうひとつが「ALSAライブラリー」で,ソフトウェアがサウンドデバイスを扱うための手続きをAPI(Application Program Interface)の形で提供します注1)⁠ALSAカーネルモジュールはLinuxカーネルのイメージに組み込まれており,ALSAライブラリーはパッケージ「libasound2」で提供されています。

現在,ALSAのサポートするサウンドデバイスはかなりの数に及び日々新しいコードが付加されています。

注1
「ALSA」として配布されているソフトウェア群には,これら2つのモジュールに加えて,ボリュームコントローラなどのさまざまなユーティリティ・ソフトウェア,サウンドデバイス個別のファームウェアファイル,機能拡張のためのプラグイン,Open Sound System互換レイヤーやALSAライブラリーのPythonバインディングなども含まれます。

サウンドサーバーの役割

Ubuntuにログインすると自動起動するPulseAudioや,Qjackctlを使って手動で起動するJACK(Jack Audio Connection Kit)は,⁠サウンドサーバー」と呼ばれています。

サウンドサーバーはあまり聞きなれない言葉ですが,以下のような役割を提供する常駐ソフトウェアです。機能面では,Windows環境で「ソフトウェアサウンドデバイス」⁠フィルタドライバー」などと呼ばれるものによく似ています。

  1. サウンドをミックス
  2. さまざまな種類のデバイスへ接続

それぞれ細かく見ていきましょう。

サウンドをミックス

ソフトウェアは再生の際,ALSAライブラリーを利用してALSAカーネルモジュール経由でサウンドデバイスに接続し,オーディオデータを流し込みます。この際,このサウンドデバイスは使用中となってしまうため,他のソフトウェアを再生してオーディオデータをこのデバイスに流そうとしても,エラーが発生してしまいます。

図1 デバイスがビジー状態=使用中であるとしてエラーを報告

図1 デバイスがビジー状態=使用中であるとしてエラーを報告

ここに,サウンドをミックスして出力する必要が生じます。サウンドサーバーは複数のソフトウェアから同時にオーディオデータが流れこんだ場合,音声を「ミックス」してひとつのオーディオデータとしてサウンドデバイスに送ることができます。

図2 PulseAudio Volume Controlはソフトウェアの音声入出力をデバイスの入出力に振り分ける。この際,同一のデバイスへの出力はミックスされる

図2 PulseAudio Volume Controlはソフトウェアの音声入出力をデバイスの入出力に振り分ける。この際,同一のデバイスへの出力はミックスされる

実はこのミックスはALSAでもdmixプラグインで行うことができます。本連載の第159回では,PulseAudioを標準でインストールしないXubuntuが,どのようにサウンドのミックスを可能としているかを紹介しました。

サウンドデバイスのマイク入力から取得した音データに関しても同等のことが起こるため,複数の録音ソフトウェアに音データを「増やして」から届けるといった機能も,サウンドサーバーは備えています。こちらも,ALSAにおいてはdsnoopプラグインで実現することが可能です。

サウンドサーバーでミックスされたオーディオデータは,さらに出力対象デバイスに合わせてリサンプリングやフォーマット変更が行われ,デバイスに渡されます。

さまざまな種類のデバイスへ接続

本連載の第159回第160回第161回第172回で,さまざまな接続形態のサウンドデバイスを利用する方法を紹介しました。その際利用するドライバーはALSAのみならず,Open Sound SystemやFFADO/Firewire,BlueZと多岐に渡りました。

さらに本連載の第106回ではネットワーク越しに他のコンピューターのPulseAudioを利用する方法を紹介しました。この場合はネットワークをデバイスとして利用していると表現できるでしょう。

このようなデバイスの中から入力先/出力元を選択してソフトウェアとの接続を振り分けるというのも,サウンドサーバーの役割となります。

なお,PulseAudioは同時に複数のサウンドデバイスと接続して使っていくことが可能ですが,JACKはひとつのサウンドデバイスに集中的に接続します。これは設計思想の違いが影響していて,PulseAudioはプラグインによって自由に拡張してさまざまな機能を持たせることができるよう作られているのに対し,JACKは高品質なサウンドシステムを構築するためひとつのサウンドデバイスに対する高い使い勝手を志向して作られていることによります。

ひと通り整理したところで,ここまでを図にまとめてみました。

図3 Linuxのサウンドシステムの概念図

図3 Linuxのサウンドシステムの概念図

著者プロフィール

坂本貴史(さかもとたかし)

Ubuntuのマルチメディア編集環境であるUbuntu Studioのユーザ。主にUbuntu日本コミュニティとUbuntu Studioコミュニティで活動。いつかユーザ同士で合作するのが夢。

コメント

コメントの記入