2008/04/21

古いカーネルの削除

以前、2ちゃんで不要なカーネルの削除の方法を質問してた人がいて、その人ったら「そんなことも知らなくてよくやってられるな」みたいに罵倒されて。えらいかわいそうだな、と思った記憶がある。それ以来、なんとなく避けてきた「古いカーネルの削除」。やってみたら意外と簡単だった。

  1. 「dpkg -l | grep linux-image」 で存在するカーネルを表示
    ex)
    ii linux-image-2.6.20-15-generic 2.6.20-15.27 Linux kernel image for version 2.6.20 on x86
    ii linux-image-2.6.20-16-generic 2.6.20-16.35 Linux kernel image for version 2.6.20 on x86
    ii linux-image-generic 2.6.20.16.28.1 Generic Linux kernel image


  2. 「sudo apt-get remove --purge (name)」 で削除
    (name) は 「linux-image-2.6.20-15-generic」 とかいう部分
参考にしたサイトでは「今使っているものは削除するな」と。よく確認して操作しないといけません。

----
(2008.04.21)

GRUB の menu.lst

Ubuntu 8.04 Hardy Heron の beta を入れたら、例によって GRUB は Hardy Heron の menu.lst を見に行くようになるわけで、普段使いのシステムでもないし、元の Faisty Fawn の menu.lst を見にいくように切り替えたいと思ったわけです。

で、GRUB のコマンドラインに初挑戦。

  1. GRUB のメニューが出てきたら [c] を押す。コマンドプロンプトが出てきたら操作開始。あるいは起動しているシステムから sudo grub でもいいのかも。
  2. grub> root (hd■,■) …
    1つ目の■は HDD の番号、2つ目の■はパーティション番号。ともに「0」から始まるから、1台目のドライブの2つ目のパーティション(デバイスファイル名でいうと /dev/hda2 とか /dev/sda2 とか)を指し示すときは (hd0,1) ということになる。拡張パーティションに設定された論理パーティションの場合は、パーティション番号が飛ぶので注意。デバイスファイル名では論理パーティションには「5」から数字が割り当てられる。grub の root コマンドに対しては「4」から数字が始まることになる。
  3. grub> setup (hd■)
  4. grub> quit or reboot … これで終了

…って、こういう理解でいいんですよね? 取り敢えずウチではこれでうまくいったから、いいことにします。

----
(2008.04.21)

2008/04/20

Ubuntu 8.04 "Hardy Heron" beta

Hardy Heron の beta を入れてみてます。都合5度トライして、うちの C2D マシンには1度しかうまくインストールできてません。理由はそれぞれいろいろなんですが、ざっと書くと次のような感じでした。

1度目は、おそらくHW検出に失敗(ちゃんとメモっておけばよかった)。2度目はガリガリ諸ファイルを書いている最中に突然、電源が落ちてインストール中止。これはどうもHW的な問題だったようです。熱対策をして3度目は無事成功。4度目は再びHW検出失敗、5度目は一見うまくいったように見えたのに、中身を覗いてみると GRUB とか全然ちゃんとインストールされてなくて、ダメでした。

それから、LiveCD User になってインストールを開始すると、インストーラーがキーボード選択とか Documents and Settings インポートとか何でもないところで途中で明らかに止まってしまったりしていたので(これによる中断は回数に数えていない)、CD boot したところで直接「インストール」を選択しないとうちでは先に進めませんでした(M/B は GIGABYTE の GA-965G-DS3 というやつ)。

動き出した Hardy Heron は概ね順調で(完璧とはいえない)、Gutsy Gibbon よりは期待が持てます。だけど… Firefox は無理矢理 Ver.3 で addon の類が Google toolbar すら使えない。これでは困ります。ちょっと先走りすぎじゃないかなぁ。

----
(2008.04.20)

2008/04/09

Ubuntu 8.04 "Hardy Heron"

久々のポスト。

Ubuntu から遠ざかっていたわけではなくて、ちょっと仕事が忙しくて新しいことに挑戦する暇がなかったのと、あとは普段使いでとりたてて困ることがなかった、ということによります。

新たな挑戦といえば…

1) VLC media player

年末に SANYO の Xacti なるものを買って、これで撮影した *.mp4 が TOTEM では正常に再生できなかったもので困っていたら(Wine の Quicktime Player では再生はできるけどシーク後に音が出なくなる)、噂の VLC media player を入れたらウソのように楽チンに再生できて感動☆

2) Gimp

やっと Photoshop 使わずに済むようになりました(使いにくいUIに慣れた)


挫折したこともありました。

1) mp3 のまとめてタグ打ち

STAR Digio で録音した曲に、番組表からコピーした曲名&アーティスト名をまとめてタグ打ちするソフトが見付からない。Windows 版の STAR NAME CHANGER とかを使ってみてるけど、「〜」という文字が「?」になってしまうなどの問題があって実用にならない。この業務は Windows に任せるしかないか、と目下挫折中

2) iPod への曲書き込み

2種類ほどアプリを試したけど、肝心の iPod への書き込みができないから実用にならず(fstab とかでRWできるようにしないとダメなんでしょうか)


----

で、やっと本題ですが、何しろあと15日で 8.04 Hardy Heron 正式版がリリースだそうで。βを落として(ごめんなさい、 torrent しませんでした)試してみました。HDDにインストールしないと分からないことも多そうなので、Hitachi の 500GB SATA HDD を買ってきました。8k円から釣りが来る、そんな時代になったんですね…。導入したらまたここに書こうかと思ってます。


