WonderWitch.Com
■TOP>ネタ |
サウンドの鳴らし方です 今回はWonderWitchでサウンドを鳴らす方法について紹介します。 ■仕様 まず、WonderWitch(Swan)のサウンドの仕様についてですが、オンラインドキュメントの 「WonderWitch デベロッパーズ マニュアル ハードウェアアーキテクチャ」(“C:\WWitch\doc\developers\hardarch.html”)を読んでください ……というだけでは、手抜きなので、ちょっとだけ補足します。 WonderWitch(Swan)は音源として4つのチャンネルを持っています。つまり最大で4つの音を同時に鳴らすことができます。そして、チャンネルの2〜4番目には「付加機能」という特別に追加されている機能があります。 ●チャンネル2「PCMボイス」 PCMボイスは、サンプリングしたPCM波形を出力する機能です。人間の声や、効果音などの再生に適しています。 ●チャンネル3「スイープ」 スイープは時間とともに周波数を一定の割合で変化させる機能です。 ●チャンネル4「ノイズ」 ノイズは、雑音(ノイズ)を発生させる機能です。ノイズには8種類あります。 付加機能はプログラムする側が使う/使わないを選択できます。付加機能を使うことで、そのチャンネルは通常の再生ができなくなります。たとえばPCMボイスを使うと、3重和音(チャンネル1+3+4)+PCMボイスで再生されます。 ■2種類の再生方法 WonderWitchでサウンドを鳴らす方法には以下の2種類があります。 ・サウンドIL(sound.il)を使う。 ・サウンド制御BIOSを直接使う。 ・サウンド制御BIOS BIOSを介して音を直接鳴らします。WonderWitchのハードウェア的な仕様を理解している必要があります。サウンドILを使う方法に比べてとっつきにくいです。 サウンドBIOSを使ったサンプルプログラムです。 【DOWNLOAD】BIOSを使ったサウンド再生テスト ソース・バイナリ(WonderWitch用) 音色を決定する要素は、波形と周期です。 上下キーを押すと「sound_set_pitch」への引数が変化します。では、上を押し続けてみてください。 「 ウウイイイィィィィィ! (という感じ)」 …と、音がどんどん甲高くなっていくのがわかるでしょうか? これは音の周期が短くなっていくためです。逆に下を押すと音階が下がっていきます。 波形は16バイトの配列を使って設定します。波形データを修正すると、音の雰囲気が変わります。その違いを確かめると面白いです。 ・サウンドIL(sound.il)を使う。 サウンドILはサウンド機能を使いやすいように工夫されたインダイレクトライブラリです。MMLやWAVファイルなど、パソコンと互換性のある形式を扱うことができます。使用時には、 “sound.il”というファイルをWonderWitchのプログラムエリアに格納しておく必要があります (sound.ilは、“C:\WWitch\il\sound”フォルダにあります)。 サンプルプログラムを作成してみました。 【DOWNLOAD】Sound.ilを使ったサウンド再生テスト ソース・バイナリ(要Sound.il/WonderWitch用) 実行するとBGMがエンドレスで再生されます。Aボタンを押すと効果音、Bボタンを押すとPCMボイスを鳴らします。下を押すとBGMを停止します。 ←ソースの一部です。BGM、SE、ボイスそれぞれのバッファを用意しています。 ■オリジナルPCMボイスの作成 オリジナルのPCMボイスを作成してみます。そのためにはまず、元となるwavファイルが必要です。そこで、Windowsのアクセサリに標準添付されている「サウンドレコーダー」で録音してみました。サンプリングの設定は 12kHz、8bit、モノラル です。 ←録音中…… これで“voice.wav”というファイルを作りました。 次に“sndcnv”というツールを使って、wavファイルをWonderWitchで扱える形式に変換します。“sndcnv”は“C:\WWitch\bin”フォルダにあります。DOSプロンプトで以下のコマンドを入力してください。 sndcnv -w voice.wav 録音時間が6秒強のWAVファイルだと、「data too large(大きすぎ)」と表示されてエラーになりました。そこで、録音時間を2秒に縮めてみました。再度変換……今度は問題ないようです。“voice.fr”というファイルが作られました。このファイルを「ボイスのリソース」といいます。ファイルのダンプリスト(一部)は以下のとおりです。 ←ファイルダンプ結果です。 ファイルの先頭16バイトはヘッダー情報になっています。17バイト目が実質的なPCMデータとなります。このヘッダーの配置は、“resource.h”というファイルの「res_voice_t」という構造体に記されてます。 では鳴らしてみましょう。まず、リソースファイルを読み込んでメモリに格納します(ソースファイル化する方法もありますが、今回は見送り)。ファイルを読み込むには「open」「read」関数を使います。次に格納したメモリの先頭アドレスを「voice_play」関数の引数に与えます。これでPCMボイスが再生されます。 「 ピ、ショワショワショワ (という感じ)」 ……鳴りました!が、よく聞こえません。仕様上、圧電スピーカーでは聞き取りにくいようです。聞き取りやすくするためには、メリハリのある音にした方がよさそうです。 あと、前回作成したゲームも音が鳴るように追加してみました。やっぱり、ゲームに音があると臨場感が増しますね。ゲーム相変わらずアレですが。 【DOWNLOAD】「A列車でGO! 〜弟3章〜」ソース・バイナリ(WonderWitch用) というわけで、ビシバシ音が鳴ったり、喋ったりするような、楽しいプログラムが作られることを期待してます。ではまた。 *別売のイヤホンをWonderSwanに装着させると、音質が向上するそうです。 |