ラベル PulseAudio の投稿を表示しています。 すべての投稿を表示
ラベル PulseAudio の投稿を表示しています。 すべての投稿を表示

2015年2月14日土曜日

[Linux][Fedora] PulseAudioでHDMIの5.1/7.1chを鳴らしたい!

概要

かなり前にも一度チャレンジして、鳴らすこと自体はできたんだけど弊害も大きそうだったんで放置してたPulseAudioでのHDMIマルチチャネル再生設定。
今回久しぶりにまたやってみようってことでいろいろとググったらうまく行ったので備忘録として記録しとこうかなと。

ぶっちゃけ海外の質問サイトに書いてあったことをそのまんま実行しただけなんだけどね!

前置き

実のところ、PulseAudioのデフォルト設定ではアナログデバイスについてはサラウンド設定をきちんとプロファイルとして拾ってくれるんですが、HDMIについてはなぜかプロファイルを拾ってこない。例えつないでいるアンプがマルチチャンネルに対応していようとも「そんなの関係ねぇ!」である。

ただ、それはPulseAudio(というかudev?)に自動検出させた場合。デバイスの自動検出を無効化して、搭載しているデバイスごとにチャンネル数とチャンネルマップを指定すればマルチチャンネル再生するHDMIデバイスを認識できる。
だがこの場合、2つの弊害がある。
  • プロファイルではないので「ステレオ」「5.1ch」「7.1ch」などを切り替えられない
  • 自動検出を殺しているので複数のサウンドデバイスを使っている場合は各々の設定を自分で行う必要がある
1つめの弊害については実用上それほど問題にならないと思うが、2つめは割と面倒。
USBオーディオI/Fなんかを使っている場合は割とデバイス番号が変わったりするのでその都度修正が必要に鳴る可能性があるのと、新しいサウンドデバイスを追加しても当然それも手動設定。このご時世それはあまりに嬉しくない。。。

自動認識させよう!

ってことで、デバイスは自動認識させつつ、HDMIのマルチチャネルをプロファイルとして認識させる方法を調査。
そしたらaudio - How do I configure PulseAudio for 7.1 Surround Sound over HDMI? - Unix & Linux Stack Exchangeなるページを見つけました。
ドンピシャです。この通りに実行してもらったら大丈夫だよ!って話なんですが、せっかくなので手順を書いておこうと思います。
ぶっちゃけ、そのまんまなぞってるので、英語でも平気だぜ!って人は以下は読まなくて平気です。

まずは下準備

上記Q&Aによると、どうも /usr/share/pulseaudio/alsa-mixier/profile-sets/extra-hdmi.conf にHDMIのサラウンド設定について記載があるようなんですね。
読んでみると確かにHDMIのサラウンドに関する記載が・・・。
[Mapping hdmi-stereo]
device-strings = hdmi:%f
description = Digital Stereo (HDMI)
paths-output = hdmi-output-0
channel-map = left,right
priority = 4
direction = output

[Mapping hdmi-surround]
description = Digital Surround 5.1 (HDMI)
device-strings = hdmi:%f
paths-output = hdmi-output-0
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
priority = 3
direction = output
上記は一部抜粋です。しっかりHDMIのマルチチャネル設定があることがわかります・・・。
だったらPulseAudioでも頑張ってくれよ・・・!

で、こちらのAnswerでも
このドキュメントによると、udev-basedによる自動認識を無効化して、全部を手動で設定しなくちゃいけないらしい
って書いてあります(超意訳)。
でも設定ファイルはあるようなので、そいじゃってことでudevの検出ルールを作っちゃおうぜ!ってのが今回の趣旨っぽい!

udevルールを作ろう!

残念ながらここの設定をすべて理解できているわけではないのですが、どうもPulseAudioのProfileとして先のドキュメントのようにサラウンド設定を追加しよう、ということみたいです。
具体的には下記のファイルを /etc/udev/rules.d/95-local-pulseaudio.rules に作成します。
ATTRS{vendor}=="0x1002", ATTRS{device}=="0x1714", ENV{PULSE_PROFILE_SET}="/etc/pulse/my-hdmi.conf"
なお、「ATTRS{vender}」と「ATTRS{devices}」の数値は各自の環境に合わせて変更ください。
自身のデバイスID等のチェックは lspci -nn コマンドにて確認できます。
$ lspci -nn | grep -i hdmi
00:01.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series] [1002:1714]
こちらに書いてある末尾の2組をそれぞれ転記すればOKっぽい!