----
(2008.04.09)

2007/12/09

ユーザホームの中の2バイトのディレクトリ名

/home/(user)/ にできる Windows の My Documents の中にあるようなフォルダ名に2バイト文字が使われていることが問題になってました.

$ LANG=C xdg-user-dirs-gtk-update

これでよいそうな。ただし、名前を変えるフォルダは空である必要があるそうです。

参考にさせていただきました。
http://itmst.blog71.fc2.com/blog-entry-8.html

----
(2007.12.09)

2007/11/26

[alsa] 諸々のコマンドや設定ファイル

以下以外にもいろいろあるから徐々に書きため。


■alsa をリスタート
sudo /etc/init.d/alsa-utils restart


■使用可能なオーディオデバイスを表示
cat /proc/asound/modules

ex.)
0 snd_hda_intel


■設定ファイルの在処

sudo gedit /etc/asound.conf


■USBオーディオを有効にする

sudo gedit /etc/modprobe.d/alsa-base

ex.)
options snd-usb-audio index=-2
↓
#options snd-usb-audio index=-2
options snd-usb-audio index=0

----
(2007.11.26)

2007/11/21

[alsa] Wine アプリで spdif 入力を有効にする方法

当初「STARDigio のロスレス録音への道、実はここが最後の難関なのかもしれない」と書いたけど、実はもっと大変な難関が先にはたくさん待ち構えてました。その後の研究?結果をまとめました。

----

光入力を有効にする方法については、こんなストレートな記述があった。

http://www.nofuture.tv/index.rb?LinuxTips#l16

alsaのCMI8738で光入出力を使う

光出力
ミキサーでIEC958 Outputをオンにする。

光入力
ミキサーでIEC958 In Selectをオンにする。
モニターするにはIEC958 In Monitorをオンにする。

これは本当だった。

当該PCの光入力を得るカードはたまたま CMI8738 系と認識されている。Ubuntu の ALSA には alsaconf が入っていないとか .asoundrt がどうだとかいろいろ悩んだけど、このメジャーなチップを使ったカードは Synaptic で一発インストールできるような一般的なミクサーで簡単に spdif を有効にできることが分かった。特に便利に使っているのは「GNOME ALSA ミキサー」だ。

で、Linux アプリは hw ID なんかを明示的に指定できるからちゃんと spdif 入力が有効になった。なんだけど肝心の SRec on Wine で spdif 入力が効いてくれない。第一、どの設定ファイルを覗いてみても、hw やその ID なんかを直接指定できそうなところが見つからない。Wine 関連の掲示板とかで聞いてみようかとも思う。

----
(2007.11.21 - 2007.11.26 加筆)

[alsa] サウンド・デバイスのIDを固定する

もともと alsa について知る必要が出てきた直接の原因は、Windows XP を使っている STARDigio の録音を Ubuntu でリプレイスしたい、という欲求だった。それ用に使っているマシンはいま、オンボード、PCI のカード、USB Audio の3つがぶら下がっていて、

$ cat /proc/asound/cards

すると各デバイスに割り振られたIDがブートの度に変わって、'hw:n,n' で固定されない。ググったら、このことを追求している方が。

http://sitebites.homeip.net/blog/54

$ cat /proc/asound/cards

で出てくるリストの [string] の中の文字列が「システムで認識されたカード名」だそうだ。

/etc/asound.conf でハードウェアを指定する際に
pcm "hw:0,0"

のような形式では無く、次のように指定すればいいだけだった。

pcm {
type hw
card "string"
}

※カード名は altered
まだ試してないんだが(これをどう使っていいのかが分からないんです)。

☆

あと、別のアプローチ?を試みられた方も(カードが認識されたりされなかったり、という悩みについて)。

http://forum.ubuntulinux.jp/viewtopic.php?pid=4598

この方は「/etc/modprobe.d/alsa-base」に

options snd-string0 index=0
options snd-string1 index=1
のような行を追加したそうだ。今回のケースに役立つかどうかは不明。

    ☆

「.asoundrc」については、

.asoundrc --- http://alsa.opensrc.org/index.php/.asoundrc
1712_.asoundrc --- http://alsa.opensrc.org/index.php/1712_.asoundrc
Asoundrc.txt --- http://alsa.opensrc.org/index.php/Asoundrc.txt


とかがとっても参考になりそうなんだが、道は遠い。

    ☆

ついでに ALSA のリブートは次のおまじない。

sudo /etc/init.d/alsa-utils restart



----
(2007.11.21)

2007/11/19

[alsa] PCM plugin の説明

PCM digital Plugin のドキュメンテーション (http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html)を、自分が参照するために勝手に翻訳。PCMとかの基本が分かってないから訳せないところがたくさんあるし、いい加減なところがたくさんあるから、それで痛い目に遭うかもしれないけどしょうがないw。

コードの部分は形が崩れてるところがあります。あと、リンクは無視してください。ここの中で base URL は指定できなかった(面倒臭くて書き直さなかった)ものですから…。


---- believe or not 以下勝手翻訳 ----


PCM(デジタル・オーディオ)プラグイン

PCMプラグインはPCMデバイスの機能とフィーチャーを拡張します。プラグインはさまざまなサンプル変換、チャンネル間のサンプルコピーなどを take care about します。


Slave 定義


"slave" プラグインは文字列で直接特定されます。つまり 定義複合体ノードの中で enter されます。static rate やチャンネル数など一部の restrictions も明示されます。


