如何用CC++编写一个音乐播放器? 不需要回答代码,能说说思路就行。

如何用CC++编写一个音乐播放器? 不需要回答代码,能说说思路就行。,第1张

我来说说我的思路:

读取需要播放文件

判断文件的类型 使用对应的解码函数(可以自己写 也可以调用的别人的库)(因为类型都有不同的格式)

装载文件到内存 利用声卡驱动程序(或是对应的发声函数)来播放

假设现在是在windows平台

您就可以利用 PlaySound函数来播放音乐 不过需要连接winmm.lib库而且需要包含头文件 mmsystem.h

好,现在我再举一个例子:(假设还是在windows平台)(这里利用了Beep函数来播放简单声音)

#include <stdio.h>

#include <windows.h>

#include <conio.h>

int main()

{

char filename[1024]

FILE* fp

int a = 0,b = 0

printf("您需要播放什么文件:")

gets(filename)

fp = fopen(filename,"r")* 读取文件到内存 */

while(!ferror(fp) &&fscanf(fp,"Beep(%d,%d)\n",&a,&b) == 2)/* 读取文件到内存 (按该文件制定的播放格式来播放)*/

{

Beep(a,b)/* 发声 */

}

fclose(fp)

fp = 0

puts("播放完毕!")

getch()

return 0

}

这个程序就是按我刚刚说的步骤来做的

要播放的文件使用了我自己制定的音乐格式(呵呵 只是为了给你说清楚)(真正的音乐格式其实是2进制格式的 而不是这里的文本格式)(格式是这样的:

Beep(频率,播放时间) )

#include <dos.h>

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>

#include <conio.h>

void main()

{

void set(int *set1,int *set2,char *f,char *n,int *t,int rate,int num)

void music(int *set1,int *set2,int num)

int flag=0

FILE *f1

int t

int rate

char in[3]

int i

int n

char *frequency

char *note

int *time

int *set1

int *set2

int menu

int FileName[30]

while(1)

{

f1=NULL

flag=0

frequency=NULL

note=NULL

time=NULL

set1=NULL

set2=NULL

i=n=0

printf("1 播放程序自带的音乐music1\n")

printf("2 播放程序自带的音乐music2\n")

printf("3 通过输入文件名进行音乐的播放\n")

printf("4 退出\n")

while(1)

{

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(1)

}

printf("\n该文件的音乐编码如下:\n")

/*-------------------------------------*/

if((f1=fopen(FileName,"r"))==NULL)

{

printf("不能打开文件!\n")

exit(1)

}

/*-------------------------------------*/

fscanf(f1,"%d",&rate)

frequency=(char *)malloc(sizeof(char))

note=(char *)malloc(sizeof(char))

time=(int *)malloc(sizeof(int))

while(!feof(f1)&&flag!=1)

{

fscanf(f1,"%s%d",in,&t)

if(t!=-1)

{

printf("%s %d ",in,t)

frequency[i]=in[0]

note[i]=in[1]

time[i]=t

i++

n++

frequency=(char *)realloc(frequency,(i+1)*sizeof(char))

note=(char *)realloc(note,(i+1)*sizeof(char))

time=(int *)realloc(time,(i+1)*sizeof(int))

}

else

flag=1

}

fclose(f1)

for(i=0i<ni++)

{

switch(frequency[i])

{

case 'h':

switch(note[i])

{

case '1':

note[i]=523

time[i]=time[i]*rate

break

case '2':

note[i]=587

time[i]=time[i]*rate

break

case '3':

note[i]=659

time[i]=time[i]*rate

break

case '4':

note[i]=698

time[i]=time[i]*rate

break

case '5':

note[i]=784

time[i]=time[i]*rate

break

case '6':

note[i]=880

time[i]=time[i]*rate

break

case '7':

note[i]=988

time[i]=time[i]*rate

break

}

break

case 'm':

switch(note[i])

{

case '1':

note[i]=262

time[i]=time[i]*rate

break

case '2':

note[i]=296

time[i]=time[i]*rate

break

case '3':

note[i]=330

time[i]=time[i]*rate

break

case '4':

note[i]=349

time[i]=time[i]*rate

break

case '5':

note[i]=392

time[i]=time[i]*rate

break

case '6':

note[i]=440

time[i]=time[i]*rate

break

case '7':

note[i]=494

time[i]=time[i]*rate

break

}

break

case 'l':

switch(note[i])

{

case '1':

note[i]=131

time[i]=time[i]*rate

break

case '2':

note[i]=147

time[i]=time[i]*rate

break

case '3':

note[i]=165

time[i]=time[i]*rate

break

case '4':

note[i]=175

time[i]=time[i]*rate

break

case '5':

note[i]=196

time[i]=time[i]*rate

break

case '6':

note[i]=220

time[i]=time[i]*rate

break

case '7':

note[i]=247

time[i]=time[i]*rate

break

}

break

}

for(i=0i<ni++)

{

sound(note[i])

delay(time[i])

nosound()

}

free(frequency)

free(note)

free(time)

free(set1)

free(set2)

putchar('\n')

}

}

}


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

原文地址: http://outofmemory.cn/bake/11931180.html

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

发表评论

登录后才能评论

评论列表(0条)

保存