「音楽」に関する日記(4)

<前 次>

データの受け渡し。

ミディビ作ってました。
もうほんとに色々あって。

OutputStream探し。
MIDIデータをbyte配列としてメモリ上に一時置いておかなければならないんですが、可変長byte配列を扱うのに便利なクラスが無かったんです。
まずLinkedList。
これはオブジェクトなら何でも要素にできるし項目の追加が高速。
そしてデータは一気に配列としてもらうことができる!!
というものだったのですが、LinkedListで扱えるのはオブジェクトだけなんですよね。
byteはオブジェクトじゃないので扱えないんです。
そりゃByteオブジェクトにすれば入れられなくは無いけどそうすれば高速化が無意味ということで。
第二候補がByteBuffer。
名前の通りbyte型のバッファを扱うクラスで、こちらは正真正銘プリミティブ型のbyteなのです。
ところがどっこい抽象クラス。
何か実装しなきゃならないそうです。
実装が嫌だから既にあるクラスから探しているというのに!!
仕方なく自作。
経験上MIDIは数十キロバイト程度の大きさになるのでバッファを10kBごとに増やす方法で不必要にメモリの使用量を増やさず高速化を図っていました。
OutpurStreamのサブクラスとして作っていたんですよ。
そこでどんでん返し。
ByteArrayOutputStreamという私のやろうとしていたことまるっきりそのままの名前のクラスを発見したんですよ。
その内容を見てみてビックリ。
私が自作していたOutputStreamと同じことができて、さらに私が思いもしなかったさらに便利なメソッドまであるじゃありませんか!
速度は自作のほうが出せそうな気がしますけど、速度が何だってんです!
ここまで理想どおりのものをあつらえてもらいながら使わないというのはJavaに対して失礼というものです。

CGIに渡すデータをどうするか。
ここはお絵描き掲示板をお手本に。
というわけでしぃペインターの出力をそのままファイルに書き出すCGI作成。
binmodeを忘れたりして出力がおかしなことになったりしてました。
識別子・サイズ・実データが順番に並んでいるようです。
MIDIにはテキストとしていろんな情報が入れられるのでもろもろの情報はMIDIに埋め込んでしまえばミディビが受け取るデータはMIDIデータだけでよくなります。
そうすりゃオエビのように面倒な処理は抜きにしてデータ受け取りCGIは受け取ったデータをそっくりそのままファイルに出力することを考えればよいのです。

で、関係ないMIDI。
出だしの部分だけ。
後半で発展させてゆきます。

1128783251.mid

重くなる

ふにゃさん、各自でBGMを用意するタイプはCBGMLoaderでさらっと書いちゃおうかな~などと思っていたのですが、強制的にループしたり存在しないファイルに対する動作がよくわからなかったりするので使用は控えることにして、その基底クラスであるCLoadCacheとファイル解析のCLineParser、CSound、あと存在するBGMとかいろいろデータのためSTLのmapなどを使って実装してみようと目論んでいます。
そひて、色々仕掛けを入れようと考えている標準BGMのほうは、曲の進行に合わせて効果音とかの音程を変更するようにしてみようかと思ったのですが、それをDirectMusicProducerのデータで実現しようとしてソフトを起動して色々調べていたら、どうもどうにも私の考えていたのとは違っていたような違っていないような、とどのつまりは余計に分からなくなって、少々挫折気味なんですが、やろうと思えばプログラムで無理矢理、ということもできなくはないだろうし、そもそもやらなくたってゲーム進行には別に関係ないわけだし、とりあえずDirectMusicProducerのセグメントのパターン切り替えはマスターしているつもりだし、何とかなるだろうしならなくてもよいわけで、結局BGMそのものができていなければBGMに特殊効果をつけるなんてできるわけがありませんので、やっぱり原点回帰で普通にMIDI作るのが無難かと思っていたりするわけです。

う~む、localtimeとかで得たデータをまた秒数に直すにはmktimeか…。
となればもう試行錯誤しながら目的の時間を探す必要はないわけで…。
うん、よさそうだ。
これを使うと以前のデータは壊れてしまうみたいだけど、コピーを持っておけば何の問題も無いというわけで。

ナマライザ読み込みできるようになりました。
エクスプローラからドラッグ&ドロップで読み込めます。
一括して沢山のファイルを読めます。
重いです。激しく重いです。さすがナマライザです。他のソフトも巻き添えで重くなります。メモリ食いすぎです。
あんまり重いので、強制終了できるようにしておきました。
ログ読み込みは基本的に中断できないんですよ。ログ解析は中断可能ですが。

カカシの歌

引き続き時のオカリナやってます。
今森の神殿です。クリアしましたがリセットしました。
それで、ボヌールにどの曲を覚えさせようかと考えていたのですが、風のタクトの来年の儀式の曲を覚えさせることにしました。
オカリナ譜も載せていますよ。
時のオカリナで演奏しやすいように移調してあります。

なんとかふにゃさんのミスターフレームの画像も作成中…。

1126879344.png

ラインコンストラクタ完成!?

LineConstructor完成しました。
VBの命令のInputBoxだとPaintイベントが呼び出されないからInputBoxと同じ機能を自前で作って(うちで配布しているInputBoxExね)、OCXのコモンダイアログコントロールだと同じく再描画されなくてAPIを使って直接呼び出して、指定したフラグがおかしなことになって瞬時に終了されたりして、いろいろあったようななかったようなで、必要な機能は全て揃いました。
行ごとの編集、並び替え、追加削除、あっ検索が無かった!
とにかく、明日検索を追加してドキュメントを付属してアイコンを作ってアップします。
うわー。紹介ページもまだだぁ。

爆ボンのMIDI、一応聞けるようにだけはして置きました。
でも、実際のところ、聞かれたくはないのだけれど…。

そして、エアライドのページも更新しました。
各種記録を!

ヒュージィ、負ける

LineConstructorの基本機能があっという間に出来上がりました。
要素の追加・削除・更新はもちろんのこと交換・並び替え・シャッフルも用意して、ファイル入出力もほぼ出来上がり、あとは細かいところを調整したら完成です。
配色はウィンドウズの設定をそのまま使用するので基本的にユーザーの好きな配色で使えます。

ヒュージィのMIDI追加しました。
打ち上げまくったけど結局滅亡しちゃったバージョン。

ふにゃさんのウナギカズラの絵を描いていました。
でも意外となかなか難しいものです。

1126536792.gif

赤山

チャット管理プログラム作り始めました。
現在はぼっとの辞書を見ることのみできます。
一応形だけ削除フォームと追加フォームが作ってあります。
こればかりは実物を見せるわけにもいかないので画面写真のみ公開しておきます。

調子に乗ってレッドマウンテンの曲まで作ってしまいました。
昨日は爆ボンのブルーリゾートの曲を作っていてあまりの難しさに放棄したのですが、今日は最後まで作りました。
で、やっぱり幸せ気分粉砕。
あまりにひどいデータなので公開していません。

1126015192.png

ブルーリゾート

今日は昨日のあの辞書整理システムを作る予定だったのですが、突然の衝動に駆られ、ブルーリゾートの曲の耳コピを始めてしまいました。
いあ、だって、爆ボンの音楽ってそれくらいいい曲ですもん。
今日爆ボンやってて終わった後にミョ~に幸せな気分になっていたのですよ。
で、耳コピに挑戦してみて幸せな気分粉砕。
ム・ズ・カ・シ・す・ぎ・で・す!

1125929479.mid

ナンバー4まで

パネルγの暗号化アルゴリズムを改良しました。
ランダムにキーを生成していると何度も同じデータで保存するうちに規則性を見抜かれてしまう恐れがあるので、同じ点数には同じ暗号を吐き出すようにしたのです。
そして、受け取り側のCGIも完成。
以前のランキングとの互換性も維持しつつパネルγ方式の新しいデータも受け取ることができるようになりました。
まだセーブに難ありですが暗号・復号処理は大体OKみたいです。

