jackとpulseaudioを使い、マイク入力はrakarrackを使いつつ
line入力はarecordでラジオ録音に使うためのメモ
○前準備
apt-get install linux-lowlatency
apt-get install qjackctl jackd
apt-get install pulseaudio-module-jack
まず、物理的にスピーカ、マイク入力を司っているのはALSAである。
そしてpulseaudioがそのALSAを握っている。
ALSA(スピーカ) <== pulseaudio <== mplayerなど
line入力の方はarecordは直接ALSAを使うっぽい
ALSA(マイク) ==> arecordなど
○とりあえず、ALSAがpulseaudioに握られていてはjackが使えないのでunloadする。
pactl unload-module module-alsa-sink
pactl unload-module module-alsa-card
○qjackctlでjackdを開始する。
qjackctlの設定はドライバをalsaにして、以下のように設定。
・出力デバイスhw:0
・入力デバイスhw:0,2
入力デバイスの1つ目はline入力で、ラジオ録音に使うので、
jackとしては2つ目のマイク入力を使うようにする。
(arecord -Lで、hw:CARD=PCH,DEV=0と hw:CARD=PCH,DEV=2がある)
とりあえずjackが使われるようになるが、
このままだと、pulseaudioをぶった切ってjackをつなげただけなので、
jackが使える代わりに色んな音が鳴らなくなる。
ALSA(スピーカ) <== jack <== rakarrack
×<== pulseaudio
○pulseaudioでjackを使うようにする。
pulseaudioのjackモジュールをロード
pactl load-module module-jack-source channels=2
pactl load-module module-jack-sink
多分以下のような感じになる。
ALSA(スピーカ) <== jack <== rakarrack
↑<== pulseaudio(module-jack-sink) <== mplayerなど
ALSA(マイク入力) ==> jack ==> rakarrack
==> pulseaudio(module-jack-source) ==> 何につかわれるのやら?
とりあえずこれで、jack経由でpulseaudioを鳴らすことができる。
○rakarrack
jackも使えるようになったはずだが、
マイク入力に何かつないで、rakarrackを動かしてみても反応なし。
ここでしばらく悩んだけど、
ALSAのマイク入力がキャプチャモードになってないからということに気づいた。
alsamixerで、 CaptureとCapture 1があるが、Captureの方はラジオ録音に使うので、
Capture 1を録音に設定、 Input Source 1をマイク入力に設定する。
コマンドでやるなら amixer -- sset なんとかかんとか で行けるはず。
これで動いた。
○終わらせ方
1.qjackctlでjackdを終わらせる。
2.pulseaudioのjackモジュールをunload
pactl unload-module module-jack-sink
pactl unload-module module-jack-source
3.pulseaudioのダミーがロードされるのでunload
pactl unload-module module-null-sink
4.pulseaudioのalsaモジュールをload
pactl load-module module-alsa-card
pactl load-module module-alsa-sink
○結論
とりあえずは上記をやればいいっぽいので、
qjackctlに以下のように設定
・スタートアップ時にスクリプトを実行
pactl unload-module module-alsa-sink; pactl unload-module module-alsa-card
・スタートアップ後にスクリプトを実行
pactl load-module module-jack-source channels=2; pactl load-module module-jack-sink
・シャットダウン時にスクリプトを実行(追記: シャットダウン後じゃなくて前にやる。)
pactl unload-module module-jack-sink; pactl unload-module module-jack-source
・シャットダウン後にスクリプトを実行
pactl unload-module module-null-sink; pactl load-module module-alsa-card; pactl load-module module-alsa-sink
alsaのキャプチャは使わない場合はノイズがうるさいので、
使う時だけalsamixerでONにする。
・D-BUSインターフェース
jackを開始すると、jackdbusというのが走りっぱなしになるので、
jackを停止したら使わないようにしたい。
よって、qjackctlの設定:その他のD-Busインターフェースの有効化をやめる。
2014年4月27日日曜日
2014年4月26日土曜日
epgrec dvb: Value too large for defined data type
epgrecをpt2(dvb)で使っててたまに以下のようなエラーが出る。
dd: reading `/dev/dvb/adapter0/dvr0': Value too large for defined data type
これが出るとデータがドロップされているので、動画がちょっと飛ぶ。
なんとかしたい。
ちょっと調べた限りでは、ファイルサイズ32bitの壁みたいな情報があったけど、
多分それが原因では無さそう。
(ちゃんと64bitを指定してるし。)
メッセージを調べると、errornoのEOVERFLOWの時に出るメッセージのようだ。
どうもdd内のreadがEOVERFLOWで失敗しているっぽい。
となると原因はドライバ内と思われる。
で、pt2に関係ありそうなところで、EOVERFLOWがあるのは、kernelソース内
drivers/media/dvb/pt1/dvb-core/dmxdev.c
dvb_dmxdev_buffer_writeで、
free = dvb_ringbuffer_free(buf);
if (len > free) {
dprintk("dmxdev: buffer overflow\n");
return -EOVERFLOW;
}
という感じでリングバッファにデータを詰め込もうとしているところくらいか。
どうもカーネル内のリングバッファが足りてないのではないか?
と思ったので、カーネルのリングバッファサイズを増やしたい。
カーネルソースを眺めた結果、ioctlのDMX_SET_BUFFER_SIZEで動的に変更できそうだ。
結果はまたあとで書く。
dd: reading `/dev/dvb/adapter0/dvr0': Value too large for defined data type
これが出るとデータがドロップされているので、動画がちょっと飛ぶ。
なんとかしたい。
ちょっと調べた限りでは、ファイルサイズ32bitの壁みたいな情報があったけど、
多分それが原因では無さそう。
(ちゃんと64bitを指定してるし。)
メッセージを調べると、errornoのEOVERFLOWの時に出るメッセージのようだ。
どうもdd内のreadがEOVERFLOWで失敗しているっぽい。
となると原因はドライバ内と思われる。
で、pt2に関係ありそうなところで、EOVERFLOWがあるのは、kernelソース内
drivers/media/dvb/pt1/dvb-core/dmxdev.c
dvb_dmxdev_buffer_writeで、
free = dvb_ringbuffer_free(buf);
if (len > free) {
dprintk("dmxdev: buffer overflow\n");
return -EOVERFLOW;
}
という感じでリングバッファにデータを詰め込もうとしているところくらいか。
どうもカーネル内のリングバッファが足りてないのではないか?
と思ったので、カーネルのリングバッファサイズを増やしたい。
カーネルソースを眺めた結果、ioctlのDMX_SET_BUFFER_SIZEで動的に変更できそうだ。
結果はまたあとで書く。
ubuntu 13.10とepgrec
OpenSSLの問題でアップデートしようとしたら、
ubuntu 12.10のサポートが切れたっぽいので、しかたなく13.10にアップデート。
1. 毎度のことながら、phpで問題が起きる。(いい加減にしてほしい)
今までは、以下でタイムゾーンを設定していた。
/etc/php5/conf.d/5-timezone.ini
今回から、以下になったようだ。
最初、cgiに移動しただけかと思っていたが、両方やっとかないと
多分getepg.phpと時間がずれるから問題が起きる。
/etc/php5/cgi/conf.d/ /etc/php5/cli/conf.d/
タイムゾーンなんてcgiとcliで共通にするだろうに
なんで今まで読んでたファイルを無視するのか?
あと上記を調べるのにphpinfoをやろうとして動かなかった。
微妙に変更になっている。
前:<? phpinfo(); ?>
後:<?php phpinfo(); ?>
userdirとphpmyadminでうまく動かないのは前と同様。
設定メモ: ubuntu 12.10とphpmyadmin
2.日本語が入らない
以下のサイトを参考にfcitxにした。色々書いてて毎度ありがたい。
http://www.k5.dion.ne.jp/~r-f/sicklylife/memo/ubuntu1310/
まだ他にもあるかもしれないが、とりあえずはOK。
録画はdvb使っているので問題無さそう。
ubuntu 12.10のサポートが切れたっぽいので、しかたなく13.10にアップデート。
1. 毎度のことながら、phpで問題が起きる。(いい加減にしてほしい)
今までは、以下でタイムゾーンを設定していた。
/etc/php5/conf.d/5-timezone.ini
今回から、以下になったようだ。
最初、cgiに移動しただけかと思っていたが、両方やっとかないと
多分getepg.phpと時間がずれるから問題が起きる。
/etc/php5/cgi/conf.d/ /etc/php5/cli/conf.d/
タイムゾーンなんてcgiとcliで共通にするだろうに
なんで今まで読んでたファイルを無視するのか?
あと上記を調べるのにphpinfoをやろうとして動かなかった。
微妙に変更になっている。
前:<? phpinfo(); ?>
後:<?php phpinfo(); ?>
userdirとphpmyadminでうまく動かないのは前と同様。
設定メモ: ubuntu 12.10とphpmyadmin
2.日本語が入らない
以下のサイトを参考にfcitxにした。色々書いてて毎度ありがたい。
http://www.k5.dion.ne.jp/~r-f/sicklylife/memo/ubuntu1310/
まだ他にもあるかもしれないが、とりあえずはOK。
録画はdvb使っているので問題無さそう。
登録:
投稿 (Atom)