トップページ > 記事閲覧
3Dサウンドの仕様質問(要望)
名前:北条 日時: 2013/08/24 20:24

こんにちは。先日はありがとうございました。 また一つ、3Dサウンド関連で一つ尋ねたい事がありましたので質問させていただきます。(少し文章修正しました。) 予めSetCreate3DSoundFlag(TRUE)にして構築したサウンドを、 一時的にSetCreate3DSoundFlag(FALSE)にしてDuplicateSoundMem()でコピーした時、コピーで新しく作られた音がSetCreate3DSoundFlag(TRUE)の状態になっていました。 又逆にSetCreate3DSoundFlag(FALSE)で構築したサウンドを一時的にSetCreate3DSoundFlag(TRUE)にしてDuplicateSoundMem()でコピーしても、やはりコピーで新しく作られた音がSetCreate3DSoundFlag(FALSE)の状態になっていました。 では、本題の質問なのですが、これはつまり、DuplicateSoundMem()でサウンドをコピーする際、3D設定は親サウンドに依存する、という事ですが、DXライブラリ側で仕様としてこういう形に設計されているのでしょうか。 もしそういう仕様だった場合、これは個人的な要望なのですが、出来れば3D設定をコピーする際も、その都度現時点で決めている設定が反映されるようにしていただけると本当に助かります。 (私の制作しているゲームでは、サウンドは一括にパスだけ読み込んで用意して、一度でも使われることになった場合実際にそのパスからファイルを読み込み、 さらにそれはオリジナルファイルとして残しておき、実際に使う際はそれをコピーしてその音を使うキャラ、場所に運び、それを諸設定を個別に済ませて実際に使う、という形になっています。メモリの節約とサウンド座標などの再生設定の管理などを簡単にする為の設計です。 ですから、オリジナルファイルの3D使用設定フラグにコピー時の3D使用フラグが依存してしまうと、この私の扱い方では2Dと3Dを呼び出し時に切り替えることができなくなってしまうので、非常に困っています。) もし私の勘違いだったら申し訳ございませんが、回答よろしくお願いします。
メンテ

Page: 1 |

Re: 3Dサウンドの仕様質問(要望) ( No.1 )
名前:管理人 日時:2013/08/24 22:47

DuplicateSoundMem が親サウンドの SetCreate3DSoundFlag の設定を引き継ぐのは仕様です 申し訳ありませんが現在の仕様を変更する予定はありません 北条さんのされたいことを実現する方法ですが、以下のような処理は如何でしょうか? 1.サウンドファイルをメモリに読み込む 2.2Dサウンドハンドルが求められたら、2Dサウンドハンドルを LoadSoundMemByMemImage で作成する  既に2Dサウンドハンドルが作成されていたら DuplicateSoundMem で複製する 3.3Dサウンドハンドルが求められたら、3Dサウンドハンドルを LoadSoundMemByMemImage で作成する  既に3Dサウンドハンドルが作成されていたら DuplicateSoundMem で複製する 以下がイメージです( コンパイルできるかどうかは確認していません ) // サウンドデータ構造体 struct SOUNDDATA { void *FileData; // サウンドファイル int FileSize; // サウンドファイルのサイズ int Handle2DEnable; // 2Dサウンドハンドルが有効かどうか( 0:無効 1:有効 ) int Handle2D; // 2Dサウンドハンドル int Handle3DEnable; // 3Dサウンドハンドルが有効かどうか( 0:無効 1:有効 ) int Handle3D; // 3Dサウンドハンドル }; // サウンドデータの初期化 void InitializeSoundData( char *FilePath, SOUNDDATA *Data ) { int filesize; FILE *fp; // サウンドファイルのメモリへの読み込み fp = fopen( FilePath, "rb" ); fseek( fp, SEEK_END, 0 ); filesize = ftell( fp ); fseek( fp, SEEK_SET, 0 ); Data->FileData = malloc( filesize ); fread( Data->FileData, filesize, 1, fp ); Data->FileSize = filesize; // ハンドルは無効にしておく Data->Handle2DEnable = 0; Data->Handle2D = 0; Data->Handle3DEnable = 0; Data->Handle3D = 0; } // 2Dサウンドハンドルを作成する int Create2DSoundHandle( SOUNDDATA *Data ) { // 2Dサウンドハンドルが無効だったら作成する if( Data->Handle2DEnable == 0 ) { // 2Dサウンドハンドルを作成する SetCreate3DSoundFlag( FALSE ); Data->Handle2D = LoadSoundMemByMemImage( Data->FileData, Data->FileSize ); // 2Dサウンドハンドルが有効であるフラグを立てる Data->Handle2DEnable = 1; } // 2Dサウンドハンドルを複製する return DuplicateSoundMem( Data->Handle2D ); } // 3Dサウンドハンドルを作成する int Create3DSoundHandle( SOUNDDATA *Data ) { // 3Dサウンドハンドルが無効だったら作成する if( Data->Handle3DEnable == 0 ) { // 3Dサウンドハンドルを作成する SetCreate3DSoundFlag( TRUE ); Data->Handle3D = LoadSoundMemByMemImage( Data->FileData, Data->FileSize ); // 3Dサウンドハンドルが有効であるフラグを立てる Data->Handle3DEnable = 1; } // 3Dサウンドハンドルを複製する return DuplicateSoundMem( Data->Handle3D ); }
メンテ
Re: 3Dサウンドの仕様質問(要望) ( No.2 )
名前:北条(解決) 日時:2013/08/24 22:51

素早い回答だけでなく、新しい提案をして頂けてとても助かりました。お陰で作業が円滑に進みそうです。 お忙しい中お手を煩わせてしまい、すみませんでした。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存