「MASM32/wave」の編集履歴(バックアップ)一覧に戻る

MASM32/wave - (2021/11/03 (水) 09:01:02) のソース

wave.asm
#highlight(asm){{
comment *
ml /c /coff /Fl /Sa wave.asm
link /subsystem:console wave
*

includelib <kernel32.lib>
includelib <winmm.lib>

.386
.model flat, c
option casemap:none

include <kernel32.inc>
include <windows.inc>
include <winmm.inc>

SAMPLE_RATE	equ	8000
DATA_LEN	equ	4000

.data

; WAVEFORMATEX
wfx	dw	WAVE_FORMAT_PCM
	dw	1
	dd	SAMPLE_RATE
	dd	SAMPLE_RATE
	dw	1
	dw	8
	dw	0

; WAVEHDR
wh	db	32 dup (0)

wavdat	db	500 dup (118,118,138,138)
	db	250 dup (118,118,118,118,138,138,138,138)

.data?
hwo	dd	?	; HWAVEOUT

.code
start:
	mov	dword ptr wh[0], offset wavdat
	mov	dword ptr wh[4], DATA_LEN

	invoke	waveOutOpen, addr hwo, WAVE_MAPPER, addr wfx, 0, 0, CALLBACK_NULL
	invoke	waveOutPrepareHeader, hwo, addr wh, 32
	invoke	waveOutWrite, hwo, addr wh, 32

	invoke	Sleep, 600

	invoke	waveOutReset, hwo
	invoke	waveOutUnprepareHeader, hwo, addr wh, 32
	invoke	waveOutClose, hwo
	invoke	ExitProcess, 0

end	start
}}

sndplay.asm
#highlight(asm){{
comment *
ml /c /coff /Fl /Sa sndplay.asm
link /subsystem:console sndplay
*

includelib kernel32
includelib winmm

.386
.model flat, stdcall
option casemap:none

include kernel32.inc
include winmm.inc
include windows.inc

.data
buf	db	'RIFF'
	dd	36 + 4000
	db	'WAVE'
	db	'fmt '
	dd	16
	dw	1, 1
	dd	8000, 8000
	dw	1, 8
	db	'data'
	dd	4000
	db	500 dup (90h,90h,70h,70h)
	db	250 dup (90h,90h,90h,90h,70h,70h,70h,70h)

.code
start:
	invoke	sndPlaySoundA, addr buf, SND_MEMORY or SND_SYNC
	invoke	ExitProcess, 0

end	start
}}