2022年5月アーカイブ

Amazonアフィリンク

Linux上でのPCM音の入出力の標準となっているALSAについての入門書。音をデジタルデータとして扱うための導入、ALSAの役割とその基本的なAPIについて、ALSAを使ったサンプルプログラミングの解説、という構成になっている。

プログラミングというタイトルになってはいるものの、音をハードウェアから出力する部分を扱うため、比較的低レイヤーなプログラムの話になるし、同時に音をどのような形でデジタル表現しているかについての知識を要する内容になっている。たしかに入門書的な説明の本とはいえ、このへんの分野のことを学ぶんだという心構えは最低限必要かと思う。

プログラミングという触れ込みの本ではあるが、サンプルコードを見る限り、著者はどうもコーディングに慣れていないように見受ける。分野が分野なだけに、信号処理やリアルタイム処理やDSPといったハードよりの分野から流れてきたのかなと推測される。サンプルプログラムは、処理のフローを理解するのにはよいが、細かなコーディングの手癖はマネしない方がよい。

ハイレゾやらUSB Audio Device Classやらの話が登場するが、ハイレゾは本書ではほとんど関係ないし(ビットレート計算くらい)、また現代ではalsaがUSB限定というわけでもないので、このへんは差し引いて読んだほうがよい。

入門書にケチを付けても仕方ないのだけど、実践的な内容にまでは触れられていない。いつでもどこからでもデータを拾い放題な音声ファイルをALSAのクロック任せで出力すれば良いケースは一番シンプルな例で、現実は、音声ってストリームなリアルタイムのデータなので、アンダーラン・オーバーランやレイテンシやASRC(asynchronous sample rate convert)なんかを気にしないといけないのだけど、さすがにそういう内容を求めるのは酷か?とはいえ、P79のNoteにあるniceで優先度をあげようの部分なんか、ごまかすにしてももう少し書きようがあるだろうにと思ってしまう。ここはSCHED_FIFOのキーワードくらいは記載すべき。

と酷評気味に書いてしまったが、ALSAをていねいに解説したものなんて、書籍でもネット上の記事でも皆無に近いので、そういう意味では非常に貴重な本となっている。逆に、ALSAなんて公式ドキュメント読めばいいだろ(当然英語)、というくらいの心構えがある人はやっぱりあえて読まなくても良いとなってしまうか。

シグナルハンドラにprintf()を書いてはいけない - Qiita
https://qiita.com/rarul/items/090920b850acc4b7e910
を書いての余談です。

● 書籍のアフィ宣伝
    

● Qiitaで思ったより伸びた
正直これほど反応が来るとは思っていなかった。確かに「シグナルハンドラなんて使うな」という一点を強調した記事にはしたが、反響を得たかったわけではなくて、初心者が生半可な知識でシグナルハンドラを書いてやらかす例をイヤというほど見てきたので、それを改善したいという思いで書いた。その結果、もう超えることはないだろうと思ってたフラッシュメモリ記事を1週間で上回ったんだから、世の中、ソフトの、ユーザランドの、アプリよりのほうが人口多いんだなぁと改めて思い知った。

● 経験でしか学べない
「賢者は歴史に学び愚者は経験に学ぶ」、歴史を引き継がなければ学べないので経験に頼るしかなくなる。self pipe trickもシグナルスレッド方式も、シグナルハンドラ実装のための定石だと説明した書籍なりネット記事なりがほとんど存在しない。そりゃこんな状況じゃ、痛い目見ないと注意しようとも思わないよね。痛い目見てる人そこそこいるようなのに、なんで歴史として学べるようにできないんだろうか。もはや日本語圏じゃそんなことできる人やお金はない、英語を必須にしていかなければいけないという言語の壁の問題?

● 他のシリーズ
fork()とexec()の間で余計なことするな、pthread_cancel()なんて茨の道だからやめとけ、プロセスのfork(),exec()とSIGCHLDを正しく使う、ポーリング/ビジーループするなselect(),epoll()を正しく使え、みたいな定石をちゃんと整備できないだろうか。システムプログラミング系の書籍では、機能を教えるけど、筋がいい・悪いまでは語ってくれない事が多い。「malloc()したらfree()しよう」「openしたらcloseしよう」みたいなレベルまでしか教育が及ばないのだろうか。

● その他
気が向いたら追記するかもしれない。とはいえ、Qiita記事のPVが増えたとはいえ、さすがにこの記事までたどり着いて読もうという人はほぼいないか。

レイジレーサーあるある

・敵車や壁にぶつかるととりあえずシフトチェンジする
・坂道ではタイミングよくシフト上下する
・後ろから連続で敵車にぶつけられて大幅失速し入賞を逃す
・ドリフトよりグリップ走行が有利な車種・カーブが実は多い
・カーブで反対にハンドル切ってドリフトしても曲がれてしまう
・オーバル以外はペガースを買えば片付く
・ネジコンなしのオーバルは難易度が上がる

レイジレーサー - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%A4%E3%82%B8%E3%83%AC%E3%83%BC%E3%82%B5%E3%83%BC

PS1世代のゲームなので当時は「CD-ROMによりゲームのロード時間が長く」なんて言われたが、今どきのゲームに比べれば圧倒的にロードが早い。というより、今どきのゲームはロード時間が長すぎテンポが悪すぎで手軽に遊べない。

このアーカイブについて

このページには、2022年5月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2022年3月です。

次のアーカイブは2022年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0