title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2024/04 >>123456789101112131415161718192021222324252627282930
《《《 ネットワーク機器の購入は Amazon で! 》》》
Powered by BLOM Waveの多重合成
小さくも大きくも閉じたりもしません
08/11/30 06:33 / ゲーム開発

どうにも昔から音関係が鬼門です。
ネットワーク屋さんからすると、一番遠い場所にあると言っても過言ではありません。

取りあえず Wave を1ch鳴らすだけであれば別に難しくもなんともありませんが、複数ch鳴らす場合はそうにもいきません。
方法としては
1)BGMはMIDI、効果音はWaveとして逃げる。
2)MCI で頑張る。
3)DirectSound(今は DirectShow かな)で頑張る。
4)リアルタイムに合成する。

最初は1で逃げようと思いましたが却下されました(笑)

2は余裕なんですが、非常に極希にサウンドカード依存する可能性があります。あとスキル的にしょぼいのでやっていてつまらないです。動作も微妙ですし。

3は Windows プラットフォームでは一番現実的ですが、DirectX 依存になります。
最低でも 8/9/10 で動作確認しないとなりませんし。
(実際は 9.0c で確認出来ればよいと思いますが・・・)

4は面倒臭いです。今時音声合成くらいにしか使いません。

余り吟味せずに選択した結果は・・・なぜか4になりました。DirectX使うとなると、関連するもの全部リンクしないとならないし、サイズ大きくなるし、そもそも CodeGearだし(またか)やってみたかったし。

昔作ったマイクからの波形を記録するソフトを引っ張りだしてきて、9割忘れている Wave関連の関数を思い出します。

取りあえずやることは
1)出力用のWaveデバイスをオープンする。
出力するパラメータを設定してwaveOutopenします。

2)合成するWaveファイルを複数読み込む。
取りあえず mmioOpen 辺りでオープンして読み込む

3)2を頑張って合成する。

PCMデータは単純に 8bit の場合は 0 〜 255 の値(無音は127)。16bit の場合は、-32768 から +32768 の値(無音は0)がツラツラと並んでいますのでこれをなんとかします。

4)3の結果を1のデバイスに流し込む。
waveOutwrite で流し込みます。

実際は合成するタイミングやバッファリングなどの処理が山盛りあるのですが、まずは単純にやってみようとここまで処理を書いて実行してみます。簡単に書きましたが1週間ほど掛かっています。

結果は・・・


うぉ!なんで?動いた!自分でもびっくり(笑)


合成する方法ですが、最初は単純にαブレンドの要領で合成すれば良いかなと思ったのですが、なんだかよくわからない音が出るので、もっと単純に加算合成したら、旨くいっちゃいました。(本当にいいんだろうか)

音のことはまったく詳しくありませんが、1KHz の音と 2KHz の音が同時に聞こえるとした場合、αブレンド(50%)の場合は 1.5Khz になります。加算合成の場合は 1 + 2 で 3KHz になります。
なんとなく前者の方が正しいような気がしないでもないのですが、そもそも50%って数値がどこから来るのかわかりませんし、耳で聞いた限りでは加算合成できちんと音が出ているので良いことにします。
相変わらず「動けば正義」的な発想です。

試しに3つ重ねてみたらきちんと3つ重なりました。
単純な加算をすると音が 16bit からオーバー(またはアンダー)になる場合があるので、そこら辺りの処理をどうするか。音をずらして再生する(BGMとしてメインをループでながしている最中に、効果音をどういうタイミングで合成すれば良いか)など課題が残っていますが、取りあえずはイケそうです。

リアルタイムに入力された波形をいじればイコライザーにもなりそうです。

[更新日付:2008/11/30 06:33:58]
トラックバックを見る(0)
Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+757608f97d56e2085ba5ff820fe8b6614a6b47cf]
TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+757608f97d56e2085ba5ff820fe8b6614a6b47cf]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.