#include <windowsh>
#include <stdioh>
#include <stdlibh>
#include <stringh>
#include <conioh>
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,"music1txt");
break;
}
if(menu==2)
{
strcpy(FileName,"music2txt");
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=0;i<num;i++)
{
t[i]=t[i]r;
switch(h[i])
{
case 'H':k=4;break;
case 'M':k=2;break;
case 'L':k=1;
}
switch(f[i])
{
case 1: f[i]=262k; break;
case 2: f[i]=296k; break;
case 3: f[i]=330k; break;
case 4: f[i]=349k; break;
case 5: f[i]=392k; break;
case 6: f[i]=440k; break;
case 7: f[i]=494k; break;
}
}
}
void music(unsigned f[],unsigned t[],int num)
{
int i;
for(i=0;i<num;i++)
{
Beep(f[i],t[i]);
}
}
很简单的。
计算机发声原理:
声音有三个特性:响度、音调、音色。
响度,这个非常好理解。就是我们感觉到的声音的大小。具体点说就是由“振幅”决定,振幅越大响度越大。一般计量响度的单位是分贝,dB。
音调,这个就是声音的高低,由“频率”决定,频率越高音调越高。频率单位是赫兹,符号Hz。
音色,在生活当中,我们会发现各种物品发出的声音的特点是不一样的,如二胡和笛子。声音的特性就是音色。而决定声音的音色是由于物体本身的材料、结构。
对于我们的计算机而言。发声的设置都是固定了的。要么要计算机上的那个喇叭,那么是外接的音响等。
现在这里对计算机上的那个喇叭用Turbo C 20进行编程,使之发出动听的音乐《梁祝》。
第一步:定义《梁祝》的每一个音符的频率和时间,将定义好的频率和时间写入文件或者保存在数组里面。如果仅仅是写一两个程序自己玩玩的话,那直接保存在数组里面就可以了。如果你想自己写个播放器的话,那你先自己定义一种音乐格式文件(类似mp3、wav这种文件,这里暂时把这个文件定为mymusic),将《梁祝》每个音符的频率、时间写入这个自定义的音乐格式文件liangzhumymusic。
第二步:完成了liangzhumymusic文件的定义后,我们要做的事情就是读文件,控制喇叭发声。这个具体可以参照现有的资料。这里需要事先写几个函数,读文件的函数,暂停函数,频率对照函数等等。
第三步,将上面的程序链接起来,就OK了。
将上面的步骤优化下,一个DIY的音乐播放器就成功了。
我上面说的只是控制了声音的频率和时间,其实还可以控制响度。对于一些特殊的设备,控制音色也不是不可能。
这种程序我在大一的时候写过。现在想起来不难的。
主要是对C语言是否熟练,当然,你想要实现一个播放器,那你途中会遇到很多困难的。
祝你好运!
编译能通过---------- 编译时把注释去掉
#include<stdioh>
#include<stdlibh>
#include<stringh>
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 "dosh"
#include "stdioh"
#define time 10000 /预定义节拍长度 time(一拍)/
#define time0 5000 /预定义半节拍长度 time0/
#define time1 15000 /预定义15节拍长度 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;j<8;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]>494&&music[i]<988) /判断不是中音/
{
milliseconds=music[i+1];
for(j=1;j<8;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;j<8;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;
}
}
一.在程序中直接播放声音文件
在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC++中提供的声音播放函数BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中参数lpszSound是需要播放声音的W文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC++中的帮助。 例如播放C:soundmusicwav可以用sndPlaySound ("c:\sound\musicwav",SND_ASYNC);或PlaySound("c:\sound\musicwav",NULL, SND_ASYNC|SND_NODEFAULT );如果没有找到musicwav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。
二.将声音文件加入到程序中
在VC++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无W文件的声音播放。要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件。
具体步骤入下:
1.获得包含资源的模块句柄:
HMODULE hmod=AfxGetResourceHandle();
2.检索资源块信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_WE1),_T("WE"));
3 装载资源数据并加锁:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);
4.播放声音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.释放资源句柄:
FreeResource(hGlobalMem);
你的原创歌曲创作出来之后,用歌谱的形式记载下来的只是半成品,人们无法知道你的歌曲好不好听。要制作出好听的作品来,还须将这个半成品进行加工:一台现在的主流电脑,几个软件,加上 *** 作软件的技术就可以了。首先由音序软件制作出各种音色合成的歌曲伴奏,导出各个声部的音频文件,再导入到音频编辑软件并且录入人声,再为各声部加效果、分声相。然后经过母带处理,用烧录软件将其刻录为CD或DVD,大功告成。最后制作出让人能听的音响材料,把这样的完成后的音乐作品上传至某个网站发布。就算是大功告成了 当然,这所有的工作可以是你一人完成,也可以是多人完成
顺便说一下音序软件音序软件就是MIDI制作软件,MIDI制作软件可以说就是一部高级录音机。它可以让制作出来的多声部乐曲按不同音色、不同音型同时或不同时有序地演奏出来。
过去要制作较好听的乐曲,必须要购置许多硬件音源,而现在世界的潮流是用软件音源代替硬件音源,同样能制作出硬件音源一样质量的音色。所以,任何普通人都可以进入音乐制作的行列,成为音乐人。
一首好的原创歌曲通常有四个标准:
1、旋律形象准确,歌词主题明确。音乐和歌词对要表达的事物、人物和情感有准确的形象描述,让别人一听音乐就知道歌曲要表达的意境和情绪;歌词需要用形象说话,通过歌词进一步了解歌曲的内涵和主题。
2、旋律优美流畅,歌词通俗易懂。曲调好听,一听就想跟着唱;歌词中没有难懂的词汇和拮牙拗口的句子。
3、曲调形式严谨,歌词新颖巧妙。曲调形式是指曲调的乐句、乐段安排得当;歌词不要人云亦云,要用最新的角度去反映生活,去反映自己的情感。有自己的个性和特点。
4、曲调风格突出,歌词贴切入乐。曲调的风格有雅俗之分,有民族地域之分。突出民族、地域的风格的最好手段是吸取各民族、各地域民歌中营养,将当地的民歌和戏曲(包括曲艺)的旋律烂熟于心,再进行创新。歌词是能唱的诗歌,与曲调风格统一。
以上就是关于c语言写音乐,我要一个准确的源代码,谢谢全部的内容,包括:c语言写音乐,我要一个准确的源代码,谢谢、如何用C语言编写音乐歌曲、急求高手啊,怎么在c语言程序中写一段音乐啊!!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)