c语言播放器
1. 单片机c语言设计音乐播放器节拍和音符频率怎么计算
将51单片机的P1.2口连接到蜂鸣器的一个管脚上,另外一个管脚接地。若声音小,则添加一个三级管放大电路或直接串一个UL2003
/*------------------------------------------------*/
includelt;reg52.h; //包含头文件,一般情况不需要改动?
//头文件包含特殊功能寄存器的定义
/*------------------------------------------------
硬件端口定义
------------------------------------------------*/
sbit SPK=P1^2; //定义音乐输出端口
unsigned char Timer0_H,Timer0_L,Time;
//世上只有妈妈好数据表
code unsigned char MUSIC[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
};
// 音阶频率表 定时器高八位
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音阶频率表 定时器低八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
节拍延时函数
各调1/4节拍时间:
调4/4 125ms
调2/4 250ms
调3/4 187ms
------------------------------------------------*/
void delay(unsigned char t)
{
unsigned char i;
for(i=0;ilt;t;i++)
DelayMs(250);
TR0=0;
}
/*------------------------------------------------
定时器0中断
------------------------------------------------*/
void TIM0_ISR() interrupt 1
{
TR0=0;
SPK=!SPK;
TH0=Timer0_H;
TL0=Timer0_L;
TR0=1;
}
/*------------------------------------------------
歌曲处理函数
------------------------------------------------*/
void Song()
{
TH0=Timer0_H;//赋值定时器时间,决定频率
TL0=Timer0_L;
TR0=1; //打开定时器
delay(Time); //延时所需要的节拍
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{
unsigned char k,i;
TMOD=0x01; //置定时器0工作方式1
EA=1; //打开全局中断
ET0=1; //打开定时0中断
while(1)
{
i=0;
while(ilt;100)
{ //音乐数组长度 ,唱完从头再来
k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据
Timer0_H=FREQH[k];
Timer0_L=FREQL[k];
Time=MUSIC[i+2]; //节拍时长
i=i+3;
Song();
}
}
}
2. C语言实现音乐播放器-MCI mcisendString
本次的实训的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
3. 如何用C语言编写一个视频播放器
视频播放器是一种解码器。
解码器是对已编码的数字视频进行还原解码操作的程序(视频播放器)或设备。比如系统安装了real编码器那就能将其他格式文件转换成rm或rmvb格式,如果安装了real解码器那就能播放rm或rmvb格式文件。
这已经不是简单C语言能够编写出来的,它的核心是解码编码的算法。
1,如果你只是想用某些功能,不要自己编了。找一个吧。
2,非要自己编的话,要站在巨人的肩膀上。很多种编码都有开源的解码器了。可以利用他们。或者利用开源的软件,在人家基础上开发。
3,如果你认为你有希望改进压缩解压算法,得到更好的效果,更省地方,更有效的解压算法。那首先要做的是了解各种编码的压缩解压算法。创造一种更好的算法。
4. 如何用C语言编写一个简单的播放器
首先,要简单的界面,那么要选择一个界面,如WIN API、或QT,等
然后是播放的方式,可以命令行,有从LINUX移植来的播放器,可以通过命令行控制,,,,,也可以使用ffmpeg这样的命令行。。。。。调用接口的,稍复杂,ffmpeg也可以使用接口开发支持各种文件格式的播放器
~~~~~
5. 用C语言编写音乐播放器的代码
vc6.0下编译可以的
#include <windows.h>
#include <mmsystem.h>
#pragma comment (lib, "winmm.lib")
#define ID_PLAY 1000
#define ID_STOP 1001
#define ID_EXIT 1002
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
TCHAR clsName[] = TEXT ("clsMusicPlayer");
TCHAR title[] = TEXT ("Music Player");
WNDCLASS wc;
HWND hWnd;
MSG msg;
int cxScreen;
int cyScreen;
int winX;
int winY;
int winWidth;
int winHeight;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
wc.hCursor = LoadCursor (hInstance, IDC_ARROW);
wc.hIcon = LoadIcon (hInstance, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = clsName;
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
if ( !RegisterClass (&wc) )
{
MessageBox (NULL, TEXT ("RegisterClass Error"), TEXT ("ERROR"), MB_OK | MB_ICONINFORMATION);
return -1;
}
cxScreen = GetSystemMetrics (SM_CXSCREEN);
cyScreen = GetSystemMetrics (SM_CYSCREEN);
winWidth = cxScreen / 4;
winHeight = cyScreen / 3;
winX = (cxScreen - winWidth) / 2;
winY = (cyScreen - winHeight) / 2;
hWnd = CreateWindow (
clsName, title,
WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX,
winX, winY, winWidth, 100,
NULL, NULL, hInstance, NULL);
if ( !hWnd )
{
MessageBox (NULL, TEXT ("CreateWindow Error"), TEXT ("ERROR"), MB_OK | MB_ICONINFORMATION);
return -2;
}
ShowWindow (hWnd, SW_SHOW);
UpdateWindow (hWnd);
while ( GetMessage (&msg, NULL, 0, 0) > 0 )
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
int PlayMusic ()
{
HANDLE hFind;
WIN32_FIND_DATA findFileData;
static TCHAR szPath[1024] = TEXT (".\\*.wav");
hFind = FindFirstFile (szPath, &findFileData);
if ( hFind != INVALID_HANDLE_VALUE )
{
//MessageBox (NULL, findFileData.cFileName, "", 0);
PlaySound (findFileData.cFileName, NULL, SND_FILENAME | SND_ASYNC);
while ( FindNextFile (hFind, &findFileData) )
{
//MessageBox (NULL, findFileData.cFileName, "", 0);
PlaySound (findFileData.cFileName, NULL, SND_FILENAME | SND_ASYNC);
}
}
else
{
MessageBox (NULL, "没找到文件", "", 0);
}
return 1;
}
LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDc;
PAINTSTRUCT ps;
HINSTANCE hInst;
RECT rect;
switch ( message )
{
case WM_CREATE:
{
GetClientRect (hWnd, &rect);
hInst = ((LPCREATESTRUCT)lParam)->hInstance;
CreateWindow (
"button",
TEXT ("播放"),
BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
rect.right / 10, rect.bottom / 10, 40, 25, hWnd, (HMENU)ID_PLAY, hInst, NULL);
CreateWindow (
"button",
TEXT ("停止"),
BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
rect.right / 10 + 50, rect.bottom / 10, 40, 25, hWnd, (HMENU)ID_STOP, hInst, NULL);
CreateWindow (
"button",
TEXT ("退出"),
BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
rect.right / 10 + 100, rect.bottom / 10, 40, 25, hWnd, (HMENU)ID_EXIT, hInst, NULL);
}
break;
case WM_COMMAND:
{
switch ( HIWORD (wParam) )
{
case BN_CLICKED:
{
switch ( LOWORD (wParam) )
{
case ID_PLAY:
{
PlayMusic ();
//PlaySound (TEXT ("D:\\音频文件\\1.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
}
break;
case ID_STOP:
{
PlaySound (NULL, NULL, SND_FILENAME);
}
break;
case ID_EXIT:
{
SendMessage (hWnd, WM_CLOSE, 0, 0);
}
break;
}
}
break;
}
}
break;
case WM_PAINT:
{
hDc = BeginPaint (hWnd, &ps);
EndPaint (hWnd, &ps);
}
break;
case WM_CLOSE:
{
PostQuitMessage (0);
}
break;
case WM_DESTROY:
{
DestroyWindow (hWnd);
}
break;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
}
return 0;
}
6. C语言音乐播放器的问题
额 我用的mciSendCommand ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;打开设备
;lpFileName-当前打开的音频文件路径
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Open proc lpFileName:DWORD
.if stMciOpen.wDeviceID
invoke _Close
.endif
;初始化结构
mov stMciOpen.lpstrDeviceType,L("MPEGVideo")
mov eax,lpFileName
mov stMciOpen.lpstrElementName,eax
invoke mciSendCommand,0,MCI_OPEN,MCI_OPEN_ELEMENT or MCI_OPEN_TYPE,addr stMciOpen
;如果打开成功-返回0否则是其他值
.if eax == 0
mov eax,TRUE
.else
mov eax,FALSE
.endif
ret_Open endp
7. 用C语言怎么编写音乐播放器
一.在程序中直接播放声音文件
在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文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。
二.将声音文件加入到程序中
在VC++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无.W***文件的声音播放。要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件。
具体步骤入下:
1.获得包含资源的模块句柄:
HMODULE hmod=AfxGetResourceHandle();
2.检索资源块信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_W***E1),_T("W***E"));
3. 装载资源数据并加锁:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);
4.播放声音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.释放资源句柄:
FreeResource(hGlobalMem);
8. C语言播放器
声明一下,纯属抄袭,并非原创,善用网络
#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=0;i<n;i++)
{
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=0;i<n;i++)
{
sound(note[i]);
delay(time[i]);
nosound();
}
free(frequency);
free(note);
free(time);
free(set1);
free(set2);
putchar('\n');
}
}
}
9. 谁会用c语言编一个“音乐播放器”。。。要涉及‘编码、数组、函数、文件’等知识。。。十万火急,
#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=0;i<n;i++)
{
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=0;i<n;i++)
{
sound(note[i]);
delay(time[i]);
nosound();
}
free(frequency);
free(note);
free(time);
free(set1);
free(set2);
putchar('\n');
}
}
}