音利用関数

宣言int PlaySoundFile( char *FileName , int PlayType ) ;

概略音声ファイル(WAV.MP3.Ogg)を再生する

引数 FileName : 再生する音声ファイル文字列へのポインタ
PlayType : 再生形式
戻り値 0:成功
 −1:エラー発生

解説  FileNameで指定した音声ファイルを鳴らします。
再生できる音声ファイル形式は WAV, MP3, Ogg の3種類で、 再生のタイプには以下の3種類がありこの内のどれかを選びます。

DX_PLAYTYPE_NORMAL : ノーマル再生
DX_PLAYTYPE_BACK : バックグラウンド再生
DX_PLAYTYPE_LOOP : ループ再生

 ノーマル再生は音声ファイルの再生が終るまで処理を止め、 バックグラウンド再生は鳴らし始めるとすぐ次の処理に移ります (音を鳴らしながら何かをするときに使います)
 ループ再生はバックグラウンド再生+ループ再生で、音楽の再生が 終るとすぐ最初から再生が始まります。

サンプル

 test.wavをノーマル再生します

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのノーマル再生
	PlaySoundFile( "test.wav" , DX_PLAYTYPE_NORMAL ) ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int CheckSoundFile( void ) ;

概略音声ファイルが再生中か調べる

引数なし
戻り値 0:なっていない
1:鳴っている
−1:エラー発生

解説  PlaySoundFile 関数で鳴らした(ている)音が鳴り終わっているか 調べます。
 1の場合はまだ鳴っていて、0の場合は再生は終っています。

サンプル

 test.wavをバックグラウンド再生し、なり終わるまで待つ

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのバックグラウンド再生
	PlaySoundFile( "test.wav" , DX_PLAYTYPE_BACK ) ;

	// なり終わるまでここでループ
	while( CheckSoundFile() == 1 )
	{
		// メッセージ処理
		if( ProcessMessage() == -1 )
		{
			break ;	// エラーが起きたらループを抜ける
		}
	}

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int StopSoundFile( void ) ;

概略音声ファイルの再生を止める

引数なし
戻り値 0:成功
 −1:エラー発生

解説  PlaySoundFile関数 での再生を停止します。

サンプル

 test.wavをループ再生し、5秒経ったら止めます

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのループ再生
	PlaySoundFile( "test.wav" , DX_PLAYTYPE_LOOP ) ;

	// 5秒待つ『WaitTimer』使用
	WaitTimer( 5000 ) ;

	// 再生を止めます
	StopSoundFile() ;

	// キー入力があるまで待ちます(『WaitKey』使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int LoadSoundMem( char *FileName ) ;

概略音声ファイル(WAV.MP3.Ogg)をメモリに読みこむ

引数 FileName : メモリに読みこむ音声ファイルのファイル名
       文字列のポインタ
戻り値−1:エラー
 −1以外:サウンドハンドル

解説  音を再生する際PalySound関数を使用すると同時に1つの音しか 鳴らすことが出来ません。それにPlaySoundFile関数は再生の際にその つどディスク等からファイルを読みこむのでゲームなどの高速な 連続再生などには向いていません。
 ので何度も再生するような音はディスクから読みこんで取っておき いつでもすぐに再生できる状態にして置く必要があります。そのため の関数が LoadSoundMem関数 です。この関数で戻り値として返ってくる サウンドハンドルとは読みこんだ音の識別番号です(int型の値です)。
 音を再生する際にこの関数で得た識別番号を指定してやることで 読みこんだ音を再生することが出来ます。
(メモリに読みこんだ音の再生には『PlaySoundMem』を使います)

  test.wavをメモリに読みこんでサウンドハンドルを int型変数
  SHandleに保存します

	int SHandle ;

	SHandle = LoadSoundMem( "test.wav" ) ;


サンプル

 test.wavをメモリに読み込みそのサウンドハンドルを int型変数 Shandle に保存しその後再生します。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	int SHandle ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
	SHandle = LoadSoundMem( "test.wav" ) ;

	// 読みこんだ音をノーマル再生します(『PlaySoundMem』関数使用)
	PlaySoundMem( SHandle , DX_PLAYTYPE_NORMAL ) ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int PlaySoundMem( int SoundHandle , int PlayType , int TopPositionFlag ) ;