pcm_slave.NAME {
pcm STR # PCM 名
# or
pcm { } # PCM 定義
format STR # フォーマット or 文字列 "unchanged"
channels INT # チャンネル数 or "unchanged"
rate INT # サンプリングレート(Hz) or "unchanged"
period_time INT # Period time in us or "unchanged"
buffer_time INT # Buffer time in us or "unchanged"
}

例 :

pcm_slave.slave_rate44100Hz {
pcm "hw:0,0"
rate 44100
}

pcm.rate44100Hz {
type plug
slave slave_rate44100Hz
}

1つのコンパウンドで表現すると :

pcm.rate44100Hz {
type plug
slave {
pcm "hw:0,0"
rate 44100
}
}


Plugin: hw


このプラグインは ALSA カーネルドライバと直接情報をやりとりします(変換せずそのまま : a raw communication without any conversions)。mmap アクセスのエミュレーションも選択的に有効にすることができますが、expect worse latency in the case.
ノンブロック・オプションは、デバイスがノン・ブロッキングで開かれるかどうかを指定します。ただしこのオプションでは、読み書きアクセスに関するブロックの挙動を変更することはできません。古い ALSA(ALSA stuff) との互換性を保つには、このオプションを OFFしてください。
pcm.name {
type hw # カーネル PCM
card INT/STR # カード名 (文字列) or 番号 (整数)
[device INT] # デバイス番号 (デフォルトは0)
[subdevice INT] # サブデバイス番号 (デフォルトは-1で第一サブデバイスが有効)
[sync_ptr_ioctl BOOL] # Use SYNC_PTR ioctl rather than the direct mmap access for control structures
[nonblock BOOL] # non-blocking open モードを強制
[format STR] # 決められたフォーマットだけに制限
[channels INT] # 決められたチャンネルだけに制限
[rate INT] # 決められたレートだけに制限
}

Function reference



Plugin: mmap_emul


pcm.name {
type mmap_emul
slave PCM
}

Function reference



Plugin: shm

このプラグインは、共有メモリを介して aserver とコミュニケイトします。変換せず素のまま行いますが (a raw communication without any conversions)、パフォーマンスが落ちる可能性があります。


pcm.name {
type shm # Shared memory PCM
server STR # サーバ名
pcm STR # PCM名
}

Reference Function



Plugin: Null

このプラグインは、PCMストリームの中身を破棄してゼロサンプルのストリームを生成します。

注意: この実装は /dev/null (playback, must be writable)、 /dev/full (capture, must be readable) の各デバイスを使用します。


pcm.name {
type null # Null PCM
}

Function reference



Plugin: copy

このプラグインは、マスターコピーPCMから指定されたスレイブPCMにサンプルをコピーします。チャンネル数、フォーマット、サンプリング・レートは、双方で一致している必要があります。


pcm.name {
type copy # Copy PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
}
}

Function reference



Plugin: linear

このプラグインは、マスターのリニアPCMからリニアサンプルをスレイブPCMに変換します。双方のPCMのチャンネル数、フォーマット、サンプリングレートは一致していなくてはいけません。


pcm.name {
type linear # Linear conversion PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
format STR # Slave format
}
}

Function reference


Plugin: linear<->float

このプラグインは、リニアサンプルから浮動小数点サンプルへ、もしくはその逆の変換を、マスターPCMからスレイブPCMに対して行います。双方のPCMのチャンネル数、フォーマット、サンプリングレートは一致していなくてはいけません。
pcm.name {
type lfloat # Linear<->Float conversion PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
format STR # Slave format
}
}

Function reference


Plugin: Mu-Law

マスターの Mu-Law 変換PCMから所定のスレイブPCMに対して、Mu-Law サンプルからリニア、リニアから Mu-Law サンプルに変換します(converts
Mu-Law samples to linear or linear to Mu-Law samples from master Mu-Law
conversion PCM to given slave PCM=文章の構造がよく分からない…
)。双方のPCMのチャンネル数、フォーマット、サンプリングレートは一致していなくてはいけません。
pcm.name {
type mulaw # Mu-Law conversion PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
format STR # Slave format
}
}


Function reference


Plugin: A-Law

マスターの A-Law 変換PCMから所定のスレイブPCMに対して、A-Law サンプルをリニアに、リニアを A-Law
サンプルに変換します(converts A-Law samples to linear or linear to A-Law samples
from master A-Law conversion PCM to given slave
PCM
)。双方のPCMのチャンネル数、フォーマット、サンプリングレートは一致していなくてはいけません。
pcm.name {
type alaw # A-Law conversion PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
format STR # Slave format
}
}


Function reference



Plugin: Ima-ADPCM

マスターの Ima-ADPCM 変換PCMから所定のスレイブPCMに対して、Ima-ADPCM サンプルからリニア、リニアから Ima-ADPCM
サンプルに変換します(converts Ima-ADPCM samples to linear or linear to Ima-ADPCM
samples from master Ima-ADPCM conversion PCM to given slave PCM
)。双方のPCMのチャンネル数、フォーマット、サンプリングレートは一致していなくてはいけません。
pcm.name {
type adpcm # Ima-ADPCM conversion PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
format STR # Slave format
}
}


Function reference


Plugin: Route & Volume

複数のチャンネルを変換し、その際にボリウムを適用するプラグイン。フォーマットとサンプリングレートは一致していなくてはなりません。
pcm.name {
type route # Route & Volume conversion PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
[format STR] # Slave format
[channels INT] # Slave channels
}
ttable { # Transfer table (bi-dimensional compound of cchannels * schannels numbers)
CCHANNEL {
SCHANNEL REAL # route value (0.0 - 1.0)
}
}
}


