本文目录一览:
单片机蜂鸣器c语言《兰花草》音乐代码
程序名: MCS51U实验板配套程序-歌曲:兰花草
;电路介绍:蜂鸣器接P2.0;实验前要连接J12
;***********************************************************************
OUT BIT P2.0
ORG 0
AJMP START
ORG 0BH
AJMP TIM0
START: MOV TMOD,#1
MOV IE,#10000010B
START0: MOV 30H,#0
NEXT: MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R2,A
JZ END0
ANL A,#0FH
MOV R5,A
MOV A,R2
SWAP A
ANL A,#0FH
JNZ SING
CLR TR0
AJMP D1
SING: DEC A
MOV 22H,A
RL A
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV TH0,A
MOV 21H,A
MOV A,22H
RL A
INC A
MOVC A,@A+DPTR
MOV TL0,A
MOV 20H,A
SETB TR0
D1: CALL DELAY
INC 30H
AJMP NEXT
END0: CLR TR0
AJMP START0
TIM0: PUSH ACC
PUSH PSW
MOV TL0,20H
MOV TH0,21H
CPL OUT
POP PSW
POP ACC
RETI
DELAY: MOV R7,#2
D2: MOV R4,#125
D3: MOV R3,#248
DJNZ R3,$
DJNZ R4,D3
DJNZ R7,D2
DJNZ R5,DELAY
RET
;====================================
TABLE1: DW 64021,64103,64260,64400
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 64934
TABLE: ;1
DB 42H,82H,82H,82H,84H,02H,72H
DB 62H,72H,62H,52H,48H
DB 0B2H,0B2H,0B2H,0B2H,0B4H,02H,0A2H
;2
DB 12H,0A2H,0D2H,92H,88H
DB 82H,0B2H,0B2H,0A2H,84H,02H,72H
DB 62H,72H,62H,52H,44H,02H,12H
;3
DB 12H,62H,62H,52H,44H,02H,82H
DB 72H,62H,52H,32H,48H
DB 00H
END
如何用C语言编写音乐歌曲?
很简单的。
计算机发声原理:
声音有三个特性:响度、音调、音色。
响度,这个非常好理解。就是我们感觉到的声音的大小。具体点说就是由“振幅”决定,振幅越大响度越大。一般计量响度的单位是分贝,dB。
音调,这个就是声音的高低,由“频率”决定,频率越高音调越高。频率单位是赫兹,符号Hz。
音色,在生活当中,我们会发现各种物品发出的声音的特点是不一样的,如二胡和笛子。声音的特性就是音色。而决定声音的音色是由于物体本身的材料、结构。
对于我们的计算机而言。发声的设置都是固定了的。要么要计算机上的那个喇叭,那么是外接的音响等。
现在这里对计算机上的那个喇叭用Turbo C 2.0进行编程,使之发出动听的音乐《梁祝》。
第一步:定义《梁祝》的每一个音符的频率和时间,将定义好的频率和时间写入文件或者保存在数组里面。如果仅仅是写一两个程序自己玩玩的话,那直接保存在数组里面就可以了。如果你想自己写个播放器的话,那你先自己定义一种音乐格式文件(类似.mp3、.wav这种文件,这里暂时把这个文件定为.mymusic),将《梁祝》每个音符的频率、时间写入这个自定义的音乐格式文件liangzhu.mymusic。
第二步:完成了liangzhu.mymusic文件的定义后,我们要做的事情就是读文件,控制喇叭发声。这个具体可以参照现有的资料。这里需要事先写几个函数,读文件的函数,暂停函数,频率对照函数等等。
第三步,将上面的程序链接起来,就OK了。
将上面的步骤优化下,一个DIY的音乐播放器就成功了。
我上面说的只是控制了声音的频率和时间,其实还可以控制响度。对于一些特殊的设备,控制音色也不是不可能。
这种程序我在大一的时候写过。现在想起来不难的。
主要是对C语言是否熟练,当然,你想要实现一个播放器,那你途中会遇到很多困难的。
祝你好运!
急求高手啊,怎么在c语言程序中写一段音乐啊!!!!
编译能通过---------- 编译时把注释去掉
#includestdio.h
#includestdlib.h
#includestring.h
struct song{ //定义一个歌曲结构
int id; //歌曲号
char title[20]; //歌曲名
char singer[20]; //歌手名
};
typedef struct song SONG; //把结构命名为 SONG
int main( void )
{
SONG songlist[100]; //定义一个存储歌曲信息的列表,长100
int i=0,j;
int c;
clrscr();
while (i=100) {
printf( "please enter the song's id, title and singer:\n" );
//输入歌曲号 然后空格 输入歌曲名 然后空格 输入歌手名 然后回车
scanf( "%d%s%s", songlist[i].id, songlist[i].title, songlist[i].singer);
i++;
//每次输入完一条信息后,把列表中的歌曲信息全部打印出来看一下
printf("the songlist is below:\n\n");
for( j=0; j=i; j++){
printf( "%d %s %s\n", songlist[j].id, songlist[j].title, songlist[j].singer );
}
printf("\n");
}
getch();
return 0;
}
或者是
#include "dos.h"
#include "stdio.h"
#define time 10000 /*预定义节拍长度 time(一拍)*/
#define time0 5000 /*预定义半节拍长度 time0*/
#define time1 15000 /*预定义1.5节拍长度 time1*/
#define time2 20000 /*预定义2节拍长度 time2*/
#define time3 30000 /*预定义3节拍长度 time3*/
#define _a 262 /*预定义低音音符1~7*/
#define _b 294
#define _c 330
#define _d 349
#define _e 392
#define _f 440
#define _g 494
#define a 523/*预定义中音音符1~7*/
#define b 587
#define c 659
#define d 698
#define e 784
#define f 880
#define g 988
#define a_ 1047/*预定义高音音符1~7*/
#define b_ 1175
#define c_ 1319
#define d_ 1397
#define e_ 2568
#define f_ 1760
#define g_ 1976
main()
{
int i=0,j;
unsigned milliseconds;
int music[1000]={
f,time,
f,time,
g,time0,
f,time,
f,time,
g,time0,
f,time,
g,time,
a_,time,
g,time,
f,time,
g,time0,
f,time0,
d,time,
c,time,
a,time,
c,time,
d,time,
c,time,
c,time0,
a,time0,
_g,time,
f,time,
g,time,
a_,time,
g,time,
f,time,
g,time0,
f,time0,
d,time1,
c,time,
a,time,
c,time,
d,time,
c,time,
c,time0,
a,time0,
g,time1,
f,time,
f,time,
g,time1,
f,time,
f,time,
g,time1,
c,time,
d,time,
g,time0,
f,time0,
c,time,
d,time,
g,time0,
f,time0,
d,time0,
d,time,
c,time3
}
;
while(music[i]!='\0')
{
if(music[i]=494) /*判断不是低音*/
{
milliseconds=music[i+1];
for(j=1;j8;j++)
{
switch(j)
{
case 1: sound(a);
delay(milliseconds);break;
case 2: sound(b);
delay(milliseconds);break;
case 3: sound(c);
delay(milliseconds);break;
case 4: sound(d);
delay(milliseconds);break;
case 5: sound(e);
delay(milliseconds);break;
case 6: sound(f);delay(milliseconds);break;
case 7: sound(g);
delay(milliseconds);break;
}
nosound();
}
}
if(music[i]494music[i]988) /*判断不是中音*/
{
milliseconds=music[i+1];
for(j=1;j8;j++)
{
switch(j)
{
case 1: sound(_a);
delay(milliseconds);break;
case 2: sound(_b);
delay(milliseconds);break;
case 3: sound(_c);
delay(milliseconds);break;
case 4: sound(_d);
delay(milliseconds);break;
case 5: sound(_e);
delay(milliseconds);break;
case 6: sound(_f);
delay(milliseconds);break;
case 7: sound(_g);
delay(milliseconds);break;
}
nosound();
}
}
if(music[i]988) /*判断不是高音*/
{
milliseconds=music[i+1];
for(j=1;j8;j++)
{
switch(j)
{
case 1: sound(a_);
delay(milliseconds);break;
case 2: sound(b_);
delay(milliseconds);break;
case 3: sound(c_);
delay(milliseconds);break;
case 4: sound(d_);
delay(milliseconds);break;
case 5: sound(e_);
delay(milliseconds);break;
case 6: sound(f_);
delay(milliseconds);break;
case 7: sound(g_);
delay(milliseconds);break;
}
nosound();
}
}
nosound();
i=i+2;
}
}
如何用c语言编写歌曲
我们知道,音乐是音高和音长的有序组合,设计微机音乐最重要的就是如何定义音高和音长,以及如何让扬声器发出指定的音符。下面给出音符与频率的关系表。C语言提供的三个函数sound( )、nosound( )和clock( )可以很方便地解决上述的问题。sound( )函数可以用指定频率打开PC机扬声器直到用nosound( )函数来关闭它; clock( )函数正好用来控制发声时间,而且它不受PC机主频高低的影响。下面这段程序可使微机发出c调1的声音。
音符与频率关系表
音符 c d e f g a b
1 2 3 4 5 6 7
频率 262 294 330 349 392 440 494
音符 c d e f g a b
1 2 3 4 5 6 7
频率 523 587 659 698 784 880 988
音符 c d e f g a b
1 2 3 4 5 6 7
频率 1047 1175 1319 1397 2568 1760 1976
#includestdio.h
#includedos.h
void pause(int);
void sound1(int,int);
void main(void)
{
int i,freq,speed=5;
int time=4*speed;
char *qm="iddgwwwQQgfff dddfghhhggg ddgwwwqqgfff\
ddffhjqqqqq wpggjhgddgqq hhqwwqjjjggg\
ddgwwwqqqgfff ddffhjqqqqqq";/*定义歌曲*/
while (*qm++ !='\0'){
i=1;
switch(*qm){
case 'k':
time=1*speed; i=0;
break;
case 'i':
time=6*speed; i=0;
break;
case 'o':
time=10*speed; i=0;
break;
case 'p':
pause(time); i=0;
break;
case 'a':
freq=523;
break;
case 's':
freq=587;
break;
case 'd':
freq=659;
break;
case 'f':
freq=698;
break;
case 'g':
freq=784;
break;
case 'h':
freq=880;
break;
case 'j':
freq=988;
break;
case 'z':
freq=262;
break;
case 'X':
freq=294;
break;
case 'c':
freq=330;
break;
case 'v':
freq=349;
break;
case 'b':
freq=392;
break;
case 'n':
freq=440;
break;
case 'm':
freq=494;
break;
case 'q':
freq=1047;
break;
case 'w':
freq=1175;
break;
case 'e':
freq=1319;
break;
case 'r':
freq=1397;
break;
case 't':
freq=2568;
break;
case 'y':
freq=1760;
break;
case 'u':
freq=1976;
break;
default:
i=0;
break;
}
if(i)
sound1(freq,time);
}
}
void sound1(int freq,int time) /*freq为频率,time为持续时间*/
{
union{
long divisor;
unsigned char c[2];
}count;
unsigned char ch;
count.divisor=1193280/freq; /* 1193280 是系统时钟速率*/
outp(67,182);
outp(66,count.c[0]);
outp(66,count.c[1]);
ch=inp(97);
outp(97,ch|3);
pause(time);
outp(97,ch);
}
void pause(int time)
{
int t1,t2;
union REGS in,out;
in.h.ah=0X2c;
int86(0X21,in,out); /* 取当前时间*/
t1=t2=100*out.h.dh+out.h.dl; /*out.h.dh 为秒值,out.h.dl 为1/100 秒值*/
while(t2-t1time)
{
int86(0X21,in,out);
t2=100*out.h.dh+out.h.dl;
if (t2t1)t2+=6000; /* 增加一分钟*/
}
}