表紙 TOP 記事 分野 別館 旧館 ARCHIVES 自己紹介 PROFILE 掲示板
Articles

YouTube動画の貼り付け方

直前の記事でYouTube動画を貼り付けていますが、画面の中央に持ってくるのに悪戦苦闘したので、備忘録メモです。

YouTube動画の貼り付け方ですけど、やり方が変わったようですね。以前はembedタグを使う方式だったのにiframeタグを使う方式に昨年頃変更になったようです。
これは簡単で動画画面下の共有ボタンを押して、埋め込みコードというボタンが出てくるので、これを押せばコードが表示される。あとはCopy&Pasteで処理できるので、問題はありません。
コードはこんな具合です。

<iframe width="560" height="349" src="http://www.youtube.com/embed/QdM9vDA9NJI" frameborder="0" allowfullscreen></iframe>

問題なのはこの時ディフォルトでは画面の左端に表示されること。HTMLタグを調べたらiframeでもalign=“center”が有効らしいので、これを試してみたのですが、梃でも左から動かない。

<iframe align="center" width="560" height="349" src="http://www.youtube.com/embed/QdM9vDA9NJI" frameborder="0" allowfullscreen></iframe>

変だなぁと思ってググるが、日本語のサイトには答えはなくて、結局ここにありました。
スタイルシートと組み合わせて設定しないといけないのですね。
cssのbody句に以下のように追加設定する。

body {
  text-align:center;
}

次にiframeにスタイルを記述する。

<iframe style="margin:0 auto" width="560" height="349" src="http://www.youtube.com/embed/QdM9vDA9NJI" frameborder="0" allowfullscreen></iframe>

という具合です。

(internet)   2011/05/26

コメントする

10センチの穴

「やっぱりメルトダウンしていました」とか、「実は格納容器に10センチの穴が空いていました」とか、なんで突然、ペラペラ白状しだしたのかなと思ったら、海外(IAEA)からこわいオジサンたちがやってきて取り調べ中なのですね。

国内の甘いマスコミ相手ならバレないから、とぼけておいて、海外からの厳しい追求には耐えられなさそうと分かると、真実を明らにするとは。あきれた会社だねぇ。 「海水の注入を中断した、しなかった」にいたっては、首相を退陣に追い込むためのヘボな謀略とその失敗という感じがするけど、勘繰りすぎかなぁ。これじゃ、現場で必死に復旧に頑張っている方々がうかばれないなぁ。 #####2011/05/26 [コメントする](http://mimizukobo.sakura.ne.jp/cgi-bin/xzwvy.cgi) 耐えたケセン語聖書 =========(others) 今日の毎日新聞夕刊の記事。 『津波で全壊した岩手県大船渡市の出版社の倉庫から、新約聖書を地元の方言に訳した「ケンセ語訳 新約聖書」が見つかり、「大津波に耐えた聖書」と注目を集めている。 大船渡市のお医者さんが、陸前高田氏など気仙沼地方の方言を「ケセン語」と命名し、新約聖書の中の四つの福音書をギリシャ語の原典からケセン語に翻訳したもの。 旭川市の文化財団で「津波の洗礼を受けた聖書なんて聞いたことがない」として販売していくことになった。』 というような内容なのですが、面白かったのは翻訳の内容。 マタイ受難曲クライマックスの 『Eli; Eli; lama, lama asabthani! ---- わが神、わが神、なぜわたしをお見捨てになったのですか』 という部分が 『神様んすぅ、神様んすぅ、なして(何故)おれ(俺)ぁどごぉ見捨てやりぁしたれ ? 』 となるのだそうです。 うーむ。、バッハの曲にピッタリではないか。誰か歌ってみませんかね。楽譜を引用しておきます。 [![mathew(align=center width=900 hspace=20)](./007/mathew.jpg)](./007/mathew.jpg) E(かみ) -(さま) li(んすぅ) E(かみ) -(さま) li(んすぅ) la(なし)ma(て), la(お)ma(れぁ) a(どごぉ) -(み) sa(すて) tha(やりゃ) ni!(したれ) という具合です。 #####2011/05/25 [コメントする](http://mimizukobo.sakura.ne.jp/cgi-bin/xzwvy.cgi) 「動機が不純」 =========(others) [『日本経団連の米倉弘昌会長は23日の記者会見で、電力会社の発送電分離について、「東京電力の賠償問題に絡むもので、動機が不純だ」と批判した。』](http://headlines.yahoo.co.jp/hl?a=20110523-00000446-reu-bus_all) あきれはてましたね。「動機が不純」なのはどちらだろうか。 東京電力の賠償問題に絡んでも、絡まなくても、電力会社の発送電分離について議論するのは当たり前でしょ。「動機が不純」なのは経済的合理性の論議を無視して、既得権益を守ろうとする経団連(電力会社)じゃないの。 そもそもこの人、原発事故直後に「千年に1度の津波に耐えているのは素晴らしいこと。原子力行政はもっと胸を張るべきだ」と言っているらしいけど、かなり能天気だね。 まあ、東電介護(?)シフト、しょうがなしにこういう発言をしているのだろうけど、これじゃ逆効果ですね。 #####2011/05/24 [コメントする](http://mimizukobo.sakura.ne.jp/cgi-bin/xzwvy.cgi) Alsaの最新版をビルド(2) =========(PC_Audio) 掲示板にやりとりが[残っています](http://mimizukobo.sakura.ne.jp/cgi-bin/bxzwvy/read.cgi?mode=all&list=topic&no=102#107)が、前回の内容ではヴァージョンメッセージが

(pre)

と表示できないようです。 asoyajiさんのレポートで「変だなぁ」と思い、テスト用の環境で試してみたら、同じ状態が再現。 configureは

(pre)

と終わります。最後のconfig.h、config1.h、version.h、autoconf-extra.hが「is unchanged」というのが変ですかね。 ただ、makeは

(pre)

make installは

(pre)

という具合に正常に終了します。 悩みましたが、ヴァージョンメッセージを正しく出力する時のビルドの古いログを眺めて、

(pre)

というのに気が付きました。 この時のconfigureは

(pre)