Function reference



Plugin: Rate

ストリームのサンプリングレートを変換します。入力、出力ともにリニアPCMである必要があります。


pcm.name {
type rate # Rate PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
rate INT # Slave rate
[format STR] # Slave format
}
converter STR # optional
# or
converter [ STR1 STR2 ... ] # optional
# Converter type, default is taken from
# defaults.pcm.rate_converter
}


Function reference



自動変換プラグイン

チャンネル数、サンプリングレート、フォーマットを指定に応じて変換します。
pcm.name {
type plug # Automatic conversion PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
[format STR] # Slave format (default nearest) or "unchanged"
[channels INT] # Slave channels (default nearest) or "unchanged"
[rate INT] # Slave rate (default nearest) or "unchanged"
}
route_policy STR # route policy for automatic ttable generation
# STR can be 'default', 'average', 'copy', 'duplicate'
# average: result is average of input channels
# copy: only first channels are copied to destination
# duplicate: duplicate first set of channels
# default: copy policy, except for mono capture - sum
ttable { # Transfer table (bi-dimensional compound of cchannels * schannels numbers)
CCHANNEL {
SCHANNEL REAL # route value (0.0 - 1.0)
}
}
rate_converter STR # type of rate converter
# or
rate_converter [ STR1 STR2 ... ]
# type of rate converter
# default value is taken from defaults.pcm.rate_converter
}


Function reference

  • snd_pcm_plug_open()
  • _snd_pcm_plug_open()


Plugin: File

PCMストリームの内容をファイルに保存します。入力ソースとして実在するファイルを使うこともできます(例えば "virtual mic" のように)。
pcm.name {
type file # File PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
}
file STR # Output filename
or
file INT # Output file descriptor number
infile STR # Input filename
or
infile INT # Input file descriptor number
[format STR] # File format (only "raw" at the moment)
[perm INT] # Output file permission (octal, def. 0600)
}


Function reference


Plugin: Multiple streams to One

複数のストリームをひとつに変換します。
pcm.name {
type multi # Multiple streams conversion PCM
slaves { # Slaves definition
ID STR # Slave PCM name
# or
ID {
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
channels INT # Slave channels
}
}
bindings { # Bindings table
N {
slave STR # Slave key
channel INT # Slave channel
}
}
[master INT] # Define the master slave
}

例えば、2chステレオである2つのPCMストリームを1つの4chステレオのPCMストリームにするには、次のように定義します。

pcm.quad {
type multi

slaves.a.pcm "hw:0,0"
slaves.a.channels 2
slaves.b.pcm "hw:0,1"
slaves.b.channels 2

bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
bindings.2.slave b
bindings.2.channel 0
bindings.3.slave b
bindings.3.channel 1
}
結果として生成されるPCM「quad」は挟み込み形式(the interleaved format)ではなく "複合体" 形式(the "complex" format)であることに留意してください。この場合、挟み込み(あるいは非挟み込み)形式しか扱えないアプリケーションはこのPCMにアクセスすることができないので、そうしたければこのPCMを route プラグインか plug プラグインでラップしてください。
pcm.quad2 {
type route
slave.pcm "quad"
ttable.0.0 1
ttable.1.1 1
ttable.2.2 1
ttable.3.3 1
}


Function reference


Plugin: Share

複数の
チャンネル(multiple channels)を複数のクライアントでシェアすることを可能にするプラグインです。各チャンネルへのアクセスは排他的で、各サンプルは互いにミックスされません。つまり、ch. 0が第1クライアントに使われている時、そのチャンネルは第2クライアントに使われることはありません。ミキシングのプラグインを探しているのなら、 dmix plugin. を使ってください。

dshare plugin との違いは、share プラグインがサーバプログラム "aserver" を必要としているのに対し、dshare プラグインは明示的なサーバを必要とせず共有バッファにアクセスする点です。
pcm.name {
type share # Share PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
[format STR] # Slave format
[channels INT] # Slave channels
[rate INT] # Slave rate
[period_time INT] # Slave period time in us
[buffer_time INT] # Slave buffer time in us
}
bindings {
N INT # Slave channel INT for client channel N
}
}


Function reference



Plugin: hooks

このプラグインは、プラグインが開かれた時・変更時・閉じた時に(when this plugin is opened, modified or closed)、いくつかある 'hook' 関数を呼び出すのに使われます。何かの状態を示す制御値を変える時に〜特にPCMに関して〜(change control values for a certain state specially for the PCM)使われるのが典型例(以下の例を参照)。
# Hook arguments definition
hook_args.NAME {
... # Arbitrary arguments
}

# PCM hook type
pcm_hook_type.NAME {
[lib STR] # Library file (default libasound.so)
[install STR] # Install function (default _snd_pcm_hook_NAME_install)
}

# PCM hook definition
pcm_hook.NAME {
type STR # PCM Hook type (see pcm_hook_type)
[args STR] # Arguments for install function (see hook_args)
# or
[args { }] # Arguments for install function
}

# PCM hook plugin
pcm.NAME {
type hooks # PCM with hooks
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
}
hooks {
ID STR # Hook name (see pcm_hook)
# or
ID { } # Hook definition (see pcm_hook)
}
}

