某日記

(中期)

平成20年10月16日(木曜日)

今日

grouping と CHAR_MAX - なんてひでえ仕様だ :D > POSIX

arm の一部と ppc を除くと CHAR_MAX == 127 なので、そこから外れるアーキテクチャでは libc で fixup するのがいいんじゃないでしょうかねえ:

#define _CITRUS_LC_GROUPING_VALUE_MIN		0
#define _CITRUS_LC_GROUPING_VALUE_MAX		126
#define _CITRUS_LC_GROUPING_VALUE_NO_FUTHER	127
...
#if CHAR_MAX != _CITRUS_LC_GROUPING_VALUE_NO_FUTHER
// fixup
#endif

あるいは DB に grouping127 と grouping255 とかを用意して以下略。嫌だ嫌だ。

そうそう、libc のメジャーバージョン上がるなら、ctype.h の ctype 表を 32bit にできませんかねえ。XPG4DL 入れるときにやっときゃよかったんだが。

仕様上は各ビットの可能な組み合わせが決まってるので、現状の 8bit でも足りてるような足りてないようなそんな感じですが、実装上は is* と各ビットが一対一対応してたほうが柔軟に対応できそうな気がする。rune locale の内部では実際そうなってるので、それを流用すればいいのかな。runetype.h にあるビットフィールドの定義を(rune という名前は削って)ctype.h にもっていくのかのう。

いっそマクロやめればいいじゃん、という説もあるけれど。ところで ctype.h の #ifdef _REENTRANT って #ifndef の間違いじゃないですかね。

あとはまあ個人的な好みをいえば、DB のフィールド名は

#define _CITRUS_LC_NUMERIC_SYM_DECIMAL_POINT "decimal_point"
とかどっかのヘッダに書いておきたい気もする(cf. citrus_esdb_file.h)。無駄といえば無駄な気もするけれど。

あと、新規に Rune って名前を使うのはやめたほうがいいでしょう。

平成20年10月17日(金曜日)

今日

JPOPサウンドの核心部分が、実は1つのコード進行で出来ていた、という話 - 「誰もきちんと語ったことの無い話題」って、コード理論の本を読むと「逆循環コード進行」という名前で体系化されてますがな。JPOP だと循環コード進行と逆循環コード進行を一度も使ってない曲の方が珍しいってのは、この手の話題ではよく取り上げられると思います。

ありがちなパターンとしては、A メロを循環コードでスタートして B メロを逆循環コードでつなぐとか、サビを延々逆循環コードで埋めるとか。逆循環コード進行は本当のトニックに終止せずに代理コードの五度進行で寸止めを食らわせるのがキモで、これ使えば 100 小節でも 200 小節でもサビを続けられる。永遠に終わらないので精神的にものすごく疲れがたまるけど。まあ捨て曲を作るには便利なコード進行ですね。

さすがにポピュラー音楽で無調音楽とかそういうのをやるわけにもいかないから、どうしても限られたコードをどう組み合わせるかという戦いになる。「定番のコード進行を思い浮かべて、それを使うな」が差別化の第一歩なのだけれども、そもそも「定番のコード進行」とは何ぞやというのを知らないとどうしようもない。知識を集めるってのはそれなりに大切ですね。

とはいえ、小さい頃からの刷り込みによって、何にも考えずにフレーズを作るとこの辺のコード進行にはまってしまうように日本人の脳みそはできている。作曲の初心者は、せめて IIIm を III7 に変えてみるとか VIm を VI7 に変えてみるとかするところから始めるのが無難ですな。一方で、定番というのは陳腐ではあっても飽きが来ない水戸黄門の時代劇みたいなもんなので、不特定多数の人に聴いてもらうことが目的ならば、あえてそういうのをバカの一つ覚えみたいに使うというのも一つの生き方です。

よく考えてみたら逆循環コードは S-V7-T-VIm の総称だった気もする。T (トニック) が I のこともあるので、逆循環コードの説明としては、上の「本当のトニック(=I)に終止せずに」というのは必ずしも正しくないな。