これでいいのかわからないけど、一応。。。(にしてもスクリプトすごいぐちゃぐちゃやん。ごめんなさい)
//オーディオ特定ライン再生
#uselib "winmm.dll"
#func waveOutOpen "waveOutOpen" var,int,var,int,int,int
#func waveOutPrepareHeader "waveOutPrepareHeader" int,var,int
#func waveOutWrite "waveOutWrite" int,var,int
#define null 0
WaveFile = dir_exe+"\\hsptv\\se_tyuiin.wav"
//【WAVEファイルロード部】
//Waveファイルが存在するかチェック
exist WaveFile
if strsize == -1{
dialog "Waveファイルが存在しませんでした"
stop
} else {
FileSize = strsize
}
//Waveファイルの情報構造体を取得
sdim FileData,FileSize
bload WaveFile,FileData,FileSize
if strsize != FileSize{
dialog "サイズが異常です。停止します。\n読み込まれたサイズ : "+strsize
stop
}
mes "ファイル全体サイズ : "+FileSize+" byte"
//データ情報取得
HRIFF = lPeek(FileData,0)
if HRIFF != 0x46464952{
dialog "RIFFヘッダを確認できませんでした。" : stop
}
Offset += 4
OutOfSize = lPeek(FileData,Offset)
mes "RIFFヘッダとこのサイズ領域を除くサイズ : "+OutOfSize+" byte"
Offset += 4
HWAVE = lPeek(FileData,Offset)
if HWAVE != 0x45564157{
dialog "WAVEヘッダを確認できませんでした" : stop
}
Offset += 4
CFMT = lPeek(FileData,Offset)
if CFMT != 0x20746D66{
dialog "FMTチャンクを確認できませんでした" : stop
}
Offset += 4
CFMT_Size = lPeek(FileData,Offset)
mes "FMTチャンクサイズ : "+CFMT_Size+" byte"
Offset += 4
//FMTデータ
dim CFMT_Data,4
memcpy CFMT_Data,FileData,16,0,20
Offset += 16
//data チャンク検索
Skip = -1
repeat 64
CDATA = lPeek(FileData,Offset + cnt)
if CDATA == 0x61746164 : Skip = cnt : break
loop
if Skip == -1{
dialog "データチャンクを確認できませんでした" : stop
}
mes "データチャンク場所 : ファイル先頭より "+(Offset + Skip)+" byte"
Offset += Skip + 4
//data のサイズ
CDATA_Size = lPeek(FileData,Offset)
mes "データのサイズ : "+CDATA_Size
Offset += 4
//データの実態を作成する
dupptr WaveDataMain,varptr(FileData) + Offset,CDATA_Size,2
//【再生デバイス関係】
//どのデバイスで再生したいか。ここを再生デバイスの数だけ変更してみてね。
DeviceID = 0
//フォーマット情報をコピー
dim WAVEFORMATEX,5
memcpy WAVEFORMATEX,CFMT_Data,16,0,0
poke WAVEFORMATEX,16,18
//WaveOutOpen
HandleWO = 0
waveOutOpen HandleWO,DeviceID,WAVEFORMATEX,null,null,0
if (stat != 0){
dialog "デバイスのオープンに失敗しました。" : stop
}
//waveOutPrepareHeader【バッファ初期化】
dim WAVEHDR,32
WAVEHDR(0) = varptr(WaveDataMain)
WAVEHDR(1) = CDATA_Size
waveOutPrepareHeader HandleWO,WAVEHDR,32
if (stat != 0){
dialog "WAVEHDR 初期化に失敗しました。" : stop
}
waveOutWrite HandleWO,WAVEHDR,32