例えば :


        hooks.0 {
type ctl_elems
hook_args [
{
name "Wave Surround Playback Volume"
preserve true
lock true
optional true
value [ 0 0 ]
}
{
name "EMU10K1 PCM Send Volume"
index { @func private_pcm_subdevice }
lock true
value [ 0 0 0 0 0 0 255 0 0 0 0 255 ]
}
]
}
ここでは、このPCMにアクセスがあった時のコントロール "Wave Surround Playback Volume" とコントロール "EMU10K1 PCM Send Volume" について、所定の値が設定されています。これらのコントロールは複次元の値(multi-dimensional value)を取るので、「value 」フィールドは配列で表記されています。

「preserve」が真(true)の時は古い値は保存され、そのPCMが閉じるときに復元されます。また「lock」が true の時は、このPCMが開いている間はコントロールがロックされ、ほかの何によっても変更されません。「optional」が true にセットされたときは、そのコントロールが存在していなかった時でもエラーは返されず無視されます。


Function reference


Plugin: dmix


複数のストリームをダイレクトにミキシングする機能を提供します。32-bit ミキシングの解像度は 24-bit になります(The resolution for 32-bit mixing is only 24-bit)。低位の1バイトはゼロで埋められ、その余った 8bits (the low significant byte のこと?)は the saturation(浸透、浸潤、飽和…) に使われます。


pcm.name {
type dmix # Direct mix
ipc_key INT # unique IPC key
ipc_key_add_uid BOOL # add current uid to unique IPC key
ipc_perm INT # IPC permissions (octal, default 0600)
slave STR
# or
slave { # Slave definition
pcm STR # slave PCM name
# or
pcm { } # slave PCM definition
format STR # format definition
rate INT # rate definition
channels INT
period_time INT # in usec
# or
period_size INT # in bytes
buffer_time INT # in usec
# or
buffer_size INT # in bytes
periods INT # when buffer_size or buffer_time is not specified
}
bindings { # note: this is client independent!!!
N INT # maps slave channel to client channel N
}
slowptr BOOL # slow but more precise pointer updates
}


「ipc_key」は特定の IPC キーを整数で明示します。この数字は各 dmix 定義でユニーク(他と重複しない?)でなければなりません。この数字に従って共有メモリが生成されるからです。「ipc_key_add_uid 」が true にセットされているときは、 「ipc_key」の値のセットに uid 値が追加されます。 

これによって、異なるユーザの同じ IPC キーが干渉しあうのを防ぎます。

dmix プラグイン自体は、単一のコンフィギュレーションのみをサポートします。つまり固定されたサンプリングレート(デフォルトは48000)、フォーマット(S16)、チャンネル数(2)、period_time(125000)をサポートするということです。他のコンフィギュレーションを使う場合は、スレイブPCMの定義において値を明示的に設定してやる必要があります。サンプリングレート、フォーマット、チャンネル数は追加的なplug plugin がカバーしますが、いずれにせよ元になる唯一のコンフィギュレーションしか存在しないことに変わりはありません。

スレーブPCM "hw:0" に「サンプリングレート 44100 Hz - S32_LE フォーマット」を設定するコンフィギュレーションの例は、次のようなものになります。

pcm.dmix_44 {
type dmix
ipc_key 321456 # any unique value
ipc_key_add_uid true
slave {
pcm "hw:0"
format S32_LE
rate 44100
}
}
この dmix pcm を使えば、plug プラグインを介して 48000 Hz
のサンプルを聞くことも可能です(You can hear 48000 Hz samples still using this dmix pcm
via plug plugin like:)。
% aplay -Dplug:dmix_44 foo_48k.wav

OSS エミュレーション・デバイスに対して dmix plugin を使う時は、2の乗数で表記した「period_size」と「buffer size」を設定しなければいけません。例えば次のように。

pcm.dmixoss {
type dmix
ipc_key 321456 # any unique value
ipc_key_add_uid true
slave {
pcm "hw:0"
period_time 0
period_size 1024 # must be power of 2
buffer_size 8192 # ditto
}
}
デフォルト値をリセットするために「period_time 0」も設定する必要があります。複数チャンネルのI/Oを持つサウンドカードの場合は、「bindings」を追加するといいでしょう。
pcm.dmixoss {
...
bindings {
0 0 # map from 0 to 0
1 1 # map from 1 to 1
}
}
こう定義すれば、dmix は最初の2チャンネルだけを使います。

それから、ICE1712 はバッファサイズに 5513 フレーム(640kB に相当)という上限があります。この場合は、「buffer_size」を「4096」に設定してやらなければなりません。


Function reference



Plugin: dshare

チャンネルを共有する機能を提供します(provides sharing channels)。share プラグインと異なるのは、 この dshare プラグインが明示的な(explicit)サーバ・プログラムを必要とせず、dmix プラグインや dsnoop プラグインと同じように各クライアントが同時に共有バッファにアクセスできる点です。以下に示すパラメータも、dmix / dsnoop とほとんど共通です。
pcm.name {
type dshare # Direct sharing
ipc_key INT # unique IPC key
ipc_key_add_uid BOOL # add current uid to unique IPC key
ipc_perm INT # IPC permissions (octal, default 0600)
slave STR
# or
slave { # Slave definition
pcm STR # slave PCM name
# or
pcm { } # slave PCM definition
format STR # format definition
rate INT # rate definition
channels INT
period_time INT # in usec
# or
period_size INT # in bytes
buffer_time INT # in usec
# or
buffer_size INT # in bytes
periods INT # when buffer_size or buffer_time is not specified
}
bindings { # note: this is client independent!!!
N INT # maps slave channel to client channel N
}
slowptr BOOL # slow but more precise pointer updates
}


Function reference


Plugin: dsnoop


