C语言实现音乐播放器-MCI mcisendString

Python021

C语言实现音乐播放器-MCI mcisendString,第1张

本次的实训的mp3播放器主要涉及到的内容如下:

MCI API :负责音乐的播放,暂停,继续,停止等功能

2)链表的构建

3)文件读取问题

文件存储有很多种方式,将数据写入文件时可以以空格或者回车为结束。

在读取时,不管是硬fscanf还是gets()进行读取,都要注意一点,以gets为例,gets是读到回车符号结尾,但是回车符号会被读取进去。也就是说,需要将读取到的字符串进行处理,最后一个字符要置为‘0’一定要注意这个问题。

还有一个_finddata这个结构体的问题:

此外由于在win10系统下不知道是我个人原因还是大部分人都有的的问题在编译时findnext会报错, 因为_findnext()返回类型为intptr_t而非long型,从“intptr_t”转换到“long”丢失了数据。只需要把一般写的:

long _findfirst( char *filespec, struct _finddata_t fileinfo );

返回值:

如果查找成功的话,将返回一个long型的唯一的查找用的句柄(就是一个唯一编号)。这个句柄将在_findnext函数中被使用。若失败,则返回-1。

参数:

filespec:标明文件的字符串,可支持通配符。比如: .c,则表示当前文件夹下的所有后缀为C的文件。

fileinfo :这里就是用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明,不过不用初始化,只要分配了内存空间就可以了。

函数成功后,函数会把找到的文件的信息放入这个结构体中。

int _findnext( long handle, struct _finddata_t *fileinfo )

返回值:

若成功返回0,否则返回-1。

参数:

handle:即由_findfirst函数返回回来的句柄。

fileinfo:文件信息结构体的指针。找到文件后,函数将该文件信息放入此结构体中。

int _findclose( long handle )

返回值:成功返回0,失败返回-1。

参数: handle :_findfirst函数返回回来的句柄

一下为一个简化的版本主要是文件操作:

function.h

function.c

main.c

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

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,"music1.txt")

break

}

if(menu==2)

{

strcpy(FileName,"music2.txt")

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=0i<numi++)

{

t[i]=t[i]*r

switch(h[i])

{

case 'H':k=4break

case 'M':k=2break

case 'L':k=1

}

switch(f[i])

{

case 1: f[i]=262*kbreak

case 2: f[i]=296*kbreak

case 3: f[i]=330*kbreak

case 4: f[i]=349*kbreak

case 5: f[i]=392*kbreak

case 6: f[i]=440*kbreak

case 7: f[i]=494*kbreak

}

}

}

void music(unsigned f[],unsigned t[],int num)

{

int i

for(i=0i<numi++)

{

Beep(f[i],t[i])

}

}

#include <stdio.h>

#include <windows.h>

#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main(void)

{

PlaySound("C:\\sounds\\起风了.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP)//这个路径是在我C盘下的路径,所以路径你要改成你电脑下的路径,还有只能播放wav格式的,需要播放MP3格式的要下载mply32文件

while (1)

{

printf("program is running... here\n")//这里跑你的程序,按 Ctrl-C 组合键,结束程序。

Sleep(1000)//休息1秒

}

exit(0)

}