
Ubuntu日本語フォーラム

ログインしていません。
ubuntu10.10を使用しています。
skypeでの通話中に音楽を流すことは可能でしょうか?
具体的に言うと、マイクからの入力ではなく、PC上で再生している音楽などをマイク入力の代わりに使用することは可能なのかということです。
どのような方法があるでしょうか?
オフライン
Jackを使うことで実現できました。
参考: https://wiki.ubuntulinux.jp/UbuntuStudioTips/Application/JACK-PulseAudio
Wikiにある通りの方法でJackとPulseAudioのプラグインをインストールし、「起動方法」にある画面までたどり着いたら、「PulseAudio Jack Sink」と「PulseAudio Jack Source」をConnectしてください。
(注: Optionsタブでの設定において、自分の場合は以下のコード通りではうまくいかなかったので、channels以降を削除したコードを設定しました。)
pacmd load-module module-jack-source channels=2; pacmd load-module module-jack-sink channels=2;
↓↓↓
pacmd load-module module-jack-source; pacmd load-module module-jack-sink;
最後に「システム」>「設定」>「サウンド」で、「入力」を「Jack source」、「出力」を「Jack sink」にすると、スピーカーの出力がマイク入力とミキシングされて録音されると思います。
(pavucontrolの導入は任意です)
上記方法の場合、スピーカー出力全てが録音されるため、Skypeで相手が話した声も録音されます。
直接Jackに接続できるプレイヤーを使えば、問題解決だと思います。
オフライン
JACKを使うのが簡単でしょう。JACK (Jack Audio Connection Kit)はこういったサウンドのミックスが簡単に行えるように作ってありますので。
とは言うものの、PulseAudioを中心とするサウンドシステムと、JACKを中心とするサウンドシステムの両方を起動しているわけなので、ストレスなく使えるかどうかは、お使いのコンピュータの性能次第となります。さらに、PulseAudioとは別に、JACKの使い方を新しく覚えなければなりません。
さて実はPulseAudioも、モジュール「module-loopback」を使うことで、お望みの事が実現できます。
マイクからの入力(source)を、特定の音楽プレイヤーからの出力(sink)に混ぜて(loopback)、デバイスへ出力(playback)することが可能です。このデバイスへの出力(playback)を、モニター(monitor)を通じ、Skypeの設ける入力ポート(recording)に送ることで、マイクと音楽プレイヤーの音声をミックスしてSkypeへ流す事ができます。
ただし現在のところ、PulseAudioは、モジュールをグラフィカルに有効化/無効化、設定を行うソフトウェアが提供されていません。すべて端末での操作となってしまうため、敷居が高いかもしれません。
Loopbackモジュールの詳細は以下を参照して下さい。
http://www.pulseaudio.org/wiki/Modules#module-loopback
もしこのモジュールを使いたい場合は、その旨返信して下さい。使い方をお伝えします。
オフライン
Mocchi による投稿:
マイクからの入力(source)を、特定の音楽プレイヤーからの出力(sink)に混ぜて(loopback)、デバイスへ出力(playback)することが可能です。このデバイスへの出力(playback)を、モニター(monitor)を通じ、Skypeの設ける入力ポート(recording)に送ることで、マイクと音楽プレイヤーの音声をミックスしてSkypeへ流す事ができます。
いろいろ試していたら、この内容、間違いでした。。。正確には以下です。
マイクからの入力(source)を、直接デバイスへの出力(playback)に回す(loopback)ことができます。音楽プレイヤーからの出力(sink)を同じデバイスへ出力(playback)することで、一つのデバイスに対して複数の音をミックスして出力することができます。このデバイスへの出力(playback)を、モニター(monitor)を通じ、Skypeの設ける入力ポート(recording)に送るように指定すると、相手にミックスされた音が届きます。
オフライン
skypeは音声通話を念頭に調整されているので音楽を流しても音質はよくはありません。
もし、音楽配信を考えておられるなら、別の手段の方がいいかと思います。
オフライン
>>vbk
素早い返信ありがとうございます。
書いてある通りにやってみましたが、JACKのスタートを押すと、
"could not start jack.
sorry."
とでてしまいます。その時のmessageは以下です。
20:47:10.926 Patchbay deactivated.
20:47:11.057 Statistics reset.
20:47:11.135 ALSA connection graph change.
20:47:11.590 ALSA connection change.
20:47:11.666 ALSA connection graph change.
20:48:11.857 Startup script...
20:48:11.859 artsshell -q terminate
sh: artsshell: not found
20:48:12.266 Startup script terminated with exit status=32512.
20:48:12.269 JACK is starting...
20:48:12.270 /usr/bin/jackd -dalsa -dhw:0 -r44100 -p1024 -n2
20:48:12.396 Could not start JACK. Sorry.
20:48:16.136 JACK was stopped with exit status=255.
20:48:16.138 Post-shutdown script...
20:48:16.139 killall jackd
jackd: no process found
20:48:16.593 Post-shutdown script terminated with exit status=256.
どこがいけないのでしょうか?
ちなみにPCは、
ASUS EeePC 1005HE
CPU Atom N280
です。
>>Mocchi
返信ありがとうございます。
上に書いたとおりPCの性能はいいとは言えません。JACKの方もうまくいきません(どこかミスをしているからだと思いますが)。
PulseAudioだけでも実現できるんですね。ぜひ使い方を教えてもらえませんか?
>>yama
音楽配信を考えてるわけじゃないです。
オフライン
音楽再生ソフトなど、pulseaudioを利用するソフトウェアが起動していると思われます。そのような場合Jackを起動できないので、それらを終了してから試してみてください。
Mocchiさんが紹介されているように、pulseaudioのモジュールだけで目的が達成できるならそのほうがいいかもしれませんね。
オフライン
再起動してなにも起動していない状態でやってみても同じメッセージがでます。
バックグラウンドでもpulseaudioを使っていそうなものは動いてないはずなんですけど・・・
なにがいけないのか・・・
オフライン
それでは、PulseAudioのモジュールを試してみましょう。
そのまえに、お使いのサウンド環境について教えて下さい。マイクとヘッドホンをどのようにしてコンピュータにつないでいるのかといった情報です。マザーボードに搭載されているサウンドデバイスを使って、ステレオミニプラグでマイク/ヘッドホンをつなぐのが一般的かなと思います。
オフライン
遅くなってすみません。
こちらの環境は、マイク端子にマイク、ヘッドホン端子にイヤホンです。
一般的です。
オフライン
操作は端末でコマンドラインによって行います。PulseAudioを操作するのに、コマンド「$ pacmd」を使っていきます。
まず以下の出力から、マイク入力のsource名を探します。出力は私のラップトップの場合です。
$ pacmd list-sources;
<略>
index: 0
name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
driver: <module-alsa-card.c>
<略>
* index: 1
name: <alsa_input.pci-0000_00_1b.0.analog-stereo>
driver: <module-alsa-card.c>
<略>次に以下の出力から、出力のsink名を探します。これも出力は私のラップトップの場合です。
$ pacmd list-sinks;
<略>
* index: 0
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
driver: <module-alsa-card.c>
<略>今回は、alsa_input.pci-0000_00_1b.0.analog-stereoから取得する音声(マイク入力=source)を、alsa_output.pci-0000_00_1b.0.analog-stereo(スピーカー出力=sink)にloopbackするモジュールを有効にします。以下のコマンドとなります。
$ pacmd load-module module-loopback source=sourceのname sink=sinkのname;
私の場合は、nameをコピペしてこうなります。
$ pacmd load-module module-loopback source=alsa_input.pci-000_1b.0.analog-stereo sink=alsa_output.pci-0000_00_1b.0.analog-stereo;
こうすると、マイクからの入力がスピーカーから出力されるようになるので、ちょうどマイクで喋った音声がイヤホンから聞こえるようになります。イヤホンの音声がマイクに拾われるとハウリングを起こすので、注意して下さい。
この状態で音楽プレイヤーで音楽を流すと、マイクで拾った音声も合わせて一緒にイヤホンに出力されるようになったと思います。
Skypeにそれを流すにはどうするかと言いますと、こちらはPulseAudio Volume Controlを使います。以下の記事が役に立つでしょう。
第137回 PulseAudioを活用する @ Ubuntu Weekly Recipe
ポイントは、Skypeを起動すると、PulseAudio Volume ControlのRecorderタブにSkypeが表示されるので、そこで「Monitor of Internal Analog Stereo」(list-sourcesのalsa_output.pci-0000_00_1b.0.analog-stereo.monitorに該当)を選択してあげます。そうすることで、イヤホンから聞こえる音声がそっくりそのままSkypeを通じて相手に届きます。
通話が終わってモジュールを削除したい場合は、まず、loopbackモジュールのIDを探します。これは以下の出力を見ます。
$ pacmd list-modules;
<略>
index: 23
name: <module-loopback>
<略>この場合は、以下の操作でモジュールを削除できます。
$ pacmd unload-module 23;
現状、画面操作でPulseAudioのモジュールの有効化/無効化が可能なツールはないようです。端末での操作は面倒かもしれませんが、お試し下さい。
オフライン
確かに相手に返ってしまう気がします。
とりあえず書かれた手順通りやったら、マイク入力がスピーカーから聞こえるのを確認できました。
しかし、PulseAudio Volume Controlにskypeが表示されません(skypeを起動している状態です)。
オフライン
kazuyoshi による投稿:
しかし、PulseAudio Volume Controlにskypeが表示されません(skypeを起動している状態です)。
通話状態にしないと表示されないですね、きっと。
オフライン
通話状態にしたら表示されました。ありがとうございました。
声が返ってしまうという問題はあるけど、それはpulseaudioだけじゃ難しいみたいですね。
オフライン
kazuyoshi による投稿:
声が返ってしまうという問題はあるけど、それはpulseaudioだけじゃ難しいみたいですね。
これでは不便なので、もう少し試してみたところ、こんな感じにしたらうまくいきました。
ポイントとしては
1. module-loopbackの送り先として、module-null-sinkで音声出力を伴わないsinkを設定
2. 音楽アプリケーションの音声を分岐するため、module-combineを利用
これで自分の声が自分のイヤホンに返ってきたり、相手の声が相手に返ったりといったことがなくなるかと思います。
各モジュールの有効化の方法は、先述のmodule-loopbackと変わりませんが、モジュールに応じて与えるオプションが変わります。これに関しては以下のURLを参照して下さい。
http://www.pulseaudio.org/wiki/Modules#module-loopback
もし操作方法がわからようであれば、その旨、ご返信下さい。
オフライン
まず先に、PulseAudioに関してちょっと説明します。
PulseAudioにはsourceとsinkという概念があります。今回の場合、この2つはサウンドデバイスへの入出力に直結していて、sinkに流し込んだ音声データはサウンドデバイスに送られますし、サウンドデバイスで取得した音声データはsourceから取得できます。
サウンドを扱うアプリケーションはPulseAudioのクライアントとなり、sinkへの入力(sink-input)や、sourceからの出力(source-output)を受け入れるポートを開きます。音楽プレイヤーならsink-inputに、レコーダーならsource-inputになります。
sinkはsink-inputとしかつなげませんが、sourceはsource-output以外にも、それぞれのsinkが設けるmonitorをつなぐことができます。monitorはそのsinkでミックスされたすべての音声データをバイパスします。
サウンドの設定(gnome-volume-control)や、PulseAudio Volume Control (pavucontrol) はこれらの「つなぎかえ」を行なうソフトウェアとなります。
さて、今回は、相手の発話とkazuyoshiさんの発話、そして音楽プレイヤーの音声データをちょうどいい具合にミックスする必要があります。
まず、仮のsinkであるNULLを設け、そちらにkazuyoshiさんの発話をloopbackし、音楽プレイヤーの音声データをミックスしてmonitor経由でskypeの設けるsource-outputにつなげます。そして、相手の発話をskypeの設けたsink-inputからサウンドデバイスの設けるsinkにつなげ、それに音楽プレイヤーの音声データをミックスします。
この2つの経路を設定しないと、たぶん相手の声が相手に返ったり、自分の声が自分に返ったりすることとなりそうです。
今回使うモジュールは、module-null-sink、module-loopback、module-combineの3つです。
1. まず、module-null-sinkを有効にして、「Null Sink」を作ります
$ pacmd load-module module-null-sink;
2. 次に、module-loopbackで先ほど作った「Null Sink」とサウンドデバイスのsourceをつなげます。
先にsinkとsourceのリストを表示してnameを調べておいて
$ pacmd list-sinks;
$ pacmd list-sources;
nameをオプションにしてモジュールを有効にします
$ pacmd load-module module-loopback source=sourceの名前 sink=Null_Sinkの名前;
3. 最後に、module-combineを有効にし、サウンドデバイスのsinkとNull Sinkに出力するようにします
先にsinkのリストを表示してnameを調べておいて
$ pacmd list-sinks;
nameをオプションにしてモジュールを有効にします
$ pacmd load-module module-combine slaves=サウンドデバイスのsink名,Null_Sinkの名前;
4. 音楽プレイヤーの出力先を、「Simultaneous Output」に指定する
PulseAudio Volume Controlなどで、音楽プレイヤーの出力先(sink-input)を、「Simultaneous Output」とします。
この際、Skypeのsink-inputはサウンドデバイスのsinkにして下さい。じゃないと相手に相手の声が返っちゃいます。
5. モジュールの無効化
使い終わったらモジュールを無効化しておくといいでしょう。手順は前のポストと同じで、IDを使います。
ややこしい説明ですみません・・・。時間を見つけて試してみて下さい。
オフライン
遅くなりました。
手順通りやったら、無事成功しました!
分かりやすい説明、本当にありがとうございました。
ただ、処理能力が足りなかったのかメモリ不足なのか、他のことをしようとするとフリーズしてしまいました。
これは非力なネットブックなのでしかたないですけど。
最後にもう一度お礼をいっておきます。
分かりやすく解説してくださりありがとうございました!
オフライン