ひとつのキャプチャストリームを複数に分けるプラグインで、dmix プラグインと逆の働きをします。複数のクライアントが並行して共有のキャプチャバッファを読むことになります(reading the shared capture buffer from many clients concurrently)。以下に示すパラメータは dmix プラグインのものとほとんど同じです。
pcm.name {
type dsnoop # Direct snoop
ipc_key INT # unique IPC key
ipc_key_add_uid BOOL # add current uid to unique IPC key
ipc_perm INT # IPC permissions (octal, default 0600)
slave STR
# or
slave { # Slave definition
pcm STR # slave PCM name
# or
pcm { } # slave PCM definition
format STR # format definition
rate INT # rate definition
channels INT
period_time INT # in usec
# or
period_size INT # in bytes
buffer_time INT # in usec
# or
buffer_size INT # in bytes
periods INT # when buffer_size or buffer_time is not specified
}
bindings { # note: this is client independent!!!
N INT # maps slave channel to client channel N
}
slowptr BOOL # slow but more precise pointer updates
}

Function reference



Plugin: LADSPA <-> ALSA

このプラグインで、ワンセットの LADPSA プラグインを適用します。入出力のフォーマットは常に SND_PCM_FORMAT_FLOAT です (注: この型はアーキテクチャによって little-endian と big-endian のどちらかをとります)。

「policy duplicate」が意味するところは、ch.0 (channel zero) に対して唯一の定義しか存在しない(there must be only one binding definition)、ということです。この定義は自動的に全てのチャンネルに複製されます。LADSPA プラグインが複数のオーディオ入出力(multiple audio inputs or outputs)を持っているときは、「policy duplicate」は自動的に「policy none」にスイッチします。

このプラグインのシリアル化(serialization)は期待どおりの働きを見せます。結局のところ、ALSA のプラグインチェインが処理するより多くの(複数の入出力)チャンネルを、この LADPSA プラグインチェインの中で使うことになるのです(use more channels (inputs / outputs) inside the LADPSA plugin chain than processed in the ALSA plugin chain)。

所与の LADSPA 入力ポートに対応する ALSA チャンネルが存在しなかった場合は、この LADSPA
ポートに対してはゼロサンプルが与えられます。出力側でも(ALSA の次のプラグイン入力)、有効なチャンネルがチェックされます。ある ALSAチャンネル(specific ALSA channel)が存在しなかった場合、LADSPA の出力ポートはダミーのサンプルエリアに接続されます。

LADSPA プラグインのインスタンスは動的に生成されるのです。
pcm.name {
type ladspa # ALSA<->LADSPA PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
}
[channels INT] # count input channels (input to LADSPA plugin chain)
[path STR] # Path (directory) with LADSPA plugins
plugins | # Definition for both directions
playback_plugins | # Definition for playback direction
capture_plugins { # Definition for capture direction
N { # Configuration for LADPSA plugin N
[id INT] # LADSPA plugin ID (for example 1043)
[label STR] # LADSPA plugin label (for example 'delay_5s')
[filename STR] # Full filename of .so library with LADSPA plugin code
[policy STR] # Policy can be 'none' or 'duplicate'
input | output {
bindings {
C INT or STR # C - channel, INT - audio port index, STR - audio port name
}
controls {
# valid only in the input block
I INT or REAL # I - control port index, INT or REAL - control value
# or
STR INT or REAL # STR - control port name, INT or REAL - control value
}
}
}
}
}


Function reference



Plugin: asym

このプラグインは、PCMストリームの再生とキャプチャのコンビネーションです。スレイブPCMは両方向で非対称に定義することができます(Slave PCMs can be defined asymmetrically for both directions)。


pcm.name {
type asym # Asym PCM
playback STR # Playback slave name
# or
playback { # Playback slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
}
capture STR # Capture slave name
# or
capture { # Capture slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
}
}

例えば、 再生とキャプチャの向きそれぞれについて、dmix プラグインと dsnoop プラグインを単一のPCMにひとまとめにすることが可能です(combine a dmix plugin and a dsnoop plugin as a single PCM for playback and capture directions, respectively)。

pcm.duplex {
type asym
playback.pcm "dmix"
capture.pcm "dsnoop"
}

なお、一方向だけを定義した時は、合成されたPCMは「half-duplex」になります。


Function reference



Plugin: IEC958

32bit IEC958 サブフレームをリニアPCMに、あるいはその逆の変換をします。
pcm.name {
type iec958 # IEC958 subframe conversion PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
}
[status status-bytes] # IEC958 status bits (given in byte array)
# IEC958 preamble bits definitions
# B/M/W or Z/X/Y, B = block start, M = even subframe, W = odd subframe
# As default, Z = 0x08, Y = 0x04, X = 0x02
[preamble.z or preamble.b val]
[preamble.x or preamble.m val]
[preamble.y or preamble.w val]
}


Function reference



Plugin: Soft Volume

ソフトウェアによるボリウムの減衰ができます。ソースと出力先のフォーマット、サンプリングレート、チャンネル数は一致していなくてはなりません。

「control」が stereo (count 2)のケースでは、このチャンネルは モノ、2.0、2.1、4.0、4.1、5.1 あるいは 7.1 のいずれかであるである可能性がある、と推測されます(assumed to be either...)。

