
首先 先填加一个部件 VB自带的 WindowsMediaPlayer(主要用于播放影音文件)
然后在你代码的form属性里加上一条 WindowsMediaPlayer1url = "歌曲路径"
如下:
Private Sub Form_Load()
Call openDatabase
cboUserTypeClear
cboUserTypeAddItem "学生", 0
cboUserTypeAddItem "管理员", 1
cboUserTypeListIndex = 0
txtUserText = ""
txtPwdText = ""
WindowsMediaPlayer1url = "歌曲路径"
End Sub
只有音乐发声汇编程序,没有加入LED灯,供参考。数据代码已改为小星星发声
;
ORG 0000H
SJMP MAIN
ORG 0BH
AJMP TIME0
;主程序
MAIN: MOV SP,#60
MOV TMOD,#01H ;T0定时工作方式
MOV IE,#82H ;CPU 中断允许,T0中断允许
START0: MOV 30H,#00H ;TABLE 相对地址指针
NEXT: MOV A,30H
MOV DPTR,#TABLE ;到TABLE处取 简谱码 节拍 码
MOVC A,@A+DPTR
MOV R2,A ;取到的简谱码 节拍码 暂存于R2中
JZ ENDF ;取到 00 结束
ANL A,#0FH ;否,取低四位 节拍 码
MOV R5,A ;将节拍码存于R5中
MOV A,R2 ;简谱码 节拍 码 给A
SWAP A ;高4位 与 低4位 交换
ANL A,#0FH ;取简谱 码
JNZ SING ;取到的简谱 码不是0,则去发声
CLR TR0 ;取到0 则不发声
SJMP DLY1 ;节拍延时子程序( 随节拍码变化,延时时间不同)
;---------------发声-----------------------
SING: DEC A ;取到的简谱码减1
;(简谱码计数值16位数据存储首地址从TABLE1 《相对地址》0处开始放起,所以要减1)
MOV 22H,A ;存入(22H)中
RL A ;乘2 因为取的数据占两字节(16位)
;所以指针增加量要乘2
MOV DPTR,#TABLE1
;简谱码转换为相应定时器16位计数值
MOVC A,@A+DPTR ;到TABLE1取相应的高字节计数值
MOV TH0,A ;高字节计数值存入TH0和(21H)中
MOV 21H,A
MOV A,22H ;减1的简谱码给A
RL A ;乘2 因为取的数据占两字节(16位)
;所以指针增加量要乘2
INC A ;A 增加 取下一个字节计数值
;简谱码转换为相应定时器16位计数值
MOVC A,@A+DPTR ;到TABLE1取相应的低字节计数值
MOV TL0,A ;低字节计数值存入TL0和(20H)中
MOV 20H,A
SETB TR0 ;启动T0定时器让喇叭发出不同频率声音
;---------------节拍延时-------------------
DLY1: ACALL DELAY ;基本单位时间为1/4拍 187ms
INC 30H ;取下一个简谱码 节拍 码
SJMP NEXT
;---------------歌放完结束---------------
ENDF: CLR TR0 ;关闭T0定时器
AJMP START0 ;反复循环
;T0中断子程序(用来驱动喇叭发出不同频率声音)
TIME0: PUSH ACC
PUSH PSW
MOV TL0,20H ;重装计数值
MOV TH0,21H
CPL P37 ;驱动发声
POP PSW
POP ACC
RETI
;节拍延时187ms
DELAY: MOV R7,#187 ;187ms延时子程序
DLY2: MOV R4,#02
DLY3: MOV R3,#248
DJNZ R3,$
DJNZ R4,DLY3
DJNZ R7,DLY2
DJNZ R5,DELAY
RET
;音符T值表(用来让定时器发出不同的频率)DW 表示一个 计数值 占两个字节存储单元
TABLE1: DW 64260,64400,64524,64580,64684 ;低音SO 低音LA 低音SI /中音DO 中音RE
DW 64777,64820,64898,64968,65030 ;中音MI 中音FA 中音SO 中音LA 中音SI
DW 65058,65110,65157,65178,65217 ;高音DO 高音RE 高音MI 高音FA 高音SO
;简谱码 节拍码(高4位简谱码 ,低4位节拍码)
TABLE: DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 -
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 -
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
END
加入了LED灯,水平有限,效果有点不太好
;
ORG 0000H
SJMP MAIN
ORG 0BH
AJMP TIME0
;主程序
MAIN: MOV SP,#60
MOV TMOD,#01H ;TO定时工作方式
MOV IE,#82H ;CPU 中断允许,TO中断允许
START0: MOV 30H,#00H ;TABLE 相对地址指针
NEXT: MOV A,30H
MOV DPTR,#TABLE ;到TABLE处取 简谱码 节拍 码
MOVC A,@A+DPTR
MOV R2,A ;取到的简谱码 节拍码 暂存于R2中
JZ ENDF ;取到 00 结束
ANL A,#0FH ;否,取低四位 节拍 码
MOV R5,A ;将节拍码存于R5中
MOV A,R2 ;简谱码 节拍 码 给A
SWAP A ;高4位 与 低4位 交换
ANL A,#0FH ;取简谱 码
JNZ SING ;取到的简谱 码不是0,则去发声
CLR TR0 ;取到0 则不发声
SJMP DLY1 ;节拍延时子程序( 随节拍码变化,延时时间不同)
;---------------发声-----------------------
SING: DEC A ;取到的简谱码减1
;(简谱码计数值16位数据存储首地址从TABLE1 《相对地址》0处开始放起,所以要减1)
MOV 22H,A ;存入(22H)中
RL A ;乘2 因为取的数据占两字节(16位)
;所以指针增加量要乘2
MOV DPTR,#TABLE1
;简谱码转换为相应定时器16位计数值
MOVC A,@A+DPTR ;到TABLE1取相应的高字节计数值
MOV TH0,A ;高字节计数值存入TH0和(21H)中
MOV 21H,A
MOV A,22H ;减1的简谱码给A
RL A ;乘2 因为取的数据占两字节(16位)
;所以指针增加量要乘2
INC A ;A 增加 取下一个字节计数值
;简谱码转换为相应定时器16位计数值
MOVC A,@A+DPTR ;到TABLE1取相应的低字节计数值
MOV TL0,A ;低字节计数值存入TL0和(20H)中
MOV 20H,A
SETB TR0 ;启动T0定时器让喇叭发出不同频率声音
;---------------节拍延时-------------------
DLY1: ACALL DELAY ;基本单位时间为1/4拍 187ms
INC 30H ;取下一个简谱码 节拍 码
CPL P10 LED灯 闪烁
CPL P11
CPL P12
CPL P13
CPL P14
CPL P15
CPL P16
CPL P17
SJMP NEXT
;---------------歌放完结束---------------
ENDF: CLR TR0 ;关闭T0定时器
AJMP START0 ;反复循环
;T0中断子程序(用来驱动喇叭发出不同频率声音)
TIME0: PUSH ACC
PUSH PSW
MOV TL0,20H ;重装计数值
MOV TH0,21H
CPL P37 ;驱动发声
POP PSW
POP ACC
RETI
;节拍延时187ms
DELAY: MOV R7,#187 ;187ms延时子程序
DLY2: MOV R4,#02
DLY3: MOV R3,#248
DJNZ R3,$
DJNZ R4,DLY3
DJNZ R7,DLY2
DJNZ R5,DELAY
RET
;音符T值表(用来让定时器发出不同的频率)DW 表示一个 计数值 占两个字节存储单元
TABLE1: DW 64260,64400,64524,64580,64684 ;低音SO 低音LA 低音SI /中音DO 中音RE
DW 64777,64820,64898,64968,65030 ;中音MI 中音FA 中音SO 中音LA 中音SI
DW 65058,65110,65157,65178,65217 ;高音DO 高音RE 高音MI 高音FA 高音SO
;简谱码 节拍码(高位简谱码 ,低位节拍码)
TABLE: DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 - -表示有节拍
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 84H,84H,74H,74H ; 5 5 4 4
DB 64H,64H,58h ; 3 3 2-
DB 44H,44H,84H,84H ; 1 1 5 5
DB 094H,094H,88h ; 6 6 5 -
DB 74H,74H,63H,63H ; 4 4 3 3
DB 52H,52H,48h ; 2 2 1-
END
如果是自己写的程序要内嵌音乐比较容易。
如是用别人己写好的程序,就只能自己写些代码,先把那播放程序和自己的程序合成同一文件,然后在运行自己的程序时分解文件再调作播放程序放音乐。关闭时自动删除文件。
游戏背景音乐用mp3或midi比较好(以前DOS时代用Midi的多, 现在用mp3之类压缩过的比较多),用wav的文件太大了也有用ogg或其它的
不知楼主是在什么样的 *** 作系统上
如果是在Windows上, 实现背景音乐, 我所了解的有以下几种方式:
1 用PlaySound函数作异步播放
优点:用起来相当方便
缺点:只能播wav格式的文件而且wav文件不能太大, 否则会占很多内存;
2 用waveOutWrite直接写wav数据出去
优点:可以比PlaySound进行更灵活的处理, 可以占较少的内存
缺点:只能播wav, 要实现背景播放可能要开新线程或是用消息循环,实现较麻烦;需要了解wav文件格式自己解析
3 用mciSendCommand及相关函数来实现
优点:使用简单, 可以播放几乎所有的音乐文件
缺点:有的函数参数很怪, 代码看起来不是很漂亮
4 用DirectShow播放
优点:可以播放几乎所有的音乐文件, 结构明了;是现在用的比较多的方法, 现许多音视频播放软件及电脑游戏都是用它
缺点:写程序时需要安装DirectX SDK, 需要了解DirecShow基本知识(其实真正做起来, 背景播放音乐只要几句代码就可以完成)
以上就是关于VB程序添加背景音乐全部的内容,包括:VB程序添加背景音乐、单片机 音乐程序编写 歌曲《小星星》、c++如何将背景音乐内嵌到程序中去等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)