流行音乐乐曲演奏程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
流行音乐乐曲演奏程序
一、需求说明
1、通过一个较大型实用程序的设计与实现,综合运用所学知识,加深理解和掌握。
同时培养学生分析问题和解决问题的能力,以及自学能力。
2、编写用键盘选择计算机演奏歌曲的程序,歌曲清单至少包括3首;
3、程序应该有操作提示、输入和输出,界面追求友好,最好是菜单式的界面;
4、设计若干用例(测试数据),上机测试程序并分析所设计的程序;
二、设计说明
1、简要分析
为了编写一个流行音乐乐曲演奏程序,分析时按照课程设计的要求必须要有操作提示、输入和输出。在界面设计时应该追求友好,能够使用户便于使用该程序。而且按照课题要求最好能够实现菜单式的界面,进一步提高该程序界面的友好性。同时,在设计分析时也必须解决发声问题。分析设计时按照课本P383(10.4 通用发声程序)所示的设计方法解决发声问题。
2、概要分析
2.1 用户界面
以下是显示音乐菜单的字符串
msgmenu db'************************************** ',0dh,0ah
db'* The pop music menu is that: * ',0dh,0ah
db'* * ',0dh,0ah
db'* 1:dahai * ',0dh,0ah ;张宇生《大海》
db'* 2:dongfengpo * ',0dh,0ah ;周杰伦《东风破》
db'* 3:dashetou * ',0dh,0ah ;吴克群《大舌头》
db'************************************** ',0dh,0ah,'$'
2.2 模块定义、原理
2.2.2 提示选择乐曲
msgchoose db 0dh,0ah,'Input the number(1~3) to choose the music you want,input:','$'
在出现菜单时,同时出现选择乐曲模块,帮助用户认识菜单和操作菜单的方法。
2.2.2提示音乐播放
msgdoing db 0dh,0ah,0dh,0ah
db 0dh,0ah,' Now,playing the pop music which you chose!Please enjoying...'
db 0dh,0ah,0dh,0ah,'$'
在用户选择所选音乐,程序演奏音乐时,同时显示以上程序段,提示用户系统已经在演奏所选流行歌曲。
2.2.3 提示输入字符错误
msgerror db 0dh,0ah,0dh,0ah,0dh,0ah,'!!! sorry, you input a wrong number!!!',0dh,0ah db 'please try to choose from 1 to 3 again!,input:','$'
如果出现用户输入字符不符合程序定义的字符串时,程序显示以上模块段,提示用户操作错误,同时程序转回菜单,提示用户重新操作。
2.2.4 乐曲频率表和节拍表
以下节选《大舌头》流行乐曲的频率表和节拍表,其余乐曲见源程序段。
freq_dashetou dw 524,524,524,524,494,524,588,524 ;频率表
dw 524,524,524,524,494,524,494,392
dw 524,524,524,524,494,524,588,524
dw 330,330,294,294,262,330,300,262
dw 524,524,524,524,494,524,588,524
dw 524,524,524,524,494,524,494,392
dw 524,524,524,524,494,524,588,524
dw 330,330,294,294,262,330,300,262
dw -1
time_dashetou dw 500,500,500,500,1000,500,500,500 ;节拍表
dw 500,500,500,500,1000,500,500,500
dw 500,500,500,500,1000,500,500,500
dw 500,500,500,250,250,500,500,1000
dw 500,500,500,500,1000,500,500,500
dw 500,500,500,500,1000,500,500,500
dw 500,500,500,500,1000,500,500,500
dw 500,500,500,250,250,500,500,1000
2.2.5 乐曲处理模块
以下节选第一乐曲的处理模块,其余乐曲可见源程序。
music1:dispmsg msgdoing ;music1处理程序段
mov si,offset freq_dahai
mov di,offset time_dahai
m1: mov cx,[si]
cmp cx,-1 ;-1用于判断是否结束歌曲
je next
mov bx,[di]
call gensound
add si,2 ;取下一频率值
add di,2 ;取下一节拍值
jmp m1
2.2.6音乐处理模块
gensound proc near
push dx
mov al,0b6h ; 向计数器写控制数
out 43h,al ;方式3、双字节写和二进制计数方式写到控制口mov dx,08h ; 设置被除数
mov ax,3208h
div cx ; 其商为预置值
out 42h,al ; 先送LSB
mov al,ah