SetCreateSoundDataType

作成する音声データの再生形式を設定する

SetCreateSoundDataType SoundDataType

int SoundDataType : 再生形式の識別値
( DX_SOUNDDATATYPE_MEMNOPRESS (デフォルト)
説明:音声データを直接再生できる状態にしてメモリ上に保存
読み込み速度:遅い 再生負荷:速い 必要メモリ領域:大きい
DX_SOUNDDATATYPE_MEMPRESS
説明: 圧縮されている音声データをメモリ上に保存、再生時に
リアルタイムで圧縮データを展開、音声データが圧縮されて
いない場合は DX_SOUNDDATATYPE_MEMNOPRESS よりかえって
必要メモリ容量、再生負荷、読み込み速度全ての面で不利になる
読み込み速度:普通 再生負荷:少し重い 必要メモリ領域:普通
DX_SOUNDDATATYPE_FILE
説明: 音声データを再生時にファイルからリアルタイムに
メモリ上に読み込む、音声データが圧縮されている場合は
読み込んだ時に展開する
読み込み速度:速い 再生負荷:重い 必要メモリ領域:軽い )

(プラグイン / モジュール : DxLibW)

解説

LoadSoundMem で読み込む音声データの扱いを設定します。

デフォルトの状態では LoadSoundMem は読み込んだ音声ファイルを、
メモリ上にまるまる保存し、再生に備えます。この方法が一番処理効率が
良いのですが、たとえばBGMに使うような巨大な音声ファイルも
この方法で再生しようとすると、とたんに大量にメモリ領域を必要とし、
ファイルからメモリに読み込む時間もかなりかかってしまい、あまり良いことが
ありません。

なので、そんな時にストリーム再生というものをつかいます。

ストリーム再生とは、例えばBGMを再生する場合、音声データを一度に
ファイルからメモリに読み込んで再生に備えるのではなく、再生するときに少し
づつファイルから音声データを読み込んで、少しづつ再生するという再生
方式です。

この方法では、音声ファイル全部をメモリに保存する必要がないので
メモリ領域の節約にもなりますし、再生しながらファイルから読み込むので
ロードの時間も短くてすみます。いいことがたくさんです。

このストリーム再生をするためにあるのがこの SetCreateSoundDataType という
わけです。引数は、どんな音声再生方法をとるのか、を識別するint 型の
整数値一つで、ファイルからのストリーム再生をしたい場合は、ストリーム再生
したい音声ファイルをロードする前に

SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE ) ;

としてやるだけで出来るのです。

ですが、ストリーム再生には再生時にファイルから逐次音声データを読み
込むことになるために、デフォルトの、全て音声データをファイルから読み
込んでおく方法に比べて処理負荷が大きくなります。

なので、『パン』や『ドカン』などのちょっとした音が保存された音声
ファイルは、ストリーム再生ではなく、デフォルトの全てメモリ上に音声
データを読み込んでおく方法をとった方が良いわけで、このあたりは使いわける
必要があります。

ちなみに DX_SOUNDDATATYPE_MEMPRESS は DX_SOUNDDATATYPE_FILE と
DX_SOUNDDATATYPE_MEMNOPRESS の中間的なものです。

音声ファイルにはWAVEファイルの他にMP3等のWAVEファイルよりも
容量を小さくしたファイル形式があるのはご存知だと思います。このDXライブラリ
でもそれらのファイルを扱う事が出来ますが、DXライブラリが音声を出力
する為に使用している DirectSound はMP3等の所謂『圧縮データ』に対応
していない為、再生する際にはMP3等のデータ形式からPCMという何の
変哲も無い音声データ形式に変換してやる必要があるのです。

デフォルトの設定ではDXライブラリはこの『変換処理』を LoadSoundMem で
ファイルをメモリに読み込んだ時に行います。ですが、MP3からPCMに変換
する処理は決して軽い物ではないので、場合によってはMP3より10倍近い
データサイズを持つWAVEファイルを読み込む場合よりも LoadSoundMem に
時間が掛かってしまう場合があるのです。

そういう時は DX_SOUNDDATATYPE_FILE の出番なわけですが、DX_SOUNDDATATYPE_FILE
は『ファイルから少し読み込む』→『少しだけ変換』→『少しだけ再生』を繰り返す
ので、少々マシンに掛かる負荷が高いのです。

そこで今度は DX_SOUNDDATATYPE_MEMPRESS の出番というわけです。

DX_SOUNDDATATYPE_MEMPRESS も DX_SOUNDDATATYPE_FILE と同じく少しづつ変換、
再生を繰り返すのですが、DX_SOUNDDATATYPE_FILE と違いファイルの中身だけは
全てメモリ上に読み込んでしまいます。これにより DX_SOUNDDATATYPE_FILE では
『ファイルから少し読み込み』→『少しだけ変換』→『少しだけ再生』だった過程が
一つ減り『少しだけ変換』→『少しだけ再生』になるわけです。



DX_SOUNDDATATYPE_MEMPRESS と DX_SOUNDDATATYPE_FILE どちらが良いかと訊かれると
少し悩みますが、無圧縮のWAVEファイルに関しては DX_SOUNDDATATYPE_FILE を、
圧縮された音声ファイルに関しては DX_SOUNDDATATYPE_MEMPRESS をお使いになる事を
お勧めしておきます。


注意!…

この関数で DX_SOUNDDATATYPE_NOMEMPRESS 以外の選択をした場合は、
以後 ProcessMessage の呼び出し間隔を0.2秒以上空けないようにして下さい。
(0.2秒以上空け続けると再生中の音が途切れる現象が発生します)

というのも、解説に記載されている『少し読み込んで(あと変換して)再生する』
という処理が ProcessMessage の中で行われているからです。(汗)

戻り値:
  -1:エラー発生
  0:成功

関連項目

GetCreateSoundDataType作成するサウンドハンドルの再生タイプを取得する( DX_SOUNDDATATYPE_MEMNOPRESS 等 )(DxLibW)

情報

プラグイン / モジュールDxLibW
バージョン3.24f
作成日2026/04/12
著作者DxLib: Takumi Yamada / HSP binding: IronHSP Project
URLhttps://dxlib.xsrv.jp/
備考hspdxlib.as をインクルードして使用
タイプDxLib ゲームライブラリ
グループDxLib サウンド
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\hspdxlib.hs