で、次に
udevadm trigger -ssound
なるコマンドをroot権限で実行すれば先のudevルールが登録されるようです。きちんと登録されたかどうかについては
udevadm info --query=all --path /sys/class/sound/card0
なるコマンドを実行すれば確認できます。なお、card0 のカード番号についても各自の環境に合わせて確認ください。実行してみてHDMI端子の情報じゃなければ1なり2なりに変えてみて確認していけばそのうち当たります。きっちりと確認するなら aplay -L コマンドなどで確認ください。。。

上記コマンドを実行した際、
E: PULSE_PROFILE_SET=/etc/pulse/my-hdmi.conf
なる文字列が見つかればOKです。

これを確認できたらinitramfsを再生成して再起動後も適用されるようにします。
元のQ&AではUbuntuかDebianかなんかなので update-initramfs -u なるコマンドでinitramfsを再生成していますが、Fedoraの場合はdracutなのでさくっと生成します。
# cp /boot/initramfs-`uname -r`.img /boot/initramfs-`uname-r`.img.org
# dracut /boot/initramfs-`uname -r`.img `uname -r`
これでinitramfsが再生成されました。

HDMIサウンドデバイスのプロファイルを作るよ!

下記内容のファイルを /etc/pulse/my-hdmi.conf として生成します。
[General]
auto-profiles = yes

[Mapping hdmi-stereo]
device-strings = hdmi:%f
channel-map = front-left,front-right
description = Digital Stereo (HDMI)
priority = 4
direction = output
paths-output = hdmi-output-0

[Mapping hdmi-surround-40]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right
description = Digital Quadrophonic (HDMI)
priority = 1
direction = output
paths-output = hdmi-output-0

[Mapping hdmi-surround-51]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
description = Digital Surround 5.1 (HDMI)
priority = 2
direction = output
paths-output = hdmi-output-0

[Mapping hdmi-surround-71]
description = Digital Surround 7.1 (HDMI)
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
priority = 3
direction = output
paths-output = hdmi-output-0
なお、人によってはチャンネルマップがコレとは異なる場合が有ります。その場合は以下のサウンドチェックでチャンネルを確認して、入れ替わっているところを修正してください。
$ pulseaudio -k
$ speaker-test -c 8 -f 800


おまけの設定!

これでひとまずマルチチャネルのプロファイルが登録されましたが、さらにサンプリングレートやビット深度についても設定しておきます。
デフォルトでは44.1kHz/16bitですが、まぁもっとハイスペックな設定で十分鳴らせるだけのスペックを持っていると思いますので。
まずは /etc/pulse/daemon.conf を $HOME/.pulse/ にコピーします。ユーザごとに設定しておくほうがトラブルが少なくていいでしょう。
$ cp /etc/pulse/daemon.conf $HOME/.pulse/
続いてコピーしてきたファイルを適当なテキストファイルで開き、下記の行をそれぞれ編集します。 なお、このファイルでは「;」以降がコメントとして扱われます。
default-sample-format
こちらはビット深度の設定です。デフォルトはs16leで、これが16bit整数です。HDMIであればs32leで32bit設定にしておくといいでしょう。
default-sample-rate
こちらはサンプリングレートの設定です。アンプ等が対応している最大のレートを指定しておけばいいでしょう。192000で192kHzです。
PulseAudioを経由する音声はここで設定されたサンプリングレートにリサンプリングされます。
resample-method
こちらはリサンプリング時のアルゴリズム指定です。品質を高くするほどCPU負荷が高くなります。とりあえず最高品質で設定して、途切れたり負荷が高くなりすぎるようであれば元に戻せばいいと思います。
最高品質は src-sinc-best-quality です。

これらの設定を変更したあとは必ず pulseaudio -k で一度PulseAudioを殺して再起動してください。そうしないと設定が読み込まれません。

まとめ

以上、PulseAudioでHDMIのマルチチャネル再生の設定でした。
ぶっちゃけ音周りはLinuxはほんと面倒ですねぇ・・・。 ドライバ的には対応しているけれど設定方法が全然こなれていないというか・・・。
今回の設定も標準で成されていて欲しいもんだがなぁ。できそうなもんだけど。

ディストリによってはきちんと設定されているかもしれません。Arch LinuxのWikiにはHDMIの5.1/7.1ch再生ができないってことに言及が有ります。
ただ、今回のような細かい設定は書かれておらず、基本的には自動認識されるはずという扱いなのかな・・・?

で、とりあえず鳴らせるようにはしたものの、ぶっちゃけ活かしどころはない・・・w
マルチチャネルのFLACとかを配信サイトから購入するような状況が日常的になれば意味が生まれてくるんだけど、今のところそういう音源持ってないしなぁ・・・。
DVDとかBDはPS3で見るし。ハイレゾ音源はちょくちょく購入するようになったんだけどまだまだマルチチャネル音源は出回ってないからなぁ。

ま、そこいらは今後の潮流を眺めながらってことで。PC側の設定方法は分かったんだし、まーどうにでもなるでしょう。

ってことで、よいLinuxライフを!

2011年9月2日金曜日

[PC]サウンドカードを増設してみた

このところ、ちょっと負荷がかかっただけであっけなくサウンドが飛んでしまうだとか。
Yakuakeを開くとサウンドにノイズが混じるだとか。
以前、Creative AudigyLSを使ってたときはもっとサウンドが安定していたものですが、ケースが小さく、グラボを挿したらPCIが挿せなくなってしまったので、仕方なくオンボードを使っていたのですが、ちょっとノイジーなのが我慢できなくなってきて。

で、まー安いサウンドカードでも買いますか、って買ったのが玄人志向の「CMI8768-8CHPCIE」なるサウンドカード。PCI-eなのでグラボと干渉することもなく、光端子がついて3800円とお安かったので買ってみました。

が、こいつがなかなかの曲者で。。。 とりあえずWindowsでまずは動かしますか、ってことでWindowsを起動。ドライバCDを開くと、複数の型番のドライバが。
「CMI8768」と「CMI8768+」があって、どっちだよとか毒づきながら、めんどくせェ両方試せばいいじゃねぇかってまずは無印から。

で、ドライバインストールに10分ほど待ち(その間、Windows更新なんかもガンガン入り)、出てきたメッセージは「サウンドカードの電源を入れてください」。
いや、ちょい待て待て。電源入れてくれって外部スイッチとかないから!

しゃーねぇ、ハズレかってことで+の方をインストール。
これも10分ほど掛かった挙句、やっぱり「電源を入れてください」って言われてインストール失敗。

あぁもううぜぇなしかもWin更新のせいであと15分で再起動しますとかわんわんうるさいしってことで、まずは再起動。滅多にWindows起動しないので、起動したらまずWindowsUpdateが始まってすぐ再起動するってのが恒例になってしまってます。

で、例に漏れず今回も更新が掛かった後の再起動ってことで、シャットダウン時の処理が長い長い。
「Windowsを更新しています。。。」も終わり、「シャットダウンしています。。。」になってから3分経っても電源が落ちやしない。

「お、やっと切れたか」とか思ったらディスプレイがスタンバイに入っただけとかね。
ちっくしょもう強制リセットするしかないか? とか思った矢先、なんとBSOD。いやー、7でブルースクリーン見るのはほんと久しぶりでしたね。

しかし、Windows更新の後だったので非常に嫌な予感しかしない。ということでひとまずセーフモードで再起動。
まぁ予定調和として更新失敗でのロールバック処理。これもそこそこ時間掛かるよねとか毒づきながらロールバックし、無事再起動。

で、相変わらずデバイスドライバは入ったものの音は鳴らないので、玄人志向のHPを確認したら、Windows7用のドライバがひっそりと公開されてた。最初から見とけばよかったな・・・とか思いつつインストール。

これまた見栄えも変わらず、ほんとに大丈夫かなって心配になりながらまた数分待ってたら、今度は初めて「ドライバのインストールが完了しました。再起動してください」って出てきた!
ようやく成功かーとりあえず再起動再起動っと。

ってことで再起動したら、BIOSが起きてこない。あんれまぁ、どうしたもんかな、とりあえずリセットするかってリセットボタンを押したらまさかの強制終了。うんともしんとも言わない。電源ボタン押しても反応しないというクリティカルな状態。

こりゃやべぇ、マザー逝ったか!?とか戦々恐々しながらまずは主電源OFF。30秒ほど放電してから電源ON。今度は無事BIOS起動。。。って思ったら
「Begining update latest backup BIOS version. Writing....」
とか言い出してやんの。まさかのBIOS損傷wwww

いや笑えない、ほんと笑えない。かなり危険な状態だったってことじゃないのかしらこれ?
まぁ書き換えが終わって武事立ち上がったからほっとしたけどさ。

で、Windowsデバイスを確認したら、ちゃんとデバイスはいる。
んが、やっぱり光デジタル端子から音が鳴らない。

ま、この手の場合は往々にして、デジタル出力へのパスが通っていないってのが原因なのでそのあたりの設定を探す。
んが、サウンドデバイスの設定にそれらしきものが見つからない。ないのかなぁ、って思って必死こいてさがしたら、3D音場制御とかをやるソフトの方に設定がありました。
んなもん触ることねぇよ。。。そこいらはアンプに任せるからPCからは素で出してくれよ・・・。

ま、トラぶりながらも音が出たのでよしとする。で、本命のLinuxへ。
このとき、BIOSを書き戻したこともあって、設定が初期化されており、SATAのアクセス方式がAHCIからIDEになってたので起動できないって罠にはまりましたOrz まさかだったねほんとに。

まぁそれはさておき、お次はLinux。こっちはドライバも自動ロードであぁ問題ないわねって思ったらやっぱり鳴らない。。。
大層めんどくさいことにアナログは鳴っている。
"aplay -l"の結果は
$ aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: SB [HDA ATI SB], デバイス 0: ALC889A Analog [ALC889A Analog]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 0: SB [HDA ATI SB], デバイス 1: ALC889A Digital [ALC889A Digital]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 1: CMI8768 [C-Media CMI8768], デバイス 0: CMI8738-MC8 [C-Media PCI DAC/ADC]
サブデバイス: 0/1
サブデバイス #0: subdevice #0
カード 1: CMI8768 [C-Media CMI8768], デバイス 1: CMI8738-MC8 [C-Media PCI 2nd DAC]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 1: CMI8768 [C-Media CMI8768], デバイス 2: CMI8738-MC8 [C-Media PCI IEC958]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 2: HDMI [HDA ATI HDMI], デバイス 3: HDMI 0 [HDMI 0]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
ってことだったので、
aplay /usr/share/sounds/KDE_Startup.wav -D plughw:1,2
ってやったわけですよ。 そしたらなぜかアナログから音が出てると。もちろん、plughw:1,0ってやればアナログから音が出ます。

あぁ、こっちもデジタルへの切り替えスイッチが入ってないなってことで、alsamixierをチェック。
案の定、ここに表からは見えてないスイッチが色々とあって、ここの設定をいじることでplughw:1,2を叩いて光デジタルから音が出るようになりました。
まぁ、KMixとかにこの設定が出てこないのはおそらくPulseAudioがそこまで関知していないからなのでしょう。ここらへん、まだまだalsamixierを叩かないといけないようではLinuxを他人には薦められませんね・・・。

まぁ、PulseAudioは割と気に入っているので使ってますが、世間的には「まずアンインストールしろ」って代物みたいですね。まーALSAだけでも大概事は足りますし、今回見たく結局ALSAを叩かないといけないような場面もちょくちょくあるので、その気持ちも分からなくはないんですけどね。

で、ひとまずALSAから直接デバイス指定すれば鳴ることが分かったので、これでハード的には問題なし。PulseAudio経由でも鳴るようになってるでしょ、と思ったらなんとこれまたまだ鳴らない><

ハード的には問題ないし、ALSAで直接デバイスを指定したら鳴るってことはもうどう考えてもPulseAudioがデバイスを正しく認識できてないってことなので、仕方なく~/.pulse/default.paをいじることに。。。

PulseAudioって実はちょいちょい仕様が変わってきてるので、可能ならばこのファイルを作って個人設定を作っちゃうのは避けたかったんですが、鳴らないのでは困っちまうのでしゃーなく
load-module module-alsa-sink device=plughw:1,2
とデバイスを直接指定。

んが、これでもまだ鳴らない。あぁもうわけわかんねぇな! って思いつつ、そういや以前、1,2って指定の仕方だとエラー吐いた気もするってことで
load-module module-alsa-sink device=plughw:1
に変更してみるとビンゴ! 音が鳴り出しましたとさ。

ただまぁ、正直に言って、サウンドカードを増設するだけでこんだけ駆けずり回らないと音が鳴らないってのはよろしくないですよねぇ。あぁ、アナログはすぐ鳴るんですけどね。あいにくとこちらは光デジタルが欲しくて選んでますからね。。。

内蔵サウンドチップはPulseAudioからデジタル出力がきちんと扱えているのに、なんでまた増設したサウンドカードはデジタル端子がきちんと見えていないのか分からないなぁ。リストにはちゃんと出てきているけれど、そこを叩いても音が鳴らないとか納得できねぇ。。。 default.paファイルに直接デバイス指定とかやりたくないからなぁ。自動認識で設定してほしいわ。

ま、でも内蔵よりは負荷がかかった時の音飛びはましになりました。とはいえ安物なのでスペックは推して図るべしですが。。。 AudigyLSは割といいカードだったんだなぁ。まぁまだ手元にはありますし、今度PCを組むときはM/B単体でデジタル2系統同時出力ができるやつを買いたいところですね。あるいはヒートシンクで隣のスロットを潰してしまわない程度のグラフィックボードか。。。

グラボ性能は正直今で事足りているので、できればM/Bで完結させたいところ。まー次に組むのはいつになるのやらー?

2010年3月6日土曜日

オーディオの不具合と戦った記録

さて、PCを現在の環境に新調してからずっと、オーディオの不具合には悩まされ続けて来ました。
言葉ではうまく表現できないんですが、音楽とか聞いてたら所々で直前の音に戻ってまた再生が続行される、みたいな。
プログラム風に言えば、サイクルバッファが壊れて継目を正しく処理できなかったみたいな。

結論から言うと、完全解決ではないかも知れませんがほぼその現象を抑えることに成功しました。
/etc/pulse/defaultt.paにて
### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect tsched=0
.else
### Alternatively use the static hardware detection module (for systems that
### lack udev support)
load-module module-detect
.endif

と記述しておけばOKでした。tsched=0がミソ。タイマベースから割り込みベースに切り替えただのなんだのって書いてあったんだけど、まだ詳しくは理解しきれてません・・・。ちょっと調べないといけませんね。

以下、つらつらと紆余曲折をだらだらと。

音がうまく鳴ってくれない、ちとそれじゃ気にくわないってんでSoundBlaster AudigyLSのカードを挿して使ってたんですが、できたらオンボードだけで完結しちゃいたいなーってことで再度オンボードの方でチャレンジすることに。

まず、そもそもちゃんとデバイスが認識しているのかって話。これはこのPCに変えたときから一応調べてはいたんですが、使われているチップはALC889Aというチップ。現在のALSAではばっちりこれに該当するコーデックは入っていないらしく、ALC880だったかな、それのコーデックを使っているようです。まぁ互換性があるようなのでこれで問題ないらしい。動いてますよーって報告もちらほら。

ただ、ALC889Aで不具合がーみたいな報告もちらほら。私の場合、音が鳴るには鳴ってるけど再生状況が正常ではないっていう微妙な症状なので、なかなかうまい検索ワードも思いつかず、Webでは探しきれなかったんですよねぇ。

で、いろいろとdmesgのエラーメッセージを元に探して行ったところ、
Bug #329620 in linux (Ubuntu): “ALSA woke us up to write new data to the device, but there was actually nothing to write.”
のような記述が複数みつかりました。どうもtsched=0というのがキーワードになるようだ、と。

で、参考リンクとして提示されてた
Features/GlitchFreeAudio - FedoraProject
を見ると、どうもFedora10からは割り込みベースではなくタイマスケジュールベースにPulseAudioが変更されたらしい。ただ、tsched=0とすれば従来の割り込みベースに戻せるのだとか。

で、従来の割り込みベースにしたらちゃんと鳴るようになるよーって記述が多かったので試して見たところ、ほんとに鳴るようになっちゃったというわけ。意味が分からん・・・。PulseAudioの実装がまずいってことなんかしら・・・? それともALSAと相性が悪い?

で、そのまんま置いとけばよかったのに、さらに遊びで$HOME/.pulse/daemon.confにて
resample-method = trivial

とか書いてたもんだから原因到達に苦しんだ・・・。なんかこのオプションでもってリサンプルしたらPhonon経由で音を鳴らした途端にPulseAudioがクラッシュしてました。どうもこのリサンプル方法はPhononと相性が悪いらしい・・・。Phonon以外では普通に鳴ってたんだけどね。デフォルトだとsoeex-float-3とかだったかな? それよりは精度がいいらしいんだけど、まぁめっちゃ頑張って聴いてもプラシーボじゃねぇの?ってくらいしか違いを感じ取れなかったし、そもそも圧縮音源で聴いてる時点で、しかもオンボードで聴いてる時点で音質なんて(笑)って話なので潔くデフォルトに戻しました。

そのおかげで今は快調に音が鳴ってます。長時間のベンチ的なことをしていないのでひょっとしたらたまに音がおかしくなる可能性もありますが、まぁ前は10分に1度くらいの頻度で起きちゃってましたからそこからすれば格段に安定してます。

にしたって、タイマベースで動かせないのはどうなんだろう? タイマベースの方がモダンな実装らしいんだけどねぇ。よく分からんや。

今回は「ALSAドライバ」「PulseAudio」「Phonon」とそれぞれについて調べなくてはいけなかったのでなかなか大変でした・・・。ALSA一本の頃は楽やったなぁ・・・;;

2009年10月25日日曜日

PulseAudioの設定について

PulseAudioについて、日本語の解説を見つけられなかったので自分なりにまとめてみた。

PulseAudioの設定 - Fedora備忘録

正直最後の方は投げやり…。そんなに細かく設定する人もそう多くはないと思うので、必要十分だとは思ってるんですが…。ま、PulseAudioの本家サイトに詳しく書いてるんですけれどね。daemon.confについては本家では触れられていないので、多少は参考になるかも。中身についてはファイルを見れば分かるでしょう。

あとは/etc/pulse/以下のファイルは$HOME/.pulse/以下にもってきてカスタムしたらいいってのも書いてない情報かな? まぁLinux触って長い人にとっては常識レベルではあるんですが。

サウンドはLinuxにとってまだまだ問題の頻出するところですし、PulseAudioのことも知っておいて損はないかと。ぶっちゃけALSAのdmixでよかったじゃんとも思わなくもないけどさw

2009年9月25日金曜日

SkypeがPulseAudioに対応

Download Skype for Linux
β版という扱いのようですが、インストールして見たところ全く問題なく使えました。

いやぁ、これでSkypeが安心して使えますね! β版だからか、yumの更新に引っかかってきませんでしたが、普通にアップグレードでインストールできます。Fedoraユーザはぜひ試してみてはいかがでしょう?

2009年9月13日日曜日

GoogleTalkと音声チャットをしよう

Pidgin2.6.1より、XMPP/Jabberプロトコルのみ、音声/ビデオチャットに対応しました。
libpurpleに実装されているので、これを使用するEmpathyも同様に対応しています。

デバイスの選定についてはGstreamerの設定に従います。よって、gstreamer-propertiesで音声とビデオデバイスを設定しておきましょう。

