⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wave.asm

📁 一个不错的用汇编语言编写的FFT算法程序
💻 ASM
字号:
;---------------------------------------------------------------------------------;
.DATA
Align 4
WavOutDev	DD 0
WavInDev	DD 0
WavErrMsg   DB "Error",0

;---------------------------------------------------------------------------------;
.DATA?
Align 4
WaveNumDevs		DD ?
WOpenHnd		DD ?
WInHnd			DD ?
WavDblBuff		DD ?
WavBuff2		DD ?
WavPtr			DD ?
WavHdr			WAVEHDR <?>
WavHdr2			WAVEHDR <?>
pWavFmt 		WAVEFORMATEX <?>
WavOutCaps1		WAVEOUTCAPSA <>
WavErrBuff  	DB 128 DUP (?)
;---------------------------------------------------------------------------------;

.CODE
;---------------------------------------------------------------------------------;
WavIntHdr 	Macro pWavHdr:req,nmWavBuf:req,BufSize:req,nLoops,Flags    ;out eax - pWaveHdr
		mov ebx,nmWavBuf
		mov eax,pWavHdr
	    mov nmHdrWav,eax
		mov ecx,BufSize
		    xor edx,edx
	IFNB <nLoops>
		mov [eax].WAVEHDR.dwLoops,nLoops
	ENDIF
		mov [eax].WAVEHDR.lpData,ebx
		mov [eax].WAVEHDR.dwBufferLength,ecx
	IFNB <Flags>
		mov [eax].WAVEHDR.dwFlags, Flags
		    
		    mov [eax].WAVEHDR.dwBytesRecorded,edx
		    mov [eax].WAVEHDR.dwUser,edx
		    mov [eax].WAVEHDR.lpNext,edx
		    mov [eax].WAVEHDR.Reserved,edx
	ENDIF
		Invoke waveOutPrepareHeader,WOpenHnd,pWavHdr,Sizeof WAVEHDR
		cWaveError
EndM

;---------------------------------------------------------------------------------;
WavInit44St	Macro
		mov edi,Buffsz
		shl edi,3
		mov WavDblBuff,@vMem(edi)
		mov edi,Buffsz
		shl edi,5
		mov WavBuff2,@vMem(edi)
		Invoke waveOutOpen,Addr WOpenHnd,WavOutDev,Addr pWavFmt,Offset WavProc,NULL,CALLBACK_FUNCTION ;or WAVE_ALLOWSYNC
		cWaveError
		mov eax,WavDblBuff
		mov WavPtr,eax
		WavIntHdr  Offset WavHdr,WavPtr,Buffsz,1,0
		add WavPtr,Buffsz
		WavIntHdr  Offset WavHdr2,WavPtr,Buffsz,1,0
EndM

;---------------------------------------------------------------------------------;
Play Macro
		mov ecx,Buffsz*5
        add ecx,WavBuff2
        mov WavPtr,ecx
		Invoke WavProc,WOpenHnd,WOM_DONE,0,Offset WavHdr,0
		Invoke WavProc,WOpenHnd,WOM_DONE,0,Offset WavHdr2,0
EndM
;---------------------------------------------------------------------------------;

cWaveError Macro
        call cWaveErrorP
EndM

;---------------------------------------------------------------------------------;
cWaveErrorP Proc
    .If eax!=MMSYSERR_NOERROR 
        Invoke waveOutGetErrorText,eax,Offset WavErrBuff,Sizeof WavErrBuff
        Invoke  MessageBox,0,Offset WavErrBuff,Offset WavErrMsg,MB_OK or MB_ICONERROR
    .EndIf
    ret
cWaveErrorP EndP

;---------------------------------------------------------------------------------;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -