2012/05/07

Ubuntu 12.04 LTS 64bit版で、JACKとflashplayerを動かしてみた

カーネルをPREEMPTに変更したタイミングで音楽の再生にjackdを使ってみました。

立ち上げ時の初期設定が少々面倒ですが、一日のほとんどの時間でUbuntu 12.04 LTSを使う現状では、 入力ソースをコントロールできるJACK Mixer等は本当に便利です。

便利なのですが、JACKを使う事で、それまで特に設定していなかったfirefoxやgoogle-chrome上の flashplayerからの音が出なくなってしまいました。

それだけなら我慢できたのですが、音声出力がブロックされるためか動画の再生もうまくできなくなり、 flashplayerに引きずられる形でブラウザ全体が不安定になってしまいました。

JACKを動かしながらflashplayerからの出力もできるようにするために、 ALSA/PulseAudioからjackdに接続するための方法を探ったところ、Ubuntu Japanese Team Wikiに JACKとPulseAudioを併用するための方法がまとまっているのを見つけました。

Japanese Teamの文書に従えば問題ないですが、つまづいたところだけ補完しておきます。

基本的な考え方

Linux上で音声を扱うAPIはいくつかありますが、普段は特に意識することなく使っていると思います。

普段意識せずに使っているもの(ALSA/PulseAudio)をJACKというもので置き換えるわけで、 普通にしていれば使えたものが突然使えなくなる原因を生むわけです。

世の中にはJACKよりも、デフォルトでサポートされる事の多いALSA/PulseAudioに対応しているアプリケーションが当然多いので、そういうアプリケーションの音声出力をJACKに流す方法を取る事にします。

うまく行かなかった方法

まず、ALSAからJACKに音声出力を流す方法はうまく行きませんでした。 これはPulseAudioを使う事にして解決しました。

次にlibflashsupport-jackをコンパイルする方法も見つかりましたが、少し古いソースコードだった点と、 64bit環境でflashplayer用に共有ライブラリを作るのは良いアイデアに思えなかったので試しませんでした。

Linuxで音を扱う方法は複雑

そもそもLinuxで音声出力を行なうにはカーネルレベルではOSS/ALSAが存在していて、各種デバイス(スピーカー)を制御しています。

そこに各アプリケーションから直接音を出してもいいけれど、抽象化したり高度なミキサー機能など、いろいろな付加機能を付け加えるためにPulseAudioやJACKなどが存在します。

今回問題になったのは単純にJACKを動かしている環境では、ALSAをサポートするアプリケーションはそのままでは動かないという点です。

ALSAからJACKに出力するために、~/.asoundrcを作成する方法もあるはずなのですが、今回はこれがうまく動かなかったので、PulseAudioを使う事にしました。

設定手順どおりに行かなかったところ

ほとんどの環境ではUbuntu Japanese Team Wikiにある JACKとPulseAudioを併用するための方法で対応できると思います。

ただ昔からアップグレードしてきたシステムなので、~/.asoundrcが悪さをして音が出力されませんでした。

ファイルを削除する $ rm ~/.asoundrc だけでうまく行きました。 ただpavucontroを起動するだけではうまく行かずに、手順にある画像のようにJack sinkを明示的に選択する必要がありました。

JACKを扱う場合にはQJackCtlでのConnections設定が不可欠で、起動しただけでは音が出ないのは普通のことだと思って、頑張って下さい。Patchbayを使って設定を保存できるようになると手間がだんだん省けて、手に馴染んでいくでしょう。

Patchbayで、OutputとInputを接続してもsystemにもパッチされてしまう場合には、output側の設定でExclusiveにチェックを入れておくとsystemには接続されないようになります。

まとめ

最終的に環境が動きだすと、firefoxやgoogle-chrome, chromiumなどのブラウザでflashplayerを使う場合に、各flashplayer毎にpavucontroに項目が増えます。

これをミキサーにして扱う事で、JACKプラグインを設定しなくても音が出るようになり、アプリケーションが安定的に稼働するようになりました。

大抵はJACKプラグインがある場合には、直接JACKに接続した方が良いと思っています。 しかしUbuntu 12.04 LTSのVLCの出力にはJACKプラグインもありますが、音が断続的に出力されるようになります。 VLCではALSA出力に切り替えてPulseAudio経由で出力するようにしたところ問題なく聞こえるようになりました。

VLCのJACKプラグインがうまく動かない理由は不明ですが、そういう例もあるという事でJACKとPulseAudioが動く事で選択肢が広くなって便利になったと思います。

0 件のコメント: