みなさま、はじめまして。坂本と申します。普段はUbuntu日本コミュニティのフォーラムで、サウンド関係のサポート活動をしています。今回から、本連載の執筆に参加させていただくことになりました。Linuxデスクトップ環境は使い始めて1年半くらいの若輩者ですが、よろしくお願いします。
今回は、PulseAudioに関するRecipeをご紹介します。PulseAudioに関しては、本連載の第106回 でリモートスピーカを使う方法を説明しましたが、この他にも便利な使い方があります。
なお、筆者はUbuntuのマルチメディア編集環境であるUbuntu Studioを常用しています。そのため、スクリーンショットが通常のUbuntuとデザインが異なる点、ご了承ください。
録音ソフトウェアをPulseAudioで、より便利に使う
例えば「ネットラジオを録音したい」「 Ustreamによるビデオストリーミングから音声だけを録音したい」など、音声の出るウェブサービスを利用していると、私的複製をしたいときがあります。それとは別に、手持ちのラジオやレコードプレーヤーの音声をPCのサウンドデバイスに出力し、PCをデジタルサウンドレコーダーにして、デジタルのデータとして残したいときもあります。
そんなときにPulseAudioが役に立ちます。ここでは、サウンドデバイスとPulseAudio、録音ソフトウェアを使った、デジタル録音の仕方について説明します。
今回は録音のためのソフトウェアとして、Ubuntu標準装備のサウンドレコーダー(以下、gnome-sound-recorder)と、筆者が好んで使っている波形編集ソフトAudacity[1] を使います。そして、GUIアプリケーションであるPulseAudio Volume Control(以下、pavucontrol)を使って、PulseAudioの入出力を制御していきます[2] 。
pavucontrolはUbuntuでは標準状態でインストールされていないため、パッケージ名「pavucontrol」をSynapticなどでインストールします。同じように、Audacityもパッケージ名「audacity」でインストールできます。
起動方法は、Ubuntuのアプリケーション→サウンドとたどり、「 PulseAudio Volume Control」「 サウンド・レコーダー」「 Audacity」をそれぞれクリックします。
[1] Audacity はフリーのサウンド編集ソフトウェア。ライセンスはGPLバージョン2以降。さらにGNU/Linuxのみならず、Microsoft WindowsやMac OS X、UNIX向けにもリリースされており、ユーザも相当数いる。日本語にも翻訳されているためサポート情報が得られやすく、初心者にはおすすめ。
PulseAudioを通したFlash音声の再生と、その仕組み
PulseAudioを利用して録音する前に、Flash音声の再生方法とその仕組みを確認しておきましょう。
インターネット上の動画共有サイトや動画配信サービスのほとんどは、Adobe Flashが利用されています。ユーザーの手元では、ウェブブラウザにプラグインとして組み込まれたAdobe Flash Playerが、サーバからFlashファイルをロードし、最終的に「音」や「映像」として出力します。
詳しく見てみると、まず、Adobe Flash PlayerはALSAサブシステムに音声ストリームを出力します[3] 。UbuntuではALSAのPCMデバイスとしてPulseAudioが登録されているため[4] 、結果としてALSAに送られた音声ストリームはPulseAudioに流れ込みます。そして、PulseAudioから実際のサウンドデバイスのドライバにPCMが流れ、サウンドデバイスのデジタル/アナログコンバーター(DAC)を経由して、最終的にはスピーカーやヘッドフォン上に音声が出力されます。
PulseAudioに流れている音声ストリームは、pavucontrolでコントロールすることができます。pavucontrolを表示してPlaybackタブを見ると、現在再生されている音声を見ることができます。音声はほとんどの場合マザーボードに搭載されているサウンドデバイスに出力されていると思いますので、「 ALSA Playback on Internal Audio Analog Stereo」が表示されているはずです。
図1 PulseAudio Volume ControlでのALSA Plug-in
マザーボードに搭載されているサウンドデバイスではないものを使っていたり、サウンドデバイスのプロファイルでデジタル出力や7.1チャンネルサラウンドを選択しいる場合は、「 ALSA Playback on Internal Audio Analog Stereo」ではないものが表示されます。このような環境であれば、これ以降の「Internal Audio Analog Stereo」を適宜読み替えてください。
また、複数のサウンドデバイスを使える環境であれば、PulseAudioで音声の出力先デバイスを自由に変更することができます。たとえば、AMD (ATi) のHDMI音声出力内蔵のGPUを利用している場合、「 R*** Digital Stereo (HDMI)」などといったデバイスが選択肢に表示されます。筆者はCreativeのEMU 0404 USBというUSB外付けオーディオインターフェースを使っていますが、「 E-Mu 0404 Analog Stereo」が選択肢に表示されます。アプリケーションの音声出力先をこれらに指定すると、そちらから音声を出力するようになります。
[3] 正確には、Adobe Flash Playerからの音声出力は、Netscape 4 Plugin APIのラッパーであるnpviewer.bin(パッケージ「nspluginwrapper」に含まれている)を経由してALSAに出力される。そのため、pavucontrolではnpviewer.binとして見えている。
サウンド・レコーダー(gnome-sound-recorder)での録音
音声が再生できるのを確認したところで、録音してみましょう。pavucontrolのRecordingタブを選択してください。「 Show」ドロップダウンメニューではApplicationsを選択します。最初の時点では何も表示されていないかと思います。
この状態でメニューから、アプリケーション→アクセサリ→サウンドレコーダとたどってgnome-sound-recorderを起動します。そして、赤丸の「録音」ボタンを押すと録音を開始します。このとき、pavucontrolのRecordingタブを確認すると、gnome-sound-recorderがpavucontrolのRecordingに表示されます(図2 ) 。gnome-sound-recorderが入力デバイスを「つかんでいる」状態です。この表示は再生の場合でも同様で、Playbackタブに「つかんでいる」アプリケーションが表示されます。
図2 PulseAudio Volume ControlでのRecordingタブ
実際に録音するには、「 Record Stream from」のドロップダウンメニューで「Monitor of Internal Analog Stereo」を指定しましょう。gnome-sound-recorderのレベルが上下するのが見えたら、録音は成功です(図3 ) 。
図3 録音中のgnome-sound-recorder
Audacityでの録音
次にAudacityも試してみます。Audacityを起動したらメニューの「編集」 →「 設定」で、「 Audacityの設定」ウインドウを開きます(図4 ) 。ウインドウ左の項目「デバイス」において、再生デバイスを「pulse」 、録音デバイスを「pulse」とします。次に項目「録音」で「音による録音起動」にチェックを入れます。こうすることで、音声が流れ込んできたタイミングで録音がアクティブになります。
図4 Audacityの設定ウィンドウ
OKで設定を適用したら、ウインドウ上部の録音ボタンを押し、録音のスタンバイに入ります。そしてpavucontrolに戻ると、RecorderタブにAudacityが表示されます。先ほどと同じように、「 Monitor of Internal Analog Stereo」を選択してください。音声が流れたらAudacityが録音を開始します。
図5 Monitor of Internal Analog Stereoを選択
図6 録音中のAudacity
PulseAudioは、一種の「デジタルパッチベイを兼ねたミキサ」として機能するため、「 接続するケーブルをつなぎかえる」「 あるサウンド入力を別の場所に流す」といったことができます。例えば、これまで録音ソフトウェアに流す音声として、「 Monitor of Internal Analog Stereo」を選択してきましたが、これは「今このサウンドデバイスで再生されている音」 、つまりFlashや音楽プレイヤーなどの音声、OSからの各種サウンドなど、サウンドカードに流れ込んでいる音声すべてをモニタリングしていたわけです。
ここで、Recordingタブでアプリケーションに流す音声を、デフォルトの「Internal Analog Stereo」にしてみましょう。すると、「 サウンドデバイスに外部から入力された音」が流れます。具体的には、例えばマイク入力になるため、ラジオやレコードプレーヤーの出力ラインをつなぐと、一般的なデジタルレコーダーとして振る舞います。
図7 Internal Analog Stereoを選択
指定したサウンドカードによっては、ライン入力やマイク入力を複数持つものもあります。この場合は、pavucontrolではなくサウンドの設定(gnome-volume-control)の入力タブを表示し、適切な入力を選択して下さい。サウンドの設定はUbuntuのシステム→サウンドで起動しまするほか、画面のパネル右のスピーカーアイコンをクリックして起動します。
図8 入力を指定
Audacityを使って、ライン入力を視聴しながら録音する
Audacityでライン入力を視聴しながら録音したい場合は、Audacityの設定ウインドウの項目「録音」において、「 ソフトウェアによるスルー再生」を有効にしてください。録音を開始すると、pavucontrolのPlaybackタブにAudacityが表示されますので、出力したいサウンドデバイスを指定します。今回は「Internal Analog Stereo」に出力してあげます。
図9 Audacityの設定画面
図10 Audacityからの出力
本格的なレコーディングには、JACK環境がおすすめ
デジタルレコーダーとして使う場合は、Adobe Flash Playerの録音とはまた違ったところ(サウンドデバイスでアナログ/デジタル変換をする際のサンプリング周波数や量子化ビット数、クリッピングなど)に注意する必要があります。
これらやリアルタイムエフェクトおよびDTMに興味のある方は、Jack Audio Connection Kitを中心としたJACK環境を利用してみることをおすすめします。マルチメディア編集環境に特化しているUbuntu Studioは、標準状態でJACKとその関連パッケージが使えるため、そのような用途にぴったりです。
Open Sound SystemソフトウェアをPulseAudioで使う
PulseAudioはOpen Sound Systemにも対応しています。そこで次に、Open Sound SystemソフトウェアをPulseAudioで使う方法を説明します。
ただしLucid環境では、ALSAが標準のサウンドドライバとなっているため、Open Sound Systemをバックエンドに使うソフトウェアは通常使えません。Open Sound Systemをサウンドドライバにするには、ALSAの削除、パッケージ「oss4-dkms」の導入、PulseAudioのOpen Sound System用モジュールを有効にする設定など、面倒な操作が必要です[5] 。
そのため、アプリケーションのバックエンドにALSAやPulseAudioを設定することができるのなら、Open Sound Systemではなくそちらを選択するのが無難です。しかし、GTKメトロノーム「gtick」などはバックエンドを選択できません(gtickでは、デバイスファイルである「/dev/dsp」しか指定できません) 。このような場合は、ALSAもしくはPulseAudioのOpen Sound Systemエミュレーションモジュールを利用します(図11 ) 。
図11 上はALSAによるOpen Sound Systemエミュレーション、下はPulseAudioによるOpen Sound Systemエミュレーション
ALSAのOpen Sound Systemエミュレーションモジュールを使う場合は、Synapticなどでパッケージ「alsa-oss」をインストールします。実行の方法は、起動したいプログラムの前に「aoss」をおきます。例えばgtickの場合は、以下のようになります。
$ aoss gtick
PulseAudioにもOpen Sound Systemエミュレーションモジュールがあり、こちらは標準でインストールされています。パッケージ名「pulseaudio-utils」に含まれている「padsp」です。使い方はalsa-ossと同じく、以下のようになります。
$ padsp gtick
好みのエミュレーション方法のコマンドを、ランチャーに登録しておくと便利です。
Linuxにおけるサウンド関係は、ALSAやOpen Sound System、FFADO、PulseAudio、JACK、GStreamer、Xine、Phonon、SDL、PortAudio、一昔前のEsounDやaRtsなど、いろんな技術が入り混じっていてわかりにくい印象があります。しかし、Ubuntuは標準状態においてPulseAudioとALSAを中心とした構成となっているため、この2つの設定とその変更方法を把握できれば、様々なトラブルに対応できると思います。