KF-KBI作成 開発工程 頁5 ここからはひと足脱線、音声の組込について触り部分を紹介します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<3-06.開発工程06 KF-Xへの音声組み込み第一弾> パターン組込で、それも初期段階の立ちキャラ組込で思わぬはまりを味わった管理人は、 モチベ低下を避けるため、パターン組込とは全く異なる音声処理へいったん逃げ延び、 今一度モチベの向上を図るのでした。ところがここにも、落とし穴はあったのでした… <3-06-1.KF-Xでの音声組込> どんなゲームでも、効果音やBGMは、ゲームを演出する上で必須の要素。 格闘ゲームはゲーム性がシンプルな分、効果音とBGMはかなり重要です。 KF-Xにおける音声は、大きく分ければ @アクション中のキャラの声 Aアクション中各種効果音 Bキャラごとの流れる専用BGM の3種類に区別されます。 BGMの組込については、至極簡単。 キャラクターフォルダ内に、使いたいBGMのMIDIデータを「BGM.MID」というファイル名で置けばよいだけです。 もちろん、そのMIDIファイルを作る方法が単純ではないわけですが…この点は後ほど語ります。 なお、KF-AではMP3ファイルも利用できます。 そして、問題のアクション中のキャラ声や効果音です。 これについては、KF-Xのシステムをある程度理解する必要があります。 画像の組込とある程度似ているのですが、まずはMOTION.LSTを確認しましょう。 赤枠で囲まれた領域、すなわち、4行目の項目名称における「V」の列が音声番号を示します。 (「Voice」の略) ほとんどの行では「9」が記載されていますが、これは無音であることを示します。 青丸で囲んだところが具体的に音を出しているアクションです。 400行に注目。 コメント欄に「WIN」と書かれていますね。つまり、勝ち。要するに、 「勝った後のアクションで、音声番号2番の音声ファイルを鳴らせ」 という意味になります。 立ちキャラ組込のコンテンツで画像の表示についてある程度語ってますので、 MOTION.LSTの見方もだいぶ把握できてきたかと思います では、音声番号管理のファイルは? この、「VOICE.LST」が音声管理ファイルです。 このファイル内で、ユニークな音声番号に対し、対応する音声WAVファイルを紐付けしています。 フォルダ内に、HA.WAVとHU.WAVとWIN.WAVがありますね。 これらのファイルを、MOTION.LST中で音声番号を使って鳴らしているというわけです。 ただし、「キャラ作成.TXT」に記載されているように、KF-X内で管理できる音声番号は 「0〜8」までの9音声 ということになっています。上位バージョンではもう少し使えるはず。 まあ、あまり多すぎてもごちゃごちゃしすぎるので、いい感じに9音に絞り込めれば… まず、今回の初期組込では、 ・ゲーム開始時の叫び ・HA.WAV ・HU.WAV ・WINの際の勝ち名乗り ・LOSの際の敗北宣言 の五種類を組み込もうと思います。 <3-06-2.音声初期組込準備> さてさて、ここまでは規定路線。 今回は、全キャラにおいての初期組込五種音声の選定を、じっくり楽しもうと思っていました。 先日、紛失(と思っていた)回データもすべて復旧し、ホクホク顔ではじめたわけですが… 進めていくうちにまたまた、トラブルにはまりましたorz (といっても、実は9年前から分かっていたことではあったのですが…) まずは、キャラ登場回をざっとチェックし、候補とする音声をAVIUTILという動画作成ツールを使って WAV出力で抽出し、全キャラの組込音声候補元ソースを確保しました。 とりあえず全リスト。
以上111音源。テーブル作るだけで疲れた('A`) 音声関係は、量産一括進行すると死ぬな… で、この一覧表ですが、右側に「ノイズ」なる列があります。 あらかじめ言っておきますが、一般的な人は考慮する必要のない項目です。 これは管理人特有の問題でして… 管理人が2005年初放送時にキャプチャした1話〜26話については、 「コンポジットケーブル音声L側の接触不良」のせいで、 すべてL音声にノイズが入っている のですorz たちの悪いことに、当時使っていたスピーカーにガタが来ていて、 たまたまスピーカーLも死んでまして、26話終了まで気づかなかったという… たしか、当時の実況民になんか音声をアップした際に 「変な音入ってるよ」といわれて、「へ?何も聞こえないけど」と返事し、 そのことでケーブルとスピーカー両方がおかしかったことが発覚したのです。 スピーカーさえまともだったら、26話も無駄にしなかったのに… あ、そういやキッズ放送時に途中まで再キャプしてたような? ダンボールの中に入ったままかorz そんなこんなで、管理人が空手バカの音を使う場合、 1話〜26話の音声に限ってはノイズカット処理が必要なのです。 以下、メモ残し。 @ノイズトラック(左)をカット、保存 Aノイズカット済みデータを2つ並べて、どちらもトラック分離(4トラック状態) Bそれぞれから無音左トラックを消し、2トラック状態にする C Bの状態で、ステレオ化を選択で合成され、ノイズなしステレオ化完了 いやー、簡単簡単。簡単だけど… これをノイズ有り音源55個分繰り返すのかorz そんなわけで、音声回収開始時にうきうきだった管理人の心も、この 全キャラ分回収ノイズ音源ノイズカット惰性作業によってまたまたモチベ落ちしてしまったわけです。 音関係は、一括作業するモンじゃないなー… ちなみに、このノイズカットや、その後の音声クリッピングなどwavデータの加工作業は 「Audacity」を使っています。昔から使っててGUIにもなじみあるからいいんだよねー… で、ノイズ有り音源へのノイズカット処理をすべて終えた後ヘロヘロになり、 有明関連音源のクリッピング(必要部分のみ抜き出し、無駄音声をそぎとる作業)が終わった後に、 管理人の中で結論が。 他のキャラの音源クリッピング作業は、一括処理やめとこ ヘタレてしまいました。これで、テストプレイはしばらく有明でしか出来ないなあ。 <3-06-3.初期音声組込> そんなわけで、今回は有明分だけ組み込みます。それも初期組込として基本的なもののみ。
まず、すでにデフォルトの「ARAKI」で組み込まれている3つの音声を差し替えます。 旧コンテンツでは、元々のファイルに上書きをしたりしなかったりで混乱しました。 なので、今回は別途音声用フォルダを用意して、ぐちゃぐちゃにならないようにします。 最後に、「VOICE.LST」を新規音声素材を読み込むように変更し…完成!
無事、再生できたようです! まあ、ボリュームが小さいのが気になりますが… あと、負けた方がなんか点滅してるみたい…パターン画像が一部表示されていない? あ…LOSで使ってる画像番号72がBMP.LSTからもれてたorz つーことは、全キャラ漏れてんのか…なかなか完璧にはいかないなあ。修正は後日で。 さて、ここまでくれば…負け音声と、ゲーム開始時の音声組み込みだけ! いよいよ本コンテンツのメインイベントです!
まず、この二つの素材をVフォルダに組み込み、VOICE.LSTも修正。 そして…ついに、今開発にて初の、MOTION.LST編集となります。 バージョン管理をしっかりしないとまずいなこれは。 MOTION.LSTの0行目は、ゲーム開始時に一番最初にアクセスする行。 ここにイントロ音声の音声番号に「3」を記入。 そして、LOS(すなわち負け)処理行の410行の音声番号に「4」を記入。 さあ、テストだ!
有明暴走…orz 何が起こっているのかというと…イントロ音声がひたすら流れまくっているのですw 実はこれ、旧バージョン開発の際にもあったのです。 どんな風にすればこの暴走を止めるのかを必死に調べたのですが、 当時は解決方法が見つかりませんでした。 どこかのサイトでKF-Aでは回避の方法があるとのコメントを見つけ、 「intro.wav」というファイルを作っておけば、開始時にそれが流れるという その方法のままに作ってはみましたが、何かが違う… 結局そのまま放置して終わっていたのです。 ですが、今は回避の方法、というか、 正しいイントロ音声を処理できる「組み方」 を知っております。今回は初めての方が経験しやすい部分として、あえて失敗を実現しておきました。 ではどうするのか!? ・「イントロ処理」のサブルーチンを用意する ・立ちキャラ処理の分離 ・他のアクションの戻り位置の一斉変更 という、MOTION処理でのプログラム的概念の導入が必要となります。 詳しくは、次のコンテンツにて紹介いたします。 <3-06-04.イントロ音声処理> イントロ処理については、 よっとまんさんのサイトのKFXコンテンツ内の「KFX基礎的応用集」内の[ラウンド開始時演出] にシンプルにまとめられております。手早く作りたい人はぜひご一読を。 イントロ音声処理前に、発覚した画像番号72の立ちキャラ画像組込漏れを一括処理しておきました。 一括作業はこういうとき便利なんですよねえ。確実性・短時間処理性だけは上がります。 さてさて、有明の暴走を止める飛鳥先生の気持ちになって、新たにイントロ処理を行います。 やっぱ開始前に「俺はな、クマと戦うつもりだ」とか「オラオラいくぜ!」とか言わせたいですもんねえ… イントロ処理を行ううえで必要なのは、 ・MOTION.LSTの特徴 ・「COMMAND.LST」の設定 を把握すること。ここを抑えれば、誰でも作れます。 まず、MOTION.LSTというのは、前コンテンツでもさらっと触れましたが、 ゲーム開始時に行番号0から実行する ように決まっています。そこでイントロ処理は0行で行わせたいわけですが… そもそも、0行を実行した後、どうなるのでしょう? MOTION.LSTを見てみましょう。 4行目の項目欄に「To」という項目があります。これは、 この行のアクションを終えたら、「To」に書かれた行へ移動しろ という命令部です。つまり、0行立ちキャラ表示アクションは、延々に0行をさまよい続けるわけです。 そりゃあ有明もひたすら同じこと言い続けるわけですわなあ… でも、ずーっと同じ立ちポーズ表示し続けてたら何もゲームが進まないのでは? そこで出てくるのが、「ユーザーからの入力」や「アクション後の自動処理」です。 まずはユーザー入力を管理しているファイルを見ましょう。それが「COMMAND.LST」です。 ユーザーからの入力(およびKF-Xシステムの自動処理時)に、 MOTION.LSTのどのアクションへ飛ぶのか がこのファイルにまとめられています。 まず2行目を見ましょう。「CmdNum」の「0」番目がありますね。ここを見ると ・「Command」が「n」 ・「AmnNum」が「0」 ・「Comment」が「STA」 となっています。これを訳すと、 ユーザー入力状態がニュートラルになったら、 (立ちキャラアクションの記載された)MOTION.LSTの0行へ移動しろ という意味です。 「ニュートラル」な状態とは、何も押されていない、もしくは、何か押した後離した状態を意味します。 次に3行目を見ましょう。「CmdNum」の「1」番目がありますね。ここを見ると ・「Command」が「4」 ・「AmnNum」が「10」 ・「Comment」が「WAK-L」 となっています。これを訳すと、 ユーザーが「左」を入力したら、 (左移動アクションの記載された)MOTION.LSTの10行へ移動しろ という意味です。 ここで、COMMAND.LSTにおける「Command」の注意事項ですが、 ・246789は登録されている移動キーの『方向』の意味
・pkPKは小大パンチキック対応ボタンの意味 右側の「Std」(状態)別に3種づつあります。 「100」なら空中、「010」ならしゃがみ、「001」なら立ちでのパンチやキックです。 (キーボードの『p』『k』を押すことでは無い) です。ご注意ください。 少し話がそれましたが、COMMAND.LSTに記載のキー入力に対応し、 対応したMOTION.LSTの行のアクションを行う ことになっています。 なので、初めは立ちポーズでも、方向キーを押すと別行の移動アクションに 移行します。しますが… ここで、左方向を押したときのMOTION.LSTを見てみましょう。 MOTION.LSTの10行における「To」は『-1』となっています。 これは、そのまま次の行に進む、の意味です。 なので、次に11行を実行。11行の「To」も-1なので次に進む。 さらに、次に12行を実行。12行の「To」も-1なので次に進む。 そして13行。「To」は10になっているので、また10行に。 つまり、左を押し続ける限り、ずーっと左方向に動くアクションが実行され続けます。 では、キーを離すと? 離す=ニュートラル の状態になります。 すなわち、COMMAND.LSTにおける「n」の状態の処理が行われる、要するに MOTION.LSTの0行アクションが実行される というわけです。 さらに、上方向のキーを押したとき、すなわち COMMAND.LSTの「8」コマンドが入力されたとき つまりジャンプ入力時にどうなるかを見てみましょう。 MOTION.LSTの60行アクションが実行 続いて61行実行、62行実行、63行実行、64行実行、そして、 MOTION.LSTの0行アクションが実行される ジャンプが終わったら立ちアクションに戻る、というわけです。 他のアクションでも、最後には0行に戻るようになります。 つまり、このCOMMAND.LSTとMOTION.LSTを使い続ける限り、 必ず0行に戻り続ける展開が行われるわけです。 これより、イントロアクションを作るには、 ゲームの開始時に1度だけ参照するフロー作り をしなければいけないというわけです。 ではどうやって作ればいいのか? よっとまんさんのサイトや、よっとまんさん作成の飛鳥先生にも組み込まれていますが、 シンプルにまとめれば、こうです。
これでおそらく、いけるでしょう。 で、早速作成。 立ちキャラ行の複製、0行戻り部を1行戻りに変更、 そして450行にイントロ用サブルーチン作成。 行数はよっとまんさんの飛鳥先生に習い、同じ450行に。 450行と451行はまるまる0行のコピーで、V鳴らしとToの戻り値1行への修正。 さて…これでいけるはずだが、どうかな?テスト!!
おおっ! いけた… と思っていたら、 「飛鳥先生の空手が…」の声がところどころで申し訳程度に出現。なぜだorz 実はこれ、よっとまんさんのサイトにも記入があるのですが、 KF-Xのシステムの方が MOTION.LSTの0行に勝手にアクセスしている のです。具体的に言うと、
ユーザーがMOTIONをいじれない、強制的に画像を作らなければいけないこの部分。 このアクションの後、通常アクションに復帰する際MOTION.LSTの0行に戻るようなのです。 なんという固いシステム… しかし、よっとまんさん含む先人たちはこの点をとっくに解析しており、 このシステム強制0行戻りMOTIONをシステムから抽出していたのです。 やはり、先人たちは偉大ですなあ… で、テンプレの如く、その抽出部分を1行戻りに書き換えたものを、 システム書き換え用コードとしてよっとまんさんのコンテンツに置いてありました。 あとは自分のキャラMOTIONへはめ込むだけ! 以下です。
いやあ、結構な長さで… これはもはや挿入というレベルではないなあ。 ここまでの部分は、全キャラと共有しておかなければ。
どうやら、ようやく綺麗に収まったようです。KF-Xでも確認済み。 これは、素人には非常に垣根高いですなあ。 理解して組み込むか、とりあえずそのままはめ込んじゃうかで、その後の開発にも影響ありそう。 ですが管理人的には、すべての謎が解けかつ実現でき、ほっとしております。 他のキャラのサウンド選定クリップとかまだやってないですが、 このバージョンのCOMMAND.LSTとMOTION.LSTは、全キャラに上書きしておきます。 さてさて、これで目標であった初期組み込み音声は終了! イントロ部分が熱かったですが、これもクリアという感じで、スッキリです。 まあ…実際組み込んだの有明だけですがw ついはいよいよ、仮MIDIの作成編に突入です。 さてさて、どの曲にするかな… <3-06-05.仮MIDI作成と組み込み> MIDIを自分で作る作業は、昔からずーっと憧れていた作業でした。 むかし、ゲーム音楽をBASICのPLAY命令で作るのがはやった時期があり、 当時まだPCを持っていなかった自分は、友人のファミリーベーシックを借りて、 PLAY命令でポチポチ曲打ってたものです。 メモリほとんど無くて、すぐ容量オーバーになったけど… その後MSX2を購入し、すぐPLAY命令で入力するも、FM音源なる高値の音源があることに よだれをたらしつつPSGの3重音源で我慢していたものです。 時が流れ、Win95が世にデビューし、モデム通信→ISDN→ADSLとネット回線も発展を遂げ、 ネット常時通信が当たり前になったころ、個人でサイトを運営するユーザーが増えました。 そのあたりから、PCでMIDIが出来るということが常識になりつつあったのです。 まだMP3がネットアップに一般的でなかった頃、サイトを飾る音楽の主力はMIDIでした。 ゲームやアニメなどの曲をMIDI化するMIDI職人が大量に出現し、 MIDIサイトもものすごい盛り上がりを見せていた時期があったのです。 せっかくPCに内蔵されている音源があるのに、MIDIを作成する環境がなかったことを 嘆いたこともありました。それでも、良質の有志作成MIDIがあふれていたので、 ひたすらMIDI公開サイトを巡回していたものです。 しかしその栄華も、ある時期からあっという間に廃れます。 そう、悪名高きネット版劣悪遺伝子排除法です…(あえて言いません) あれを境に、MIDIを含め音楽系のサイトは一気に廃れました。 そもそも、オリジナル作曲をアップする人など数えるくらいしかいなく、 たいていの人が、好きな曲の耳コピアップだったのです。 それを排除する法が出てから、恐ろしく短期間でMIDIサイトは廃れました。 あれから、何年の月日がたっただろう… PCやネットの環境は飛躍的に進歩し、ツールも充実。 予想通り、フリーでMIDIを作れる良質のツールも十分あるようです。 ああ、あと10年前にこの環境が手に入っていたら… いや、今それを味わえることを素直に感謝しよう。
作成する曲は…やはりモチベの上がる曲、ということで 軽快BGM にきめました! どの軽快BGMだよ!! と突込みが入りますね、はいw まあ、一番ポピュラーなやつですが、これです。
基本的には「勝利BGM」に値する曲ですが(EDアレンジの方がより勝利BGMかな)、 やはり一番人気のBGMじゃないでしょうか。最も実況で盛り上がる曲。 飛鳥先生リペイント版にもこれのMIDIが入っていましたが、やはり自分の手で作りたい… で、着手することに決めたのです。
いろいろ調べましたが、次の二つで作成することに決めました。
最初に、楽譜化したくて迷わずMuseScoreを選んだのですが、楽譜縛りな制約がありすぎて 別トラックを同時に作るのに向かないし、時間もかかりすぎる。 それに比べ、サクラの方は、昔作っていたベーシックでのMMLと同じようなつくりが出来、 おまけにトラック作成や音源変更の編集のしやすさがハンパない! 昔、VGM(ビデオゲームミュージック)をベーシックで入力してた頃を思い出し、 非常にやりやすかったです。
まず、耳コピしやすく採譜化が楽な「主旋律」部分のみ、MuseScoreで作りました。 やはり慣れるのにある程度時間を要しましたが、主旋律のみなら意外と楽でしたね。 しかしながら、MIDIを作成する上での和音や別トラック作成法が難解であることがわかり、 (MuseScoreは、採譜化が主目的のソフトなんですよねえ…MIDI化は準目的) 早々にサクラのほうへ移管。 これを見ただけでは分かりずらいですが、簡単に言えば、 テキストベースで音符などを書くだけでMIDIが作れるソフト です。トラック作成も、音源選択もものすごく楽! やはり、こっちはMIDI作成が目的のソフトなんですよね。 管理人は、音取りはMuseScoreのキーボードで拾い、コード化はサクラで、という流れでした。 サクラ使ってからは、コーディング作業速度もデバッグも飛躍的に向上しましたよ。 まあ、まず主旋律を採譜化できたのがよかったようです。 ただし、主旋律と違い他のパートやドラムを拾うのは大変でした。 やはり、音楽を専門的にやってないと、そういう耳はなかなか育たないんだろうなあ… ロジックは分かっているものの、耳コピ時代は実にウン10年ぶりなので、 合っているような合ってないような、楽器も違うようなそうでもないような、 どう考えても該当する楽器が存在してなくてガッカリ… それでも、そんなこんなを繰り返しつつ、気がつけば形になっていました。 取り急ぎαバージョンとしての「軽快BGMのMIDI」が完成しました。
現時点ではこれくらいの出来でいいかと。 さっそく有明のBGMとして組み込んでみました。
うーん、ちょっと主旋律が強すぎるかな。ベースも少し出てくれてもいいな。 まあ、バランスは後でいくらでも調整できるし、これでキャライメージを付けられるかな。 とりいそぎ、今回のMIDIは他のキャラのBGMにも流用として上書きしました。 後日、あと2・3曲は新たなBGMを作成予定です。 それにしても、予想より早くMIDIの仮作成が出来ました。 テキスト音楽「サクラ」はかなり優秀なツールですなあ… こうなってくると、背景も有明用のものがほしいですね。 アクションパターンに入る前に、専用背景作成を入れることにしようかな。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|