ただ、現状はまだ実用一歩手前と言ったところ。これまでにVelnirやdaydreamerさんに手伝っていただいてテストした結果、片方がWinで、GoogleTalkクライアントかGmail(多分iGoogleでも可)を用いている場合のみ音声チャットができるみたいです。両方Linuxという場合はうまく通信ができませんでした。

とはいえ、これはそのうち解決するだろうとは思います。Winとは問題なく通話できているので。ただ、今でもSkypeなら安定して通話できるので、よく使うならしばらくはSkypeを使うことになるかと思います。

Skypeに対するアドバンテージとしては、Gstreamerを使用するのでPulseAudioと問題なく併用できる点でしょうか。Linux版のSkypeは更新が止まって久しいですし、Pidginの音声/ビデオチャット機能が成熟してくれると楽しみですね。

今のところ、Win版のPidginには音声/ビデオチャット機の鵜は実装されていないので悪しからず。これもそのうち実装されるかな…?

2009年9月2日水曜日

PulseAudio+Skype

Fedora11になってから、PulseAudio+Skypeという環境が非常に扱い辛くなってしまいました。

Fedora10までは、Skypeのサウンドデバイスの設定にて、サウンド出力をpulseにしておけばOKだったんですが、Fedora11になってからは音がぶちぶち切れます。

PulseAudioのnice値を変更したらましになるかも知れませんがそれはちょっと違うよなぁという気もしておりまして。仕方がないのでSkypeを使うときは
$ pulseaudio -k

で、PulseAudioを殺して、サウンド出力をALSAデバイス(実際に使用するデバイス名)に変えて通話しておりました。

この場合、もちろんPulseAudio経由のアプリは音が鳴らなくなりますが、そもそもSkypeで通話をするときは他の音が鳴ってくれると困るので特に問題ありませんでした。

ところが、最近になってPulseAudioに変更が加えられたのか、PulseAudioを殺してもすぐ復帰するようになってました。-kオプションで殺そうが、killで殺そうが即刻復活してます。-kオプションは何のためにあるんだw

そこで困ったわけです。PulseAudioを殺さなきゃSkypeは使えない。しかしkillしようと即刻復活するため、SkypeでALSAデバイスを占有できない。

ほとほと困り果てていたのですが、今日、親からSkype通話があったので知恵を振り絞って、とあることを思いつきました。

「あぁ、そういや録音デバイスをpadevchooserで他のに切り替えられたんだから、再生デバイスも切り替えちゃったらデバイスの占有状態は解けるんじゃね…?」

で、さっそくトライ。Sinkにはoutputしかありませんでしたが、ダメ元で「null」を指定したところドンピシャリ。特に不具合を起こすこともなく、ALSAデバイスを占有することができました。

ということで、一旦はこれで逃げようかと思います。あるいは私のPCはサウンドデバイスが2つあるので(オンボードの方はBIOSで殺しているので、現状は1つ)、オンボード側をSkypeの出力専用としてアンプに繋いでおくという手もありますね。

あぁ、その方が楽かもしれない…。今度試しておこうw アナログの入力端子は余ってたよな…?

2009年8月21日金曜日

gtk-recordMyDesktopでデスクトップの音をキャプチャする

PulseAudioになってからずっとやり方が分からず悩んでいたデスクトップの音のキャプチャですが、今回ようやく実現出来ました。

まず、下の画像にあるように、「Sources」のoutput.monitorという名前を覚えておきます。これが出力音声で、今回キャプチャしようとしている音です。

PulseAudioManager

次に、PulseAudioDeviceChooserにてDefaultSourceを上記のoutput.monitorに変更します。

PulseAudioDeviceChooser

そしてgtk-recordMyDesktopの設定で、音のデバイスに「pulse」を指定します。

recordMyDesktop

後は録画するだけ! これでデスクトップ上の音をキャプチャできます。スクリーンキャプチャでデスクトップ上の音を録音したい時に便利ですね。

もちろん、デスクトップの音をキャプチャせずとも、他のデバイスを選択することもできます。

私の環境では、サウンドカード以外にWebカメラ、キャプチャボードが入力デバイスとして認識されております(デフォルトはWebカメラにしてます)。それらを自由に切り替えて使うことができます。出力も同様です。