その control が既に存在していてそれがシステムコントロールである場合(例えば no user-defined control)、このプラグインはスレイブを何の変更も加えることなくスルーします。
pcm.name {
type softvol # Soft Volume conversion PCM
slave STR # Slave name
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
[format STR] # Slave format
}
control {
name STR # control element id string
[card STR] # control card index
[iface STR] # interface of the element
[index INT] # index of the element
[device INT] # device number of the element
[subdevice INT] # subdevice number of the element
[count INT] # control channels 1 or 2 (default: 2)
}
[min_dB REAL] # minimal dB value (default: -51.0)
[max_dB REAL] # maximal dB value (default: 0.0)
[resolution INT] # resolution (default: 256)
}


Function reference



Plugin: Null (なぜか2度目の登場…)

このプラグインは、PCMストリームの中身を破棄してゼロサンプルのストリームを生成します。

注意: この実装は /dev/null (playback, must be writable)、 /dev/full (capture, must be readable) の各デバイスを使用します。

pcm.name {
type null # Null PCM
}


Function reference




----
(2007.11.19)

2007/10/31

[Gusty Gibbon] Ver.7.10 にアップグレードしたけど

前のポスト(これ)の通りクリーンインストールしたにも関わらず、ログインしてからデスクトップが表示されるまでの時間は結局、30秒近くになった。しかも、初期状態では何の問題も起こっていなかったのに、大量のアップデートと必要なもののインストール(VMware Player、Desktop Effect など)を経て、再現するようになったようにみえる。

デスクトップが表示されるまでに30秒弱かかる「問題」は、細かく書くと2つの段階がある。

1)当初5秒ほど、マウスカーソルがXのしゅりけんになる
2)その後20秒ほど、背景真っ黒の画面に矢印カーソルだけが表示される

1番めの問題は、compiz-fusion に必要な xserver-xgl(GL-based X server)を削除すると再現しなくなる。厳密に言うと、しゅりけんカーソルと暗黒画面がなくなる。でもデスクトップ表示完了までに25〜30秒かかることに変わりはないので、現象の原因の切り分けはこう整理しなきゃいけないのかもしれない。

1)真っ黒な画面 & マウスカーソルが一時Xのしゅりけんになる
2)デスクトップ表示までに25〜30秒かかる


いずれにせよ、そんなに支障があるわけじゃないけど気持ちよくないんで、Faisty Fawn に戻してしまうことも検討している。

…って書いた後、いろいろやったけど解決しなかったから、Faisty Fawn に戻してしまいました。

----
(2007.10.31, 追記 on 2007.11.06)

2007/10/22

[desktop] Desktop effect が有効にならない時

Gutsy Gibbon 7.10 にして変わったことはいろいろあったけど、Synaptic の項目から Beryl がなくなって Compiz Fusion を入れないとキューブができなくなっていた。これは Ubuntu の問題ではなくて Beryl と Compiz の統合が原因だったというのは、ちょっと調べればすぐ分かったけど、正直 Beryl の方がよかった。Emerald とかも何か不調。

で、最初に「外観の設定」の最終タブで Desktop Effect を有効にしようとすると有効にならない。「Desktop Effect could not be enabled」と言われる。これまたあちらこちらさまよっていたら、Ubuntu Forum に答えを発見した。

"sudo apt-get install xserver-xgl"
 and Restart X by doing "cntr-alt-backspace."
(http://ubuntuforums.org/showpost.php?p=3562227&postcount=10)

これで解決した。

----
(2007.10.22)


====

ところが、ログイン後に時間がかかる問題でクリーンインストール(厳密には /home と /etc はバックアップをとって、/home のみ流用)したら、apt-get も Synaptic もダダをこねる。

W: http://jp.archive.ubuntu.com/ubuntu/pool/main/g/glitz/libglitz1_0.5.6-1_i386.deb の取得に失敗
500 Internal Server Error

W: http://jp.archive.ubuntu.com/ubuntu/pool/main/g/glitz/libglitz-glx1_0.5.6-1_i386.deb の取得に失敗
500 Internal Server Error

W: http://jp.archive.ubuntu.com/ubuntu/pool/universe/x/xserver-xgl/xserver-xgl_1.1.99.1~git20070727-0ubuntu3_i386.deb の取得に失敗
404 Not Found


んもう、何が何だか分からなくなってきた。Synaptic の設定を変更。

・ダウンロード元を「メインサーバ」に
・サードパーティーのソフトウェアで「http://archive.canonical.com/ubuntu gutsy partner」を追加
・「プレリリースされたアップデート(gutsy-proposed)」を追加


って、こんだけやったら入った。どれが効果あったのかまでは分からないけど。で、ctrl+alt+BS で再起動したら成功。プルルン窓とかキューブになった。

でもなぜ、compiz fusion 入るときにこれも一緒に入らないの? そもそもFAQとかでは Synaptic でできることは「まずコマンドライン」じゃなくて「まず Synaptic」でやるように書くようにしたらどうだろう。大半のことは Synaptic で用が足りるんだから。

あと、こんなメッセージが表示された。

Xgl server setup changed

The Xgl server will now be started automatically next time you login. It is no longer necessary to use any special X session to start Xgl, and such sessions will likely fail to work properly. Please select a regular session from your session manager next time you log in. To disable Xgl autostart for this user, create a file named ~/.config/xserver-xgl/disable


ま、これでOKだわな。

----
(2007.10.28)

[Gusty Gibbon] Ver.7.10 にアップグレード

Gutsy Gibbon Ver.7.10 を入れた。7.04 Faisty Fawn からアップグレード。DLや諸々の再設定込みで2時間弱かけておおむね成功した。

再設定が必要な事柄があった。

ひとつはキーボードの設定が英語 101 か何かになっていて IME が起動できずに焦ったこと(普通に再設定)。なんか、X-Window の設定と Gnome の設定が一致してなくて、その後も時々聞かれる。実害はそうないけど、どうなってるの?

もう一つはデスクトップエフェクトが有効にならなかったこと。これは別項を立てて解決方法を書き残すことにした。

で、その他の出来事は次のとおり。

・一度入れた compiz fusion を完全削除、再インストール。
・取り敢えず Emerald は外した。
・キューブと横並べ一覧の両方を同時に使えた時期もあった。
・本来はどちらか択一の仕様のようだ。
・まだ configuration が統合されていない印象。
・取り敢えずBeryl相当の機能以外は外してある。
・VMPlayer が起動しなくなったので完全削除、再インストール。
・Synaptics から落ちていたので、
 公式サイトからファイル落として導入。
・ログイン時にデスクトップ表示にすごく時間がかかる。
 解決方法はまだ分かっていない。
・Anthy が多少賢くなった?
・Open Office や JD や(話によると)Gimp も新しくなった。

----
(2007.10.22)

====

で、ログイン後の時間が長くかかる障害については、諸サービスを外したり compiz を無効にしたり外したりしてみたけど一向に解決方法が分からない。ブート・シーケンスだと、どの処理にどれだけ時間がかかるか、というのを調べるユーティリティがあったから、それで調べることができたけど、ログイン後の処理については分からずじまい。

で、結局5日後に再インストールした(2007.10.27)。再インストールの詳細については別項参照。

----
(2007.10.27 加筆)

2007/10/13

[vmware] 再 config のコマンド

sudo vmware-config.pl

[vmware] VMware Tools を導入する

VMware 用のドライバなんかを集めたもの。

1) VMware Server などをDL
2) tools-key.pub というファイルを探す
3) それが格納されているフォルダに、必要なドライバが入った ISOファイルがある
4) マウントする?