メテオスのヒュージィ曲、4番まで全部作ってみました。
そして、3番までを繋げてみました。
0と1との切り替わりが少し分かりにくいかもしれません。

今日の絵は、白けるコンビ、シャイとカンです。
テキトー落書きと蛙という意味不明な組み合わせです。

1125671739.png

データベース使えず

GChat、phpMyAdminで仮のデータをいくつか入れて、とりあえずmySQLに接続するだけのコードを書いて、いざ接続!と思ったら、あんたのサーバーからは接続させてやらん、とのデータベースサーバー様の仰せだったので、ローカルテストのときのデータベース利用は諦めることに。
本当は自分のコンピュータにもmySQL入れればいいんだけど、もうこれ以上面倒なものをインストールしたくなかったし、今までどおり普通のファイルでも一応実現はできるので、早々と従来の方式に切り替えてしまいました。
まあ、仮で入れてみたデータで、必要そうなデータは大体分かったので、一応意味はあったものと思います。

RPG±0、マップチップのサイズも自由にして欲しいとの意見があったので、それに対応するためデータ形式とインターフェースを全面的に作り直すことにしました。
まあ、インターフェースに関しては既に作り直す気になっていたのでちょうどいい機会です。

ふにゃさんのBGMはちまちまと作り続けています。
サブメロディも入れてみたり。消すけど。

1125498071.mid

スコア報告用ページほぼ完成

アクセス解析してみたら、8月のアクセス数が先月から倍増していました。
8月はアキタラヤメル企画でいろいろやっていたもんで、夏休みということもあってずいぶん伸びたんだと思います。
こういう月があると次の月が怖かったりしますが。

パネルγのランキング、報告ページの作成はできました。
鍵生成に使う乱数の精度が悪かったので、ちょっと補正をしてやらねばなりませんでした。
しかしそのおかげで以前よりはずっとマシな報告スタイルになったと思います。
あとはこれを受け取るCGIさえ完成すれば…。

ふにゃさんのBGMを引き続き作っていました。
とはいっても、出だしの部分にちょっと手を加えただけです。

RPG±0、要望があって、世界地図に対応することになりました。
少し難しそうですが、マップごとに世界地図のどこに当たるかなどの情報を記録すればできそうです。
そして、キャラクターシステム。
パーティ編成とかはどうしようかと考えたのですけれども、どうもイベントやら何やらと絡めて考えるとどのキャラクターも、そう、主人公から村人に至るまで、全部同じ方法で取り扱えば、私にもRPG作者にも優しいシステムになると思うんですよ。
A君のマップチップに話しかけると間違えてB君の顔グラフィックが出ちゃったなんて事も防げると思うんですよ。
まだいろいろありそうなので詳しくはまた後日。

1125413337.mid

簡単エディタ

ふにゃふにゃのページを更新しました。
開発メモ。どうやら以前のエディタは難しすぎてエディタ作者自身にも手に負えない代物だったようで、以前の何でもできるエディタは残しつつも、新しい簡易エディタを作ることにしました。

  1. ペイントの鉛筆ツールで曲線を描くかのごとく自由で簡単で直感的な直線生成
  2. ドラッグ&ドロップで置きたい場所に置ける画像
  3. 必要なファイルは全部ステージファイル一つに埋め込み、最低限動作に必要なファイルを極力減らす
  4. エクスプローラからドラッグ&ドロップで勝手に背景としてインポートされる一枚絵
  5. その他必要なファイルはインポートできるようにする。インポートしたファイルは関連付けられたプログラムで開く
  6. いろいろあった設定は必要最低限まで減らす。あとは自動設定
  7. 当然の如く用意されるすり抜け防止策
  8. ステージ作者が最初に使いたがるだろう機能をコンパクトにまとめたツールボックス
  9. ステージ作者を困惑から救う優れたヘルプシステム
だいたい開発理念はこんなもの。

そして、Bomber丸Worldのページも更新。
戦闘画面がついに出ました。
イメージ画像ですけど。
なかなか面白いことになっていますよ。

そんでもって、RPG±0、さしあたり自分で不便に思っていた右クリックの挙動を統一。
スポイト機能と右クリックメニュー、両方一気に実行されます。

チャットの人工無能ちゃん、以前のようにファイルに入れておくよりも、mySQLのデータベースに入れておいたほうが管理しやすいと思ったので、mySQLを勉強し始めました。
とりあえずphpMyAdminの使い方を思い出しつつどんなデータがどう使われるのかを覚えていきます。

ふにゃさんは今日はBGMを作成中。
先日言っていた違和感はほぼ取れたように感じます。
メロディ以外のパートは修正するときの補助のために入れた音で、後ではずすかもしれません。

1125326932.mid

アラビアン

ミスター・フレーム、作りました。
最初は敵クラスとふにゃクラスの多重継承で作っていたのですが、それが大失敗で、無駄且つ危険な拡張性の高いコードを残して多重継承によるミスター・フレームは消え去りました。
ミスター・フレームはふにゃの動きを模倣するということで、お手本となるふにゃを内部的に持ち、位置や状態などはお手本からコピーすることになりました。
お手本が死んじゃったら、遅れてミスター・フレームも死にます。

カービィのエアライドの、ウエライド:砂のMIDIを作ってみました。
作りかけなんですがゲーム記のところにアップしておきました。

PRG±0、意見をもらって、とりあえず需要ができたので、作る優先順位を上げることにしました。
半年以内にできたらいいな。
一応、作る予定のところをリニューアルして書き直してみました。

1125240329.png

もう寝ます

アキヤメのキャラ名簿、150人達成しました。
忘れかけてたキャラ、まだ名前しか決まってないキャラ、キャラと呼ぶには微妙な存在など、いろいろありますが、今までのキャラとしてはほぼこれで全部だと思います。
いや、ほぼだから本当は全部じゃないです。
本当の本当に忘れちゃってたキャラもいますし、微妙な線でキャラじゃないと判断されたやつもいますし。

チャットプログラム、昨日のバージョンまでは好きなときに読み込んで好きなときに書き込むようにしていましたが、これは動作が重くなる原因になるばかりでなくログ消失の危険性が著しく高く、というよりはもはや壊れてくれといわんばかりの仕様でしたので、同じファイルは一連の流れの中で一度しか読み込まず、保存はログが変更されたときのみ終了時に行うようにしました。
あとはファイル監査機能をつければログの異常を発見することができ、そこからまた対応するプログラムを書けるようになるのでそれなりに強いプログラムになるものと思われます。
さらに、二重投稿防止機能を改良。
各人ごとに最後の発言を記録してゆき、それと同じ発言は次回にはできないようにしました。

テキストファイルの行数を数えるプログラムを作りました。
もっとも、最後の行が改行されているか否かで結果が変わってしまうのですが。

ふにゃふにゃのキャラ紹介ページの画像を更新しました。
この間の手抜きの絵ですが、それより前のさらに手抜きの絵よりはずっとマシでしょう。

ふにゃさん、ふにゃが寝るようになりました。
ふにゃふにゃで登場させ損ねた元祖のアクションをどんどん取り入れていきます。
やっぱりしゃがみストップと何の影響も受けない安定した歩きは欠かせないと思っています。
こうしてみてみると、ふわふわアクションとか言いつつも、ある部分においてはパキパキ不連続な動きをしていて、言ってみればアナログ的要素とデジタル的要素を併せ持ったゲームとなっているようです。

今日の音楽はふにゃさんのメインBGM作りかけ。
どこか音をはずしているのは分かるんだけどどこをどう間違えたのかが分からないから途方にくれています。