となっていて、「is unchanged」なのはversion.hだけ。 どうもこれが原因でヴァージョンメッセージが正しく表示されなくなるようです。 以前の記事を書いた時、リムーブの必要性が分かっていないで、たまたまちゃんと処理していたのですね(^^;;;。 という次第で、ドライバをビルドする前に以下の操作を行って下さい。

(pre)

asoyajiさんに「ログを調べて頂戴」なんて返事している暇に、自分のログを調べるべきでしたね(^^;;。 ご協力いただいたasoyajiさんに感謝します。 #####2011/05/22 [コメントする](http://mimizukobo.sakura.ne.jp/cgi-bin/xzwvy.cgi) オーディオファイルのための Linux Tips =========(computer) 僕はれっきとした(?)Windowsユーザです。メインマシンのOSはWindows7。ブラウジングもメールのやりとりもサイトの更新もCDの取り込みも全てメインマシンでやっていて、VoyageMPDや玄柴MPDの操作もWin7のPuttyからです。カーソルキーなど特殊キーは大好きだし、キーボードよりマウスが好きだし、viは苦手だし、愛用のエディターは meadow/emacs ではないし、正規表現のコーディングも Windows の Rubyで使っています。 まあ、Windowsユーザ定番の IE、OE、Officeという世俗的(?)なソフトは嫌いですので、FireFox、EdMax、OpenOfficeを代わりに使っていますが、その程度です。 という次第で、以前にも、ちょっと書いたことがありますが、「(Windowsユーザが大部分である)オーディオファイルのためのLinux Tips」。自分自身のための備忘録ですが。 ### プログラムのインストール Windowsの場合はプログラムはバイナリで提供され、インストラーが付いて提供されるのが当たり前ですが、Linuxの場合は大分違います。 Windowsユーザからみて最も手ごわいのはソースからコンパイルしないといけないやつ。普通、ダウンロードしたTarボールにReadmeなりInstall関連のドキュメントがあり、それを読めばやり方は書いてあります。ただ、解読にはある程度のLinux知識が必要です。 あと、プログラム名とbuild、compile、makeなどをキーワードにして、ググれば、それなりの情報をgetできることが多いです(僕はもっぱらこの方法でしのいでいます)。 まあ、いずれにしても大変ですので、どうしようもない場合を除いて、バイナリでインストールする方法に頼った方が楽です。 バイナリで提供される場合は簡単です。VoyageMPDの場合、Debian系列のLinuxですので、ネットワーク経由なら apt-get 又は aptitude、debファイルならば dpkg -i でインストールできます。 apt-get と aptitude の違いがいまいち分からないのですが(^^;;、apt-getでだめだったら、aptitude を使うという方法でやっています。 dpkg はインストール済のパッケージの内容を確認するのにも使えます。「dpkg -l」全パッケージを「dpkg -s パッケージ名」で指定したパッケージの詳細を確認できます。 注意しないといけないのは Linuxの場合はディストリビューションによってバイナリのインストールの方法が違うこと。従って、ググる時はdebianをキーワードに付けるといいです。 Voyageの初期状態ではaptitudeはインストールされていないので

(pre)

しておく必要があります。 ### シェルプログラムの実行 Linuxの場合、実行の権限もアクセス権で管理されています。[アクセス権](http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230728/)につてはリンク先を読んで頂くとして、面倒なのはシェルスクリプトも実行権限を管理されること。エディターでテキストとして作成したものをいちいち 「chmod 755 シェルスクリプト名」しないといけない。 しかし、これは逃げ方があって、

(pre)

読み出すことが許可されていれば、実行できます。 ### ファイルの圧縮と解凍、展開 Windowsの場合は圧縮解凍プログラムのアイコンにドラッグドロップですみますが、Linuxはコマンドで行います。 分かりにくいのは、圧縮解凍するプログラム(compress、gzip、bzip2)と書庫化展開するプログラム(tar)が分かれていること。ただし、コマンドとしてはtarを呼び出すだけで圧縮、展開できます。 書庫化するだけ

(pre)

上記を展開

(pre)

gzip圧縮して書庫化

(pre)

上記を解凍して展開

(pre)

というところ。 「rvf」とか「xvf」とかいうオプションが複雑そうですが、仕組みを知れば、実は簡単。 「f」というのはtarがもともとディスクの内容を磁気テープに書き出す(バックアップ)するためのものだった時の名残で、ファイルを強制的に指定しています。これを指定しないと、磁気テープ装置を虚しく探しにいって、エラーで終わることになる。 「v」というのは多分viewの略で処理の過程を表示する。省略できますが、省略すると他のコマンドのように上手くいってもダンマリを決め込むことになります。 となると残りは「r x z c」となり、これで書庫化か展開かとか、圧縮方式とかを指定しているだけです。それぞれの意味についてはググれば山ほど紹介するサイトがあるので、そちらにお任せ。 ### USBデバイスの取り外し 最近のLinuxは進化していて、大抵のデバイスは自動的にマウントされるのですね。昔は大変だったのになぁ。それなのに、「Linuxは操作が複雑」などというのは時代錯誤のたわごとかもしれませんね。 という次第で、VoyageMPDもれっきとしたLinuxですから、USBデバイスは自動マウントします。 問題は取り外すとき。WindowsでもGUIでUSBデバイスの取り外しという操作を行いますが、Linuxでは以下の通りコマンド操作します。

(pre)

sync というのはファイルの書き込みを強制的に行わせるコマンドです。これをやらないと更新したファイルが正しく保存されないことなりますので、ご注意下さい。 書き込みをしていなければ、umountだけでいいのもしれません。 05/16 追記 差し込んだUSBメモリのデバイス名を見つける方法(dfコマンド)を書き忘れましたので、追記します。

(pre)

容量(4GB)と名前(/media/usbn)から、一番下の/media/usb0が差し込んだメモリと分かります。 VoyageMPDでは、特に外付けディスクがなければ、通常は/media/usb0となります。 ### 軽いエディター jed(yanさんに教えてもらいました)とnano(玄柴のDebianでディフォルトで入っていました)があります。

(pre)

でインストールできます。 jedはemacsの簡略版という感じ。 nanoはnotepad(Linuxユーザのために補足すると、Windows添付の簡易エディターです)のLinux版という感じ。 ですね。 「viはWindowsユーザの敵だ。だけど、emacsは複雑すぎてワケワカメ。これも敵だ」という方々にお勧めします。 #####2011/05/14 [コメントする](http://mimizukobo.sakura.ne.jp/cgi-bin/xzwvy.cgi) Alsaの最新版をビルド =========(PC_Audio) 際限がないという感じもしますが、やってみました。 直前の記事にあげたリンク先でAlsaを最新版にすると音が良くなるという記述があって、試してみたということです。 やり方は比較的簡単ですが、バックアップをとっていないと、元に戻す方法はないので、自己責任でお願いします。 参考にしたサイトは以下の二つです。 - [HdaIntelSoundHowto](https://help.ubuntu.com/community/HdaIntelSoundHowto) - [Alsa 1.0.24 in Ubuntu 10.10](http://duopetalflower.blogspot.com/2011/02/alsa-1024-in-ubuntu-1010.html) まず、関連するモジュールのインストール

(pre)

ドライバーソースをダウンロード、展開

(pre)

ドライバーをビルド。 usb-audioのみをビルドし、不要な機能は取り込まないように指定(「./configure --help」でパラメータは確認できます)。

(pre)

アップデートされたことを確認

(pre)

これだけです。簡単でしょ。 あと、ライブラリとユーティリティもビルドしたければ、

(pre)

で出来ます。 「ln -s」の意味はリンク先を参照して下さい。 肝心の音はですが、よく分からんです(^^;;。よくなったような気もするが、気のせいかもしれないというレベルですね。 あとは、いよいよカーネルのビルドしか残っていないなぁ(^^;;;。 05/08 追記 configure時にCの最適化オプション(CFLAGS)を指定を忘れていたので追加しておきました。 05/21 追記 「ドライバーソースをダウンロード、展開」の中で「tar」と「cd」の順序が逆だったのを修正しました。 #####2011/05/08 [コメントする](http://mimizukobo.sakura.ne.jp/cgi-bin/xzwvy.cgi) MPDの最新版をビルド(2) =========(PC_Audio) 前回の記事の内容だと一部のハードで音が出なくなるので、訂正しておきます。 このトラブルはyanさんのご協力で解決できました。ありがとうございました。 訂正は「MPDビルド時にlibsndfileがインストールされていると、24ビット(S24_3LE)対応のハードでwavファイルが再生できなくなるので、明に--disable-sndfileを設定する必要がある」という内容です。16ビット(S16_LE)及び32ビット(S32_LE)対応のハードではこの問題は発生しません。 S24_3LEというのはwavファイルのフォーマットのことで、24bit3byts構成で [Little Endian形式](http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3)のデータを意味です。音源のハードウェアがどのフォーマットかは以下の通りチェックできます。

(pre)

これは僕の使っているフェーズテック社のUSBDAC(HD-7A)ですが、問題が起きるハードだと分かります。 次に、なぜ音が出なくなるかですが、話はVoyageMPD登場前にさかのぼります。 Computer Audiophileの[New mpd feature = cleaner signal](http://www.computeraudiophile.com/content/New-mpd-feature-cleaner-signal)という記事の情報によると、24-bit USB DAC に対する音質改善のため、mpdの改良が行われています。この記事はMPDの音質に関する大変興味深いやりとりがあり参考になります。例えば以下のような書き込みがあります。 S24_3LEハードでmpd.confのaudio_outputの「hw:n,n」を「plughw:n,n」と変えると(「hw:n,n」の行をコメントアウトしても同じ)、wavファイルは再生できるようなるのですが、音質は悪化します。これは上記の記事にあるように「plughw:n,n」を指定するとビットレートが48000、16ビットに固定されて、余分なフォーマット変換が入ってしまうためです。 本題に戻って、音が出なくなる理由です。 libsndfileというはC言語のライブラリで(libsndfileについては[Wikipediaのlibsndfileの解説](http://en.wikipedia.org/wiki/Libsndfile)を参照して下さい)、wavファイル間のフォーマット変換に使用されます。MPDもこれを利用しています。wavファイル間のフォーマット変換とは例えば16ビットのデータを24ビットのデータに変え整合性をとることです。CDフォーマットのデータは16ビットですので、これを24ビットのハードに送り出すというような場合に変換が必要になります。 さて、このlibsndfileですが、MPDでwavファイルの 16 → 24 ビット変換時の動作に問題があるようです。デバッグ用のログを出力させてwavファイルを再生すると

(pre)

wavフォーマットを「audio_format=44100:32:2」と誤認識し、「converting from 44100:32:2」となりますので、何も再生されないことになります。 「/usr/local/bin/mpd --no-daemon --stderr --verbose /etc/mpd.conf」というのは、yanさんに教えて頂いたのですが、MPDの状態モニタになかなか便利な魔法の呪文です。 flacファイルでは

(pre)

こちらは正しく認識、処理されています。 面白いのは16ビット対応の音源(PS-Audio Digital Link)では次のようになること。

(pre)

wavフォーマットを「audio_format=44100:32:2」と誤認識しているのだけど、音はちゃんと再生できます。偶数倍だからうまくいくのですかね。 ちなみに、stream0は以下の通り。

(pre)

また脱線したので、本題にもどります。 この問題を回避するため、MPDは上記の音質改善対応で sndfileを使わないようにしているようです。 推定ですが、16→24ビットにするのに、実際には変換するわけでなく、ビットオフの下位8ビット(0x00)を付与するだけだと思います。 ところがMPDのビルドでsndfileのディフォルトはenableなので、libsndfileのインストールされたシステムで--disable-sndfileを指定しないでビルドすると上記の誤認識が発生してしまいます。 MPDのビルドのパラメータですが、tarボールを展開したディレクトリで

(pre)

で表示させることができます。 このため、VoyageMPDはこの問題を回避するため「--disable-sndfile」を指定しているようです。 「/usr/local/bin/mpd -V」で確認するとビルド版は

(pre)

と表示されますが、VoyageMPDに組み込まれている「/usr/bin/mpd -V」では何も表示されません。 ちなみに、「--disable-sndfile」を指定しビルドしたMPDでは

(pre)

という具合になり、flacと同じように正しく処理されていることが分かります。 尚、[掲示板Head HiのBest MPD Setupという記事](http://www.head-fi.org/forum/thread/514211/best-mpd-setup/30)に情報がありますが、sndfileが組み込まれていても mpd.confに

(pre)

を追加するという方法でも解決するようですが、どうせビルドするのだから、ビルドのパラメータの設定でやった方がよいと思います。 本題と関係ありませんが、上記「Best MPD Setup」のコメンツツリーはMPDのチューニングやハード、ソフトに関する興味深い記事が多く、お勧めです。「玄柴」の元になっているSheevaPlugの兄弟分のハードでMPDを動かしているなんて報告があってビックリ。「やっぱり、グローバルには、皆、同じようなことやっているのね」と感心しました。 説明がゴタゴタしましたが、要するにMPDのビルドで問題をおこさないためには、「--disable-sndfile」とすることです。 尚、ビルドのパラメータ設定については、「[MPDのチューニング・パッチ(2)](X)」で紹介した yanさんの mpd-rtopt-2 に含まれるmy-config.shを使うと楽です。使い方はreadme.txtにある通りですが、

(pre)

として、libgoogle-perftoolsをインストールしておいた方がよいでしょう。ただし、libgoogle-perftoolsでビルドすると同じライブラリの入っている環境のみでしかモジュールが動かなくなるので、要注意です(バイナリの配布には使えない)。 前回の記事とmpdinstall.tgz、mpdbuild.tarは修正しておきました。 mpdbuild.tarをお使いの方はmy-config.shの修正版(mpdinstall.tgz作成用に使ったもの、--disable-sndfile設定済)を同封してありますので、そちらで、再度、ビルド作業を行って下さい。 古いmpdinstall.tgz(日付が4月のもの)でインストールして、新しいmpdinstall.tgzでインストールする場合は同封のmpdinstall.shは使用せず、rootでログインし、

(pre)

としてください(/media/usb0の部分はtarボールの置いてある場所で変わります)。 #####2011/05/03 [コメントする](http://mimizukobo.sakura.ne.jp/cgi-bin/xzwvy.cgi) 世界で一番美しい「元素図鑑」 =========(review)

著者は米国のサイエンスライタにして元素コレクタ。

100番までの全ての元素を解説し、関連する写真を集めた本です。とても上手くまとめられいて、眺めているだけでも楽しい。

LPレコードよりちょっと小さめ。縦25cm横25cm位の正方形、厚さ4cm、重さは出来の悪いノートパソコンより重いです。3Kg位あるかな。とても寝ころがって持てない。でも、楽しく読めて、読みごたえのある本です。
内容はエロティックな要素の無い(^^;;「大人の絵本」というところ。

今、話題の(^^;;;、水素とか、ホウ素とか、ウランとか、プルトニウムとか、に関しても丁寧に解説されています。

ちなみに、プルトニウムについて。

「プルトニウム核爆弾は、一見簡単に作れそうに思えるかもしれません。たしかに、十分な量のプルトニウムを得るのはそんなに難しくはありません。原子炉が一基必要ですが、ウラン同位体の分離に比べれば子供のお遊びみたいなものです。事実、ひとりの少年が本気でそれをやろうとしたことがあります。1995年、デイビッド・ハーンという高校生が自宅裏に増殖炉を作って、大騒ぎになりました。彼のミニ原子炉は実際にうまく作動しただろうと考える人もいます。
それはともかく、信じがたい偶然の恩寵により、プロルトニウムを作るのは比較的簡単でも爆弾にするのはおそろしく難しいのです。プルトニウムはウラン235よりずっと分裂しやすく、臨界未満の固まりを二つ衝突させようとしても、接触する前に反応が始まってその反動で飛び散ってしまい、連鎖反応はおきません。広範囲に放射能がまき散らされはしますが、都市を焼き尽くすのは無理です。」

福島で起きていることって、これなのかしら。ちょっと違うのかな。

「プルトニウムで核爆発を起こさせるには、完璧に近い「爆縮レンズ」を使って球体を表面から内破させ、臨界量のプルトニウムを一転に集める必要があります。衝撃波の加わり方がわずかでも非対称になれば、プルトニウムはその抜け道を通って逃げてしまいます。現代ですら、プルトニウム核分裂型爆弾の製造は最高の金属工学、爆破技術、製造技術を結集しないとできません。素人が作っても、まず間違いなく不発でしょう。」
だそうです。

直前の記事のVoyageMPDのチューニングしながら、読んでいたのですがなかなかいいです。集中して音楽を聴いた後のリラックス用に。
こんな元素、知らなかったなぁというのが大部分だけど、ヴィジュアルに、かつ簡潔、丁寧な解説で何か分かったような気がする(^^;;。楽しく読みました。

(others)   2011/05/01

コメントする

MPDのチューニング・パッチ(5)

「OSがその配下で動くプログラムをどうコントロールしているか」なんて情報は普通は知る必要のないことですが、チューニングするためにはある程度の知識が必要です。この記事はなるべく前提となる知識なしで理解できるように書くつもりですが、参考にした情報源を以下にあげておきます。


VoyageMPDのチューニング

どれだけ安定的に音楽データを音源に送ることができるかで音の良いソフトは決まるはずです。

「そんなもん、ハードを速くすれば問題ないだろう」というご意見はあるかもしれませんが、大震災の翌週に起きた某銀行のトラブルを思い出して頂ければと思います。最高速のハードとネッワークをもってしても、ちょっとしたデータ量の増大に対処できず、一週間トラブルったわけだから。

OSのマルチタスク処理

音を鳴らす(音楽データを音源に送る)処理は、

という要素からなり、シーケンシャルには処理できないので(シーケンシャルに処理すると演奏開始まで長時間待たされることになる)、通常、これらは同時に並行して処理されます。
Linuxの場合これらの個々の処理はプロセス又はスレッドと呼ばれる単位で管理され、OSが定めたルールで全ての処理が「なるべく円滑に」行われるようコントロールされています。

この「なるべく円滑に」を担保するキーワードが「優先度」、「割り込み」、「占有時間」、「プリエンプティブ」です。

「優先度」とは
個々の処理を行うプロセス又はスレッド毎に付けられる優先度の数値です。OSは優先度の高いプロセス又はスレッドを優先的に動かします。優先度は Voyageのようなリアルタイムカーネルではマイナスで表現されマイナスの数が大きい程優先度は高くなります。
yanさんパッチはここに着目したもので、この優先度の設定をMPDのスレッド単位に可能にして、「なるべく円滑に」音楽再生処理を行わせ、音を良くしようというものです。
「割り込み」とは
OSに今やっている処理を一時中断させ、緊急処理させるための信号のことです。音楽の再生では、NASやUSBと絶え間なくデータのやりとりを行っています。「USB音源に100バイト分データを送り終わったよ」、「NASから100バイト分データを受け終わったよ」というようなタイミングで、ハード(ファームウェア)は次の処理を促すため、OSに信号を送ります。これが「割り込み」です。OSはこれを受けて適当なプロセス/スレッドを動かし、ハードに対する次の処理を優先的に行うという仕組みになっています。

一般にこの割り込みで制御を渡されるプロセス/スレッドの優先度は高いです。Voyageの場合、ハードウェアの割り込み処理のディフォルトの優先度は全て-51です。この値は、RTレベル(絶対に割り込まれないで処理が終わるまで動き続ける)で動くプロセスを除くと、最優先となります。

root@voyage:~# cat /proc/asound/version 
Advanced Linux Sound Architecture Driver Version 1.0.24.
Compiled on May  7 2011 for kernel 2.6.33.7-rt29-voyage (SMP).

また、割り込み処理にはソフトウェアによるものがあります。これはメモリとかCPUの管理のため、ソフトで意図的に割り込みを発生させ、優先処理しようとするための仕組みです。プロセス番号の若い並びで sirq-XXXXn と表示されるものはソフトウェア割り込みのプロセスです。Voyageの場合、こちらも優先度は高く設定されていて、ハード割り込みに次ぐ-50という数値です。

・・・
configure: creating ./config.status
config.status: creating version
config.status: creating Makefile.conf
config.status: WARNING:  Makefile.conf.in seems to ignore the --datarootdir setting
config.status: creating snddevices
config.status: creating utils/alsa-driver.spec
config.status: creating utils/buildrpm
config.status: creating toplevel.config
config.status: creating utils/alsasound
config.status: creating utils/alsasound.posix
config.status: creating include/pci_ids_compat.h
config.status: creating include/i2c-id_compat.h
config.status: creating include/config.h
config.status: include/config.h is unchanged
config.status: creating include/config1.h
config.status: include/config1.h is unchanged
config.status: creating include/version.h
config.status: include/version.h is unchanged
config.status: creating include/autoconf-extra.h
config.status: include/autoconf-extra.h is unchanged
Hacking autoconf.h...
「占有時間」とは
OSはプロセス/スレッド毎にどれだけのCPU時間を使ったか監視しています。これは複数のプロセス/スレッドが多重に処理する時、特定のプロセス/スレッドがCPU時間を独占しないようにするためです。OSはあるプロセス/スレッドのCPU占有時間が一定の時間連続したら、そのプロセス/スレッドを止めて、別のプロセス/スレッドを動かします。
リアルタイムレベルの優先度で動くプロセス/スレッドについてはこの仕組みが働かないことに注意する必要があります。
リアルタイムレベルでCPUを大量に使うプロセス/スレッドの優先度を高くしすぎると、他のプロセス/スレッドが動けなくなります。音楽再生で長時間CPUを占有する処理はデコード処理です。
「プリエンプティブ」とは
プリエンプティブ」とは差し替え可能なという意味。OSがプロセスやスレッドを必要に応じて自在に入れ換える仕組みのことをいいます。リアルタイムカーネルでプロセス/スレッドを処理する場合、この入れ換えのルールは単純です。
OSはハード又はソフトで割り込まれた時。各プロセス/スレッドの優先度をチェック。一番優先度の高いプロセス/スレッドを実行します。
リアルタイムでないプロセス/スレッドのCPU占有時間も考慮され、もっと複雑なルールになっていますが、リアルタイムレベルの優先度が指定されているプロセス/スレッドの場合は上記のルールだけです。


基本的なルールはこれだけです。従ってリアルタイムカーネルでプロセス/スレッドがリアルタイムの優先度を設定されている場合、話は単純で、優先度をプロセス/スレッドの処理の内容とCPU占有度を考慮してどう設定するかが勝負となります。

音楽再生に関するプロセス/スレッド

以下は、NAS接続で音楽データを読み込み、USB接続の音楽デバイスを鳴らすという条件で解説します。

最初に音楽再生に関するプロセス/スレッドを洗い出します。

まず、ハード割り込み処理するプロセスを調べます。

  Building modules, stage 2.
  MODPOST 10 modules
  LD [M]  /root/Alsa/alsa-driver-1.0.24/acore/oss/snd-mixer-oss.ko
  LD [M]  /root/Alsa/alsa-driver-1.0.24/acore/oss/snd-pcm-oss.ko
  LD [M]  /root/Alsa/alsa-driver-1.0.24/acore/snd-hwdep.ko
  LD [M]  /root/Alsa/alsa-driver-1.0.24/acore/snd-page-alloc.ko
  LD [M]  /root/Alsa/alsa-driver-1.0.24/acore/snd-pcm.ko
  CC      /root/Alsa/alsa-driver-1.0.24/acore/snd-rawmidi.mod.o
  LD [M]  /root/Alsa/alsa-driver-1.0.24/acore/snd-rawmidi.ko
  LD [M]  /root/Alsa/alsa-driver-1.0.24/acore/snd-timer.ko
  LD [M]  /root/Alsa/alsa-driver-1.0.24/acore/snd.ko
  LD [M]  /root/Alsa/alsa-driver-1.0.24/usb/snd-usb-audio.ko
  LD [M]  /root/Alsa/alsa-driver-1.0.24/usb/snd-usbmidi-lib.ko
make[1]:  `/usr/src/linux-headers-2.6.33.7-rt29-voyage' 
utils/link-modules /root/Alsa/alsa-driver-1.0.24

ALSA modules were successfully compiled.

一時間位音楽再生した状態ですが、CPU0の16、19、timerの割り込みだけが動作していることが分かります(CPUnの部分に表示される数値が割り込み回数です)。
割り込み番号(左端)の16はNAS、23は音源のようです。
USB音源の割り込み回数は60万回ありますから一秒間に200回位割り込まれていることになります(5msに一回)。
タイマーの割り込みの回数はもっと多いことも分かります。
またNASの割り込み回数はUSBの半分以下ですから、データのやりとりの単位は倍以上なのですかね。
何をいっているかというと、優先度を割りつける時、USBとタイマーの優先度を高くするのが方が賢明ということです。

0508追記
「USBとタイマーの優先度を高くするのが方が賢明」はどうも誤りであったようです。コメントを参照して下さい。

次に対応するプロセスの名前と優先度を調べます。

・・・
mkdir -p /lib/modules/2.6.33.7-rt29-voyage/kernel/sound/usb
cp snd-usb-audio.ko snd-usbmidi-lib.ko /lib/modules/2.6.33.7-rt29-voyage/kernel/sound/usb
・・・

ハード割り込みですのでディフォルトの -51となっています。
次にソフト割り込み処理のプロセスですが、タイマー処理は以下の通り。

root@voyage:~# apt-get remove alsa-base

こちらはディフォルトが -50です。
次に演奏中のtop画面を観察。

・・・
configure: creating ./config.status
config.status: creating version
config.status: creating Makefile.conf
config.status: WARNING:  Makefile.conf.in seems to ignore the --datarootdir setting
config.status: creating snddevices
config.status: creating utils/alsa-driver.spec
config.status: creating utils/buildrpm
config.status: creating toplevel.config
config.status: creating utils/alsasound
config.status: creating utils/alsasound.posix
config.status: creating include/pci_ids_compat.h
config.status: creating include/i2c-id_compat.h
config.status: creating include/config.h
config.status: creating include/config1.h
config.status: creating include/version.h
config.status: include/version.h is unchanged
config.status: creating include/autoconf-extra.h
Hacking autoconf.h...

TIME+ は累積の稼働時間です。
演奏中に動いているアプリケーションはmpdとcifsd(NASとのデータの送受信に関するデーモン)と確認できます。この二つのプロセスを調べます。 TIME+の数値は興味深いですね。irq/23が全体の75%位の時間を使っていることになります。mpdの数字が案外少ないのは、この時再生していたデータがWAVEファイルだったから(デコード処理が入らない)だと思います。タイマーのCPU消費時間は確かに多少多めです。合計するとLANと同じ位です。

root@voyage:~/Alsa/alsa-driver-1.0.24# pkill mpd
root@voyage:~/Alsa/alsa-driver-1.0.24# apt-get remove alsa-base
root@voyage:~/Alsa/alsa-driver-1.0.24# make clean

RTPRIOというのはリアルタイムプロセス(スレッド)の優先度(数値が大きい方が優先度は高い、設定されていない時は上のように「-」と表示されます)、PRIというのは全てのプロセスの優先度(数値の小さい方が優先度は高い)。top画面のPRは上記のPRIと同じです。
PIDはプロセス番号、LWPはスレッド番号です。再起動されると番号は変わります。
cifsdはプロセス=スレッドで動いていますが、mpdは四つのスレッドに分かれて動いています。
Voyageのディフォルトではアプリケーションのリアルタイムの優先度は設定されていないことが分かります。
mpdのスレッドは上から順番に

となります。 mpdのスレッドの構成とチューニングの基本については、yanさんのreadme.txtの「5. mpdのスレッド」に詳しく解説されていますので、そちらを参照して下さい。

これで役者は出揃いました。

優先度の設定方法

次に優先度の設定方法です。

MPDのスレッドについては、優先度は mpd.confに設定することになります。yanさんのreadme.txtの「4. 設定方法」に解説されていますのでそちらを参照して下さい。
僕は修正を楽にするため以下のようにmpd.confの頭に関連するパラメータを集めました。

apt-get install aptitude

例はAlsaのものですが、OSSを使っている場合はそちらにpriorityを指定します。
その他のハード、ソフト割り込み処理と cifsd の優先度の設定については chrt (change rt levlの略か?)というコマンドを使います。このコマンドの書式は

sh ./xxxx.sh

となります。
従って、

root@voyage:~# tar rvf /media/usb0/mpdbuild.tar ./mpdbuild_pre.sh ./mpdbuild_i386_tune.sh ./my-config.sh

とすれば良いのですが、困ったことが一つあります。プロセス番号はOSが毎回ダイナミックに決めるので固定しないということ。
そこで、プロセス番号をプロセス名から変換するコマンドを組み合わせ使います。

root@voyage:~# tar xvf /media/usb0/mpdbuild.tar

という具合です。
セットするプロセスの数が多いので、いちいちコマンドを打ち込むよりシェルスクリプリトにした方が楽です。

tar cvzf /media/usb0/mpdinstall.tgz ./mpd ./mpdinstall.sh

このスクリプトをrc.localから呼ぶという形にしておけば、起動時に自動的に設定されます。

tar zxvf /media/usb0/mpdinstall.tgz


これで舞台も整いました。

チューニングの方法

あとは実際に設定を変え、音を聴きながら最適値を探るということになります。

root@voyage:~# sync
root@voyage:~# umount /media/usb0

をどういう順番に並べると一番良い音になるのか。


05/05 追加 ここから

ユングさんから「『decoder cifsd player sirq-timer output irq/23/16』とその前の『realtime_option』、『audio_output』と『chrt -f -p 50 ….』の関連が分からん」というご指摘がありましたので、補足しておきます。

『decoder player output』はMPD内部のスレッドのことです。スレッドというのはOSがプログラムを管理するための最小単位で、スレッド毎に優先度を設定することができます。

『decoder』、『player』は『realtime_option』の

root@voyage:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                 6214304   1111848   4786780  19% /
udev                     10240       172     10068   2% /dev
/dev/disk/by-uuid/8815092f-8841-4b3c-b131-9c93cac6cdd1
                       6214304   1111848   4786780  19% /
tmpfs                  1032520     19696   1012824   2% /lib/init/rw
varrun                 1032520        48   1032472   1% /var/run
varlock                1032520         0   1032520   0% /var/lock
tmpfs                  1032520         4   1032516   1% /dev/shm
tmpfs                  1032520         0   1032520   0% /tmp
tmpfs                  1032520     19696   1012824   2% /var/log
tmpfs                  1032520     19696   1012824   2% /var/tmp
tmpfs                  1032520     19696   1012824   2% /var/lib/mpd
//192.168.0.3/cd2/   1848286248 1655969196 192317052  90% /music1
/dev/sdb1              3835588   1454208   2186540  40% /media/usb0

に対応します。
『FIFO:50』の50がリアルタイムのプロセスの優先度(RTPRIO)です。この数字を変えてチューニングします。大きくすれば、優先度は高くなります。

『output』は『audio_output』の

apt-get install jed
apt-get install nano

に対応します。

FIFOというのは「first in first out」の意味で、待ち行列の理論で先に入って来たものから順番に処理することです。OSのプロセス(スレッド)管理の基本はこれです。このパラメータも変更可能ですが、普通は変更不要です。

0508追記
「普通は変更不要」と書きましたが、変えた方がいい場合もあるようです。コメントを参照して下さい。

次に『cifsd sirq-timer irq/23/16』というのはプロセスの名前で

cifsd
Windowsとのファイル共用をするためのデーモン
sirq-timer
ソフトウェアタイマの割り込み処理をするプロセス
irq/23/16
ハードウェアの割り込み処理をするプロセス。23と16はハードウェアの割り込み番号。

これらのリアルタイムの優先度はchrtコマンドを使います。chrtは

root@voyage:~# apt-get install aptitude wget
root@voyage:~# aptitude install build-essential libncurses-dev gettext xmlto xmltoman linux-headers-`uname -r`

という具合に使いますが、50というのがリアルタイムの優先度。これを変えてチューニングします。
『sirq-timer/0』というのがプロセスの名前です。プロセスの名前の調べ方は本文「音楽再生に関するプロセス/スレッド」の直後にあります。

このchrtで優先度を設定するプロセスは自分の環境に合わせて探す必要があります。『cifsd sirq-timer irq/23/16』というのは僕の環境の例であって、他の環境では変わります。例えば『cifsd』は音楽データをSamba接続のNASから受け取っているから設定した訳で、ハードディスクから読み出すのであれば、そのハードディスクの割り込み処理プロセスに変えることになります。またソフトタイマ割り込みの数は使用するCPU数で変わります。
この割り込み捜しを簡単に行う方法は、音楽を再生しながら、top画面を表示し、よく動いているプロセスを探し出すという方法です。これも本文に書きましたので、そちらを参照して下さい。

要注意なのはtop画面で表示されるPRは通常の優先度を表示しますので、

root@voyage:~# mkdir -p Alsa
root@voyage:~# cd ./Alsa/
root@voyage:~/Alsa# wget ftp://ftp.alsa-project.org/pub/driver/alsa-driver-1.0.24.tar.bz2
root@voyage:~/Alsa# tar xjvf alsa-driver-1.0.24.tar.bz2
root@voyage:~/Alsa# cd alsa-driver-1.0.24/

と表示されることです。ビックリしないように。

あと

root@voyage:~/Alsa/alsa-driver-1.0.24# CFLAGS="-O2 -mtune=`uname -m`" ./configure --with-cards=usb-audio --with-sequencer=no --with-isapnp=no --with-kernel=/usr/src/linux-headers-$(uname -r)
root@voyage:~/Alsa/alsa-driver-1.0.24# make
root@voyage:~/Alsa/alsa-driver-1.0.24# make install
root@voyage:~/Alsa/alsa-driver-1.0.24# reboot

はいっぱいプロセスが表示されてワケワカメになるということなら、例えば割り込みに関連するプロセスだけ表示にするには

root@voyage:~# cat /proc/asound/version 
Advanced Linux Sound Architecture Driver Version 1.0.24.
Compiled on May  7 2011 for kernel 2.6.33.7-rt29-voyage (SMP).

とすればいいです。
ソフト割り込みはシンさんの掲示板でのアドバイスを頂戴してシングルCPUモードを指定したので一種類だけとなりました(grub.cfgにmaxcpus=1を指定)。
優先度を指定しているプロセス、スレッドだけを表示したければ、

ドライバーソースをダウンロード、展開
root@voyage:~# cd Alsa/
root@voyage:~/Alsa# wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.24.1.tar.bz2
root@voyage:~/Alsa# wget ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.24.2.tar.bz2
root@voyage:~/Alsa# tar xjvf alsa-lib-1.0.24.1.tar.bz2
root@voyage:~/Alsa# tar xjvf alsa-utils-1.0.24.2.tar.bz2

ライブラリをビルド
root@voyage:~/Alsa# cd ./alsa-lib-1.0.24.1/
root@voyage:~/Alsa/alsa-lib-1.0.24.1# ./configure 
root@voyage:~/Alsa/alsa-lib-1.0.24.1# make
root@voyage:~/Alsa/alsa-lib-1.0.24.1# make install

ユーディリティをビルド
root@voyage:~/Alsa/alsa-lib-1.0.24.1# cd ../alsa-utils-1.0.24.2
root@voyage:~/Alsa/alsa-utils-1.0.24.2# ln -s libpanelw.so.5 /usr/lib/libpanelw.so
root@voyage:~/Alsa/alsa-utils-1.0.24.2# ln -s libformw.so.5 /usr/lib/libformw.so
root@voyage:~/Alsa/alsa-utils-1.0.24.2# ln -s libmenuw.so.5 /usr/lib/libmenuw.so
root@voyage:~/Alsa/alsa-utils-1.0.24.2# ln -s libncursesw.so.5 /lib/libncursesw.so
root@voyage:~/Alsa/alsa-utils-1.0.24.2# ./configure 
root@voyage:~/Alsa/alsa-utils-1.0.24.2# make
root@voyage:~/Alsa/alsa-utils-1.0.24.2# make install

とすればいいです。
只今、チューニング中なので、下の記述とは違う設定になっています。
egrepというのは正規表現の使えるgrepで、“sirq-ti|irq/16|irq/23|mpd|cifsd”は『|』で区切りられた文字列を含む全ての行を表示しなさいという意味です。
こういう具合にコマンドを組み合わせ、自分のやりたいことが自在に出来るのが、Linuxのいいところです(Windowsだと、大変だと思います)。

05/05 追加 ここまで
05/08 追加 以下の記述は最初にチューニングしていた時のものです。その後の経緯は掲示板にありますのでそちらも参照して下さい。


以下は僕のとっている方法を紹介します。

まず、最初に基本したルール

次に試してみて、固定化したルール

残りの三種類のプロセス/スレッド(sirq-timer, output, irq/23/16)の優先度は

次第でベストのポイントはころころと変わります。

現時点で僕の設定方法は

root@voyage:~# cat /proc/asound/card0/stream0
 KYODO   Phase Tech HD-7A  at usb-0000:00:1d.0-1, full speed : USB Audio

Playback:
  Status: Stop
  Interface 1
    Altset 1
    Format: S24_3LE
    Channels: 2
    Endpoint: 1 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000

です。
考え方としては、USBにデータを送り出す処理(irq/23)を最優先させる。ソフト割り込み、playerを同じグループで管理。output、irq/16を同じグループにしてUSB出力の次の優先度をつける。タイマーはどう効くかいろいろ試してみる。というところです。
この状態を固定しながらソフトタイマーの優先度を順に変えていくと、音が微妙に変化します。解像度を高くしたいのだったら、ソフトタイマーの優先度を高めにした方がよさそうです。

他にもいろいろなやり方がありそうです。面白い組み合わせが見つかったら、是非、掲示板で教えて下さい。

(PC_Audio)   2011/04/27

コメントする

MPDのチューニング・パッチ(4)


MPD 0.17.0 コンパイル済バイナリとインストール用シェルスクリプト(mpdinstall.tgz)


「gccだの、makeだの、gitだの、sqliteだの訳の分からんLinuxツールをインストールするのは不愉快だ」という方にはこちらをお勧めします。

yanさんから

root@voyage:~# /usr/local/bin/mpd --no-daemon --stderr --verbose /etc/mpd.conf
・・・
playlist: play 1:"music1/Mozart- Piano Concertos No. 20 & 27-Mitsuko Uchida- Cleveland Orchestra/01__Piano_Concert_No._20_In_D_Minor,_K466_-_I._Allegro.wav"
・・・
decoder: audio_format=44100:32:2, seekable=true
output: opened plugin=alsa name="My ALSA Device" audio_format=44100:24_3:2
output: converting from 44100:32:2

という提案を頂きました。よいアイディアだと思いますので、前掲した readme.txt にある my_install.sh を使って、バイナリー版を作成。インストール用のシェルスクリプトと一緒に tarボールにしました。二つのパッチはかかっています。

MPDの設定は以下の通りです。

playlist: play 0:"music1/Salzburg Recital (1966.7.30,Orfeo C530001B)-バックハウス/10__Piano_Sonata_no.23_f-moll_'Appassionata'.flac"
・・・
decoder: audio_format=44100:16:2, seekable=true
output: opened plugin=alsa name="My ALSA Device" audio_format=44100:24_3:2
output: converting from 44100:16:2


インストールの仕方は root でログインして(USBメモリ渡しでデータを移す場合)

playlist: play 0:"music1/Takemitsu Complete Songs-坂本朱&福田進一/01__うたうだけ(福田進一編曲).wav"
・・・
decoder: audio_format=44100:32:2, seekable=true
output: opened plugin=alsa name="My ALSA Device" audio_format=44100:16:2
output: converting from 44100:32:2

tarボールを展開、インストール用シェルを起動するだけです。

インストール用のシェルスクリプトの内容は以下の通りです。

root@voyage:~# cat /proc/asound/card0/stream0
Burr-Brown from TI               USB Audio CODEC  at usb-0000:00:1d.1-1, full s : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 1
    URBs = 3 [ 8 8 8 ]
    Packet Size = 192
    Momentary freq = 44100 Hz (0x2c.199a)
  Interface 1
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 2 OUT (ADAPTIVE)
    Rates: 32000, 44100, 48000
以下省略

MPDをとめて、バイナリをコピー。/etc/default/mpdへのMPDの場所の変更、/etc/mpd.confに対するリアルタイムオプションの設定を行い、MPDを再開させています。優先度などは必要に応じて修正してお使いください。
都合で<<EOF>>の«»は全角です。

(PC_Audio)   2011/04/23

コメントする

MPDのチューニング・パッチ(3)


yanさんから、メールを頂戴しました。

root@voyage:~/mpd# ./autogen.sh
root@voyage:~/mpd# ./configure --help | less

パッチは以下からダウンロードできます。

MPD のチューニング・パッチ(buffer.cの変更 mmpd-buffer-c.diff.gz)   by yan


試してみましたが、とても効果的です。とくに player > decoder とした場合、解像度があがり、臨場感が増すという感じで、お勧めします。
前回のパッチとは違うプログラムのパッチですので、無関係に処理できるようです。
前回のパッチがかかっている場合は

[sndfile] wav aiff aif au snd paf iff svx sf voc w64 pvf xi htk caf sd2

でOK。
my-config.shがSQliteがないとエラーになる場合は

playlist: play 1:"BIS Sampler 1992/02__2,_RV_315,_'The_Four_Seasons_(Summer)'_-_3._Presto.wav"
・・・
decoder: audio_format=44100:16:2, seekable=true
output: opened plugin=alsa name="My ALSA Device" audio_format=44100:24_3:2
output: converting from 44100:16:2

でインストールして下さい。

(PC_Audio)   2011/04/22

コメントする

MPDのチューニング・パッチ(2)

以下の内容を実行する時はすべて自己責任でお願いします。yanさんも僕も内容について一切の保証はしません。

パッチというのはソフトウェアの変更を修正部分だけ提供し、原本のソースコードに対して簡単に変更できるようにする仕組みのことです。Linuxではソフトのアップデートでよくとられる方法です。パッチをかけたソースコードをコンパイルしなおして、最新版にする。Linuxそのものの修正もカーネルアップデートという形のパッチで提供されていて、OS本体をコンパイルするのは当たり前です。「マイクロソフトのOSは神聖にして不可侵(^^;;;」という環境の Windowsユーザにはとまどう世界ですが。

yanさんのパッチはMPDのヴァージョンが0.17.0に対応したものです。VoyageMPDのMPDのヴァージョンは16.0です。従って、パッチをかけるには、まずMPDを0.17.0にアップデートする必要があります。この方法もビルドといってソースコードからコンパイルする必要があります。やり方は以前の記事「MPDの最新版をビルド」を参照して下さい。
Windows 環境でのLinux用シェルスクリプトの編集は面倒なので、僕が今回使ったものを yanさんのチューニングパッチといっしょに置いておきます。スクリプト内容は以前の記事とほぼ一緒ですが、パッチをかけるために二つに分割し、realtime_optionの指定を追加しました。また「libmad mp3 decoder plugin」はdisableにしてあります。

MPD 0.17.0 のチューニング・パッチ(mpd-rtopt-2.tgz)   by yan

MPD 0.17.0 ビルド用シェルスクリプト(mpdbuild.tar)


簡単にパッチをかける手順を紹介します。
ダウンロードしたtarボールはUSBメモリでVoyageMPDシステムにもってくるとします。

decoder {
    plugin "sndfile"
    enabled "no"
}

Mpod対応を有効にしたい場合は最後のスクリプトの実行はやめて、yanさんの readme.txt に従って下さい。
これでパッチのかかったMPDが作成され、切り替わります。
切り替わっているかの確認は

apt-get install libgoogle-perftools-dev

で出来ます。 後は yanさんの readme.txt に丁寧な解説がありますので、そちらに従って下さい。

参考のため、yanさんの readme.txt 以下にを引用します。
テキストはMPDの動作の仕組みを見事に謎解きし、何故VoyageMPDが良い音で音楽を再生できるかを解明する素晴らしい内容です。パッチをかけない方にもご一読をお勧めします。 buffer_before_play が25%以上だと音に変化は発生しないはずとか、audio_buffer_size はエンコード処理のCPU負荷分散という形で音に影響している(従って、outputスレッドの優先度をencodeスレッドの優先度より高くすれば大きさは関係なくなる)というような考察はソースコードをハックしないと分からない内容で、実に興味深いです。


MPDのチューニング・パッチ readme.txt     by yan

/etc/init.d/mpd stop
tar zxvf /media/usb0/mpdinstall.tgz
cp ./mpd /usr/local/bin
/etc/init.d/mpd start

ご意見は掲示板にお願いします。yanさんもチェックしていらっしゃいますので、コメントしてもらえると思います。

しかし、こういう具合にネットワークを通してオーディオ環境の改良ができるのもオープンソースLinux環境下でのネットワークオーディオならですね。

(PC_Audio)   2011/04/21

コメントする

MPDのチューニング・パッチ(1)

掲示板にやりとりが残っていますが、yanさんからMPDのチューニング用のパッチを送って頂きました。
パッチは MPDを構成するスレッドのスケジュール方法、優先順位の自由な設定と MPDの仮想空間を実メモリへの割り当てを可能にするものです。また、パッチと一緒に yanさんがパッチを作られた背景となる技術知識を詳述した興味深いドキュメント(readme.txt)が付けられていました。どちらも素晴らしい内容ですので、VoyageMPD を使う方々が共有するといいのじゃないかなと考え、yanさんにお願いし、公開する許可を頂きました。以下、紹介します。


root@voyage:~# ps -eLo pid,lwp,priority,cmd
  PID   LWP PRI CMD
・・・
 1226  1226 -51 [irq/14-ide0]
 1227  1227 -51 [irq/23-ehci_hcd]
 1228  1228 -51 [irq/23-uhci_hcd]
 1229  1229 -51 [irq/19-uhci_hcd]
 1232  1232 -51 [irq/19-ata_piix]
・・・
 1240  1240 -51 [irq/18-uhci_hcd]
 1242  1242 -51 [irq/16-uhci_hcd]
・・・
 1949  1949 -51 [irq/16-eth0]
・・・ 

・・・
    3     3 -100 [migration/0]
    4     4 -50 [sirq-high/0]
    5     5 -50 [sirq-timer/0]
    6     6 -50 [sirq-net-tx/0]
    7     7 -50 [sirq-net-rx/0]
    8     8 -50 [sirq-block/0]
    9     9 -50 [sirq-block-iopo]
   10    10 -50 [sirq-tasklet/0]
   11    11 -50 [sirq-sched/0]
   12    12 -50 [sirq-hrtimer/0]
   13    13 -50 [sirq-rcu/0]
   14    14 -100 [posixcputmr/0]
   15    15  10 [desched/0]
・・・ 僕のAtom機では同じものが4組あります。

root@voyage:~# cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
  0:        145          0          0          0   IO-APIC-edge      timer
  1:          8          0          0          0   IO-APIC-edge      i8042
  9:          0          0          0          0   IO-APIC-fasteoi   acpi
 14:          0          0          0          0   IO-APIC-edge      ide0
 16:     241921          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb5, eth0
 18:          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
 19:       2319          0          0          0   IO-APIC-fasteoi   ata_piix, uhci_hcd:usb3
 23:     603168          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
NMI:          0          0          0          0   Non-maskable interrupts
LOC:     108459      78283      55140     623350   Local timer interrupts

root@voyage:~# ps -eLo pid,lwp,rtprio,priority,cmd
  PID   LWP RTPRIO PRI CMD
・・・
 1285  1285     50 -51 [irq/23-ehci_hcd]
 1293  1293     50 -51 [irq/23-uhci_hcd]
 1296  1296     50 -51 [irq/16-uhci_hcd]
 2005  2005     50 -51 [irq/16-eth0]

・・・
    5     5     49 -50 [sirq-timer/0]
   19    19     49 -50 [sirq-timer/1]
   32    32     49 -50 [sirq-timer/2]
   45    45     49 -50 [sirq-timer/3]
・・・

長くなったので、ダウンロードと使い方は次の記事に。

(PC_Audio)   2011/04/20

コメントする

top page     previous page     next page

mail