概略メモリに読みこんだ音声データを再生する

引数 SoundHanle : 再生する音の識別番号(サウンドハンドル)
PlayType  : 再生形式
         DX_PLAYTYPE_NORMAL : ノーマル再生
         DX_PLAYTYPE_BACK  : バックグラウンド再生
         DX_PLAYTYPE_LOOP  : ループ再生
TopPositionFlag : 再生位置を音データの先頭に移動するかどうか
           ( TRUE:移動する(デフォルト) FALSE:移動しない )
戻り値 0:成功
 −1:エラー発生

解説  LoadSoundMem関数 でメモリに読みこんだ音を読み込み時に取得した サウンドハンドルで再生します。
 PlaySoundFile関数との違いは、再生にサウンドハンドルを使用するということと、第三の引数
TopPositionFlag があることです。

 TopPositionFlag はサウンドデータを再生する前に再生開始位置を先頭に戻すかどうかを指定します。
TRUE を渡すと先頭から再生され、FALSE を渡すと最後に StopSoundMem をした位置か、
SetSoundCurrentTime で指定した位置から再生されます。
 尚、TopPositionFlag は省略可能で、省略した場合は TRUE を指定したことになります。

 再生にサウンドハンドルを使用する、TopPositionFlag がある、ということ以外はPlaySoundFile関数 と違いはありません。(再生形式の詳しい説明は『PlaySoundFile』を 参照してください。)

サンプル

 上記『LoadSoundMem』関数を参照してください



宣言int CheckSoundMem( int SoundHandle ) ;

概略メモリに読みこんだ音声データが再生中か調べる

引数SoundHandle : 再生状態を調べる音の識別番号(サウンドハンドル)
戻り値1:再生中
 0:再生されていない
−1:エラー発生

解説  PlaySoundMem関数で再生した SoundHandle が示す音が再生中か どうかを調べます。調べる形式がサウンドハンドルを通して調べる ということ以外CheckSound関数と違いはありません。

サンプル

 test.wavをメモリに読み込みバックグラウンド再生し、なり終わる まで待つ

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	int SHandle ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
	SHandle = LoadSoundMem( "test.wav" ) ;

	// 読みこんだ音をバックグラウンド再生します(『PlaySoundMem』関数使用)
	PlaySoundMem( SHandle , DX_PLAYTYPE_NORMAL ) ;

	// なり終わるまでここでループ
	while( CheckSoundMem( SHandle ) == 1 )
	{
		// メッセージ処理
		if( ProcessMessage() == -1 )
		{
			break ;	// エラーが起きたらループを抜ける
		}
	}

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int StopSoundMem( int SoundHandle ) ;

概略メモリに読み込んだ音声データの再生を止める

引数SoundHandle : 再生を止める音の識別番号(サウンドハンドル)
戻り値 0:成功
 −1:エラー発生

解説  PlaySoundMem関数で再生中の SoundHandle が示す音を停止します。 停止の対象がサウンドハンドルを通して行われるという以外StopSound関数 と機能的な違いはありません。

サンプル

 test.wavをループ再生し、5秒経ったら止めます

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	int SHandle ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
	SHandle = LoadSoundMem( "test.wav" ) ;

	// 読みこんだ音をループ再生します(『PlaySoundMem』関数使用)
	PlaySoundMem( SHandle , DX_PLAYTYPE_LOOP ) ;

	// 5秒待つ『WaitTimer』使用
	WaitTimer( 5000 ) ;

	// 再生を止めます
	StopSoundMem( SHandle ) ;

	// キー入力があるまで待ちます(『WaitKey』使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int DeleteSoundMem( int SoundHandle ) ;

概略メモリに読みこんだサウンドデータを削除する

引数SoundHandle : 削除する音の識別番号(サウンドハンドル)
戻り値 0:成功
 −1:エラー発生

解説  LoadSoundMem関数でメモリに読みこんだサウンドデータをメモリ から削除します。これにより貴重なメモリ資源を増やす事が出来ます。
 削除したサウンドは再読み込みするまで使うことは出来なくなるので いらなくなったサウンドデータを削除するのに使う関数です。
(音の再生中に削除した場合は再生を止めてから削除します)

サンプル

 test.wavをループ再生し、5秒経ったら止め、その後そのサウンド データを削除し終了します。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	int SHandle ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
	SHandle = LoadSoundMem( "test.wav" ) ;

	// 読みこんだ音をループ再生します(『PlaySoundMem』関数使用)
	PlaySoundMem( SHandle , DX_PLAYTYPE_LOOP ) ;

	// 5秒待つ『WaitTimer』使用
	WaitTimer( 5000 ) ;

	// いらなくなったので音を削除します
	DeleteSoundMem( SHandle ) ;

	// キー入力があるまで待ちます(『WaitKey』使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int InitSoundMem( void ) ;

概略メモリに読みこんだ音声データをすべて消去する

引数なし
戻り値 0:成功
 −1:エラー発生

解説  LoadSoundMem関数でメモリに読みこんだすべてのサウンドデータを メモリ上から削除します。これによってロードした音はすべて削除され 初期化されます。

サンプル

 test.wavを5回ロードし、0.1秒ごとに1回づつ再生した後 音をすべて削除します

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	int SHandle[ 5 ] ;
	int i ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
	for( i = 0 ; i < 5 ; i ++ )
	{
		SHandle[ i ] = LoadSoundMem( "test.wav" ) ;
	}

	// 読みこんだ音を0.1秒おきにバックグラウンド再生します(『PlaySoundMem』関数使用)
	for( i = 0 ; i < 10 ; i ++ )
	{
		// 音の再生
		PlaySoundMem( SHandle[ i ] , DX_PLAYTYPE_BACK ) ;

		// 0.5秒待つ(『WaitTimer』使用)
		WaitTimer( 100 ) ;
	}

	// 音をすべて削除します
	InitSoundMem() ;

	// キー入力があるまで待ちます(『WaitKey』使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int SetPanSoundMem( int PanPal , int SoundHandle ) ;

概略メモリに読みこんだ音声データの再生にパンを設定する

引数 int PanPal : 左右の音量の比率
   ( -10000 〜 10000 +は左の音量を下げ、−は右の音量を下げる)
int SoundHandle : パンを設定する音の識別番号(サウンドハンドル)
戻り値 0:成功
 −1:エラー発生

解説  音の再生にパンを設定します。パンとは簡単に説明しますと左右の 音の音量の比率を変化させることです。PanPal に−の値を設定すると 右の音量が下がり、+の値を設定すると左の音量が下がります、ただし 残念ながら下がったぶん反対側の音量が上がることはありません。ので 正確な意味でのパンではありません。
 標準ではパン値は0になっており、左右の音量はどちらも同じ比率に なっています。

 因みに音を再生中でもパンの変更は可能です。

サンプル

 test.wavを読みこんで右のスピーカのみから音を出します

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	int SHandle ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
	SHandle = LoadSoundMem( "test.wav" ) ;

	// パンの設定
	SetPanSoundMem( 10000 , SHandle ) ;

	// 音の再生
	PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;

	// キー入力があるまで待ちます(『WaitKey』使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int ChangeVolumeSoundMem( int VolumePal , int SoundHandle ) ;

概略メモリに読みこんだ音声データの再生にボリュームを設定する

引数 int VolumePal  : 設定する音量( 0 〜 255 )
int SoundHandle : 音量を設定する音の識別番号(サウンドハンドル)
戻り値 0:成功
 −1:エラー発生

解説  再生する音の音量を設定します。0は無音、255で 最大音量です。
 音を再生中でも音量の変更は可能です。

サンプル

 test.wavを読みこんで80%の音量で再生します

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	int SHandle ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
	SHandle = LoadSoundMem( "test.wav" ) ;

	// 音量の設定
	ChangeVolumeSoundMem( 255 * 80 / 100, SHandle ) ;

	// 音の再生
	PlaySoundMem( SHandle , DX_PLAYTYPE_BACK ) ;

	// キー入力があるまで待ちます(『WaitKey』使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int SetFrequencySoundMem( int FrequencyPal , int SoundHandle ) ;

概略メモリに読み込んだ音声データの再生周波数を設定する

