11:13:13 # Life 昨日はFSIJセミナーでした. 来月あたりにCodeFestをスリランカでやります,との話しがでましたが, スリランカ外相、自宅で暗殺されるというニュースが今日でていました.
日本も日本で総選挙になるといろいろとバタバタするので,来月のDebian勉強会開催も予断を許しません. コードばかり書いていればよいわけではなく,平和で政治が安定していないと安心して コードも書けなくなるのが現実ですなぁ.
11:59:25 # Life zynaddsubfxとecasoundを利用して録音してみる. できるんじゃないかなぁ,と思っていたがコマンドラインを考えるのが面倒なので放置していた案について, 検証してみる. hydrogenでドラムトラックをすでに録音している場合に, ドラムにあわせてオルガンがなる,というケースをつくってみる. jackは相互接続用に限定して,alsa経由で音を出すようにする.
$ jackd -d dummy $ zynaddsubfx $ jack_lsp dummy_pcm:capture_1 dummy_pcm:capture_2 dummy_pcm:playback_1 dummy_pcm:playback_2 ZynAddSubFX:out_1 ZynAddSubFX:out_2 # zynaddsubfxから音を出す試験 $ ecasound -i jack_auto,ZynAddSubFX -o alsahw,0,0,0 # drum track dr3.wav の伴奏で,オルガン録音試験. $ ecasound -a:1 -i dr3.wav -ea:50 \ -a:2,rec -i jack_auto,ZynAddSubFX \ -a:1,2 -o alsahw,0,0,0 \ -a:rec -o orgue1.wav # とりあえずモニタしてみる. $ ecasound -a:1 -i dr3.wav \ -a:2 -i orgue1.wav \ -a:1,2 -o alsahw,0,0,0
jackとalsaを別に利用すると,プロセス間の調停がうまくいかないため, zynaddsubfxでCPU処理が重い状況になると, ecasound が十分速くスケジュールされてくれないため, おとがとぎれとぎれになる. 仕方がないので,jackを利用してそこらへんを調整してもらうことにする.
$ jackd -d alsa -r 44100 $ zynaddsubfx # jackのポート一覧を見る. $ jack_lsp alsa_pcm:capture_1 alsa_pcm:capture_2 alsa_pcm:playback_1 alsa_pcm:playback_2 alsa_pcm:playback_3 alsa_pcm:playback_4 alsa_pcm:playback_5 alsa_pcm:playback_6 ZynAddSubFX:out_1 ZynAddSubFX:out_2 # zynaddsubfxからeca経由でjackのalsaデバイスに音を出す試験 # eca経由でなくてよいのなら,jack_connectで,Zynaddsubfxのポートをalsa_pcmに接続すればよい. $ ecasound -i jack_auto,ZynAddSubFX -o jack_alsa ctrl-cで停止 # drum track dr3.wav に伴奏してもらい,同時に演奏する試験 $ ecasound -a:1 -i dr3.wav -ea:50 \ -a:2,rec -i jack_auto,ZynAddSubFX \ -a:1,2 -o jack_alsa \ -a:rec -o orgue1.wav ctrl-cで停止 # とりあえずモニタしてみる. $ ecasound -a:1 -i dr3.wav \ -a:2 -i orgue1.wav \ -a:1,2 -o jack_alsa ctrl-cで停止 # ba録音 $ ecasound -a:1 -i dr3.wav -ea:50 \ -a:2 -i orgue1.wav \ -a:rec -i alsahw,2,0,0\ -a:1,2 -o alsahw,0,0,0 \ -a:rec -o bass2.wav # baモニタ $ ecasound -a:1 -i dr3.wav -ea:50 \ -a:2 -i orgue1.wav \ -a:3 -i bass2.wav \ -a:1,2,3 -o alsahw,0,0,0 # gt録音 $ ecasound -a:1 -i dr3.wav -ea:50 \ -a:2 -i orgue1.wav \ -a:3 -i bass2.wav -ea:150 \ -a:1,2,3 -o alsahw,0,0,0 \ -a:rec -i alsahw,2,0,0 -o gt1.wav # gtモニタ $ ecasound -a:1 -i dr3.wav -ea:50 \ -a:2 -i orgue1.wav \ -a:3 -i bass2.wav -ea:150 \ -a:4 -i gt1.wav \ -a:1,2,3,4 -o alsahw,0,0,0 \ # mix down and finalize $ ecasound -a:1 -i dr3.wav -ea:50 \ -a:2 -i orgue1.wav -epp:80 \ -a:3 -i bass2.wav -epp:40 -ea:150 \ -a:4 -epp:20 -i gt4.wav -ea:120 \ -a:1,2,3,4 -o mix20050814.wav $ ecanormalize mix20050814.wav $ ecasound -i mix20050814.wav -o mix20050814-1.wav -eca -ete
ここまではjack経由で録音できることがわかった. jackdは複数のサウンドカードをサポートしていなくて,さらにUSBサウンドもサポートしていないはずなので, 録音にwavioを利用するのはecasound/alsa経由で頑張ることになる. まぁ,それはいつもやっているので動くことは分かっているのでよし. なんだかんだでecasoundとzynaddsubfxでソフトシンセが使える,ということが重要. これで出張先でもなんでもlinuxマシンさえあればなんとかなる状況になりましたな.
18:35:19 # Life missing sentinel in function call. execl(getenv("SHELL")?:"/bin/sh", getenv("SHELL")?:"/bin/sh"); としたら,gcc4.0の警告が出た. 最後のNULLを書き忘れていたからのようだ. execl(getenv("SHELL")?:"/bin/sh", getenv("SHELL")?:"/bin/sh",NULL); このような可変数の変数を持つCの関数でのエラーを検出するのは結構難しいはず.
21:13:56 # Life cowdancer をリリースしました. こちらにdebパッケージはおいています. ユーザランドだけでcopy-on-writeファイルシステムの操作性を実現しています. 紹介ページはこちら. cp -al(ハードリンクを利用するため,ディスクアクセスがすくなくてすむので高速)でコピーしたツリーがcp -a(実際にファイルをすべてコピーするので遅い) でコピーしたかのように利用できます. パリのルーブル美術館で思い付いたネタなのですが,結局リリースするのに2週間近くかかってしまいました. これを利用することで,pbuilderをかなり高速化することができるはずです.
$Id: dancer-diary.el,v 1.89 2005/05/12 11:19:14 dancer Exp $