ようこそ。

鷹足です。このブログでは、学校でのことやコンピュータ関係のことを書くと思いますが、どうぞよろしくお願いします。

2018年12月30日日曜日

ここ数年くらい(?) Gentoo Wiki の記事を日本語に翻訳するお手伝いをしているのですが、この間いくつか訳が難しい言葉、一般的な語義とは少し違う訳をした方がわかりやすいと思われる言葉などに出くわしました。
そこで、ここではそうしたものを訳語やコメント付きでメモしたいと思います。

順次加筆…できたらいいな!

用語集

as of writing
= 「執筆時現在」
将来的に変動がありそうな事項で多用。「本稿執筆時点で」といった訳も英和辞典では見られるが、幾分堅い表現のような印象がある。「この記事を執筆した時点で」などでもいいかも。
implement
= 「実装する」
辞典では実効に移す、といった語義が最初に載っていることが多いが、コンピューター界隈では機能の実装の意味で見ることが多い。場合によっては、implement the function を「関数を作成する」「関数の処理内容を記述する」などとするのもよいかもしれない?
out-of-the-box
= 「そのままで」
もとは「箱から出してすぐに使える」という意味。転じて、ソフトウェアが設定なしで動作するという意味で使われている模様。「設定することなく動作する」とか「そのまま動作する」なども候補か。
time/times
= 「時間」または「回数」
「時間」なら通常は不可算、「回数」なら必ず times (だと思われる)。ただ、three times 「3回」のような例なら簡単だけれども、どうも選択が悩ましいこともある。文脈から判断しなければならないこともあるのかもしれない。

このページについて/言い訳

私はプロの翻訳者ではありませんし、これらはあくまで私個人の選語や理解に基づくものです。ですから、これらにはより適切な翻訳があるかもしれませんし、ことによると誤った理解も含まれているかもしれません。それでももし役に立つと思われる訳や表現がありましたら、あなたの翻訳でも適当にお使いください。

2018年4月30日月曜日

PulseAudioとTimidity

PulseAudioでのtimidityの利用を試みたのですが、なかなか一筋縄ではいきませんでした。忘れないように、方法をメモっておきましょう…。

私の環境では、オーディオサーバーとして(ALSAの上に)PulseAudioが動いています。Gentoo Linuxでは、デフォルトのinitシステムはsystemdではなくOpenRCなので、PulseAudioはudev+Consolekitによってユーザーごとに起動されています。

PulseAudioは、(私の理解の限りでは)ALSAに対応、かつPulseAudio非対応の普通のアプリケーションがALSAを使おうとすると、仮想のALSAデバイスを使ってデータをPulseAudioに転送した上でうまいこと処理してまとめてサウンドカードに出力してくれます。
つまり、
アプリケーション -> ALSA仮想デバイス -> PulseAudio -> ALSA物理デバイス
という処理をたどることで、アプリケーションにはALSAを使っているように思わせつつすべてのサウンド出力をPulseAudio側で管理し、ハードウェアとのやりとりはPulseAudioのみが(ALSAを介して)行う、ということのようです。

さて、timidity++はネイティブではPulseAudioに対応していないようですが、これ単体でMIDIファイルの再生に使う場合には、上の仕組みがうまく働きしっかり再生してくれます。
(MIDIファイルを入力) -> timidity++ ->  ALSA仮想デバイス -> PulseAudio -> ALSA物理デバイス
という感じですね。

問題は、仮想MIDIインターフェース(ALSAシーケンサー)として使う場合です。aplaymidiやRosegardenその他のMIDIデータを出力するソフトウェアを使う場合、timidity++をこちらのモードで起動することになります。
アプリケーション -> timidity++ -> ALSA仮想デバイス -> PulseAudio -> ALSA物理デバイス
という流れにしなければなりません。ところが、Gentoo Linuxで提供しているinitスクリプトは、timidityユーザーとしてtimidity++を起動しようとします。そうすると、どういうわけか、上記のように既存のALSA仮想デバイスに接続せず、直接物理デバイスにつなぎに行ってしまうようなんですね。(あるいは、timidityユーザーとしてもう1つPulseAudioを立ち上げようとするのか?)
その結果、物理デバイスへのアクセスが競合してしまい、timidityかその他のアプリケーションのどちらかで音が出なくなります。

[alsa-sink-ALC892 Analog] alsa-sink.c: Error opening PCM device front:2: デバイスもしくはリソースがビジー状態です
こんな感じのエラーになるわけです。

PulseAudioがユーザー単位で動いている以上、それを利用するtimidity++がシステムのデーモンとして振る舞うのは難しい、ということですね…。これは原理的に仕方ないっぽいです。 PulseAudioにはSystem-wideモードなるものもあるようですが、あちこちで書かれているように組込み用途以外では非推奨扱いです。Gentooでもuseフラグがマスクされています。

そういうわけで、timidity++をユーザー側で動かすことにしました。
 /etc/conf.d/timidityを見てみると、initスクリプトが使っているtimidityのオプションが書いてあるので、これをユーザーがログインした時に自動実行されるようにしておけばよろしいわけですね。

デスクトップ環境で使えればいいと割りきれるなら、適宜シェルスクリプトを書いて 、~/.config/autostart-scriptsあたりからシンボリックリンクを張りましょう。多重起動が気になる人は、その辺の判定処理も付けておけばいいと思います。
 私は、終了用のシェルスクリプトを書いて~/.config/plasma-workspace/shutdownからシンボリックリンクを張りました。KDEなら、これで開始時にtimidity++を起動、終了時にkillというのが実現できます。

きれいな方法ではないですが、一応はこれでデーモンモードのtimidity++とPulseAudioが共存できるようになりました。