如何在C语言的编程中插入音乐
发布时间:2025-05-12 11:12:46 发布人:远客网络
一、如何在C语言的编程中插入音乐
一.在程序中直接播放声音文件\x0d\x0a在VC++中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC++中提供的声音播放函数BOOL sndPlaySound( LPCSTR lpszSound,UINT fuSound);或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound);其中参数lpszSound是需要播放声音的.W***文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC++中的帮助。例如播放C:soundmusic.wav可以用sndPlaySound("c:\sound\music.wav",SND_ASYNC);或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT);如果没有找到music.wav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。\x0d\x0a\x0d\x0a二.将声音文件加入到程序中\x0d\x0a在VC++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无.W***文件的声音播放。要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件。\x0d\x0a具体步骤入下:\x0d\x0a1.获得包含资源的模块句柄:\x0d\x0aHMODULE hmod=AfxGetResourceHandle();\x0d\x0a2.检索资源块信息:\x0d\x0aHRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_W***E1),_T("W***E"));\x0d\x0a3.装载资源数据并加锁:\x0d\x0aHGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);\x0d\x0aLPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);\x0d\x0a4.播放声音文件:\x0d\x0asndPlaySound(lpMemSound,SND_MEMORY));\x0d\x0a5.释放资源句柄:\x0d\x0aFreeResource(hGlobalMem);
二、C语言插入排序法
1、你要理解插入排序的原理,外层for从第二个数开始遍历(i从1开始),用t(即对应的a[i])和其前面的所有值进行比较,如果t大,则该数后移一位,直到t小或者j小于0的时候退出内层for循环,这时候出现的格局就是所有在i位置之前比a[i]小的值全部后移了一位,退出循环时就会空出一个位置来。举个例子:输入:1
2、第一次循环时,t=a[1]=3,t>a[0],所以a[0]后移一位(即:a[j+1]=a[j]
3、a[1]=a[0]),之后出现结果:1124,这时候实际上0位置是给此时的t预留的位置,内层for执行完毕后,执行:a[j+1]=t
4、第二次循环时,j=1,t=a[2]=2,t>a[1],所以a[1]后移一位:a[2]=a[1],之后结果:3114,在比较t和a[0],t小,跳出内层for,跳出时j为0,执行:a[1]=t=2,结果:3214
5、下面就不讲了,从上面可以看出,你说的那一句,至关重要,外层for每循环一次就插入一位数据,而a[j+1]=t,就是完成插入的最后一步。。
三、c语言怎么写插入音乐的程序
1、用C语言开发音乐程序,写自己喜欢或创作的音乐,使在没有乐器的情况下听到自己创作的音乐。
2、巩固文件读取和数组的有关知识。
3、学习使用PC机扬声器的两个控制函数。
自己创作乐曲,将其转换为计算机程序能够识别的电子文本格式,利用PC机扬声器的功能播放该乐曲。
编写音乐程序时,首先需要制作被演奏音乐的乐谱文件。制作乐谱文件可用不同的符号标记,只要所编制的程序易于识别即可。
下面是编制乐谱文件的一种规则:最高音在每个音的前面加“*”:高音,在每个音的前面加“h”;中音,在每个音的前面加“m”;低音,在每个音的前面加“l”。
“*”,“h”,“m”,“l”与其控制的音符构成音高,决定发声频率。音高的后面是音长,可用整数或小数输入,以控制延时,但中间必须用空格分开。乐谱文件的最前端是一个整数,表示音长基数,一般为300的倍数。乐谱文件的最末端是乐谱文件结束符“##”,以表示乐谱文件结束。
每个音的音长=音长基数*节拍数,其中,音长基数是乐谱文件的第一个字符,如上面乐谱文件为3600,每个音的音频可用一模拟频率值输入。下面是中央C及其前后4个8度中各个音符的频率值
262 296 329.7 349.2 392 440 493.9
523.3 587.3 659.3 698.5 784.0 880 987.8
sound()以指定频率打开PC机的扬声器,频率以赫兹为单位。
600 h2 4 m5 1 m6 1 m7 1 h1 1 h2 4 m5 4 m5 4 h3 4 h1 1 h2 1 h3 1 h4 1 h5 4 m5 4 m5 4 h1 4 h2 1 h1 1 m7 1 m6 1 m7 4 h1 1 m7 1 m6 1 m5 1 m4 4 m5 1 m6 1 m7 1 m5 1 m6 6 l2 1 m1 1 l7 1 l6 1 h2 4 m5 1 m6 1 m7 1 h1 1 h2 4 m5 4 m5 4 h3 4 h1 1 h2 1 h3 1 h4 1 h5 4 m5 4 m5 4 h1 4 h2 1 h1 1 m7 1 m6 1 m7 4 h1 1 m7 1 m6 1 m5 1 m6 4 m7 1 m6 1 m5 1 m4 1 m5 10##
1、制作选曲菜单,使其可以播放多首乐曲;
2、修改某些参数,改变乐曲播放速度。
void main(int argc,char*argv[])
if(argc!=2)/*命令行参数个数不正确*/
{ printf("Parameters Errors!\n");
} if((fp=fopen(argv[1],"r"))==NULL)/*文件打开失败*/
{ printf("Open file music.doc Errors!\n");
} fscanf(fp,"%d",&rate);/*读取音长基数的值*/
while(!feof(fp)&&!sign)/*文件没有结束并且数据还是乐谱*/
{ fscanf(fp,"%s%d",sound_high,&sound_long);/*得到音频,音长的数值*/
str[i][1]=rate*sound_long;/*音长=音长基数*节拍数*/
switch(sound_high[1])/*确定发声频率*/
printf("\nErrors in music.doc\n");
printf("\nErrors in music.doc\n");
printf("\nErrors in music.doc\n");
printf("\nErrors in music.doc\n");
if(sound_high[1]=='#')sign=1;
printf("\nErrors in music.doc\n");
{ sound(str[j][0]);/*按频率发出歌曲的音调*/