[vmware] 仮想マシンのファイルをつくる

VMware Player に必要なファイルをつくる方法。

・VMのネタをつくる
Virtual Machine Creator : http://www.easyvmx.com/


・仮想HDDをつくる
qemu : 「 $ qemu-img create -f vmdk image.vmdk 8G 」のように

[fonts] フォントを追加する

たとえばこんな方法。

sudo で nautilus
/usr/share/fonts/ にフォルダを作ってフォントを放りこみ
sudo fc-cache -f -v を実行

久々にやったら忘れてたから、備忘録。

[wine] デスクトップのサイズ

ウチの環境では 1600 x 1112 がちょうどいい。

2007/10/07

[vmware] Alsa 経由で音を出す

2ちゃんでこんな書き込みを拾いました。ホストは Ubuntu だそうなんで、大変参考になります。

240 名前:login:Penguin [sage]:2007/10/07(日) 23:53:06 ID:gyN9qOYR
VMplayerでAlsa経由で音出すための俺メモ

1. Synapticsでlibesd0-dev libartsc0-dev libasound2-devをインスコ
2. ttp://www.sokrates.homelinux.net/~thomas/Private/Soft/vmwaredsp/vmwaredsp-1.4.tar.bz2をDLしてmake
  (Ubuntu使用なら /usr/include/kde/artsc のシンボリックリンクを /usr/include に作っておく)
3. /usr/bin に作成されたvmwarealsa, vmwarearts, vmwareesd の中身を編集する
  (LD_PRELOAD=libvmdsp.so VMDSP_BACKEND=alsa exec vmware "$@"
   →LD_PRELOAD=libvmdsp.so VMDSP_BACKEND=alsa exec vmplayer "$@")
4. vmwarealsaを実行

以上でalsa経由で音が出る、と


----
(2007.10.07)

2007/10/01

[vmware] 共有フォルダを有効にする

VMware Player が Ver.2.0 になってしばらくは、共有フォルダなるものを使っていなかった。セキュリティ上よろしくないという意見をどこかで見たからなんだけど、結局 NAS のファイルを共有してるから同じことかな、と思って思い切って enable してみました。参考にしたのは "Operation Normal?" というページ。

1) vmx ファイルの編集

共有フォルダ関連の行を追加する
##### Shared Folders #####
sharedFolder0.enabled = "TRUE"
sharedFolder0.present = "TRUE"
sharedFolder0.writeAccess = "TRUE"
sharedFolder0.readAccess = "TRUE"
# 次の2行は任意(guestName とはゲストでの共有フォルダの名前)
sharedFolder0.hostPath = "/home/username/vmware/share"
sharedFolder0.guestName ="name"
sharedFolder0.eXpiration = "never"
sharedFolder.maxNum = "1"
2) Player 側の設定をいじる

 Player メニュー - Shared Folders を選択して、共有機能を enable する。"Always enabled" か "Enabled until next power off or suspend" のどちらかを選ぶ。

 .vmx ファイルに設定した共有フォルダのパスや名称は、Property で変更できる。

3) VMware Tools の設定も変更

 共有フォルダ機能を enable しなければならない。


----
(2007.10.01)

[vmware] 参考になるページ集

■仮想サーバの構築(VMware Server)
http://www.aconus.com/~oyaji/suse9.3/vmware_server.htm

楽天モバイルを台湾で使ってみた

GWに、久しぶりに台湾に赴きました。コロナ禍の間に延命していた台湾大哥大と中華電信の回線のうち中華電信の方を失効させてしまい(なぜ中華電信だけ失効したんだろう)、今回の滞在は台湾大哥大と楽天モバイルの2回線で賄うことにしました。テザリングでAndroidスマホ1台とiPad、Ma...