作曲・指導・C言語・Linux

金沢音楽制作

金沢音楽制作では、楽曲・楽譜の制作と、作曲や写譜などレッスンを行っています。


99)StarcastleとC言語

あることを目論んでいる(結局最後に書いた)。その実現にはC言語が必須となるので、C言語を思い出しながら勉強している。とりあえず、家にあったハーバート・シルトの『独習C』(2002)の課題を解いているが、今ところはすらすらと書けている(気がする)。『独習C』が終わったら、カーニハン、リッチーの『プログラミング言語C 第2版』を真面目に読んでみたい。これはバイブル的な本で、C言語の作者によるC言語の仕様書である。中高生の頃に読んだことがあるが、第一章で挫折してしまった。自分の理解力の無さもあるが、Windowsを使っていたことも挫折の原因の一つだろう。

C言語とWindowsの相性は最悪だったと思う。C言語で最初に実行されるmain関数の最後に、return 0;と整数の0を返す命名を書くが、これが何かずっと分からなかった。これは、終了ステータスと呼ばれるもので、Unix/Linuxでコマンド終了時にその成否を0か0以外で表すものである。もし終了ステータスが0ならば、とif文で使うが、Windowsでこれが可能なのか分からない。C言語はUnix/Linuxととにかく相性がよい。そもそもC言語を作ったリッチーとカーニハンは、Unixも作っているのだから、そりゃ相性がよくてあたりまえかもしれない。

冒頭で「あることを目論んでいる」ともったいぶったが、ライブコーディングをしたいのである。ライブコーディングとは、コンピュータでリアルタイムでプログラムを書いて音楽を創る、いわば音響のインスタレーションだ。これを自作のコマンド群とLinuxのシェル(bash)を屈指して実現したい。これは、ミキサーやスピーカなどを屈指して音空間を表現するアクースモニウムに近いものかもしれない。なお、他の人がどのようにライブコーディングをしているのか知らないし、知るつもりも今の所はない。

ところで『独習C』のシルトは、実はミュージシャンでもある。シルトは、「Starcastle」(1969-1987)というプログレッブロックのバンドで1979年までキーボードを弾いていた。1stアルバムの『Starcastle』(1976)しか持っていないが、一言でいえば、Yesフォロワーだ。なかなかかっこいいので、興味のある人は聞いてみてほしい。

メモ(19-12-21):『独習C』の3章では、文字の読み取りにgetche()関数を使っている。これは、Windows用のヘッダファイルのconio.hが必要なので、Linuxではgetchar()を使うことになる。しかし、getchar()だと、ラインバッファに\nが残ってしまい、変な挙動になる。そこで、\nを無視する関数が必要だ。下掲の関数はそのメモである。ループ文で書いている人が多いが、三項演算子の方が一行で終わるのでよいと思う。なお、三項演算子は、Linuxカーネルのソースコード(/init/main.cなら2箇所)でも使われている。

int getCharcter(void)
{
  int ch;
  return (ch = getchar()) == '\n' ? getCharcter() : ch;
}

2019-12-18