引数 int FrequencyPal : 新たに設定する再生周波数(ヘルツ単位)
          ( 100〜100,000 -1:デフォルトの周波数に戻す )
int SoundHandle : 再生周波数を設定する音の識別番号
戻り値 0:成功
 −1:エラー発生

解説  指定の音の再生周波数を変更します。値が小さいほど、遅く低く、 値が大きいほど速く高く再生されます。
 なお、音の元の再生周波数が 22.05KHz だった場合は 22050 を 指定した場合が通常の再生値となり、44.10KHz だった場合は 44100 が通常の再生値となりますので注意してください。

サンプル

 test.wav をループ再生させながら、再生周波数を上げたり下げたりします。

#include "DxLib.h"

// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
					 LPSTR lpCmdLine, int nCmdShow )
{
	int SoundHandle ;
	int Freq , Add ;

	// DXライブラリ初期化処理
	if( DxLib_Init() == -1 ) return -1;

	// 音をロードする
	SoundHandle = LoadSoundMem( "test.wav" ) ; 

	// 再生周波数と再生周波数の推移値を設定する
	Freq = 22050 ;
	Add = -10 ;

	// ロードした音のループ再生を開始する
	PlaySoundMem( SoundHandle , DX_PLAYTYPE_LOOP ) ;

	// ESCキーが押されるか、システムがエラーを起こすまでループする
	while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) 
	{
		// 再生周波数の設定値を変化させる
		Freq += Add ;
		if( Freq > 100000 ){ Freq = 100000 ; Add = -10 ; }
		if( Freq < 1000 ){ Freq = 1000  ; Add = 10 ; }

		// 再生周波数を設定する
		SetFrequencySoundMem( Freq , SoundHandle ) ; 

		// 少し待つ
		WaitTimer( 10 ) ;
	}

	// DXライブラリ使用の終了処理
	DxLib_End() ;

	// ソフトの終了
	return 0 ;
}



宣言int SetLoopPosSoundMem( int LoopTime, int SoundHandle ) ;

概略メモリに読み込んだ音声データのループ位置を設定する

引数 int LoopTime : ループ位置(ミリ秒単位)
int SoundHandle : ループ位置を設定する音の識別番号
戻り値 0:成功
 −1:エラー発生

解説  この関数は SoundHandle が示す音声がループ指定で再生されたとき、 最後まで再生された後音声中の何処から再度再生するかを音声の先頭からの 経過時間(ミリ秒単位)で指定することが出来ます。
 何のためにあるのかは自ずと分かると思いますが、ループ再生の際に 曲の終端まで再生した後必ず曲の先頭から再生されてしまうと、曲の中で 一回だけしか流れない前奏を入れることが出来ないからです。
 前奏部分とループ部分を一緒にした音声ファイルを作成し、この 関数でループ部分の先頭位置を指定する事で、前奏部分は一回だけ 再生し、後は延々とループ部分のみを再生し続ける、といった事が 出来るわけです。

注意!…
 この関数でループ位置を設定した場合は、以後 ProcessMessage の呼び出し 間隔を0.2秒以上空けないようにして下さい。(0.2秒以上空け続けると 再生中の音が途切れる現象が発生します)
サンプル

 testMusic.wav のループ後の位置を先頭から20秒後に設定してから再生します。 (testMusic.wav はサンプルプログラム実行用フォルダにはありませんので自前で用意してください)

#include "DxLib.h"

// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
					 LPSTR lpCmdLine, int nCmdShow )
{
	int SoundHandle ;

	// DXライブラリ初期化処理
	if( DxLib_Init() == -1 ) return -1;

	// 音声をロードする
	SoundHandle = LoadSoundMem( "testMusic.wav" ) ;

	// ループ位置を音声の先頭から20秒後にセットする
	SetLoopPosSoundMem( 20000, SoundHandle ) ;

	// 音声をループ再生する
	PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP ) ;

	// キーの入力待ち
	WaitKey() ;

	// DXライブラリ使用の終了処理
	DxLib_End() ;

	// ソフトの終了
	return 0 ;
}



宣言int SetLoopSamplePosSoundMem( int LoopSamplePosition, int SoundHandle ) ;

概略メモリに読み込んだ音声データのループ位置を設定する(サンプル位置指定)

