c语言写音乐,我要一个准确的源代码,谢谢

c语言写音乐,我要一个准确的源代码,谢谢,第1张

#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语言程序中写一段音乐啊!!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10632377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存