スクリーンショット_2019-01-05_8

曲のループ指定に対応 ローグライク(仮)

今日も少しテーマ曲に手を入れて、演出に少し合うようになってきた。ボツにならずに済みそうだ。

そして、作っている曲(というか多分今後すべての曲)は曲の最初から最後までをループして再生するのではなく、例えば前奏があって、それ以後をループするといった作りになる。なので使用しているライブラリの SDL_mixer を使ってその設定をしようとしたのだが、実はこのライブラリにはそのようなループポジションを指定する方法がなかった。

オーディオ用のスレッドを作って曲の終わりを監視し、終わったと同時にループ開始位置にヘッドを移動させて再生し直す、という無理やりな方法を実装したのだが、音楽が一旦終了してしまうためオーバーヘッドが大きく、きちんとループされずプツンと切れてしまう問題がでてしまった。
これを解決するには SDL_mixer 自体を改造するか、他のライブラリを利用することになると考えて、まずは他のライブラリを探してみた。色々あるようだが SDL-Mixer-X という SDL_mixer の拡張版を作っている人が居たので、それを使ってみようとした。しかし、このライブラリのインストール時に別のライブラリが沢山インストールされることなどの問題が発生し、使用を諦めた。他にもライブラリは存在するが、どうせなら SDL_mixer を改造しちゃおうと思ってやってみた。

修正したのはこの程度だが、これでループされるようになる(ただし mpg123 を利用した MP3 ファイルの再生時だけだが)。

また、ループ指定できるようになったので本プロジェクト用の機能として音楽ファイル用定義ファイルを作った。簡単な YAML ファイルになっていて、再生時に YAML ファイルを指定すると設定に従って再生されるようになっている。

ループ開始位置は今のところ秒を倍精度浮動小数点数で指定するようになっているが、これだと正確な位置を指定することが非常に難しい、もしくは不可能だ。音声データはサンプルという波形の高さの集合でできていて、そのサンプルが秒間何個あるかが所謂サンプリングレートと言い、CD の音声などに使われているものだと1秒間に 44100 回サンプルが記録されているものは 44.1 kHz というサンプリングレートとなる。1秒は 44100 ticks あることになるので、ループの設定はこれを 1 tick レベルで指定することになる。既存の SDL_mixer の流儀に従って秒で指定するようにしてみたが、1 tick を秒で指定するということは 1/44100 秒を表現できなければならなくて、倍精度浮動小数点数で表現可能だが十進数の表記では 0.00002267573696 となるので人間の入力できる数値ではない。今後は tick レベルで指定できるように直していきたい。

プロローグ・オープニングで使われる曲は数曲あるのだが、まだ1曲目の途中なので、6ヶ月目終了までに終わらないかもしれない。効果音やレベルデザイン、細かなアニメーションの修正など、他にも沢山あるのに。

しかし作曲は10年以上前にやったっきりで久しぶりだが、本当に楽しい。Logic Pro X のピアノロールも手に馴染んできて、MIDI キーボードは入力には余り使わずハーモニーの確認や試し演奏に使う程度になっている。また、すぎやまこういち先生の教えにある、音楽の普遍的な美意識を身に着けようと先生の曲を聴いたりベートーヴェンなどの古典音楽を聴いて感受性を高めている。ブランクは徐々に埋まっていると感じている。

体調とゲーム制作への趣

腹痛・胃痛・下痢、昼夜逆転などで体調はよくない。僕の病気は双極性障害というものだが、今は躁状態とうつ状態が混ざっている複雑な状態にあるようだ。多弁になったり創作意欲が湧いたりと活動的だが、過眠したり強い不安感も伴っている。病気が良くなれば仕事も再開するのでゲーム制作時間が減ってしまうだろうが、もし可能ならインディーゲーム制作だけで生計を立てることができたらいいな、なんて思っている。それにはまずはこのゲームをリリースすることが必要だ。体調優先で無理せず、自分のペースでゲームを完成させていきたい気持ちだ!

応援してくださると嬉しいです。よろしくお願いいたします!