
在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC++中提供的声音播放函数BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound )或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound )其中参数lpszSound是需要播放声音的.W***文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC++中的帮助。 例如播放C:soundmusic.wav可以用sndPlaySound ("c:\sound\music.wav",SND_ASYNC)或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT )如果没有找到music.wav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。
二.将声音文件加入到程序中
在VC++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无.W***文件的声音播放。要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件。
具体步骤入下:
1.获得包含资源的模块句柄:
HMODULE hmod=AfxGetResourceHandle()
2.检索资源块信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_W***E1),_T("W***E"))
3. 装载资源数据并加锁:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource)
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem)
4.播放声音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.释放资源句柄:
FreeResource(hGlobalMem)
你的程序最后缺少:code ends
end start
===================================
DATA SEGMENT PARA 'DATA'
MUSIC_F DW 440,392,330,392,524,440,392,440
DW 330,392,440,392,330, 262,220,392,330,294
DW 294,330,392,392,440,330,294,262
DW 392,330,294,262,220,262,196,0
MUSIC_T DW 32000,16000,32000,32000,32000,16000,16000,32000
DW 32000,16000,16000,32000,32000,16000,16000,16000,16000, 32000
DW 32000,16000,32000,16000,16000,32000,32000,32000
DW 32000,16000,16000,16000,16000,32000
DATA ENDS CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DATA
START1 PROC FAR
start:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA SI,MUSIC_F
NEXT: LEA BP,MUSIC_T
START2: MOV DI,[SI]
CMP DI,0
JE EXIT
MOV BX,DS:[BP]
MOV AL,0B6H 向 8253 计数器 2 写控制字(主板规定)
OUT 43H,AL 方式 3、双字节写和二进制计数方式写到控制口
MOV DX,12H 设置被除数
MOV AX,3208H 其商(AX)为预置值
DIV DI
OUT 42H,AL 先送低位数据
MOV AL,AH
OUT 42H,AL 再送高位数据
IN AL,61H 读 8255 端口 B(61H)原值
MOV AH,AL
OR AL,03H
OUT 61H,AL 使与门打开,GETE2 有效,扬声器响
WAIT1:MOV CX,2801H
DELAY:LOOP DELAY 时间延迟次数为 2801H 次
DEC BX 循环持续 BX 次
JNZ WAIT1
MOV AL,AH 写回 61H 口原值,关闭扬声器
OUT 61H,AL
ADD SI,2
ADD BP,2
JMP START2
EXIT: MOV AL,48H
OUT 61H,AL
RET
START1 ENDP
code ends
end start
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)