トップページ > 過去ログ > 記事閲覧
音声の再生方法について
名前:dixq 日時: 2008/06/12 02:12

音声ファイルの再生方法についてどうしたらいいか悩んでいます。 oggファイルを65個読み込ませたところ、音楽ファイルの占めるメモリ使用量は SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMNOPRESS ) ; を呼んでからロードした時は 55MB SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE ) ; を呼んでからロードした時は 51MB でした。 これらは大してかわらないのでしょうか? セリフのデータなのですが、 これだけで50MBも占有するわけにいかないので、 何とかしようと思っているのですが、セリフ等の音声データは PlaySoundFile関数で再生した方がいいのでしょうか? 1回しか使わないデータですし、重ねて再生することもない。 そしてメモリ使用量も少なく出来ると思ったのですが。 それともこの読込形式の使い方が間違っている為メモリの使用量があまり違わないのでしょうか・・。 読み込む前に一度その関数を呼んでから全て読み込んでるのですが。 アドバイス頂けると幸いです。よろしくお願いします。

Page: 1 |

Re: 音声の再生方法について ( No.1 )
名前: 日時:2008/06/12 12:40

これは製作のポリシにもよると思いますが、 必要なとき、必要な分読み込むというのが普通では? そもそもこれらが複数用意されているのは 用途によって使い分けるためであって、 どういう状況を想定しているかによって、 読み込み方も変わってきます。 今回の場合なら、一度しか鳴らさない音を 全部持っておくのはちょっと無意味な感じですね。 履歴などの機能があってその場合にも音を鳴らす などがあるなら保持していてもいいかもしれません 音声などの場合、1つのサイズはそれほど大きく ないでしょうし、OGGよりもWAVにしたほうが、 多少サイズは大きくなってもデコードするタイムラグはなくなるような気がします。 パフォーマンスやメモリ使用量を気にするなら、 それなりにゲーム内でのロジックをしっかり 考えるほうが、細かなところを気にするよりも 重要だとは思いますが。
Re: 音声の再生方法について ( No.2 )
名前:GPGA 日時:2008/06/12 13:47

今回の問題は、DXライブラリのサウンド機能で再生トラックと データが一対型になっているために、発生しているものと思います。 そのため、タイプをストリーミングに変更してサウンドハンドルを 作ってた場合、ハンドル毎にワーク領域を作成するので メモリの消費を抑えにくいのではないでしょうか。 例えばDXライブラリ内でワーク領域を4秒分確保していた場合 44.1KHzの16bitリニアPCMの必要ワーク領域は 176400(一秒再生するバッファサイズ) * 4(秒) = 705600byte これが65ファイルで 約44MB です。 さらにoggの場合、デコードを行う領域が別途必要になるため 合計した結果51MBになるのではないでしょうか(完全に憶測ですが) それで、私なりの解決方法についてですが メモリを抑えたいのであれば、CPUを犠牲にするしかないかと。 通さんが言っているように、必要になった瞬間に読み込む形式です。 もしくは、DirectSoundを直接たたいて、再生トラックとデータを 自前で切り分けて使用できるようにします。 この方法がうまくできれば、65ファイルをセットした状態でも 同時再生数が1つであれば、メモリ消費量は1MB程度まで抑えられます。
Re: 音声の再生方法について ( No.3 )
名前:dixq 日時:2008/06/13 13:30

ご回答頂きありがとう語合います。 今本体が25MBなのに音声ファイルが30MBもあるので、どうしようか悩んでいますが・・WAVでの配布検討します。 またロジックを見直し、効率的な計算が行えるように改善しようと思います。 >ハンドル毎にワーク領域を作成するので ということは、短いファイルだとあまり意味が無いということでしょうか? なるほど・・それなら納得です。 CPUを少し犠牲にする方がいいかもしれませんね。 またDirectSoundの方も勉強したいと思います。 ありがとうございました。

Page: 1 |