
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
unsigned frequency[100]
char hight[100]
unsigned time[100]
unsigned rate
void main()
{
void set(unsigned f[],char h[],unsigned t[],int r,int num)
void music(unsigned f[],unsigned t[],int num)
int flag=0
FILE *f1
int i,n,menu
char FileName[30]
while(1)
{ f1=NULL
i=n=0
printf("本程序采用哗虚编码的形式播放音乐。\n")
printf("\n用记事本编辑乐谱,然后通过输入文件名播放音乐\n")
printf("乐谱文件可以自创,也可以抄别人的\n")
printf("\n现在可以先输入数字再按者郑回车播放音乐:\n")
printf("1 播放指定音乐music1\n")
printf("2 播放指定音乐music2\n")
printf("3 通过程序文件名播放音乐\n")
printf("乱嫌燃4 退出\n")
while(1)
{
printf("menu=")scanf("%d",&menu)
if(menu==1)
{
strcpy(FileName,"music1.txt")
break
}
if(menu==2)
{
strcpy(FileName,"music2.txt")
break
}
if(menu==3)
{
scanf("%s",FileName)
break
}
if(menu==4)
exit(0)
}
printf("\n该文件的音乐编码如下:\n")
if((f1=fopen(FileName,"r"))==NULL)
{
printf("不能打开文件!\n")
exit(1)
}
fscanf(f1,"%d",&rate)
while(!feof(f1)&&flag!=1)
{
fscanf(f1," %d%c%d",&frequency[i],&hight[i],&time[i])
printf(" %d%c%d",frequency[i],hight[i],time[i])
if(time[i]!=-1)
{
i++n++
}
else
flag=1
}
printf("\n")
set(frequency,hight,time,rate,n)
music(frequency,time,n)
fclose(f1)
}
getch()
}
void set(unsigned f[],char h[],unsigned t[],int r,int num)
{
int i,k
for(i=0i<numi++)
{
t[i]=t[i]*r
switch(h[i])
{
case 'H':k=4break
case 'M':k=2break
case 'L':k=1
}
switch(f[i])
{
case 1: f[i]=262*kbreak
case 2: f[i]=296*kbreak
case 3: f[i]=330*kbreak
case 4: f[i]=349*kbreak
case 5: f[i]=392*kbreak
case 6: f[i]=440*kbreak
case 7: f[i]=494*kbreak
}
}
}
void music(unsigned f[],unsigned t[],int num)
{
int i
for(i=0i<numi++)
{
Beep(f[i],t[i])
}
}
建议看下高级编程技术这本书目录如下:
1 文本的屏幕输出和键盘输入
1.1 文本的屏幕输出
1.2 键盘输入
1.3 问题实现
1.4 高级应用——菜单实现
实验一
2 图形显示方式和鼠标输入
2.1 图形显示
2.2 鼠标的使用
2.3 问题实现
实验二
3 屏雀弯幕图象与动画技术
3.1 一个简单的实现方法
3.2 利用动态开辟图视口的方法
3.3 利用屏幕图象存储再放的方法
3.4 利用页交替的方法
3.5 问题实现
实验三
4 中断技术
4.1 编写自己的中断程序
4.2 问题实现
4.3 其它应用——蠢岁弯硬中断演示秒表程序
实验四
5 发声技术
5.1 声音函数
5.2 计算机乐谱
5.3 问题实现
实验五
6 汉字显示技术
6.1 汉字编码
6.2 问题带闷实现
实验六
我对音乐基本一窍不通,但是我知道,在用C编写的程序中如果不考虑使用坦塌D/A转换的话,能改变的只有发声的频率和发声的时间,给你个蜂鸣器的例子看看while(unsigned int L){ a = ~a delay(P)}void delay(unsigned int P){ while(P--);}这个是控简信运制蜂鸣器发声的一般原理 参数L决定声音时间的长短 P决定声音的频率 这样一来通过控制L和P酒可以发出不同声拦梁调,不同长度的声音了 拉长L就能实现长音 其他的关于音乐的我不清楚你可以自己摸索欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)