<< 2024/04 >> | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
|
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] 記事へのコメント コメントはありません |
@AKISoftOfficialをフォロー
掲示板 サポートBBS PMailServer BBS アクセスの多い記事
最新記事(カテゴリ別)
PMailServer2 Version 2.53 をリリースしました。
04/08 00:50 フリー版からの製品版移行時の MTA 並列数について 02/17 23:52 メールサーバーの開発を始めて20年 02/07 21:46 PMailServer2 Version 2.52a をリリースしました。 12/26 14:02 PMailServer2 Version 2.52 をリリースしました。 10/01 10:48 PMailServer2 Version 2.51b をリリースしました。 09/19 01:43 PMailServer2 Version 2.51b(仮) Memo 09/12 00:33 PMailServer2 Version 2.51a をリリース、及び脆弱性についてのお知らせ 09/05 01:15 PMailServer2 Version 2.51a Memo 08/21 00:48 アドレスV125(K5)のスターターリレーの交換 08/04 10:10 最新コメント
コメントはありません
UUアクセス数
今日は 87回
昨日は 151回 トータル 303186回 3ヶ月記事別ランキング
プロフィール
Z80から68系、8086系を経由して
Pascalに移行。現在は Delphiをメインに C/C#も囓ってみたり。 「無い物は作れ」の精神で年がら年中なにかを作っています。 すぐ自前で作りたがるので無駄に工数が上がったりして自爆してみたりもします。 好きな物は麺類とお煎餅 Blom内検索
BLOM Version 1.39 ©2007-15 A.K.I Software all rights reserved. |