引数 int LoopSamplePosition : ループ位置(サンプル単位)
int SoundHandle : ループ位置を設定する音の識別番号
戻り値 0:成功
 −1:エラー発生

解説  『SetLoopPosSoundMem』関数 のループ位置 の指定の仕方がサンプル数になったものです。

 例えば、サンプリング周波数が 44.1KHz のサウンドに対しては、引数 LoopSamplePosition に 44100 を渡すと丁度1秒の位置でループすることになります。
 秒単位の指定よりも、サンプル単位の指定の方が都合が良い場合に使用します。
サンプル

 ありません





宣言int SetCurrentPositionSoundMem( int SamplePosition, int SoundHandle ) ;

概略メモリに読み込んだ音声データの再生位置をサンプル単位で変更する

引数 int SamplePosition : 新しい再生位置(サンプル単位)
int SoundHandle : 再生位置を変更する音の識別番号
戻り値 0:成功
 −1:エラー発生

解説  サウンドを扱う中では時に「サウンドデータの三秒目から再生したい」ということがあると思います、 この関数はそのような時に使用する関数で、次に PlaySoundMem の第三引数 TopPositionFlag が FALSE で再生された際に再生され始めるサウンドデータ中の位置を指定することができます。
 再生位置はサンプル単位で、例えばサンプリング周波数が 44.1KHz のサウンドに対しては、引数 SamplePosition に 44100 を渡すと丁度1秒の位置を指定したことになります。

 尚、この関数はサウンドの再生中に使用してもエラーになりますので、必ず再生が停止しているときに使用してください。

注意!…
 この関数で再生位置を変更しても、PlaySoundMem の第三引数 TopPositionFlag に FALSE を渡さないとサウンドデータの頭から再生されてしまいますので注意してください。
サンプル

 ありません





宣言int DuplicateSoundMem( int SrcSoundHandle ) ;

概略既にメモリに読み込んである音声データを使用するサウンドハンドルを新たに作成する( 非ストリームサウンドのみ )

引数 int SoundHandle : 新たに作成するサウンドハンドルが使用するサウンドデータを持っているサウンドハンドル
戻り値−1以外:サウンドハンドル
 −1:エラー発生

解説  この関数は既に LoadSoundMem 等の関数で読み込んだ音声データと同じデータを使用する別のサウンドハンドルが欲しくなったときに使用する関数です。
 例えば同じ音声データを使用するキャラクターが複数居た場合、 各再生毎に細かく音量や停止のタイミングを制御を行いたくなったら各キャラクターにサウンドハンドルを持たせたくなりますが、 キャラクターの数だけ LoadSoundMem を使用して音声データをメモリに読み込むとロード時間が長くなり使用メモリも増大してしまいます。
 そんなときは音声データを LoadSoundMem でファイルから読み込むのは一回だけにして、 同じ音声データを使用したい別のサウンドハンドルを得たいときに逐次 DuplicateSoundMem で LoadSoundMem で得たサウンドハンドルと同じサウンドデータを使用する別のサウンドハンドルを用意します、 こうすることで各再生毎に細かい制御が可能になるとともに、音声データの読み込み時間の短縮と使用メモリの節約ができます。

 尚、この関数で作成されたサウンドハンドルは LoadSoundMem で作成されたサウンドハンドルと全く同じ性能を持っています。
 また、DuplicateSoundMem の引数に渡したサウンドハンドルを DeleteSoundMem で削除しても、 DuplicateSoundMem で作成したサウンドハンドルは削除されませんので注意してください。

注意!…
 因みにこの関数は SetCreateSoundDataType でデフォルトタイプである DX_SOUNDDATATYPE_MEMNOPRESS 以外のストリーミングタイプのサウンドデータを指定した上で LoadSoundMem で作成されたサウンドハンドルや、3分以上の長さのあるサウンドデータから作成されたサウンドハンドルは DuplicateSoundMem の引数として渡すことはできません
サンプル

 test.wav を LoadSoundMem で読み込み、同じサウンドデータを使用するサウンドハンドルを作成してそれぞれのサウンドハンドルから音を再生します。

#include "DxLib.h"

// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
					 LPSTR lpCmdLine, int nCmdShow )
{
	int SHandle, DupSHandle ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.wavのメモリへの読み込みサウンドハンドルをSHandleに保存します
	SHandle = LoadSoundMem( "test.wav" ) ;

	// test.wavを使用する SHandle とは別のサウンドハンドルを作成する
	DupSHandle = DuplicateSoundMem( SHandle ) ;

	// 読みこんだ音をノーマル再生します(『PlaySoundMem』関数使用)
	PlaySoundMem( SHandle , DX_PLAYTYPE_NORMAL ) ;

	// SHandle から複製した DupSHandle をノーマル再生します
	PlaySoundMem( DupSHandle , DX_PLAYTYPE_NORMAL ) ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}






音楽再生関数

宣言int PlayMusic( char *FileName , int PlayType ) ;

概略MIDI又はMP3ファイルを演奏(再生)する

引数 FileName : 演奏(再生)するMIDI又はMP3ファイルのファイルパス文字列の
       ポインタ
PlayType : 演奏(再生)形式
        DX_PLAYTYPE_NORMAL : ノーマル演奏(再生)
        DX_PLAYTYPE_BACK  : バックグラウンド演奏(再生)
        DX_PLAYTYPE_LOOP  : ループ演奏(再生)
戻り値 0:成功
 −1:エラー発生

解説  MIDI又はMP3ファイルを演奏(再生)します。
 MIDIの演奏にはMCIを使用するので演奏開始までに0.5か、 それ以上の処理の一次的停止が起こります。(MP3でもタイムラグが あります)
 さらにループ演奏を指定した場合ループするときに再び0.5秒 程度の処理の停止が起こりますので、リアルタイム性の高いソフト でのMIDI演奏には曲の1演奏辺りにかかる時間が長い曲を 使用することをお勧めします。(MP3再生では瞬時に戻ります)
(演奏形式については『PlaySoundFile』関数の解説を参照してください)

余談  WAVファイルも実は再生できます。これにより大容量
   WAVファイルのストリーム再生も可能となっています。
サンプル

 test.mid をノーマル演奏します

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.midのノーマル演奏
	PlayMusic( "test.mid" , DX_PLAYTYPE_NORMAL ) ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int CheckMusic( void ) ;

概略MIDI又はMP3ファイルが演奏(再生)中かの情報を取得する

引数なし
戻り値 0:演奏(再生)中ではない
1:演奏(再生)中
−1:エラー

解説  PlayMusic関数で開始したMIDI又はMP3演奏(再生)がまだ続いているか情報を 得ます。戻り値として0が返ってくれば演奏(再生)は終了しており、1が 返ってくれば演奏(再生)はまだ続いていると言うことになります。

サンプル

 test.mid をバックグラウンド演奏し、演奏が終了するまで待ちます。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.midのバックグラウンド演奏
	PlayMusic( "test.mid" , DX_PLAYTYPE_BACK ) ;

	// 演奏終了までここでループ
	while( CheckMusic() == 1 )
	{
		// メッセージ処理
		if( ProcessMessage() == -1 )
		{
			break ;	// エラーが起きたらループを抜ける
		}
	}

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int StopMusic( void ) ;

概略MIDI又はMP3ファイルの演奏(再生)停止

引数なし
戻り値 0:成功
 −1:エラー発生

解説  PlayMusic関数で開始したMIDI又はMP3演奏(再生)を停止します

サンプル

 test.midをループ再生し、2秒経ったら止めます

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// test.midのループ演奏
	PlayMusic( "test.wav" , DX_PLAYTYPE_LOOP ) ;

	// 2秒待つ『WaitTimer』使用
	WaitTimer( 2000 ) ;

	// 演奏を止めます
	StopMusic() ;

	// キー入力があるまで待ちます(『WaitKey』使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}



宣言int SetVolumeMusic( int Volume ) ;

概略MIDI又はMP3ファイルの演奏(再生)の音量を設定する

引数int Volume : 音量( 0〜255 )
戻り値 0:成功
 −1:エラー発生

解説  PlayMusic関数 で開始した演奏の音量を設定します0が無音、 255が最大音量(デフォルト)となります。

注意!…MCIを使用したMIDI演奏の場合は音量を変更することは出来ません。

サンプル

 ありません。






戻る