HLP

  • タグ:
  • タグはありません
;----------------------
;typedef struct _MMCKINFO
;{
;        FOURCC          ckid;           /* chunk ID */
;        DWORD           cksize;         /* chunk size */
;        FOURCC          fccType;        /* form type or list type */
;        DWORD           dwDataOffset;   /* offset of data portion of chunk */
;        DWORD           dwFlags;        /* flags used by MMIO functions */
;} MMCKINFO, *PMMCKINFO, NEAR *NPMMCKINFO, FAR *LPMMCKINFO;
				#define _ckid 0
				#define _cksize 4
				#define _fccType 8
				#define _dwDataOffset 12
				#define _dwFlags 16
;----------------------



#uselib "winmm.dll"
//WAVE操作関数
#func waveOutOpen "waveOutOpen" sptr, sptr, sptr, sptr, sptr, sptr
#define WAVE_MAPPER 0xFFFFFFFF
#define CALLBACK_NULL 0x00000000
#func waveOutPrepareHeader "waveOutPrepareHeader" sptr, sptr, sptr
#func waveOutWrite "waveOutWrite" sptr, sptr, sptr
#func waveOutReset "waveOutReset" sptr
#func waveOutUnprepareHeader "waveOutUnprepareHeader" sptr, sptr, sptr
#func waveOutClose "waveOutClose" sptr
//Waveファイル読み取り関数
#func mmioOpen "mmioOpenA" sptr,sptr,sptr
#define MMIO_READ 0x00000000
#func mmioRead "mmioRead" sptr,sptr,sptr
#func mmioSeek "mmioSeek" sptr,sptr,sptr
#define SEEK_SET 0 //ファイル先端
#define SEEK_END 2 //ファイル終端
#func mmioClose "mmioClose" sptr,sptr
#func mmioDescend "mmioDescend" sptr,sptr,sptr,sptr
#define MMIO_FINDRIFF 0x0020
#define MMIO_FINDCHUNK 0x0010
#func mmioAscend "mmioAscend" sptr,sptr,sptr
//FOURCC型変換関数
#cfunc mmioStringToFOURCC "mmioStringToFOURCCA" sptr,sptr

alloc WAVEHDR,8*4


gosub*ReadWaveFile//データ取得

hwo=0;ウェーブフォームオーディオ出力デバイスのハンドル
waveOutOpen varptr(hwo),WAVE_MAPPER,varptr(WAVEFORMATEX),0,0,CALLBACK_NULL
if stat=0{mes "WAVEOUT OPEN:OK"}else{end}

wpoke WAVEHDR,0,varptr(Data)// 0:lpdata
wpoke WAVEHDR,4,DataSize// 4:dwBufferLength
wpoke WAVEHDR,16,0//16:dwFlags

waveOutPrepareHeader hwo,varptr(WAVEHDR),32
if stat=0{mes "WAVE PREPARE:OK"}else{end}
waveOutWrite hwo,0,32
waveOutWrite hwo,varptr(WAVEHDR),32


stop


*ReadWaveFile//ReadWaveFileで最終的に使うのはWAVEFORMATEX構造体、DATA,DataSizeの3つ//
FileName="sample.wav"
alloc mmckRiff,4*5
alloc mmckFmt,4*5
alloc mmckData,4*5
alloc WAVEFORMATEX,18

//ファイルオープン
String=FileName
mmioOpen FileName,NULL,MMIO_READ
hmmio = stat
if hmmio = 0 {end}else{mes "MMIO OPEN:OK,FILE:"+Name}

//RIFFチャンクへアクセス
lpoke mmckRiff,_ffcType,mmioStringToFOURCC("WAVE",0)
mmioDescend hmmio,varptr(mmckkRiff),0,MMIO_FINDRIFF
if stat=0{mes "RIFF DESCEND:OK"}else{end}

//fmt チャンクへアクセス->解除
lpoke mmckFmt,_ckid,mmioStringToFOURCC("fmt ",0)
mmioDescend hmmio,varptr(mmckFmt),0,MMIO_FINDCHUNK
if stat=0{mes "fmt  DESCEND:OK"}else{end}
mmioRead hmmio,varptr(WAVEFORMATEX),wpeek(mmckFmt,_cksize)
if stat<=0{end}else{mes "GET WAVEFORMATEX:OK"}
mmioAscend hmmio,varptr(mmckFmt),0
if stat=0{mes "fmt  ASCEND:OK"}else{end}
if wpeek(WAVEFORMATEX,0)=1{mes "THIS IS PCMDATA"}else{mes "THIS IS NOT PCMDATA"}//このデータがPCMデータかどうか確かめる

//DATAチャンクへアクセス->解除
lpoke mmckData,_ckid,mmioStringToFOURCC("data",0)
mmioDescend hmmio,varptr(mmckData),0,MMIO_FINDCHUNK
if stat=0{mes "DATA DESCEND:OK"}else{end}
Alloc Data,wpeek(mmckData,_cksize)//WAVEデータ格納スペース
mmioRead hmmio,varptr(Data),wpeek(mmckData,_cksize)
if stat=0{end}else{mes "GET DATA:OK"}
mmioAscend hmmio,varptr(mmckData),0

//RIFFチャンクアクセス解除
mmioAscend hmmio,varptr(mmckData),0

mmioClose hmmio,0

DataSize=wpeek(mmckData,_cksize)//WAVEデータサイズ

return