1124636095.mid

ぼっと出現間近!!

ふにゃのページを更新しました。
遊び方のページが増えています。
しかし遅い落下速度のことをまだ書いていないのでまた後日更新します。

FFCCのMIDI「哀しい怪物」を修正しました。
でもまだまだ音源依存が強くて、というより楽器間違えてて、音程も間違えてて、本当はもっともっと修正しなければならないんですけれども、正直言って私の耳ではこれ以上は聞き取れないのです。
それでもまあ前よりはずっとマシになりましたよ。

爆ボンのページに続いてカービィのエアライドのページを独立しました。
内容そのものは更新していません。
今後は単体で10kBを超えたゲームはページを分離していこうと考えています。

チャットの在室者管理ができたので、チャットとして最低限の機能は揃ったと思います。
とはいえいまだにクッキーと発言自動消去などができていませんが。
GChatの最大の特徴として、在室者管理の徹底があります。
ます、入室していない状態や退室した後に発言しようとするとエラーが出て発言できません。
つまり、「落ちた振り」ができないわけです。
そして、3分間発言しないままだとROM(見てるだけ)だとみなされ、1時間発言しないでいるとブラウザを閉じたか話す気がないとみなし、自動的に退室させられます。
そして、この機能は通常のチャットの機能とは別に、もう一つの効果を生み出します。
それは、ずっと昔に言っていた、「気まぐれ人工無能」の実現です。
世にも珍しい、チャットから退室するぼっとです。
ぼっとも人間と統一した扱いで在室状態を管理すれば、誰とも話していないときが勝手に自動退室機能が働いて退室するのです。
もしいなければ呼べばいいし、いなくていいなら呼ばなきゃいい。
しかも、呼ぼうと思えば二人以上のぼっとも呼べたり…。
あのときのような絵空事ではなく、これが今実現しようとしているのです。

1124463569.mid

在室者管理

さてと、チャットの在室者管理でも作りますかね。
入室時:member.dat読み込み→入室者チェック→member.datにデータがなければmember.datに入室者を追加して入室メッセージを表示→member.datを更新
ログ表示時:m読み込み→長期ROMの人がいた場合自動退室させてm保存→在室者を表示
発言時:m読み→発言者がmになければエラー→最終発言時間を更新してm保存→ログ表示
退室時:m読→退室者いなければ何もせず→いたら削除&m保&退室メッセージ
てな具合でどうでしょ。

DirectMusicProducerで作ったデータを再生しようとして見事に挫折。
どう頑張っても全く音が鳴らないしエラーが出るんですよぉ。

今日は「Bomber丸World」の海音楽裏。
短調です。

日記カテゴリに「掲示板」と「チャット」追加しましたよ。

1124204328.mid

木目模様

ふにゃさんのナビゲーションバーの背景は木目模様にしようと思ったんだけど何度も描こうとして挫折。
結局どうしたのかというと、VBで適当な模様を作ってそれを縮小してそれらしいものに仕立て上げました。
それに伴いギヤバネ君にも木目模様を施しました。

アキタラヤメル企画にもスタイルシートを施してみました。

GChat、発言処理ができるようになりました。
人工無能ちゃんとの相性も考えて普通のチャットプログラムではまずやらないようなことをしています。
それが、発言の時系列ソートと未来の発言を表示しない機能。
人工無能ちゃんは人間様の発言を受けてから即座に返答するしか能がないので、人間様によくある入力時間を擬似的に再現するために表示だけ遅らせるという手法をとったのです。
とりあえずテスト書き込みできる状態にはあるのでぜひ見ていってください~。

FFCCの「哀しい怪物」を大雑把に耳コピしてみました。
う~ん、SFX音を使うと音源依存が激しくなるなぁ…。
ま、そんなこと知ったこっちゃないけど。

1122821470.png

爆ボンのページ

掲示板のアイコンにあんこを増やしました。
まあ今回は楽な作業でした。

パネルγの裏話8「珍しいパターンたち」を公開しました。
これで予定している裏話は全部になります。一つはまだ完成していませんが。
今回は最後らしくネタバレを含んでいます。ご注意を。

爆ボンバーマンのページをニンテンドウ64のページから独立させました。
もともとゲーム記は自分が作りたくて作ったものであり別に見る人がいようといなかろうとどうでもいいコンテンツであり、あんまりアクセスが多くても困るのですが、大好きなゲームの爆ボンなら話は別。
ゲーム記の中でも特に検索で来る人が多かったので検索から一発で見つかるようにページを分けました。

今日はいつか作ったメロディを短調にしたもの。
案外短調にもなじんでいるように感じます。

1122388373.mid

12音階

毎度毎度のことだけどレポートが…。
今回は連休だったこともあり、いつも以上に…だらけてました。
反省すればするほど悪くなるってどうなのよ。

昨日書き忘れていましたが、変数の値を近づけるテンプレートというのを作りました。
例えば地面との動摩擦力の場合、動摩擦力は速度が0に向かう方向に一定値かかるため、正の速度を持っている場合は一定値減じて、負の場合は増やして、となるのですが、速度が小さくなるとそれが行き過ぎてしまうためその場合は0にしなければならないのですが、これが簡単だけどあまりによく使う処理だから一つ一つ書くのが面倒だし、可読性も圧倒的に落ちるし、ということで、テンプレートが使われる典型的パターンと踏んで作ってみました。

RPG±0、タイトルくらいは表示できるようにしようとファイル読み込みを作っていたら、ファイルセレクト機能がないことに気付き、ファイルセレクト機能を実現するため入力を作ろうとしたのですがDirectInputはいじったことがないためわからず結局のところタイトル画像をやる気のない画像に差し替えただけにとどまりました。

今日は12音階音楽。
作り方があるそうなのでそれにしたがって作ってみました。
まずド~シまでの12音を平等に使ったメロディを作る。
音の高さ関係をひっくり返したものとタイミングをひっくり返したものを作る機械的作業。
半音ずつずらしてそれぞれ12段階のバリエーションを作る。
できた48の旋律を組み合わせてそれを発展させていって音楽として完成させていく。
今回は最初の2段階だけで作ったものです。
ノート以外のイベントは一切入っていないので前のMIDIの影響をもろに受けて変化します。

1121697082.mid

対比効果

ふにゃさん、地面の摩擦力をいろいろ変えてテストしました。
だいたい0.05~1.00で良好でした。
0.01以下は最高速が測定できず、2.00以上では速度が不安定、つまり、一瞬終端速度を大きく超えたりストップの瞬間後ろに吹っ飛んだりしてゲームになりませんでした。
ちなみに、第一作でも同じ現象は起こっていました。
公開していない炎のステージでは極端に地面の摩擦が高く、崖付近でバグるのです。

トップページをちょっと更新しました。
まあ、TWSとGWSのリンク位置を変えただけです。

メテオスのゲルゲルのMIDIを作ったのでアップしました。
ゲーム記からいけます。
結構音をはずしているようですが。

ついでに、ふにゃさんの音楽、として使うかどうかは実際には未定ですが、MIDIを作ってみました。
炎のステージをイメージして作っています。
音楽に限らず、あるものを表現するときにはそれと対照的な要素を織り交ぜることで全体を引き締めることができるように思います。
まあそれにはいろいろありますが、今回は熱さの表現なので、逆の冷たさ、滴り落ちる汗の冷たさ、物影に入ってほっと一息、そんなイメージで。
基本的に熱さは低い音、冷たさは高い音で表現されることが多いのですが、それは温度が高くなると硬いものも軟らかくなり、きんきんとした高い音がくぐもった低い音になることから来るのだろうと思っています。
今日作ったのはその点ではさっぱりですね。
オルゴールの使い道間違ってます。

1121176917.mid

<前 次>