Articles
Voyage MPD 0.75 with RT Kernel(7)
「病膏肓」という言葉を写真にするとこうなるのですかね(^^;;;。
ブート画面です。とうとうこうなっちゃったという感想(^^;;;。
- atom専用configによる 3.0.0 + rt6
- atom専用configによる 3.0.0
- 汎用版configによる 2.6.39.3
- Voyage MPD 0.75
- 汎用版configによる 3.0.0 + rt3
- 汎用版configによる 3.0.0
- Voyage MPD 0.70
となります。昔、自家製プレーヤにアームを三つ付けてカートリッジをとっかえひっかえしていたことを思い出しますね。
p.s. 実はこの後ろに空のパーティションが二つ用意してあります。そこにシンさんお勧めのXFSのシステムを作ろうと企んでいます。しかし今のままやるとブートできるOSがさらに倍増することになるので、「どうしたものかいな」と思案中です(^^;;;。
(PC_Audio) 2011/08/03
今日のカエル
この間のカエルをまた発見。岩(カエルからみてです)の上が好きなのだねぇ。
ちょっとメタボじゃないかと思いますが、なかなかの面構え。
正面からフラッシュをたいても全く動じない。立派なものです。
(others) 2011/07/31
Voyage MPD 0.75 with RT Kernel(6)
掲示板で moto さんからお願いされたので、使っている config に関して、解説し、ダウンロードできるようにしておきます。
汎用版config
これは、ほとんど Voyage 0.75用のものと同じなので、変更点だけ解説します。
wget http://mirror.voyage.hk/download/kernel_config/config-2.6.38-voyage_9.0-1
でダウンロードできます。 展開したLinux 3.0のディレクトリに移動して
tar xjf linux-2.6.39.2.tar.bz2 cd linux-2.6.39.2 cp ../config-2.6.38-voyage_9.0-1 ./.config make menuconfig
という具合にコピー & リネーム、menuconfigを立ち上げます。 トップページから以下の通り、辿って、
Processor type and features Preemption Model (.....) ---> (X) Fully Preemptible Kernel (RT)
Preemption ModelをFully Preemptible Kernel (RT)に変更。
Device Drivers --->Sound card support ---> Advanced Linux Sound Architecture ---> [*] USB sound devices ---> USB Audio/MIDI driver
USB Audio/MIDI driver を選択。
変更点はこれだけです。
後は普通にビルドすればいいです。
2011.08.02 追記
atomのマシンではrt6の場合、Processor type and features の multi-processing support (と Hyperthreading) をオフにしないと、ビルドは出来ますが、実行させるとエラーになります。原因は不明ですが、ご注意ください。
atom専用config
上記タイトルのリンクからダウンロードできます。
これはシンさんから送って頂いたalix専用configをベースにamd(alix)関連の項目を削除、intel(atom)関連の項目を復活させたものです。
不要なモジュールも盛大に削除していますので、汎用intelでは動かないと思います。
tgzで圧縮してありますので、展開(tar zxvf)してお使いください。
ビルド後のdebファイルのサイズは汎用版の2/3に位になります。
音は変わったような気がするというところですかね。
以下ちょっと長くなりますが、何を変更したかです。
General setup [ ] Enable VM event counters for /proc/vmstat( -> off) There are no chanes of other parms in this layer. Enable the block layer [ ] Support for large (2TB+) block devices and files There are no chanes of other parms in this layer. Processor type and features [ ] Symmetric multi-processing support( -> off) Processor family (586/K5/5x86/6x86/6x86MX) [*] Supported processor vendors ---> check only intel [ ] Enable DMI scanning( -> off) Preemption Model (Fully Preemptible Kernel (RT)) <*> /dev/cpu/microcode - microcode support [*] Intel microcode patch loading support <*> /dev/cpu/*/cpuid - CPU information support Power management and ACPI options [*] ACPI (Advanced Configuration and Power Interface) Support ---> <*> Button Other params in this layer are all off Other params in this layer are all off Bus options (PCI etc.) [*] PCI support Other params in this layer are all off Networking support [*] Wireless ---> <M> Common routines for IEEE802.11 drivers Other params in this layer are all off Other params in this layer are all off Device Drivers <*> ATA/ATAPI/MFM/RLL support (DEPRECATED) ---> <*> generic ATA/ATAPI disk support [*] ATA disk support [*] IDE ACPI support [*] legacy /proc/ide/ support <M> generic/default IDE chipset support <M> Platform driver for IDE interfaces [*] Probe IDE PCI devices in the PCI bus order (DEPRECATED) <M> Generic PCI IDE Chipset Support <M> Intel PIIX/ICH chipsets support Other params in this layer are all off <M> Serial ATA and Parallel ATA drivers ---> [*] Verbose ATA error reporting [*] ATA ACPI Support [*] SATA Port Multiplier support <M> AHCI SATA support [*] ATA SFF support [*] ATA BMDMA support <M> Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support <M> CS5535 PATA support (Experimental) <M> CS5536 PATA support <M> Generic platform device PATA support <M> Generic ATA support <M> Legacy ISA PATA support (Experimental) Other params in this layer are all off [ ] Multiple devices driver support (RAID and LVM) [ ] Fusion MPT device support IEEE 1394 (FireWire) support ---> all off [ ] ISDN support {M} I2C support ---> all off [*] Network device support ---> [ ] Wireless LAN < > PPP (point-to-point protocol) support [ ] GPIO Support < > Dallas's 1-wire support < > Power supply class support < > Hardware Monitoring support < > Generic Thermal sysfs driver [*] Watchdog Timer Support ---> <M> Software watchdog <M> Intel TCO Timer/Watchdog [*] Intel TCO Timer/Watchdog Specific Vendor Support Other params in this layer are all off < > Multimedia support ---> <M> Sound card support ---> <M> Advanced Linux Sound Architecture [*] Support old ALSA API [*] Verbose procfs contents [*] USB sound devices ---> <M> USB Audio/MIDI driver <M> Open Sound System (DEPRECATED) ---> <M> OSS sound modules ---> [*] Persistent DMA buffers [*] USB support ---> < > USB Monitor < > USB Modem (CDC ACM) support < > USB Wireless Device Management support < > USB Serial Converter support ---> < > USB LED driver support < > Cypress USB thermometer driver support There are no chanes of other parms in this layer. [ ] X86 Platform Specific Device Drivers There are no chanes of other parms in this layer.
(PC_Audio) 2011/07/30
Voyage MPD 0.75 with RT Kernel(5)
Voila, voila! さんのサイトの情報で知ったのですが、ここ 3.0-rc7-rt0とここ 3.0-rt1にrtパッチの作者のGleixnerさんのリリースノートがあります。またここ(Linux RT Users)でリリース後のやりとりを読むことができます。
rt1の方はrt0の変更点だけなので、当たり前の内容ですが、rt0のリリースノートは大変に興味深い内容です。
以下に簡単に紹介します。
2.6.33-rt(Voyage MPD 0.07のパッチです)後、間があいたのは、2.6.38-rt対応しようとしたが、失敗したためである。こんな失敗はLinuxのRT化で初めて経験するものだった。失敗の理由はCPUの使い方の変化がどんどん大きく(the ever growing per cpu variable usage)なり、制御不能になったためである。
つまり、PER_CPU_LOCKEDを使う従来型のアプローチでは、CPUの数が多くなるとパッチをかける必要のある要素が多くなりすぎて、上手く動かなくなり、メンテナンス困難となってしまった。
開発者の間でいろいろな議論をして、最終的な結論は、従来型とは全く逆のアプローチでいこうということになった。「spinlock と get_cpu_sections に対して、migrationを無効にする」。この方法は以前議論されたことがあるが、上手くいかないだろうと考えられ、放棄されていたアイディアだ。
しかし、この方法はCPUを均等に使うという目的を保持しながら(This keeps the semantics which are expected by the per cpu users)、機能を preemptible に保つという魔法を実現できる。また副次的な効果として、softirq handlers を local_bh_enable 上で動く irq threads から分離し動かすことが出来る。これは、長年、RT走行の負荷を下げる方法として望まれていたものだ。
結局、この方法をとることで、パッチは全面的に作り直しとなった。様々な環境で動くことが確認され、一応の性能は確認されたので、リリースすることにした。
パッチのサイズとファイル数は2.6.33-rtの462 patches、690 files に対して、3.0-rt0では 223 patches、374 files と半減しており、十分な成果を達成した。
What's new in 3.0-rt ? - ソフト割り込みはスレッド分けしないことにした。これが良い決定であるかどうかは評価中である。 - 割り込みスレッド最後とネストされているlocal_bhの無効化されているセクションでの 全ての thread sites 上でのsoftirqのハンドリングをやめた。 - SPARSE割り込みとIOMMU割り込みのremappingが動くようになった。 - configオプションを CONFIG_PREEMPT_RT_BASE と CONFIG_PREEMPT_RT_FULL に分離した。 RT_BASE はより複雑な変化に対応する。例えば mm/* を割り込み無効のセクションとして使う。 CPUをロックして、bit_spinlock を spinlock に変換して使う。という具合に。 RT_BASE はこれらのテストと検証を RT_FULL とは独立して行える。 結果としてデバッグとメンテナンスの効率を高くできる。
何故、「ソフト割り込みはスレッド分けしないことにした」かについての言い訳みたいなアナウンスですが、裏話が分かって、なかなか面白いです。
残念なのは、force threaded irq-handlers と今回のrtパッチの関係についてほとんど触れられていないこと。まあ、そんなことはパッチとソースを眺めれば分かるだろうというのがLinuxの流儀なのだろうけど、カーネルのソースを読むなんて根性のない身にはつらいですよね(^^;;;。
p.s. 上記した通り、rtパッチをかけていない Linux 3.0 でも force threaded irq-handlers はブートパラメータ(threadirqs)を指定すれば、有効になります。3.0 + rt3 とは音の傾向は違いますが、 なかなかいい音ですので、ダウンロードできるようにしておきました。
こちらの方が 3.0 + rt3 よりはるかに安定していますので、お勧めかもしれません。
p.p.s. ちなみに御本尊のパッチのpatchとpatchesの違いはモジュール毎に分けてある(patches)か全部まとめて一つにしてある(patch)かのようですね。どっちを使っても同じみたいです。
p.p.p.s. 2011.07.31 追記
Linux RT Usersで、rt関連のコンカレントな情報はgetできるみたいですね。
Gleixnerさんは2週間子供をつれてサマーキャンプに行くそうだから、その間はパッチの更新はなさそうです。少しは落ち着けそうです(^^;;;。
(PC_Audio) 2011/07/29
Voyage MPD 0.75 with RT Kernel(4)
まだテスト版ですが、Linuxカーネルの3.0.0-rc7でrtパッチが復活しているのてですね。シンさんのサイトでこれを適用したalix専用カーネルがダウンロードできるようになっています。
atomユーザとしては指をくえて眺めているのも残念ですから、ここからintel汎用(486)版をダウンロードできるようにしておきました。
カーネル 3.0 のソースに patches-3.0-rt3 をかけて、config-2.6.38-voyage_9.0-1を使ってビルドしたものです。menuconfigは前回のUSBオーディオと Processor type and features -> Preemption Model -> Fully Preemptible Kernel (RT) のみを変更しています。
rtパッチがかかっていますので、grub.cfgへのthreadirqsの追加は不要です。
Voyage MPDの次のターゲットはLinuxカーネル3.0ということなので、Voyage MPD 0.80を先駆けできることになります。ただし、ベータ版のカーネルなので、かなり不安定です(僕の環境でrt2以前ではvoyageのtmpfsの終了処理でハングしてしまいます)。勇気のある方はおためしあれ(^^;;;。
音はこれまで試したカーネルの中での The Best だと思います。
なお、カーネルの 3.0 のrtパッチはここの情報によれば2.6.39のRT化部分を独立させ、パッチにしたものようですね。
しかし凄いスピードですね。やっと2.6.39.3でチューニングし終えたばかりなのに、もう 3.0 とは。
ただ設定は2.6.33.7とだいたい同じなので、ほぼそのまま移行は出来そうですが。
p.s. この記事、土曜日(23日)に書きはじめて、今日(25日)投稿したものです。カーネルのヴァージョンが文章の冒頭とそれ以降で変わっています。
実はシンさんのサイトを覗いて、3.0.0-rc7 でrtパッチ(rt0)が復活しているのを知ったのが金曜日(22日)。早速、試してみましたが不安定。
翌日(23日)、Linuxカーネルの御本尊に正式版の 3.0 がリリースされているのを知り(rtパッチもrt1にレベルアップ)、こっちを試してみたらバグだらけ。コンパイルも異常終了。なんとか解決させて(直前カーネルからファイルを二つコピー)、動かしましたが、依然不安定。
「どうしたものかいな」と思案しましたが(シンさんのサイトで質問して、いろいろ助けていただきました)、さらに翌日(24日)、もう一度、御本尊を覗いたら、なんとrtパッチがrt2を飛ばして(探したらolderにありました)、rt3になっていました。
それ(rt3)を試して、僕の環境では一応安定しているので、公開することにしました。
という次第で、まだ出来立てのホヤホヤ。湯気の上がっている状態です。相当にリスクがありますので、安全対策をした上でお試し下さい。
(PC_Audio) 2011/07/25
シューマンの指
面白かったです。ミステリーを読んだのに、シューマンの音楽の毒を堪能しました。クラシック音楽とミテスリー(OR条件です)のファンにお勧め。
クラシック音楽をとりあげたミステリーっていくつかありますが、個人的にはあまり印象に残るものはなかったです。しかし、これは出色の出来ですね。作者の音楽の分析力が凄いです。読んでいて、ミステリーを読んでいるのかシューマンの音楽の解説書を読んでいるのか分からなくなるほど。
例をあげると、はじめの部分で登場人物の紹介を兼ねてシューマンのピアノ協奏曲の分析が出てくるのですが、
作曲家シューマンについては、ピアノや歌曲など、小曲集形式において才能を発揮する一方で、規模の大きな楽曲では構築性に欠けるところがあるとの評価がなされてきた。だが、シューマン唯一のピアノ協奏曲である本曲を聴くなら、それが俗評にすぎないことは瞭然である。各楽章は明確な意匠の元で動機的に関連づけられ、主題は件粉組み立てにおいて処理されて、高い構築性と奔放な幻想性をふたつながらに、ほとんど奇蹟のごとく実現している。
もう一つ、シューマンの管弦楽法に難がある、という悪評も昔からある。たしかにヒューマンは管弦楽の色彩感を追求しなかった。加えて、バッハに深く学んだシューマンは、一つの旋律線が複数の声部に分かたれ、和声の糸に編み込まれる技法を多用し、そのため旋律が埋没しくすんでしまう傾向はある。しかしそれはシューマンの企みなのであり、彼の狙った対位法的効果を十全に発揮できない演奏者が無能なのだ。
シューマンに晦渋さがあるとしたら、それは伝統と前衛に橋をかけようとする彼の芸樹的野心のゆえであり、楽譜に潜む魅力を十全に引き出しうるか否か、シューマンの管弦楽曲は、指揮者とオーケストラにとって一つの試金石といっていいだろう。誰が振っても「感動的」に盛り上がる、チャイコフスキーのごとき凡庸な音楽とシューマンは根本から違うのだ。
どうです。凄いでしょ。チャイコフスキーには可哀相だけと、下手な音楽評論家が裸足で逃げ出すという位の分析力。
そして殺人事件がが起きる。この時、演奏されるのが「幻想曲」。第一楽章から順に詳細に演奏分析されて、最後に第三楽章。
この最後の緩徐楽章こそ、シューマンの魂の内奥に秘められた夢そのもの、たくさんの逡巡や躊躇いのあとでなされる秘密の告白といっていいだろう。
C-A-F-G7という、ポピュラー音楽でもおなじみのコード進行でつづられる、四小節のアルペジォの序奏。それに導かれて静かに語り出される第一主題。そのとき私は例の下降する主題--「クララの動機」とも呼ばれる、「この音符の陰に、何かが隠されているような気がするんだ」と粉砂糖に指を汚した修人がいった主題が、左手の低音部にくっきりと姿を現すのを聴きとった。
演奏者の意図に基づくと否応なく理解される、楽句の際立ち方に私ははっとなった。それは疑いもなく不吉な響きに違いなく、明朗な親しさの気分の底にある、薄皮を一枚剥がせば現れるはずの、鬼火のような青白く燃える不穏さの気配を孕んで、音楽は壮絶な美しさを放ちながら、溜飲するように進んでいく。
(略)
「クララの動機」が密やかに織り込まれながら、音楽は絶頂へ向かって小刻みに動いていき、やがて再び勝利の合唱が、今度は、ペダルで保持される低音Cの堅固な土台に支えられて、フォルテッシモの指示の下で打ち鳴らされた。輪郭の明瞭な決然たる響きは、月の光に照らされた音楽室の隅々まで行き渡り、手で触れられる物質のように満ちあふれ、渦を巻き、しかもここでも、ていねいでやさしい慈しみが、音の刺や角を消し去って、ぶあつくて滑らかな肌を持つ官能の大波が、聴く者の体を幾重にも押し泡んだとき、全身の毛という毛を逆立てた私は、おおう、おおう、と喉の奥で叫びながらまたも熱い涙を流した。
とりとめのないお話の続きのように、第二主題が反復されるコーダでは、やがて大地の囁きとも思える両手のアルペジォだけが残されて、最後は、深く、静かに、美しい夢を約束された眠りに入る人の吐息のように、ハ長調の和音が鳴らされる。
(略)
シューマンの毒が殺人事件を引き起こす凄まじい描写だと思います。
まあ、全体、こういう感じでシューマンの音楽の魅力と異常さの描写が冴えわたるという感じの文章の連続です。 最後、殺人事件の謎が解き明かされるのですが、ここで三重のドンデンガエシがあり、シューマンの音楽の毒がドンデンジエシごとに深まるという仕掛けになっています。ともかく面白い。感心しました。
シューマンの音楽が好き方は必読の書かな。
(review) 2011/07/22
Voyage MPD 0.75 with RT Kernel(3)
debファイルをこちらからダウンロードできるようにしておきました。内容については以前の記事と掲示板の書き込みを参照して下さい。一応、ヘッダーファイルもダウンロードできますが、こちらは自前でアプリをコンパイルする方以外は不要かと思い、別のリンクにしてあります。
debファイルは2.6.39.3のカーネルソースとVoyage 0.75 のコンフィグ(config-2.6.38-voyage_9.0-1)を使い、コンフィグファイルは
Device Drivers -> Sound card support -> Advanced Linux Sound Architecture -> USB sound devices
を有効にしています。それ以外の変更はしていません。従ってUSBオーディオ以外のサウンドデバイスは使えませんので、ご注意ください。PCI接続のオーディオカードなどをお使いの場合はAlsaをビルドし直す必要があります。
インストール方法についてはリンク先に書いたとおりですが、grubの更新は必ずやるようにして下さい。また、RT機能を有効にするためには、更新後のブートパラメータの変更は必須です。
grubの更新はalixはリンク先の情報だけではダメなようです。alixユーザの方はシンさんのサイトの情報を参照して下さい。
という次第で敷居はちょっと高いのですが、ゼロからビルドするよりは楽だと思います。Voyage MPD 0.75 でyanさんのパッチを使おうという方には必携です。
p.s. カーネルの更新については掲示板でも、いろいろ議論をしているので、興味のある方はそちらも参照して下さい。こことここです。
(PC_Audio) 2011/07/17
Voyage MPD 0.75 with RT Kernel(2)
昨日書き込んだ
不思議なのは2.6.38のconfigを使うと更新は正常に終了するが、起動後alsaがオーディオデバイスをまったく認識しないこと。
という部分は謎がとけました。
make menuconfig で USB Audio/MIDI driver を選択すればいいです。一段上の USB sound devices がマークされているので、その下が何も選択されていないとは気がつかなかった。2.6.33.7ではディフォルトの状態で選択されているので、上手くいっていたようですね。
という次第でやり方を書いたページも更新しておきました。
これで綺麗にv0.75をRT化できるので、このTipsはお勧めです。
ちなみに割り込みと優先度はこんな具合になります。
root@voyage:~# uname -a Linux voyage 2.6.39.2 #1 SMP PREEMPT Mon Jul 11 20:09:52 JST 2011 i686 GNU/Linux root@voyage:~# cat /proc/interrupts CPU0 CPU1 0: 2010084 0 IO-APIC-edge timer 1: 2 0 IO-APIC-edge i8042 7: 17 0 IO-APIC-edge 9: 0 0 IO-APIC-fasteoi acpi 12: 4 0 IO-APIC-edge i8042 14: 0 0 IO-APIC-edge ide0 15: 0 0 IO-APIC-edge ide1 16: 4271395 0 IO-APIC-fasteoi uhci_hcd:usb5, i915, eth0 18: 0 0 IO-APIC-fasteoi uhci_hcd:usb4 19: 3044 0 IO-APIC-fasteoi ata_piix, uhci_hcd:usb3 23: 679186 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2 NMI: 0 0 Non-maskable interrupts LOC: 972598 1858685 Local timer interrupts SPU: 0 0 Spurious interrupts PMI: 0 0 Performance monitoring interrupts IWI: 0 0 IRQ work interrupts RES: 13547 271669 Rescheduling interrupts CAL: 3254 4467 Function call interrupts TLB: 4909 4401 TLB shootdowns ERR: 17 MIS: 0 root@voyage:~# ps -eLo pid,rtprio,priority,cmd | grep irq 3 - 20 [ksoftirqd/0] 9 - 20 [ksoftirqd/1] 115 50 -51 [irq/9-acpi] 946 50 -51 [irq/12-i8042] 947 50 -51 [irq/1-i8042] 1131 50 -51 [irq/14-ide0] 1132 50 -51 [irq/15-ide1] 1133 50 -51 [irq/23-ehci_hcd] 1134 50 -51 [irq/19-ata_piix] 1138 50 -51 [irq/23-uhci_hcd] 1140 50 -51 [irq/19-uhci_hcd] 1141 50 -51 [irq/18-uhci_hcd] 1142 50 -51 [irq/16-uhci_hcd] 1416 50 -51 [irq/16-i915] 1753 50 -51 [irq/16-eth0] 2894 - 20 grep irq
2.6.33.7 RT との違いはタイマ以外のソフト割り込みがなくなっていること(preempt化されていないということかしら)。
カーネルの更新というと大変そうに聞こえますが、時間のかかることを除けば、案外簡単です。grubを最新版にしてあれば、古いシステムもそのまま残り、起動メニューでどちらを起動するか選択できますので、とても便利です。
という次第で、RT Kernelのあるシステムとないシステムの聴き比べが可能となりました。
(PC_Audio) 2011/07/11
Voyage MPD 0.75 with RT Kernel
掲示板の方に書き込んだRT化のためのカーネルの更新をやってみました。
時間はかかるけど(Atomで3時間、まあそれでも玄柴の半分になりましたが)、更新そのものは案外簡単ですね。
ググれば情報は山ほどありますが、主に参考にしたサイトは
Software/LinuxKernel
¦Old/etch/Software/LinuxKernel
です。
Voyage 0.75をベースにする方法(僕がやったやり方です)をこちらに書き込んでおきました。
RT Kernelは2.6.33.7RTと同じような感じですね。割り込み単位に優先度レベルの設定は可能です。
不思議なのは2.6.38のconfigを使うと更新は正常に終了するが、起動後alsaがオーディオデバイスをまったく認識しないこと。
root@voyage:~# aplay -l aplay: device_list:235: no soundcards found...
alsaそのものの組み込みはされているようですが、/proc/asoundディレクトリは作成されません。
見比べて、configの比較をしてみたのですが、データ量が多すぎてよく分からない。
yanさんも同じような報告をされているので、謎だなぁ。Punkyさんに問い合わせてみるかな。
音はとりあえず出しただけなので、まだ、ちゃんとした評価はできませんが、とてもいいです。
P.S. 2.6.39はまだリリース直後だから、多少不安定ですね。
alsaのトラブルで最初はalsaを外部カーネルモジュールとして入れないといけないのなと考え(上記二番目のリンクを参照)、コンパイルしたのですが、smp_lock.hがないというエラーになってしまいました。しょうがないので、2.6.38のソースをダウンロードしてlinux-2.6.38.8/include/linux/にあるsmp_lock.hをコピーしてコンパイルは完了。しかしそれでも「no soundcards found…」というエラーのままでした。このあたりも謎です。
いずれにしても、一回カーネルビルドするのに半日かかりますので、構築環境をなんとかしないとチューニングは大変そうですね。
カーネルビルドしながら、GMPCを立ち上げて音楽を聴くという乱暴なことをしているのですが、これが悪いのかなぁ(^^;;;。
(PC_Audio) 2011/07/10
今年のカエル
タイトル通りです。庭にいました。以前、「庭のカエル」で紹介したカエルの弟子ですかね。
夜、フラッシュを炊いてとったのですが、このカエル君、驚きませんね。にぶいねぇ。悠々と岩(カエルから見てです、ヒューマンな視点では石です)に登る。
(others) 2011/07/08
Voyage MPD 0.75
5月の終わり頃にVoyageのサイトに「2.6.38 voyage kernel and next release」という案内があったので、テスト版を試してみたことはありますが、正式版がリリースされたようですね。
目玉は
We have silently updated the daily build of Voyage Linux, MPD and ONE to 2.6.38 kernel. Testing is now going on and next release is set to 0.7.5 instead of 0.7.1, as to reflect kernel version upgrade.
ということなので、カーネルのヴァージョンを大きくアップさせたということのようです。
2.6.33.7-rt29-voyage #1 SMP PREEMPT RT → 2.6.38-voyage #1 SMP PREEMPT
ただ、カーネルのヴァージョンを最新に近づけるとRT用のパッチが追いつかないという問題があって、カーネルのビルドでpreemptという指定で疑似リアルタイム化することで、対応しているようです。
ちなみに、RTパッチはここにありまして
http://www.kernel.org/pub/linux/kernel/projects/rt/
http://www.kernel.org/pub/linux/kernel/projects/rt/older/
カーネルの本体のソースとパッチはここにあります。
http://www.kernel.org/pub/linux/kernel/v2.6/
で不思議なのは、昨年の半ば位から、RTパッチの開発速度が本体の開発と大きく乖離していること。何か理由があるのかなと調べたのだけど、どうもよく分かりません。
あと、RTパッチの最新版が2.6.33.9なのだけど、対応するLinuxのカーネルがないのですよね。これも謎です。
カーネルのリアルタイム化の動向についてはUbuntuのトピックになりますが
「Ubuntu Studio に関するTips/セットアップ/カーネルについて」
に情報があります(リンク先の英文の記事も参考になります)。
まあ、カーネルのヴァージョンがいくつかということはあまり音には関係なさそうですが、試してみたら結構変わりますね。このあたりはシンさんのサイトで詳しく報告されています。
僕もほぼ同感ですが、僕の好みは0.75の方ですね。どちらも良さはあるから、しばらくは0.70と0.75のマルチブートでいくつもり。
yanさんのチューニングパッチはかかりますが、カーネルがpreemptになったためか、いままで可能だったハードソフトの割り込みレベル毎の優先度の設定ができなくなります。MPDのスレッド単位の設定は可能ですが。モノリシックなカーネルに近くなるから割り込み種類毎の設定が不可ということなのかしら。このあたり何か対応方法はあるのですかね。
あと、組み込みの MPD 0.16.2 は sndfileオプションが有効に変わっています。従って、このままでは24BitのDDC、DACは無音となります(内容についてはMPDの最新版をビルド(2)を参照して下さい)。Punkyさんに「音が出ないよ。何でオプションを変えちゃったの?」と問い合わせたら
Could you use Voyage MPD 0.7.5 and try the following config to disable sndfile to see if it work? decoder { plugin "sndfile" enabled "no" }
でやってくれというご返事でした。
p.s. シンさんとasoyajiさんの掲示板で話題になっているようなので、多少補足しておきます。
“preempt”というのは「差し替える」という意味で、リアルタイム処理をスムーズに行わせるために、特定のプログラムがCPUの実行権を握りっぱなしにさせないようにするために「プログラムを差し替えて実行させる」OSの仕組みのことです。例えばエンコード処理のようにCPU負荷の高い処理がずっと動き続けて、USB音源にデータが送れなくなるということを防ぐために、この機能が働くことになります。
MPDでは処理をプレーヤとかデコーダとかアウトプットという単位でスレッド分けしています。これは、特定の機能がずっと動き続けて、他の機能が動けなくなり、再生が不安定になるのを防ぐためです。Linuxはスレッド単位に実行権の受け渡しの制御をしているので、スレッド分けすればある程度再生はスムーズになるはずです。ただし、この状態では各スレッドの優先度は同じですので、例えばアウトプットを優先処理すべき時でもデコードとアウトプットは同じレベルでコントロールされてしまうという問題が発生します。
yanさんのパッチはこのスレッド単位に優先度の設定を行えるようにしたもので、アウトプットの優先度を高くすれば、デコード処理に邪魔されて出力ができないということはなくなります。
ここまでが前段の説明。従ってVoyage MPD 0.75 でもyanさんのパッチは有効です。
ここからは何故RTパッチがあった方がいいかの説明。
アプリケーションをいくら“preempt”機能によりスムーズに動くようにしても、OS(カーネル)の割り込み処理が動っきぱなしになってしまうとスムーズな動きは妨害されてしまいます。通常はOS(カーネル)の割り込み処理は細切れに実行されるので、このような状態にならないように設計されていますが、ハードのクリティカルな処理では発生する可能性があります。これを回避するにはOS(カーネル)の割り込み処理も“preempt”(差し替え)可能にすることです。これがRTパッチの役割です。
RT化されていないLinuxではUSB出力とかNAS入力はカーネルの一部として処理されるので、処理中は割り込み不能で“preempt”(差し替え)可能になることはありません。
RTパッチとは、これらの割り込み処理をプロセスとして独立して見えるようにして、“preempt”(差し替え)可能にしたものです。
従って、yanさんのパッチを使ったチューニングの仕方に解説したように、Voyage MPD 7.0 ではUSB出力とかNAS入力の優先度を設定する(できる)わけです。
これで何が良くなるかというと、割り込み処理も含めて、よりきめ細かく様々な処理をコントロールできるようになっているということ。まあその分ややこしいわけです(^^;;;。
以上、僕の理解ですから、何か大きな勘違いしている可能性があります。お気づきの方は教えて下さい。
(PC_Audio) 2011/07/04
MPoD,MPaD用のジャケット写真転送サーバー(yanさん作成のプログラム)(2)
yanさんから修正版を送って頂いたので掲載します。
MPoD,MPaD用のジャケット写真転送サーバー修正版(mpodjacket.tgz)
上記のリンクからダウンロードできます。
以下、yanさんからのメールからの引用です。
修正箇所 1. rubyのバージョンが1.9以上の場合にoggファイルも サポートするようにした。 2. 起動オプションを設けソースをいじることを無くした。 3. 埋め込まれたイメージのmimetypeのハンドリングを行い image/jpeg以外は無視するようにした。 以前はimage/jpegを前提にしていたので、それ以外のイメージ が埋め込まれていた場合動作が不定であった。 4. readme.txtをソースとは別ファイルにした。
内容については readme.txt かMPoD,MPaD用のジャケット写真転送サーバー(yanさん作成のプログラム)を参照して下さい。
(PC_Audio) 2011/07/02
Beyond bit-perfect
この記事(Beyond bit-perfect)はとても面白いです。日本語での紹介はここにあります(このサイトの情報にもいろいろお世話になっています、作者に感謝です)。
特に以下の部分、
Addressing directly the HAL (AppleHAL_2) gives the possibility to bypass the two main overhead processes of the above standard mode
- Mixing buffer
- Float to DAC native format conversion
In Integer Mode (see figure 3) the player software supplies a stream already formatted in the native DAC format, thus optimizing synchronous CPU load at the driver level.
These operations performed inside the driver, in the kernel space, in real-time are on the critical path for sound quality as they are the most synchronous, happening at the very immediate moment of the data transfer to the DAC. So optimizing it is of great benefit, and this is only applicable to compatible DACs that offer this non-standard mode.
「なるほどなぁ」と思いました。
“Integer Mode”というのはデータを整数のままで扱うということだと思います。カーネルレベルでこの動作が保証され、完全な同期がとれるということですね。これは理屈としては VoyageMPD も同じで、Alsaで「hw:n,n」を指定した場合はデータストリームを直接カーネルに渡しているはずです。MACの場合、カーネルのベースはFreeBSDだと思いますが、同じようなアプローチができるということなのかしら。
Beyond bit-perfect というタイトルは凄いですね。ビットパーフェクトを超えたところに良い再生条件を整える鍵があるという指摘はもっともだと思います。ただそのあたりの詳細は企業秘密なのか、省略されているような気がするのだけど、どうなのかしら。
(PC_Audio) 2011/07/01
半角スペースと改行
掲示板の方に書きましたが、新調した掲示板でrubyのスクリプトを表示しようとしたら整形(半角スペースによる字下げ)が上手くいかないという問題が発生しました。
これはHTMLの仕様で、どこの掲示板でも起きる問題です。
詳細は「HTML 改行 スペース」をキーにしてググルと山ほど出てきますので省略しますが、コードの表示には都合の悪い仕様ですね。
まあ、HTMLを直接書いている分には、PREタグを使うという方法で回避はできますが、掲示板とかブログの書き込みなどだと、処理するプログラム次第ということになります(僕のサイトはマークダウンという書式をとっていますが、 PREタグを使えるようにRubyのスクリプトを変えて対応しています)。
yybbsという掲示板用のperlスクリプトは改行はBRタグに変換しているのですが、半角スペースはそのまま処理している(というか何も処理しない)ので、綺麗に整形したコードは醜いベタの表示となります。
「こまったなぁ」と思い、調べたら、CSSを使った解決策を発見。
white-space Attribute | whiteSpace Property
MSDNのサイトの中の記事です。簡潔明瞭よく書けています。
「なるほど、この『pre-wrap』というやつを使えば、ちゃんと表示できるわけね」と納得。
yybbsの初期設定するモジュール(init.cgi)のスタイルシート設定部分に『span { white-space: pre-wrap; }』という行を追加。
Firefoxでは見事に整形したコード表示できるようになりました。
問題は一番下のコメント欄に、「white-space: normal; Does not work in IE 8」とあること。
IE 8 で試したらダメですね。醜いベタ表示のまま。
掲示板利用者の1/3くらいはIEユーザなようなので、ちょっと問題ありですが、yanさんのコードの表示部分は全角のままとして、とりあえずこのままとします。ご了解よろしくです。
IE 9 だと問題ないのかもしれません。
P.S. しかし、マイクロソフトって、面白い会社ですね。自社のソフトに都合の悪い技術情報を自社のサイトで堂々と公開しているわけだから。福島で悪戦苦闘しているどっかの会社とはえらい違い。「立派な態度だなぁ」と思いました。
(internet) 2011/06/26
MPoD,MPaD用のジャケット写真転送サーバー(yanさん作成のプログラム)
yanさんが作成されたプログラムをプログラムを掲示板に公開して頂いたので、ご案内です。
MPoD,MPaD用のジャケット写真転送サーバー(mjacket.tgz)
上記リンクからダウンロードできます。
20110703 追記 修正版が提供されたので、リンクをはずしました。
修正版はここにあります。
プログラムの内容は以下の通りです。
# mpodjacket.rb # # MPoD,MPaD用のジャケット写真転送サーバー # # 1. 概要 # MPoD,MPaDからジャケット写真の要求があった場合、 # 以下の順序でジャケット写真を転送します。 # # (1) 指定されたファイルがあればそれを転送する # (2) 指定されたファイルがない場合は,指定されたフォルダーで # Folder.jpg,folder.jpg,Folder.jpeg,folder.jpeg # のいずれかがあれば,それを転送する。 # # (3) 上記のファイルがない場合は、 # 指定されたフォルダー内の # 音楽ファイル(*.flac, *.m4a, *.aif, *.ogg, *.mp3) # からイメージを抜き出し、それをFolder.jpgに保存してから # 転送する。 # # mpdが可動するホストまたはNAS上で動作します。 # mpodjacket.rbはrubyのスクリプトファイルです。動作させるためには # rubyが必要になります。 # ruby1.8以上で動作しますが、ogg ファイルを使用するためには # ruby1.9以上が必要になります。 # # # 2. インストール方法 # # (1)rubyをインストールします。 # # apt-get install ruby rubygems # # # (2)このスクリプトを適当なディレクトリにおいて実行パーミションを与えます。 # chmod +x mpodjacket.rb # # (3)このスクリプトは下記のrubyパッケージが必要です。 # ruby-audioinfo-0.1.7 # apetag-1.1.2 # cicphash-1.0.0 # flacinfo-rb-0.4 # mp4info-1.7.3 # wmainfo-rb-0.6 # ruby-mp3info-0.6.13 # ruby-ogginfo-0.6 # # gemでruby-audioinfoをインストールすると上記のライブラリが一度に # インストールされます。 # # # gem install ruby-audioinfo # # 起動方法 # # このスクリプトを/root/bin/mpodjacket.rbにおいた場合、 # # # /root/bin/mpodjacket.rb # # でフォアグランドで実行します。 # # 自動起動にする場合は、 /etc/rc.localに # # /root/bin/mpodjacket.rb >/dev/null 2>&1 & # # を追加してください。 # #
掲示板の方にスクリプトの内容は掲載されていますが、半角文字のインデントを正しく表示できないので、全角に変換し、表示しています。そのままでは動きません。従って、こちらからダウンロードした方が手間は省けるから思います。
Rubyを使うと、こういうサーバも簡単に作成できちゃうのですね。
(PC_Audio) 2011/06/22
「東京の闇、仙台の光、アメリカの陽光」
講読しているメルマガに掲載されていた冷泉さんの記事です。大変に印象的でした。
冷泉さんのレポートには感心することが多いのですが、これは特に出色の内容ですね。
ウェブでも公開されたので、リンクしておきます。
仙台は東京より明るい。九州も大阪も明るい。何故、東京だけにこんな変な闇があるのかを分析するレポートです。どこも素晴らしい指摘ばかりなのですが、僕が一番感心したのは最後のいくつかのパラグラフ。
ご紹介すると
ある東京のオフィスビルで、エスカレータが動いていたが、なんとそこには「他に階段がありませんのでやむを得ず運転しています。ご理解ください」とか「停止した状態で階段として使用しますと危険なので運転していますが、ビル全体としては節電に努めています」などという「動かしていることへの言い訳」が書いてあったことを紹介してから
『 たぶん、そのあたりに東京の「闇」があるのだと思います。地方から人材も資金も吸い上げて肥大化した挙句に、動きが取れなくなっているのです。震災という例外的な事態に対して、柔軟で機動的に行動するための知恵も原則もないまま、横並びでビクビク萎縮している、東京という街全体に何か病的なものが取り付いているとしか思えません。
考えてみれば、地方が疲弊しているから価格破壊のニーズがあるだろうと、激安居酒屋やネット販売のビジネスホテルを怒涛のように地方に持ち込んだのも「東京」ですし、人件費を削減しないと国際競争に勝てないと地方の工場を閉鎖して中国に持っていったのも「東京」なわけです。その一方で、「自分たちは被災しなかった」から申し訳ないと自粛してみたり、迷走の結果「闇」に閉じこもりつつあるのが「東京」なのでしょう。』
そして、菅おろしの政争のバカバカしさにふれたあと、最後に
『 もしかしたら、今回の震災を契機に本当に東京一極集中がジワジワと崩れていくのかもしれません。そんな中、関空とニューヨークを結ぶ直行便が就航したというニュースは明るい話題のように思います。ただ、運行しているのはJALでもANAでもなく、台湾の中華航空だというあたりが、現在の日本の状況を象徴しているのかもしれません。』
ご一読をお勧めします。
(others) 2011/06/17
「想定外」
この言葉、最初から「あやしげだなぁ」と思っていました。昨日、TBSの報道番組を見ていて眼から鱗。「うーむ、そうだったか」と思いましたね。
どういうことかというと、アメリカの原子力専門家のインタビューで「想定外」を「souteigai」と発音していました(字幕はもちろん「想定外」)。
「あれれ」と思って、「想定外」の英語を考えた。「unexpected」しか思いつかなかったですね。でもこれ「予想外」ですよね。
辞書を調べる。「想定外」なんて索引はないから(グーグル翻訳だとunexpected)、想定で引くと assumption、supposition、hypothesis なんて出てくる。よく分からないので、日本語の辞書で「想定」をチェック。新明快だと
- 想定
- 仮に、こういう状況・条件であると、決めること。 例文として「・・という想定のもとに」、「想定の域をでない」
だそうです。
「なるほどなぁ。そうだったのか」と納得。要するに「予想外」というと「何で予想できなかったのだ」といわれるから「想定外」という変な表現を使ったわけね。だから、海外の専門家も日本語で発音するわけなのね。政府か東電か、誰の悪知恵か知らないけど、本当に悪(ワル)だなぁ。
P.S. グーグル翻訳で「out of assumption」と入力したら、「想定外」と出ました。なるほど「仮定の外にある出来事だ」というわけね。
(others) 2011/06/12
memory.txt
直前の記事のyanさんのパッチに同梱されているテキストです。
内容はyanさんのパッチに関してLinuxのメモリ管理のやり方とチューニング方法を詳述したもの。
かなり専門的な内容なので、OSのメモリ管理の仕組みに関するある程度の知識が必要だと思いますが、とても興味深いものですので、yanさんの許可を頂き、独立したページとして公開します。下記のリンクからアクセスして下さい。
メモリについて by yan
僕の環境(Atom機、メモリ2GB)では効果の程は微妙なのですが(何か変わったような気はしますが)、512MBのAlix環境などでは効果があるのかなと思います。ご質問、ご感想、ご意見などは掲示板にどうぞ。yanさんもチェックされていると思います。
P.S.
Linuxのメモリ管理に関してはググれば山ほど情報はあります。お勧めは以下のサイト。上から順番に読めば、ある程度の理解は可能かと思います。
- 0.6 メモリ管理
- SourceForge.JP内のLinuxカーネル2.6のカーネルドキュメントの和訳のページ。全てはここからはじまります。
- プロセス・メモリー管理
- 日経ITProの記事。Linuxカーネルがどのようにコンピュータのメモリーを管理し,プロセス間での競合を防止しているかを詳細に解説したもので、必読です。
- カーネル・メモリー管理
- 上記記事の続き。カーネル・メモリー管理について詳述されています。
- Linuxメモリ管理の最先端を探る
- @ITの記事。タイトル通りですが、フラグメンテーションとVMに関する記述は参考になります。
P.P.S. 公開の準備でyanさんとメールでやりとりをしていて、とても貴重な情報を頂きました。asoyajiさんと僕の環境でメモリロックの評価が逆転する件への答えのヒントもあります。掲示板の方に公開しておきます。
(PC_Audio) 2011/06/11
yanさんのMPDのチューニング・パッチ最新版を公開しました
yanさんのMPDのチューニング・パッチ最新版を直前の記事の
Tuning Patch for MPD by yan
で公開しました。あわせて、バイナリ版も公開してあります。
以下、yanさんからのメールからの引用です。
変更内容は 1. mpd-0.16.2 のパッチも用意した 2. MPOD関連はパッチから外した 4. my-config.shもパッチから外し、config-sample.shとして アーカイブに含めた 5. readme.txt を若干変更した。 6. memory.txtを追加した。 メモリ管理関連の技術メモ及びmemlock,heap_reserveの 設定方法をまとめました。
インストールの仕方は
make clean <- 必要なら tar zxvf /media/usb0/mpd-rtopt-110605.tgz patch -p1 < mpd-0.17git-rtopt.diff <- 0.17git or patch -p1 < mpd-0.16.2-rtopt.diff <- 0.16.2 patch -p1 < buffer.c.diff ./autogen.sh sh ./config-sample.sh make make install echo DAEMON=/usr/local/bin/mpd >>/etc/default/mpd <- 必要なら
となります。config-sample.shの内容はお使いの環境に合わせて適当に編集する必要があります。
ご質問、ご感想などは掲示板にどうぞ。
(PC_Audio) 2011/06/11
Voyage MPD の英文のページを立ち上げました
内容はこれまで書いたものを整理統合したものです。チューニング関連の一部(GRUBとLAN)は新規に作成。最新のVoyage MPD(V0.7 20110208)ベースに古くなった記述は訂正しました。インストールからチューニングまで順番に整理して並べ替えましたので、まとめて最新の情報を得るには便利かと思います(下手くそな英語は大目にみてやって下さい^^;;;)。
目次ページをこちらにも掲載しておきます。
20110703 追記
Extra Tips(firewire)、Extra edition(MPD on SheevaPlug, mpodjacket.rb by yan)を追加
Voyage MPD —-Linux Music Environment For The Best Audio Performance—-
How to install and setup Voyage MPD
- What you need before Voyage MPD installation
- Full description of the installation operation for Voyage MPD
- Initial setup for Voyage MPD
- Setup Japanese environment
- Setup MPD
Operational Tips for Voyage MPD
- How to create bootable USB memory of Voyage MPD
- Control MPD by using Keypad board
- Auto Login method
- Multi Boot(GRUB2)
Update Voyage MPD for the best audio performance
- Build OSS from source code
- Build the latest version of Alsa (1.24)
- Build the MPD latest version (0.17.0)
Tuning Patches for MPD by yan
- Tuning Patches for MPD by yan
- Compiled binaries of MPD appling Tuning Patches by yan
- MPD tuning patches readme.txt by yan
Best Tuning Tips for Voyage MPD
- Play MPD from memory file
- Setup grub parameters for tuning
- NAS tuning setup
- Setup tuning parameters of Linux
- How to setup prioty for Voyage MPD
Extra Tips for Voyage MPD
All contents are based on the Voyage MPD v0.7 20110208 version.
Extra edition
(PC_Audio) 2011/06/11
音の違い(音色比較)について
asoyajiさんの掲示板に書き込んだのですが、上手く書き込めなかったので、多少ヴァージョンアップ(?)してこちらに書いてみます。
図を使った方が綺麗なのかもしれませんが、面倒なのでパス。
引用(preタグ)にすれば、コードの表示用だから、普通、等幅フォントが使われると思います。それでやってみます。
このページはマークダウンという記述法で書いているのですが、Rubyのスクリプトをちょっと改良して色を自由に使えるようにしたので、これも試してみます。
(1)atom330 + HD-7 + Voyage MPD Alsa
(2)atomN270 + RUDD14 + Voyage MPD Alsa
(3)atomN270/330 + Digital Link + Voyage MPD OSS
Voyage MPD インストールリファレンス(追補)–OSSを導入を参照
(4)玄柴 + RUDD14 + 組み込みDebian MPD Alsa
玄柴MPD開発日記(2)を参照
(5)amd5050e + kontakt8 + Voyage MPD FFADO
VoyageMPDでFirewireオーディオ機器を動かすを参照
眼前、リアル A | (5)amd 5050e + kontakt8 + FFADO (4)玄柴 + RUDD14 + Alasa | (2)atomN270 + RUDD14 + Alsa 綺麗で太い <---------------------------------------------> 繊細で柔らかい | (1)atom330 + HD-7 + Alsa | | (3)atomN270/330 + Digital Link + OSS | V 臨場感、雰囲気
再生環境は
- 玄柴、atomN270
- dac Job DA48, amp Job Pre & 150×2, sp Elac330CE + SW(Elac)
- amd5050e、atom330
- dac Job DA96, amp UnisonResearch Unico-P, sp EBTB Terra2 + SW(AAD)
まあ、僕の耳の信頼性の問題もあるし(^^;;;、再生環境で変わる部分が大きいと思いますので、この表がPCハードとソフトの特徴をそのまま示すとはいえませんが、ご参考まで。
asoyajiさんから「『繊細で柔らかい』のはHD-7の特徴ではないのか」というご指摘を頂いたのですが、確かにその通りだと思います。「玄柴 + HD-7」という組み合わせも試したことがあるのですが(1)と(4)の中間あたり((2)と同じあたり)に移動するという感じでしたので。ただ、同じHD-7なのだけど、玄柴の方が多少「太め」に聴こえたので、パソコンによる差もあるかなと思います。
ソフトによる差もそれなりですね。FFADOがリアル、太いという傾向、OSSは雰囲気重視、Alsaはその中間というところかな。
(PC_Audio) 2011/06/10
VoyageMPDでFirewireオーディオ機器を動かす
VoyageMPDではカーネルのFirewireサポートがあらかじめ組み込まれています。ただし、音を出すには、FFADOの最新版をビルドし、Jackをインストールしないといけません。Jackdを動かすための設定も必要ですので、結構大変です。
音はなかなかなので、やりたい方はどうぞ。RME Fireface 400 なんかも動くようなので、お勧めかもしれません。
今回の内容は以下のサイトの情報によります。
- ffado.org
- Linux Firewireサポートの本家。Konnekt8のsconsのパラメータはここの Device Support のぺージから頂戴しました。
- trac
- 上記、ffado.orgのWiki。重要な記事ばかりですが、特に「Installing FFADO from source」、「Why and how to avoid multiple parallel installations of jackd and FFADO」は要必読。
- Ubuntu Studio に関するTips/ハードウェア/Firewire接続のサウンドデバイス用の設定
- タイトルの通りです。VoyageのIEEE1339の設定状況を確認に役に立ちました。
- Voila, voila!
- FFADOのソースからのコンパイルは主にここの情報に助けられました。作者に感謝します。
- 本日のコーヒー
- mpd.confのjackデバイスの設定はここの情報に助けられました。作者に感謝します。
11/06/16 追記 ここから
Jack関連のページへのリンクが抜けていたので、追加
まあ、ffado関連の記事は少ないので、パッケージでインストールするなら参考になる情報はあまりありませんが。
11/06/16 ここまで
とりあえず僕の環境で音は鳴ったので、以下はその手順です。
リンク先のサイトの情報は僕の環境ではそのままでは使えなかったので、ハードとOS環境に依存する部分が多くあると思います。従って、環境が変わると、単なるコピー&ペーストでは、動かない可能性があります。ご自身の環境とコマンドの意味を理解した上で試してみて下さい。コマンドの意味についてはリンク先にあります。
僕の環境は以下の通りです。
- PC構成
自作の動画再生、DTM用に使っているマシン、Athlon X2 Dual-Core 5050e + ASUS M2NPV-VM、Mem 2GBytes、HDx3 合計 4TBytes。Antec Soloの筐体に納め、一応静音化。OSはWindows XP。今回は実験用にUSBメモリにVoyageMPDシステムをインストールしました。
Firewire機器は TC-Electronic Konnekt8 は ddc として使い、オーディオ装置とつながっています。
- Audio構成
da Job DA96, amp UnisonResearch Unico-P, sp EBTB Terra2 + SW(AAD)
以下、引用部分の色分けは、茶–OSの出力、青–コマンド入力、緑–エディターでの編集となります。
Voyage MPD のfirewire接続の確認
root@voyage:~# lsmod | grep -e 1394 -e firewire firewire_ohci 17362 0 firewire_core 31344 1 firewire_ohci crc_itu_t 981 1 firewire_core root@voyage:~# ls -l /dev/fw* crw------- 1 root root 253, 0 2011-06-06 02:14 /dev/fw0 crw-rw---- 1 root audio 253, 1 2011-06-06 02:14 /dev/fw1 root@voyage:~# grep . /sys/bus/firewire/devices/fw*/*_name /sys/bus/firewire/devices/fw0/model_name:Juju /sys/bus/firewire/devices/fw0/vendor_name:Linux Firewire /sys/bus/firewire/devices/fw1.0/model_name:Konnekt8 /sys/bus/firewire/devices/fw1/model_name:Konnekt8 /sys/bus/firewire/devices/fw1/vendor_name:TC Electronic
これらコマンド入力で何も出力されなければ、Voyage は接続されているfirewire機器を認識していません。諦めましょう(^^;;。
コマンドの意味についてはCheck your kernel modules and device permissionsを参照して下さい。
事前準備(コンパイル環境の整備と必要なモジュールのインストール)
リスト情報の更新とコンパイル環境の整備
root@voyage:~# emacs /etc/apt/sources.list deb-src http://ftp.jp.debian.org/debian/ squeeze main contrib
を追加
root@voyage:~# emacs /etc/apt/sources.list.d/voyage.list deb-src http://www.voyage.hk/dists/0.7 ./
を追加
何故上記のソース情報の追加が必要かについては、Voyage MPD でコンパイル環境を整えるを参照。とても丁寧に解説されています。
必要なモジュールのインストール
root@voyage:~# apt-get update 2011/06/19 次行にsubversionを追加 root@voyage:~# apt-get install aptitude build-essential libconfig++8-dev subversion
FFADOのソースコードをダウンロード。ライブラリとヘッダーファイルのインストール。
root@voyage:~# svn co http://subversion.ffado.org/ffado/trunk/libffado ffado-svn root@voyage:~# apt-get build-dep libffado
FFADOのビルド
コンパイル。インストール。
root@voyage:~# cd ffado-svn/ root@voyage:~/ffado-svn# scons PREFIX=/usr DEBUG=False ENABLE_OPTIMIZATIONS=True ENABLLE_FIREWORKS=False ENABLE_MOTU=False ENABLE_DICE=True BUILD_TESTS=True root@voyage:~/ffado-svn# scons install
コンパイルのパラメータについてはCompile and install FFADO from sourceを参照。
何故、PREFIX=/usrとしたかについてはWhy and how to avoid multiple parallel installations of jackd and FFADOを参照。
インストールが問題なく完了したか確認。
root@voyage:~/ffado-svn# ffado-test ListDevices ----------------------------------------------- FFADO test and diagnostic utility Part of the FFADO project -- www.ffado.org Version: 2.999.0-1985 (C) 2008, Daniel Wagner, Pieter Palmers This program comes with ABSOLUTELY NO WARRANTY. ----------------------------------------------- === 1394 PORT 0 === Node id GUID VendorId ModelId Vendor - Model 0 0x00016604084009bf 0x00000166 0x00000021 TC Electronic - Konnekt8 1 0x0011d800011e2d2d 0x000011D8 0x00000000 Linux Firewire - no message buffer overruns
という具合に繋がっているデバイスが表示されればOKです。
JACKのインストール
これはパッケージの導入ですみます。
root@voyage:~/ffado-svn# aptitude install libjack-0.116 libjack-dev libjackson-json-java root@voyage:~/ffado-svn# aptitude install jackd2-firewire
上段がMPDにjackを認識させるためのライブラリ。下段がfirewire(FFADO)対応のjackデーモンです。
MPD環境の設定
とりあえず、rootでjackサーバを立ち上げます。
root@voyage:~/ffado-svn# jackd -dfirewire -r44100 &
ポート名を表示。
root@voyage:~/ffado-svn# jack_lsp firewire_pcm:00016604084009bf_mic | inst | line 1_in firewire_pcm:00016604084009bf_mic | inst | line 2_in firewire_pcm:00016604084009bf_coaxial L_in firewire_pcm:00016604084009bf_coaxial R_in firewire_pcm:00016604084009bf_midi 0_in firewire_pcm:00016604084009bf_line 1 | main L_out firewire_pcm:00016604084009bf_line 2 | main R_out firewire_pcm:00016604084009bf_coaxial L_out firewire_pcm:00016604084009bf_coaxial R_out firewire_pcm:00016604084009bf_midi 0_out
使用ポートは coaxial L_out と coaxial R_out。
mpd.confにjack用のaudio_outputを追加。
root@voyage:~/ffado-svn# emacs /etc/mpd.conf audio_output { type "jack" name "mpd" ports "firewire_pcm:00016604084009bf_coaxial L_out,firewire_pcm:00016604084009bf_coaxial R_out" }
mpdのパスワードの変更とシェルの設定。
root@voyage:~# passwd mpd Enter new UNIX password: Retype new UNIX password: Last login: Wed Jun 5 08:51:25 2011 from 192.168.0.3 root@voyage:~# chsh mpd mpd のログインシェルを変更中 新しい値を入力してください。標準設定値を使うならリターンを押してください ログインシェル [/bin/false]: /bin/bash
何故、mpdユーザの設定変更が必要なのかについては、ユーザ mpd の設定についてを参照。
mpdユーザで再ログイン
MPDをリスタート。jackdを停止。rootから出て、mpdユーザで再ログイン。jackdを再スタート。
root@voyage:~/ffado-svn# /etc/init.d/mpd restart root@voyage:~# pkill jackd root@voyage:~/ffado-svn# exit mpdユーザで再ログイン mpd@voyage:~$ jackd -dfirewire -r44100 &
jackd起動時のオプションについてはUsing JACK with FFADOを参照。かなりチューニングの余地がありそうです。
長い道のりでしたが、これでめでたく音が出ました。
音はAlsaやOSSとは随分違いますね。
まあ使ったハード(Konnekt8)が原因かもしれませんが、芯のしっかりした、どちらかというとロックやジャズなどに合いそうな音色です。Windows との比較では断然こちらがいいです。
(PC_Audio) 2011/06/06
掲示板を移行しました
Nifty の掲示板サービスを使っていましたが、使い勝手が悪いので、フリーのCGIによる方法に移行しました。ここからアクセスできます。だいぶ読みやすくなって、操作性もよくなったかなと思います。
CGIはかなり昔に開発されたものですが、こちらにあったものを使いました(作者に感謝します)。言語はPerlですが、多少カスタマイズしています。Niftyのデータはコンバートツールを作成して、移行させました。
使い方は特に解説は不要だと思いますが、スパム対策で画像認証方式(画像の数字を入力する)をとっています(これはNiftyと同じ)。あと投稿後に記事の修正をしたい場合は暗唱番号(画像認証のための投稿キーの上)の入力が必要です。
CGI方式で正解だったのはデータの移行が出来たこと。
Niftyのフォーマットは(エディターの置換機能を使って変換したもの)
########## 掲示板開設のご案内 yo 2010/12/17 19:35 Voyage MPD を使いはじめて、Linuxオーディオに素晴らしい可能性があること気がつきました。 Voyage MPD 記事は僕のサイトにありますので、そちらをご覧下さい。 http://kubotayo.web.fc2.com/articles004.html 僕のサイトはブログ形式をとっていないのでコメントができません。この掲示板はサイトを補足 するために立ち上げました。Voyage MPD を中心として、Linuxオーディオに関連する情報を共有、 会話する場としてお使いしただければ、幸いです。 もちろん僕のサイトの他の話題にかんしてコメントしていただいても結構です。 http://homepage3.nifty.com/yo_kubota/index.html 窪田洋 %%%%%%%%%%
となっていて、これを(原データの改行は最後だけ(全体で一行)ですが表示の都合で途中に改行を入れています)
1<><>2010/12/17 19:35<>yo<><>掲示板開設のご案内<>Voyage MPD を使いはじめて、Linuxオーディオに素晴 らしい可能性があること気がつきました。<br>Voyage MPD 記事は僕のサイトにありますので、そちらをご 覧下さい。<br>http://kubotayo.web.fc2.com/articles004.html<br>僕のサイトはブログ形式をとってい ないのでコメントができません。この掲示板はサイトを補足するために立ち上げました。Voyage MPD を中心 として、Linuxオーディオに関連する情報を共有、会話する場としてお使いしただければ、幸いです。<br> <br>もちろん僕のサイトの他の話題にかんしてコメントしていただいても結構です。<br>http://homepa ge3.nifty.com/yo_kubota/index.html<br><br>窪田洋<br>
という具合に変換しないといけない。
変換用に作ったrubyのスクリプトはこれ。
if ARGV[0] != nil data = ""; fdata = []; ffdata = [] ctr = 1 # Niftyデータの読み込み open(ARGV[0]) do |f| while line = f.gets if (/##########/ =~ line) || (/&&&&&&&&&&/ =~ line) data << (line + sprintf("%d", ctr) + "\n") ctr += 1 else data << line end end f.close end # 変換 data = data.gsub(/##########\n([0-9]+)\n([^\n]+?)\n\n([^\n]+?)\n([^\n]+?)\n\n(.+?)%%%%%%%%%%\n/m)\ {$1 + "<><>" + $4 + "<>" + $3 + "<><>" + $2 + "<>" + $5} data = data.gsub(/&&&&&&&&&&&\n([0-9]+)\n([^\n]+?)\n([^\n]+?)\n\n(.+?)%%%%%%%%%%\n/m)\ {$1 + "<>" + $3 + "<>" + $2 + "<><><>" + $4} fdata = data.gsub(/\n/, "<br>").gsub(/<br>([0-9]+[<>]+201)/) {"\n" + $1}.split(/\n/) p1 = ""; p2 = ""; data = "" fdata.each {|l| if /^[0-9][0-9]*<><>/ =~ l l.scan(/^([0-9]+)[<>]+[0-9\/: ]+<>.+?<><>(.+?)<>/) {|a| p1=a[0]; p2=a[1]} ffdata << data data = "" data = data + l + "\n" end if /^[0-9][0-9]*?<>201/ =~ l l = l.gsub(/^([0-9]+<>)([0-9\/: ]+<>.+?<><>)(<>.+)/) {$1 + p1 + "<>" + $2 + "Re:" + p2 + $3} data = data + l + "\n" end } ffdata << data # 変換結果の書き込み open("logtest.txt","w"){|file| file.write(ffdata.reverse.flatten) } else print "error\n" end
案外簡単でしょ。前半と終わりのファイルの読み書きにかかっている部分を除くと、十数ステップです。
変換処理は正規表現の嵐という感じですが、そんなに難しくはありません。例えば変換部の一番最初の
data = data.gsub(/##########\n([0-9]+)\n([^\n]+?)\n\n([^\n]+?)\n([^\n]+?)\n\n(.+?)%%%%%%%%%%\n/m)\ {$1 + "<><>" + $4 + "<>" + $3 + "<><>" + $2 + "<>" + $5}
というのが例にあげたテキストの変換を行う正規表現です。変換するテキストと変換されるテキストを見比べれば大体何をやろうとしているのかは分かると思います。
?は最短のマッチングを指示する表現。マッチングの最後のmオプションは複数行の指定。
マッチングの()に対応する$1から$5が、それぞれ、メッセージ番号(読み込み時に挿入しています)、日時、名前、タイトル、テキストとなります。
Rubyで便利なのは複数のmethodをべたべたと貼り付けるだけで、面倒な処理が簡単にできること。
例えば
fdata = data.gsub(/\n/, "<br>").gsub(/<br>([0-9]+[<>]+201)/) {"\n" + $1}.split(/\n/)
というのは文字列内部の改行をすべて<br>(HTMLの改行)に変換して(最初のgsub)、メッセージの切れ目だけ改行(\n)に戻し(二つ目のgsub)、その改行を使ってメッセージ単位に分解(split)しているわけです。
また終わりのファイルの書き込みの
file.write(ffdata.reverse.flatten)
はffdataにツリー単位にブロック化されているテキストを逆順に並べ替え(reverse)、全部一まとめにしたテキトスに変換(flatten)しているわけですね。
それぞれ each を使って普通にプログラミングしたら10行以上かかる処理ですから、とても楽です。