MP3c语言源代码

合集下载

mfc编程mp3

mfc编程mp3

Init();
m_Pause.SetWindowText("暂停");
//
CString filter = "媒体文件(所有类型)|*.cda;*.mid;*.rmi;*.midi;*.asf;*.wm;*.wma; *.asx;*.wax;*.m3u;*.wvx;*.mpeg;*.mpg;*.m1v;*.mp3; *.avi;*.wmv;*.wav;*.snd;*.au;*.aif;*.aifc|";
MCIWndSeek(m_hWnd,pos); // 定位文件到pos 处
MCIWndPlay(m_hWnd); // 播放文件
MCIWndPause(m_hWnd); // 暂停
MCIWndResume(m_hWnd); // 从暂停的地方重新启动
MCIWndStop(m_hWnd); // 停止
mciSendCommand (m_wDeviceID, MCI_PLAY,
MCI_FROM, (DWORD)(LPVOID)
&PlayParms));
---- 4. 暂停
MCI_PLAY_PARMS PlayParms;
mciSendCommand (m_wDeviceID, MCI_PAUSE, 0,
{
m_Music.Close();
m_MusicList.SetCurSel(index);
CString sPath = m_MusicAry.GetAt(index);
m_Music.Open(sPath);
m_Status.SetWindowText(sPath + _T(" 正在播放..."));//在状态条中显示提示信息

单片机_音乐播放的c代码

单片机_音乐播放的c代码

单片机音乐播放的c代码#include "reg52.h"unsigned char Count;sbit _Speak =P2^3 ; //讯响器控制脚unsigned char code SONG[] ={ //祝你平安0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20, 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10, 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20, 0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20, 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20, 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10, 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80, 0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20, 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10, 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00,//路边的野华不要采0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C ,0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20 ,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20, 0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30, 0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30, 0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26 ,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20, 0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F ,0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20, 0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B ,0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20, 0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00,};void Time0_Init(){TMOD = 0x01;IE = 0x82;TH0 = 0xD8;TL0 = 0xEF; //12MZ晶振,10ms}void Time0_Int() interrupt 1{TH0 = 0xD8;TL0 = 0xEF;Count++; //长度加1}/*-------------------------------------------------功能:1MS延时子程序-------------------------------------------------*/void Delay_xMs(unsigned int x){unsigned int i,j;for( i =0;i < x;i++ ){for( j =0;j<3;j++ );}}/*-------------------------------------------------功能:歌曲播放子程序i为播放哪一段曲目-------------------------------------------------*/void Play_Song(unsigned char i){unsigned char Temp1,Temp2;unsigned int Addr;Count = 0; //中断计数器清0Addr = i * 217;while(1){Temp1 = SONG[Addr++];if ( Temp1 == 0xFF ) //休止符{TR0 = 0;Delay_xMs(100);}else if ( Temp1 == 0x00 ) //歌曲结束符{return;}else{Temp2 = SONG[Addr++];TR0 = 1;while(1){_Speak = ~_Speak;Delay_xMs(Temp1);if ( Temp2 == Count ){Count = 0;break;}}}}}/*-------------------------------------------------功能:主程序-------------------------------------------------*/void main(){Time0_Init(); //定时器0中断初始化while(1){Play_Song(0); //播放}}6回答者:小崔凡凡- 二级2009-10-16 21:47我来评论>>提问者对于答案的评价:谢谢!相关内容• 单片机播放音乐里的音乐代码是怎么得到的?有什么软件能将歌曲直接转换成16进制代码 4 2008-11-14• 给个单片机C语言编的音乐程序,能够播放音乐 6 2009-7-22• 求用c语言编写的播放背景音乐的代码 5 2009-6-12• 单片机音乐代码问题 2009-9-28• 单片机音乐代码 5 2009-5-18更多相关问题>>查看同主题问题:单片机音乐音乐播放播放代码等待您来回答∙nokia 3100c音乐播放器如何跟新∙为什么用酷我音乐盒听歌后那歌会在C:\ProgramData\mcache里面呢∙深圳龙华天龙大道珍藏版狂嗨现场dj明仔vs女mc小黎茂名细飞11分钟半时候的那音乐谁知道叫什么名字!∙夏普9020c合上盖子怎么听音乐?∙C:Documents and SettingsAdministrator「开始」菜单酷我音乐盒2010.lnk∙nokia 2600c手机可以用什么音乐播放器?∙『windows』在网页制作中,下列不是背景音乐格式的是那一个?A.tem B mp3 C wav D∙3110c播放音乐时会卡,之后会自动到下一首,怎么办?其他回答共3 条我的博客上有三首连放的,你只要加两首就行了。

C语言课程设计歌曲信息管理源代码

C语言课程设计歌曲信息管理源代码

C语言课程设计歌曲信息管理源代码#include "stdio.h"#include "string.h"#include "conio.h"#include "stdlib.h"struct music_list{char name[10];char singer[25];char ci[25];char qu[25];char zhuanji[25];char fxtime[25];char fxgongsi[25];int flag;};int count=0;const int MAX_COUNT = 100;void new_music(struct music_list musics[]);void delete_music_byname(struct music_list musics[],char* name); void search_music(struct music_list musics[],char*name);void show_all(struct music_list musics[]);int main(){ int choice;char name[10];struct music_list musics[MAX_COUNT];int i;for(i=0;i<MAX_COUNT;i++){musics[i].flag = 0;}T:do{printf("*******************************************************\n");printf("\nselect:1:new music 2:search 3:delete 4:show all 0:Exit\n");printf("*******************************************************\n");printf("please:");scanf("%d",&choice);switch(choice){case 1:new_music(musics);break;case 2:printf("Name:");scanf("%s",name);search_music(musics,name);break;case 3:printf("Name:");scanf("%s",name);delete_music_byname(musics,name);break;case 4:show_all(musics);break;case 0:break;default:choice = 0;}}while(choice !=0);printf("Thanks,Bye!\n");getch();return 0;}void new_music(struct music_list musics[]) {if(count==MAX_COUNT){printf("address list is full!\n");return;}int i,j;for(i=0;i<MAX_COUNT;i++){if(musics[i].flag == 0){j = i;break;}}printf("name:");scanf("%s",musics[j].name);printf("geshou:");scanf("%s",musics[j].singer);printf("zuoci:");scanf("%s",musics[j].ci);printf("zuoqu:");scanf("%s",musics[j].qu);printf("zhuanji:");scanf("%s",musics[j].zhuanji);printf("chubanshijian:");scanf("%s",musics[j].fxtime);printf("chubangongsi:");scanf("%s",musics[j].fxgongsi);musics[j].flag = 1;count++;}void search_music(struct music_list musics[],char*name){int i,j,flag=0;if(count==0){printf("Music list is empty!\n");return;}for(i=0;i<MAX_COUNT;i++){if(strcmp(name,musics[i].name)==0 && musics[i].flag == 1){if(flag == 0) {printf("====================================================== =\n");printf("name\t",musics[i].name);printf("singer\t",musics[i].singer);printf("ci\t",musics[i].ci);printf("qu\t",musics[i].qu);printf("zhuanji\t",musics[i].zhuanji);printf("fxtime\t",musics[i].fxtime);printf("fxgongsi\t",musics[i].fxgongsi);printf("\n==================================================== ===\n");flag=1;}printf("%s\t",musics[i].name);printf("%s\t",musics[i].singer);printf("%s\t",musics[i].ci);printf("%s\t",musics[i].qu);printf("%s\t",musics[i].zhuanji);printf("%s\t",musics[i].fxtime);printf("%s\t\n",musics[i].fxgongsi);}}if(flag!=1){printf("No such a music!");}}void show_all(struct music_list musics[]){if(count==0){printf("Music list is empty!\n");return;}int i,flag=0;;for(i=0;i<MAX_COUNT;i++){if(musics[i].flag == 1){if(flag == 0) {printf("====================================================== =\n");printf("name\t",musics[i].name);printf("singer\t",musics[i].singer);printf("ci\t",musics[i].ci);printf("qu\t",musics[i].qu);printf("zhuanji\t",musics[i].zhuanji);printf("fxtime\t",musics[i].fxtime);printf("\n==================================================== ===\n");flag=1;}printf("%s\t",musics[i].name);printf("%s\t",musics[i].singer);printf("%s\t",musics[i].ci);printf("%s\t",musics[i].qu);printf("%s\t",musics[i].zhuanji);printf("%s\t",musics[i].fxtime);printf("%s\t\n",musics[i].fxgongsi);}}}void delete_music_byname(struct music_list musics[],char* name){int i,j,flag=0;if(count==0){printf("Music list is empty!\n");return;}for(i=0;i<MAX_COUNT;i++){if(strcmp(name,musics[i].name)==0 && musics[i].flag == 1){musics[i].flag = 0;count --;if(flag == 0) {printf("The music \" %s \" was deleted.\n",musics[i].name);printf("====================================================== =\n");printf("name\t",musics[i].name);printf("singer\t",musics[i].singer);printf("ci\t",musics[i].ci);printf("qu\t",musics[i].qu);printf("zhuanji\t",musics[i].zhuanji);printf("fxtime\t",musics[i].fxtime);printf("\n==================================================== ===\n");flag=1;}printf("%s\t",musics[i].name);printf("%s\t",musics[i].singer);printf("%s\t",musics[i].ci);printf("%s\t",musics[i].qu);printf("%s\t",musics[i].zhuanji);printf("%s\t",musics[i].fxtime);printf("%s\t\n",musics[i].fxgongsi);}}if(flag!=1){printf("No such a music!");}}。

使用LAME库进行MP3解码的简单示例C代码

使用LAME库进行MP3解码的简单示例C代码

使用LAME库进行MP3解码的简单示例C代码LAME是一个开源的音频编码器和解码器库,可用于进行MP3音频文件的编码和解码。

下面是一个使用LAME库进行MP3解码的简单示例C代码:#include <stdio.h>#include <lame/lame.h>#define IN_FILENAME "input.mp3"#define OUT_FILENAME "output.pcm"int main() {FILE *mp3_file, *pcm_file;short pcm_buffer[8192 * 2]; // PCM 16-bit stereo bufferint read, write;lame_t lame;// 打开MP3文件,读取模式mp3_file = fopen(IN_FILENAME, "rb");if (!mp3_file) {printf("Failed to open MP3 file.\n");return 1;}// 创建LAME解码器lame = lame_init();lame_set_mode(lame, STEREO); // 设置为立体声解码lame_set_num_channels(lame, 2); // 设置通道数lame_set_in_samplerate(lame, 44100); // 输入采样率lame_set_brate(lame, 128); // 解码输出码率lame_set_quality(lame, 2); // 设置解码质量(0-9,0为最好)lame_init_params(lame);// 打开PCM文件,写入模式pcm_file = fopen(OUT_FILENAME, "wb");if (!pcm_file) {printf("Failed to open PCM file.\n");fclose(mp3_file);return 1;}// 循环解码MP3并写入PCM文件do {read = fread(pcm_buffer, 2 * sizeof(short), 8192, mp3_file); // 读取MP3数据write = lame_decode_buffer(lame, pcm_buffer, read, pcm_buffer, 8192 * 2); // 解码为PCM 数据fwrite(pcm_buffer, sizeof(short), write * 2, pcm_file); // 写入PCM数据} while (read != 0);// 清理和关闭文件和LAME解码器lame_close(lame);fclose(mp3_file);fclose(pcm_file);printf("MP3 decoded to PCM.\n");return 0;}在上述示例中,我们使用了LAME库的lame.h头文件来进行解码操作。

c语言编写的音乐播放器源代码)

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(){voidset(unsignedf[],charh[],unsignedt[],int r,int num);void music(unsigned f[],unsigned t[],intnum);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++;}elseflag=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]=262*k; break;case 2: f[i]=296*k; break;case 3: f[i]=330*k; break;case 4: f[i]=349*k; break;case 5: f[i]=392*k; break; case 6: f[i]=440*k; break;case 7: f[i]=494*k; break;} }}voidmusic(unsignedf[],unsignedt[],intnum){int i;for(i=0;i<num;i++){Beep(f[i],t[i]);}。

C# mp3播放器代码

C# mp3播放器代码

封装的类:using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace Musicar{class API{public const int WM_SYSCOMMAND = 0x112;public const int SC_MOVE = 0xF010;public const int HTCAPTION = 0x2;[DllImportAttribute("user32.dll")]public static extern int SendMessage(IntPtr hWnd,int Msg,int wParam,int lParam);[DllImportAttribute("user32.dll")]public static extern bool ReleaseCapture();[DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern int GetShortPathName(string lpszLongPath,string shortFile,int cchBuffer);/// <summary>/// mciSendString:用来播放多媒体文件的API指令/// 类型包括:MPEG、A VI、WA V、MP3等等/// </summary>/// <param name="lpstrCommand">要发送的命令字符串,结构:[命令][设备别名][命令参数]</param>/// <param name="lpstrReturnString">返回信息缓冲区:指定大小的字符串变量</param>/// <param name="uReturnLength">缓冲区大小:字符串变量的长度</param>/// <param name="hwndCallback">回调方式,一般设为零</param>/// <returns>函数执行成功返回零,否则返回错误代码</returns>[DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]public static extern int mciSendString(string lpstrCommand,string lpstrReturnString,int uReturnLength,int hwndCallback);}}===================分割线============================================================using System;using System.Collections.Generic;using System.Text;namespace Musicar{class MusicPro{/// <summary>/// 打开并播放音频文件/// </summary>/// <param name="strFileName">音频文件全名</param>/// <param name="flagRepeat">是否重复播放</param>public static void OpenAndPlay(string strFileName, bool flagRepeat){string strCommand = "";string buf = "";strCommand = "open \"" + strFileName + "\" alias music";buf = buf.PadLeft(128, ' ');API.mciSendString(strCommand, buf, buf.Length, 0);//打开音频文件if (flagRepeat){strCommand = "play music repeat";}else{strCommand = "play music";}API.mciSendString(strCommand, buf, buf.Length, 0);//播放音频文件}/// <summary>/// 播放音频文件/// </summary>/// <param name="flagRepeat">是否重复播放</param>public static void Play(bool flagRepeat){string strCommand = "";if (flagRepeat){strCommand = "play music repeat";}else{strCommand = "play music";}API.mciSendString(strCommand, "", 0, 0);//播放音频文件}/// <summary>/// 停止播放/// </summary>public static void Stop(){API.mciSendString("stop music", "", 0, 0);}/// <summary>/// 关闭音频文件/// </summary>public static void Close(){API.mciSendString("close music", "", 0, 0);}/// <summary>/// 暂停播放/// </summary>public static void Pause(){API.mciSendString("pause music", "", 0, 0);}/// <summary>/// 继续播放/// </summary>public static void Resume(){API.mciSendString("resume music", "", 0, 0);}/// <summary>/// 前进到下一个位置/// </summary>public static void Forward(){API.mciSendString("step music", "", 0, 0);}/// <summary>/// 前进到下一个位置/// </summary>public static void Backward(){API.mciSendString("step music reverse", "", 0, 0);}/// <summary>/// 前进或后退N个步阶/// </summary>/// <param name="n">调整频数:正数向前,负数后退</param> public static void StepN(int nStep){API.mciSendString("step music by " + nStep.ToString(), "", 0, 0); }/// <summary>/// 获取当前播放位置/// </summary>/// <returns>当前播放位置:单位-秒</returns>public static int GetCurrentPosition(){string buf = "";buf = buf.PadLeft(128, ' ');API.mciSendString("status music position", buf, buf.Length, 0);buf = buf.Trim().Replace("\0", "");if (string.IsNullOrEmpty(buf)){return 0;}else{return (int)(Convert.ToDouble(buf)) / 1000;}}/// <summary>/// 获取播放文件的总长度/// </summary>/// <returns>播放文件长度:单位-秒</returns>public static int GetLenth(){string strLen = "";strLen = strLen.PadLeft(128, ' ');API.mciSendString("status music length", strLen, strLen.Length, 0);strLen = strLen.Trim().Replace("\0", "");if (string.IsNullOrEmpty(strLen)){return 0;}else{return Convert.ToInt32(strLen) / 1000;}}/// <summary>/// 获取当前播放状态信息/// </summary>/// <returns>播放状态,如播放完毕</returns>public static string GetStatus(){string strStatus = "";strStatus=strStatus.PadLeft(128, ' ');API.mciSendString("status music mode",strStatus,strStatus.Length, 0);return strStatus.Replace("\0", "");}/// <summary>/// 设置音量大小/// </summary>/// <param name="V alume">音量大小</param>/// <returns>设置成功,返回True,否则返回False</returns>public static bool SetV olume(int V alume){bool success = false;string strCommand = string.Format("setaudio music volume to {0}", V alume);if (API.mciSendString(strCommand, "", 0, 0) == 0){success = true;return success;}/// <summary>/// 获取当前音量大小/// </summary>/// <returns>当前音量大小</returns>public static int GetV olume(){string strV olume = "";strV olume = strV olume.PadLeft(128, ' ');API.mciSendString("status music volume", strV olume, strV olume.Length, 0);int nV olume = 0;strV olume = strV olume.Trim().Replace("\0", "");if (string.IsNullOrEmpty(strV olume)){nV olume = 0;}else{nV olume = Convert.ToInt32(strV olume);}return nV olume;}/// <summary>/// 设置指定播放位置/// </summary>/// <param name="process"></param>/// <returns></returns>public static bool SetProcess(int nPosition){bool success = false;string strCommand = string.Format("seek music to {0}", nPosition);if (API.mciSendString(strCommand, "", 0, 0) == 0){success = true;}return success;}}}前面介绍了一个使用MCI控件的CD播放器程序,实际上你可以用API函数写一个CD 播放器来代替使用多媒体控件。

手把手教您用MFC做MP3音乐播放器

手把手教您用MFC做MP3音乐播放器

打开vc6.0,建立如图所示mfc工程文件选择基于对话框的确定删除所有空间,建立如图所示对话框属性如下:播放IDC_open;添加IDC_fileopen;暂停IDC_pause;删除IDC_del;停止IDC_stop;退出IDC_exit;音乐名编辑框IDC_filename;音量控制滑块IDC_SLIDER1;音量控制编辑框IDC_vol;建立类向导对应如下:在onpaint函数下添加代码void CMp3Dlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{//CDialog::OnPaint();CPaintDC dc(this);CRect rect;GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP6); /IDB_BITMAP6是你的位图地址BITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight ,SRCCOPY);}}编译运行,你就会看到背景有图片了。

MP3播放器源代码

MP3播放器源代码

MP3播放器源代码#Region#AutoIt3Wrapper_icon=HoneyTao.ico#AutoIt3Wrapper_Compression=4#AutoIt3Wrapper_Res_Description=WinXP & Win7#AutoIt3Wrapper_Res_LegalCopyright=K丶Q 製作。

#AutoIt3Wrapper_Res_Field=产品版本|1.0.0.0#AutoIt3Wrapper_Res_Field=产品名称|PeachPlayer#AutoIt3Wrapper_Res_Field=公司|K丶Q#AutoIt3Wrapper_Res_Field=内部名称|cALl Me KQ。

#AutoIt3Wrapper_Res_Fileversion=1.0.0.0#AutoIt3Wrapper_Res_Field=源文件名|PeachPlayer.exe#EndRegion#include <ButtonConstants.au3>#include <ComboConstants.au3>#Include <GuiComboBoxEx.au3>#include <GUIConstantsEx.au3>#include <ProgressConstants.au3>#include <StaticConstants.au3>#include <WindowsConstants.au3>#include "Bass.au3"#include "GUIEnhance.au3"Local $ProcessList = ProcessList(@ScriptName)If $ProcessList[0][0] > 1 ThenMsgBox(0+16,"错误","请勿多次运行本程序")ExitEndIfGlobal $Happy1 = @TempDir & "\Happy1.jpg",$Happy2 = @TempDir & "\Happy2.jpg",$Peach1 = @TempDir & "\Peach1.jpg",$Peach2 = @TempDir & "\Peach2.jpg",$BassDll = @ScriptDir & "\bass.dll",$Icon = @TempDir & "\HoneyTao.dll",$SkinDll = @ScriptDir & "\SkinCrafterDll.dll",$Skin = @ScriptDir & "\Style.skf",$Dll,$MusicHandle,$PicFileInstall("Happy1.jpg",$Happy1,1)FileInstall("Happy2.jpg",$Happy2,1)FileInstall("Peach1.jpg",$Peach1,1)FileInstall("Peach2.jpg",$Peach2,1)FileInstall("HoneyTao.dll",$Icon,1)_BASS_Startup("bass.dll")_BASS_Init(0, -1, 44100, 0, "")If @error Then Exit$Gui = GUICreate("", 500, 395, -1, -1)_SkinGUI($SkinDll,$Skin,$Gui)$Pic = GUICtrlCreatePic("", 0, 0, 500, 331)If @MON & @MDAY = "1201" ThenGUICtrlSetImage($Pic,$Happy1)ElseGUICtrlSetImage($Pic,$Peach1)EndIf$Combo = GUICtrlCreateCombo("", 10, 340, 276, 25)_GUICtrlComboBox_SetDroppedWidth($Combo, 495)File(@ScriptDir)$Progress = GUICtrlCreateProgress(10, 366, 276, 20)$Stop = GUICtrlCreateIcon($Icon, 2, 295, 340, 48, 48)GUICtrlSetTip(-1,"停止")GUICtrlSetCursor (-1, 0)$First = GUICtrlCreateIcon($Icon, 3, 345, 340, 48, 48)GUICtrlSetTip(-1,"上一张图片")GUICtrlSetCursor (-1, 0)$Play = GUICtrlCreateIcon($Icon, 1, 395, 340, 48, 48)GUICtrlSetTip(-1,"播放")GUICtrlSetCursor (-1, 0)$Second = GUICtrlCreateIcon($Icon, 4, 445, 340, 48, 48)GUICtrlSetTip(-1,"下一张图片")GUICtrlSetCursor (-1, 0)_GUIEnhanceAnimateWin($Gui,1000,$GUI_EN_ANI_FADEIN)GUISetState(@SW_SHOW)If @MON & @MDAY = "1201" Then_GUIEnhanceAnimateTitle($Gui,"桃桃,祝妳生日快乐",$GUI_EN_TITLE_DROP) Else_GUIEnhanceAnimateTitle($Gui,"PeachPlayer",$GUI_EN_TITLE_DROP)EndIfWhile 1$Msg = GUIGetMsg()Switch $MsgCase $GUI_EVENT_CLOSEQuit()Case $ComboPlayMusic()Case $StopStopMusic()Case $FirstIf @MON & @MDAY = "1201" ThenGUICtrlSetImage($Pic,$Happy2)ElseGUICtrlSetImage($Pic,$Peach2)EndIfCase $PlayPlayMusic()Case $SecondIf @MON & @MDAY = "1201" ThenGUICtrlSetImage($Pic,$Happy1)ElseGUICtrlSetImage($Pic,$Peach1)EndIfEndSwitchWEndFunc _SkinGUI($SkincrafterDll, $SkincrafterSkin, $Handle)$Dll = DllOpen($SkincrafterDll)DllCall($Dll, "int:cdecl", "InitLicenKeys", "wstr", "SKINCRAFTER", "wstr", "", "wstr", "support@", "wstr", "DEMOSKINCRAFTERLICENCE")DllCall($Dll, "int:cdecl", "InitDecoration", "int", 1)DllCall($Dll, "int:cdecl", "LoadSkinFromFile", "wstr", $SkincrafterSkin)DllCall($Dll, "int:cdecl", "DecorateAs", "int", $Handle, "int", 25)DllCall($Dll, "int:cdecl", "ApplySkin")EndFuncFunc File($SearchDir)$FFArchiveFile = FileFindFirstFile($SearchDir & "\*.*")If $FFArchiveFile = -1 Then Return -1While 1$FNArchiveFile = FileFindNextFile($FFArchiveFile)If @error = 1 ThenFileClose($FFArchiveFile)Return 0ElseIf $FNArchiveFile = "." Or $FNArchiveFile = ".." ThenContinueLoopElseIf StringInStr(FileGetAttrib($SearchDir & "\" & $FNArchiveFile),"D") ThenFile($SearchDir & "\" & $FNArchiveFile)EndIfIf StringRight($FNArchiveFile,4) = ".mp3" ThenIf $FNArchiveFile = "Happy Birthday To You.mp3" ThenGUICtrlSetData($Combo,$SearchDir & "\" & $FNArchiveFile,$SearchDir & "\" & $FNArchiveFile)ElseGUICtrlSetData($Combo,$SearchDir & "\" & $FNArchiveFile)EndIfEndIfWEndEndFunc ;==>FileFunc ProgressStatus()Local $Pos = _BASS_ChannelGetPosition($MusicHandle,$BASS_POS_BYTE),$Length =_BASS_ChannelGetLength($MusicHandle,$BASS_POS_BYTE)If ($Pos >= $Length And $Length > 0) Or _BASS_ChannelIsActive($MusicHandle) = 0 Then_BASS_ChannelStop($MusicHandle)GUICtrlSetData($Progress,0)GUICtrlSetImage($Play,$Icon,1)GUICtrlSetTip($Play,"播放")AdlibUnRegister("ProgressStatus")ElseGUICtrlSetData($Progress,Int($Pos / $Length * 100))EndIfEndFunc ;==>ProgressStatusFunc PlayMusic()Local $MusicFile = GUICtrlRead($Combo)If _BASS_ChannelIsActive($MusicHandle) = 0 Then ;当没有播放时则播放音乐$MusicHandle = _BASS_StreamCreateFile(False,$MusicFile,0,0,0)_BASS_ChannelPlay($MusicHandle,1)GUICtrlSetImage($Play,$Icon,5)GUICtrlSetTip($Play,"暂停")ElseIf _BASS_ChannelIsActive($MusicHandle) = 1 Then ;当返回状态为1,即正在播放时$InFo = _BASS_ChannelGetInfo($MusicHandle)If $InFo[7] <> $MusicFile Then ;正在播放的音乐名与所选的文件不相同的话,即当前播放新文件If _BASS_ChannelStop($MusicHandle) Then$MusicHandle = _BASS_StreamCreateFile(False,$MusicFile,0,0,0)_BASS_ChannelPlay($MusicHandle,1)GUICtrlSetImage($Play,$Icon,5)GUICtrlSetTip($Play,"暂停")EndIfElse ;此时判断为暂停_BASS_ChannelPause($MusicHandle)GUICtrlSetImage($Play,$Icon,1)GUICtrlSetTip($Play,"播放")EndIfElseIf _BASS_ChannelIsActive($MusicHandle) = 3 Then ;当返回状态为3,即暂停播放时_BASS_ChannelPlay($MusicHandle,0)GUICtrlSetImage($Play,$Icon,5)GUICtrlSetTip($Play,"暂停")EndIfAdlibRegister("ProgressStatus", 100)ProgressStatus()EndFunc ;==>PlayMusicFunc StopMusic()_BASS_ChannelStop($MusicHandle)GUICtrlSetData($Progress,0)GUICtrlSetImage($Play,$Icon,1)GUICtrlSetTip($Play,"播放")EndFunc ;==>StopMusicFunc Quit()GUISetState(@SW_HIDE)_Bass_Free()If FileExists($Happy1) = 1 Then FileDelete($Happy1) If FileExists($Happy2) = 1 Then FileDelete($Happy2) If FileExists($Peach1) = 1 Then FileDelete($Peach1) If FileExists($Peach2) = 1 Then FileDelete($Peach2) If FileExists($Icon) = 1 Then FileDelete($Icon) DllCall($Dll, "int:cdecl", "DeInitDecoration") DllCall($Dll, "int:cdecl", "RemoveSkin")DllClose($Dll)ExitEndFunc ;==>Qui。

MP3歌词lrc文件读取算法 C语言源程序

MP3歌词lrc文件读取算法 C语言源程序
凡是标签,且被冒号分隔的两部分都为非负数,则应认为是时间标签。因此,对于非标 准形式(非“[mm:ss]”)的时间标签也应能识别(如“[0:0]”)。凡是标签,且非时间标 签的,应认为是标识标签。标识名中大小写等价。
·为了向后兼容,应对未定义的新标签作忽略处理。另应对注释标签([:])后的同一行内 容作忽略处理。 应允许一行中存在多个标签,并能正确处理。应能正确处理未排序的标签。
Lrc 歌词文本中含有两类标签:
一是标识标签,其格式为“[标识名:值]”主要包含以下预定义的标签: [ar:歌手名]、[ti:歌曲名]、[al:专辑名]、[by:编辑者(指 lrc 歌词的制作人)]、[offset: 时间补偿值] (其单位是毫秒,正值表示整体提前,负值相反。这是用于总体调整显示快慢 的,但多数的 MP3 可能不会支持这种标签)。
fclose(fp);
m_bValid = TRUE;
return TRUE; }
void CLyric::UnLoad() {
m_bValid = FALSE; m_csArtist.Empty(); m_csTitle.Empty(); m_csAlbum.Empty(); m_csBy.Empty(); m_lOffset = 0;
return FALSE; }
WORD wUnicode_tag = 0; DWORD dwReadLen = 0; try {
dwReadLen = fread((void *)&wUnicode_tag, sizeof(WCHAR), 1, fp); } catch (...) {
printf("CLyric::Load: fread Exception: %s!\r\n", szFileName); fclose(fp); return FALSE; } if (dwReadLen != 1) { printf("CLyric::Load: read file %s failed!\r\n", szFileName); fclose(fp); return FALSE; } if (wUnicode_tag == 0xfeff) // unicode file { fclose(fp); fp = _tfopen(szFileName, _T("rb")); if (fp == NULL) {

用C语言编写的MP3简易播放程序

用C语言编写的MP3简易播放程序

//////////////////////////////////////////////////////////////////////////
HRESULT InitDirectShow()
{
HRESULT hr;
CoInitialize(NULL); //初始化COM
//创建各个对象
}
quit:
FreeDirectShow();
return 0;
}
printf("请输入文件名:");
scanf("%s", path);
printf("正在处理命令...\n", cmd, path);
if(FAILED(LoadMusicFile(path)))
{
printf("载入文件“%s”失败!\n", path);
}
else if(!stricmp(cmd, "s"))
Stop();
else if(!stricmp(cmd, "e"))
goto quit;
else
{
printf("无法识别的命令");
getch();
}
}
//////////////////////////////////////////////////////////////////////////
//变量定义:
IGraphBuilder* pGBuilder;
IMediaControl* pMControl;
IMediaPosition* pMPos;

单片机音乐播放___c语言程序

单片机音乐播放___c语言程序

主程序:程序中附有详尽说明#include <REG52.H>#include "SoundPlay.h"void Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}//*****************************Music******************************************** **********//挥着翅膀的女孩unsigned char code Music_Girl[]={ 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03,0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03,0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03,0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02,0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02,0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00};//同一首歌unsigned char code Music_Same[]={ 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02,0x18,0x66,0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00,0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03,0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02,0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03,0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66,0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03,0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01,0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02,0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70,0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66,0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02,0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C,0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66,0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00,0x00,0x00 };//两只蝴蝶unsigned char code Music_Two[] ={ 0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03,0x17,0x03,0x16,0x03, 0x15,0x03, 0x10,0x03, 0x15,0x03, 0x16,0x01,0x17,0x03, 0x16,0x03, 0x17,0x01, 0x16,0x03, 0x17,0x03,0x16,0x03, 0x15,0x01, 0x10,0x03, 0x15,0x03, 0x16,0x02,0x16,0x0D, 0x17,0x03, 0x16,0x03, 0x15,0x03, 0x10,0x03,0x10,0x0E, 0x15,0x04, 0x0F,0x01, 0x17,0x03, 0x19,0x03,0x19,0x01, 0x19,0x03, 0x1A,0x03, 0x19,0x03, 0x17,0x01,0x16,0x03, 0x16,0x03, 0x16,0x02, 0x16,0x0D, 0x17,0x03,0x16,0x03, 0x15,0x03, 0x10,0x03, 0x10,0x0D, 0x15,0x00,0x19,0x03, 0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03,0x1B,0x03, 0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03,0x16,0x0D, 0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03,0x1A,0x02, 0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03,0x16,0x01, 0x17,0x03, 0x19,0x03, 0x19,0x03, 0x17,0x03,0x19,0x02, 0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E,0x1B,0x04, 0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E,0x1B,0x04, 0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03,0x17,0x0D, 0x16,0x03, 0x17,0x03, 0x19,0x01, 0x19,0x03,0x19,0x03, 0x1A,0x03, 0x1F,0x03, 0x1B,0x03, 0x1B,0x03,0x1A,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x03, 0x16,0x03,0x17,0x01, 0x17,0x03, 0x17,0x03, 0x19,0x03, 0x1A,0x02,0x1A,0x02, 0x10,0x03, 0x17,0x0D, 0x16,0x03, 0x16,0x01,0x1F,0x02, 0x1B,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,0x17,0x02, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,0x17,0x16, 0x1A,0x03, 0x1A,0x03, 0x1A,0x0E, 0x1B,0x04,0x1A,0x03, 0x19,0x03, 0x17,0x03, 0x16,0x03, 0x0F,0x02,0x10,0x03, 0x15,0x00, 0x00,0x00 };//****************************************************************************** *****main(){InitialSound();while(1){Play(Music_Girl,0,3,360);Delay1ms(500);Play(Music_Same,0,3,360);Delay1ms(500);Play(Music_Two,0,3,360);Delay1ms(500);}}以下为h文件:/**************************************************************************SOUND PLAY FOR 51MCUCOPYRIGHT (c) 2005 BY JJJ.-- ALL RIGHTS RESERVED --File Name: SoundPlay.hAuthor: Jiang Jian JunCreated: 2005/5/16Modified: NORevision: 1.0******************************************************************************* //*说明表示结束(Important)音高由三位数字组成:个位是表示1~7 这七个音符十位是表示音符所在的音区:1-低音,2-中音,3-高音;百位表示这个音符是否要升半音: 0-不升,1-升半音。

C WIN32音乐播放器源代码(主要代码).cpp

C WIN32音乐播放器源代码(主要代码).cpp
//*******************************************************************************************************************
BOOL Main_Dialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
//*******************************************************************************************************************
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
M_MUSIC(hwnd,TEXT("close"),numberup);
--number;
M_UPDOWN(hwnd);
M_MUSIC(hwnd,TEXT("play"),number);
}
break;
case IDC_PAUSE:
{
//*******************************************************************************************************************// 其它情况
default:
break;
}
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>

毕业设计:C语言的应用(MP3的设计过程)

毕业设计:C语言的应用(MP3的设计过程)

MP3程序设计过程MP3(U盘)程序由两在部分组成:MP3播放功能和USB通信功能。

本部分介绍程序的整体结构。

MP3播放器部分的设计MP3播放器程序要与键盘配合起来设计。

下面是MP3部分的主程序。

printu(“Entering MP3…\n”);Flash_Reset(); // Flash复位MP3Init(); //MP3初始化KeyBoadInit(); //键盘初始化EA=1; //开中断,键盘可以开始工作NumofSong=GetMP3List(); //得到U盘中的MP3歌曲列表printuf(“Song:%x\n”,NumofSong); //输出歌曲总数信息P3_5=0; //USB灯亮,此灯亮后,可以按Play键开始播放MP3歌曲While(1){if(PlayState==PLAY) PlayMP3(&SONG[11*NowPlaying]);//如果处于播放状态,则播放当前歌曲if(NowPlaying==NumofSong) PlayState=STOP;//全部歌曲播放完了,播放器停止}在主程序时,如果处于播放状态,则调用PlayMP3程序播放歌曲,直至播放到最后一首。

在PlayMP3里面,MP3解码器一旦开始工作以后,就会一直向CPU请求数据,直至歌曲结束。

程序进入此函数以后,只有改变当前歌曲的键盘操作才会使此函数提前结束,进入下一首歌的播放。

void PlayMP3(unsigned char *SongName){int i=0,j=0;//First 1024 Byte MP3 Datam=ReadSector(SongName,Page_Buf); //从当前歌曲中读取512字节if(MP3STA1&MPFREQ) //解码器数据请求中断产生时{for(i=0;i<1024;i++) //第一次要向解码器缓存中置入1024字节{if(j==512) //当用完512字节时{m=ReadSecror(SongName,Page_Buf);//读取当前歌曲的下一个512字节j=0;}MP3DAT=Page_Buf[j++]; //向MP3解码器数据寄存器送入一个数while(!PlayState); //如果是暂停状态则等待while(ChangeSong){DateRead=0;ChangeSong=0;return;}//如果选曲时,则重新播放当前曲目while(!(MP3STA1&MPBREQ)); //等待中断再次产生}}while(1){while(MP3STA1&MPFREQ) //解码器数据请求中断产生时if(j==512){ //当用完512字节时j=0;if(m<512){NowPlaying++;return;}//如果上一次从歌曲中读出的数据不足512时,则结束本歌曲播放m=ReadSecter(SongName,Page_Buf);//读取当前歌曲的下一个512字节}MP3DAT=Page_Buf[j++]; //向MP3解码器数据寄存器送入一个数while(!PlayState); //如果是暂停状态则等待while(ChangeSong){DateRead=0;ChangeSong=0;return;}//如果选曲时,则重新播放当前曲目while(!(MP3STA1&MPBREQ)); //等待中断再次产生}}MP3播放函数的工作分两部分进行,第一部分是播放一首新的MP3歌曲时,要做一些初始化工作。

C# mp3播放器代码

C# mp3播放器代码

using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Media;using System.IO;using System.Runtime.Serialization.Formatters.Binary; using System.Threading;namespace MyMusicPlays{public partial class Form1 : Form{Thread t, d;Dictionary<int, MusicInfo> dicMusic = newDictionary<int, MusicInfo>();MusicInfo musicInfo = null;int subId = 0;DateTime openTheMusic;public Form1(){InitializeComponent();}public static string SaveMusic = @"D:\SaveMusic.db";private void button1_Click(object sender, EventArgs e){}//播放、暂停按钮private void button1_Click_1(object sender, EventArgs e){if (myMusicPlay.playState==WMPLib.WMPPlayState.wmppsUndefined ||myMusicPlay.playState== WMPLib.WMPPlayState.wmppsPaused|| myMusicPlay.playState==WMPLib.WMPPlayState.wmppsStopped){myMusicPlay.Ctlcontrols.play();btnStart.Text = "暂停(&P)";timer1.Start();}else{myMusicPlay.Ctlcontrols.pause();btnStart.Text = "播放(&P)";timer1.Stop();}}//停止按钮private void button3_Click(object sender, EventArgs e){myMusicPlay.Ctlcontrols.stop();btnStart.Text = "播放(&P)";pbMessage.Value = 0;timer1.Stop();}//上传本地音乐private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){OpenFileDialog op = new OpenFileDialog();op.Filter = "mp3音乐音频(*.mp3)|*.mp3|wma音乐音频(*.wma)|*.wma";DialogResult dr = op.ShowDialog();if (dr == DialogResult.OK){musicInfo = new MusicInfo();//获取最后一个\的位置int lastIndex = stIndexOf(@"\"); //获取文件名字string musicName =op.FileName.Substring(lastIndex + 1);musicInfo.MusicId = dicMusic.Count == 0 ? 1 : dicMusic.Count + 1;musicInfo.MusicName = musicName;musicInfo.MusicUrl = op.FileName;musicInfo.MusicTime = "00:00";fillListView(musicInfo);dicMusic.Add(musicInfo.MusicId, musicInfo); }}//填充表格的方法private void fillListView(MusicInfo mi){ListViewItem item = newListViewItem(mi.MusicId.ToString());item.SubItems.AddRange(new string[]{mi.MusicName,mi.MusicTime });lsvItems.Items.Add(item);}private void lsvItems_SelectedIndexChanged(object sender, EventArgs e){}//动态显示时间private void runTime(){while (true){try{TimeSpan span = DateTime.Now - openTheMusic;string musicTime =span.ToString().Substring(3,5);lblMusicPlayTime.Invoke(newMethodInvoker(delegate{ lblMusicPlayTime.Text = "当前进度:" + musicTime; }));}catch(Exception){return;}Thread.Sleep(1000);}}/// <summary>/// 通过线程去播放音乐/// </summary>private void run(){myMusicPlay.Ctlcontrols.stop();//控件事件委托(在线程里面失效)try{lsvItems.Invoke(new MethodInvoker(delegate { subId =int.Parse(lsvItems.SelectedItems[0].SubItems[0].Text); }) );}catch (Exception ){return;}string url = dicMusic[subId].MusicUrl;myMusicPlay.URL = url;myMusicPlay.Ctlcontrols.play();}//保存音乐--序列化文件private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){FileStream fs = new FileStream(SaveMusic, FileMode.Create);BinaryFormatter bf = new BinaryFormatter();bf.Serialize(fs, dicMusic);fs.Close();MessageBox.Show("音乐文件保存成功!","提示",MessageBoxButtons.OK,rmation);}//窗体加载时显示出保存文件信息private void Form1_Load(object sender, EventArgs e) {skinEngine1.SkinFile = "PageColor2.ssk";myMusicPlay.settings.volume = tbMessage.Value; lblMusicPlayTime.Text = "";lblShowMusicTime.Text = "";//读取loading(readMessage());}//加载时候fill表格private void loading(Dictionary<int, MusicInfo> dicMusic){foreach (MusicInfo mi in dicMusic.Values){ListViewItem item = newListViewItem(mi.MusicId.ToString());item.SubItems.AddRange(new string[]{ mi.MusicName, mi.MusicTime });lsvItems.Items.Add(item);}}//读取本地信息private Dictionary<int, MusicInfo> readMessage(){try{FileStream fs = new FileStream(SaveMusic, FileMode.Open);BinaryFormatter bf = new BinaryFormatter(); dicMusic = (Dictionary<int,MusicInfo>)bf.Deserialize(fs);fs.Close();}catch (Exception) { FileStream fs = new FileStream(SaveMusic, FileMode.Create); fs.Close(); }return dicMusic;}private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){showTheMusicTimes();}/// <summary>/// 获取歌曲长度/// </summary>private void showTheMusicTimes(){//检查状态~if (myMusicPlay.playState ==WMPLib.WMPPlayState.wmppsStopped || myMusicPlay.playState == WMPLib.WMPPlayState.wmppsUndefined|| subId == 0){return;}if (lsvItems.SelectedItems.Count <= 0) return; string thisTime =myMusicPlay.currentMedia.durationString;dicMusic[subId].MusicTime = thisTime;lsvItems.SelectedItems[0].SubItems[2].Text = thisTime;}private void button1_Click_2(object sender, EventArgs e){DateTime times =Convert.ToDateTime(myMusicPlay.currentMedia.durationStrin g);int min = times.Hour;int sco = times.Minute;int sum = min * 60 + sco;MessageBox.Show(sum.ToString());}private void timer1_Tick(object sender, EventArgs e) {if (pbMessage.Value < pbMessage.Maximum){pbMessage.Value++;}}//窗体关闭~线程终止private void Form1_FormClosing(object sender, FormClosingEventArgs e){try{d.Abort();}catch (Exception){return;}}//增加音量图片按钮private void pictureBox2_Click(object sender, EventArgs e){if (tbMessage.Value <= 95){tbMessage.Value += 5;myMusicPlay.settings.volume =tbMessage.Value;}}/// <summary>/// 滚动时候改变音量大小/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void tbMessage_Scroll(object sender, EventArgs e){myMusicPlay.settings.volume = tbMessage.Value;}//减少音量图片按钮private void pictureBox1_Click(object sender, EventArgs e){if (tbMessage.Value >= 5){tbMessage.Value += -5;myMusicPlay.settings.volume =tbMessage.Value;}}private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){Form2 f2 = new Form2();f2.Show();}private void lsvItems_DoubleClick(object sender, EventArgs e){if (lsvItems.SelectedItems.Count <= 0) return; btnStart.Enabled = true;t = new Thread(new ThreadStart(run));t.Start();pbMessage.Value = 0;//进度条工作..获取预播放曲目的时长string strTimes =lsvItems.SelectedItems[0].SubItems[2].Text;if (strTimes == "00:00"){showTheMusicTimes();strTimes =lsvItems.SelectedItems[0].SubItems[2].Text;}DateTime times = Convert.ToDateTime(strTimes); int min = times.Hour;int sco = times.Minute;pbMessage.Maximum = (min * 60 + sco);timer1.Start();lblShowMusicTime.Text = "曲目时长:" + strTimes;openTheMusic = DateTime.Now;d = new Thread(new ThreadStart(runTime));d.Start();btnStart.Text = "暂停(&P)";}private void 播放ToolStripMenuItem_Click(objectsender, EventArgs e){lsvItems_DoubleClick(sender, e);}private void 移入播放单ToolStripMenuItem_Click(objectsender, EventArgs e){if (lsvItems.SelectedItems.Count <= 0) return; }}}。

C++获取MP3文件信息

C++获取MP3文件信息

获取MP3信息C++源代码使用C++语言获取mp3歌曲的ID3V2文件头,mp3帧信息,和ID3V1文件尾信息。

功能不完全,只是读取mp3的信息,没有别的功能。

//1. MP3Info.h///////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /////////////////////// Copy right (C) 2002, Roman Nurik///////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// ///////////#ifndef __MP3INFO_H_#define __MP3INFO_H_//#include <AFXTEMPL.H>#include <VECTOR>///////////////////////////////////////////////////////////////////// /////// ID3V2.3///////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// /////// 标签头// 在文件的首部顺序记录10 个字节的ID3V2.3 的头部。

MP3源程序

MP3源程序

AT91F_PIO_SetOutput( AT91C_BASE_PIOA, VS AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, V
#define Macro_SetVS1003B_XDCS_High() S1003B_XDCS) #define Macro_SetVS1003B_XDCS_Low() VS1003B_XDCS)
** 输 入: 无
Input: NULL
** 输 出: 收到的字节
Output: the byte that be received
*******************************************************************************
*************************************/
#define Mp3SelectData() Macro_SetVS1003B_XDCS_Low() #define Mp3DeselectData() Macro_SetVS1003B_XDCS_High()
#define Macro_Set_SI_High() Macro_SetVS1003B_SDIN_High() #define Macro_Set_SI_Low() Macro_SetVS1003B_SDIN_Low() #define Macro_Set_CLK_High() Macro_SetVS1003B_SCLK_High() #define Macro_Set_CLK_Low() Macro_SetVS1003B_SCLK_Low()
#define uint8 unsigned char
#define Mp3PutInReset() Macro_SetVS1003B_XRESET_Low() #define Mp3ReleaseFromReset() Macro_SetVS1003B_XRESET_High()

VC中实现语音(声音)数据的采集(附源代码)

VC中实现语音(声音)数据的采集(附源代码)

VC中实现语音(声音)数据的采集(附源代码)vc中声音的采集是用api函数来实现的。

一、数字音频基础知识Fourier级数:任何周期的波形可以分解成多个正弦波,这些正弦波的频率都是整数倍。

级数中其他正线波的频率是基础频率的整数倍。

基础频率称为一级谐波。

PCM:pulse code modulation,脉冲编码调制,即对波形按照固定周期频率采样。

为了保证采样后数据质量,采样频率必须是样本声音最高频率的两倍,这就是Nyquist频率。

样本大小:采样后用于存储振幅级的位数,实际就是脉冲编码的阶梯数,位数越大表明精度越高,这一点学过数字逻辑电路的应该清楚。

声音强度:波形振幅的平方。

两个声音强度上的差常以分贝(db)为单位来度量,计算公式如下:20*log(A1/A2)分贝。

A1,A2为两个声音的振幅。

如果采样大小为8位,则采样的动态范围为20*log(256)分贝=48db。

如果样本大小为16位,则采样动态范围为20*log(65536)大约是96分贝,接近了人听觉极限和痛苦极限,是再线音乐的理想范围。

windows同时支持8位和16位的采样大小。

二、相关API函数,结构,消息对于录音设备来说,windows 提供了一组wave***的函数,比较重要的有以下几个:打开录音设备函数MMRESULT waveInOpen(LPHWAVEIN phwi, //输入设备句柄UINT uDeviceID, //输入设备IDLPWAVEFORMATEX pwfx, //录音格式指针DWORD dwCallback, //处理MM_WIM_***消息的回调函数或窗口句柄,线程IDDWORD dwCallbackInstance,DWORD fdwOpen //处理消息方式的符号位);为录音设备准备缓存函数MMRESULT waveInPrepareHeader( HWAVEIN hwi, LPWAVEHDR pwh, UINT bwh );给输入设备增加一个缓存MMRESULT waveInAddBuffer( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh );开始录音MMRESULT waveInStart( HWAVEIN hwi );清除缓存MMRESULT waveInUnprepareHeader( HWAVEIN hwi,LPWAVEHDR pwh, UINT cbwh);停止录音MMRESULT waveInReset( HWAVEIN hwi );关闭录音设备MMRESULT waveInClose( HWAVEIN hwi );Wave_audio数据格式typedef struct {WORD wFormatTag; //数据格式,一般为WAVE_FORMAT_PCM即脉冲编码WORD nChannels; //声道DWORD nSamplesPerSec; //采样频率DWORD nAvgBytesPerSec; //每秒数据量WORD nBlockAlign;WORD wBitsPerSample;//样本大小WORD cbSize;} WAVEFORMATEX;waveform-audio 缓存格式typedef struct {LPSTR lpData; //内存指针DWORD dwBufferLength;//长度DWORD dwBytesRecorded; //已录音的字节长度DWORD dwUser;DWORD dwFlags;DWORD dwLoops; //循环次数struct wavehdr_tag * lpNext;DWORD reserved;} WAVEHDR;相关消息MM_WIM_OPEN:打开设备时消息,在此期间我们可以进行一些初始化工作MM_WIM_DATA:当缓存已满或者停止录音时的消息,处理这个消息可以对缓存进行重新分配,实现不限长度录音MM_WIM_CLOSE:关闭录音设备时的消息。

MP3源代码

MP3源代码

#ifndef MYMP3_H#define MYMP3_H#include <QtGui>#include <fstream>#include "mywidget.h"#include "tabdialog.h"#include <iostream>#include <string>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <QTimer>#include <sys/ioctl.h>#include <linux/soundcard.h>using namespace std;class Mymp3 : public QWidget{Q_OBJECTpublic:Mymp3(QWidget *parent = 0);~Mymp3();private:tabDialog *tab;QGroupBox *groupBox;QPushButton *picBtn; //ͼƬQLabel *bottmpic;QLabel *songnameLabel; //QSlider *timeSlider; //ʱQLCDNumber *timeLed;QPushButton *lastBtn;QPushButton *playBtn;QPushButton *nextBtn;audioBtn *audiobtn;audioSlider *audioslider;QHBoxLayout *H2;int time; //ʱint cur_time; //ǰʱQTimer *timer; //ѭʱint state; //״־1Ϊ 2Ϊ0Ϊͼ״bool audio_bool; //־trueΪ falseΪint music_time(QString); //ʱpublic slots:void lastBtn_slot(); //һvoid playBtn_slot();//švoid nextBtn_slot(); //һvoid set_audio(int value); //void audioslider_show(); //ͼvoid audioslider_Hidden(); //void set_time(); //ͼʱvoid audioBtn_slot();void play_music_slot(QString);signals:void change_music(QString);};#endif // MYMP3_H#include "mymp3.h"#include <iostream>using namespace std;Mymp3::Mymp3(QWidget *parent) :QWidget(parent){setWindowTitle("QQMusic");setWindowIcon(QIcon("./image/logo.png"));setAutoFillBackground(true);QPalette mainpalette=this->palette();mainpalette.setBrush(QPalette::Window,QBrush(QPixmap("./image/backgroud.png").scaled(this->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));this->setPalette(mainpalette);QIcon icon;picBtn=new QPushButton;QPixmap picpix("./image/pic.png");picpix.scaled(QSize(80,80),Qt::IgnoreAspectRatio,Qt::SmoothTransformation);icon.addPixmap(picpix);picBtn->setIcon(icon);picBtn->setFixedSize(picpix.size());picBtn->setIconSize(QSize(80,80));picBtn->setMask(picpix.mask());songnameLabel=new QLabel("jksdfkjsadbjfsbdf");timeSlider=new QSlider(Qt::Horizontal);timeLed=new QLCDNumber();timeLed->setSegmentStyle(QLCDNumber::Flat);timeLed->setFrameShape(QFrame::NoFrame);QPalette p=timeLed->palette();p.setColor(QPalette::Normal,QPalette::WindowText,QColor(Qt::lightGray)); timeLed->setPalette(p);QHBoxLayout *H=new QHBoxLayout();H->addWidget(timeSlider);H->addWidget(timeLed);lastBtn=new QPushButton();QPixmap lastpix("./image/last.png");icon.addPixmap(lastpix);lastBtn->setIcon(icon);lastBtn->setIconSize(QSize(30,26));lastBtn->setFixedSize(lastpix.size());lastBtn->setMask(lastpix.mask());playBtn=new QPushButton();QPixmap playpix("./image/play.png");icon.addPixmap(playpix);playBtn->setIcon(icon);playBtn->setIconSize(QSize(30,26));playBtn->setFixedSize(playpix.size());playBtn->setMask(playpix.mask());nextBtn=new QPushButton();QPixmap nextpix("./image/next.png");icon.addPixmap(nextpix);nextBtn->setIcon(icon);nextBtn->setIconSize(QSize(30,26));nextBtn->setFixedSize(nextpix.size());nextBtn->setMask(nextpix.mask());audiobtn=new audioBtn();QPixmap audiopix("./image/audio.png");icon.addPixmap(audiopix);audiobtn->setIcon(icon);audiobtn->setIconSize(QSize(30,26));audiobtn->setFixedSize(audiopix.size());audiobtn->setMask(audiopix.mask());bottmpic=new QLabel(this);QPixmap bottmpix("./image/bottm.png");bottmpic->setPixmap(bottmpix);bottmpic->setGeometry(QRect(0,370,300,130));audioslider=new audioSlider(Qt::Horizontal);audioslider->setRange(0,100);audioslider->setHidden(false);H2=new QHBoxLayout();H2->addWidget(lastBtn);H2->addWidget(playBtn);H2->addWidget(nextBtn);H2->addWidget(audiobtn);H2->addWidget(audioslider);H2->setSpacing(1);QVBoxLayout *v=new QVBoxLayout();v->addWidget(songnameLabel);v->addLayout(H);v->addLayout(H2);v->setSpacing(3);tab=new tabDialog;QGridLayout *top_H=new QGridLayout();top_H->addWidget(picBtn,0,0);top_H->addLayout(v,0,1);//tab->setGeometry(QRect(10,100,280,600));top_H->addWidget(tab,1,0,1,2);setLayout(top_H);timeLed->display("00:00");set_audio(50);audio_bool=false;timer=new QTimer(this);connect(audiobtn,SIGNAL(mouseEnter()),this,SLOT(audioslider_show()));connect(audiobtn,SIGNAL(mouseLeave()),this,SLOT(audioslider_Hidden()));connect(audioslider,SIGNAL(mouseenter()),this,SLOT(audioslider_show()));connect(audioslider,SIGNAL(mouseleave()),this,SLOT(audioslider_Hidden()));connect(tab->historyMusic_widget,SIGNAL(change_music(QString)),this,SLOT(play_music_slot(Q String)));connect(tab->myMusic_widget->stack,SIGNAL(change_music(QString)),this,SLOT(play_music_slot (QString)));connect(this,SIGNAL(change_music(QString)),this,SLOT(play_music_slot(QString)));connect(timer,SIGNAL(timeout()),this,SLOT(set_time()));connect(audioslider,SIGNAL(valueChanged(int)),this,SLOT(set_audio(int)));connect(lastBtn,SIGNAL(clicked()),this,SLOT(lastBtn_slot()));connect(nextBtn,SIGNAL(clicked()),this,SLOT(nextBtn_slot()));connect(playBtn,SIGNAL(clicked()),this,SLOT(playBtn_slot()));connect(audiobtn,SIGNAL(clicked()),this,SLOT(audioBtn_slot()));system("killall -9 madplay");state=0;}Mymp3::~Mymp3(){system("killall -9 madplay");}void Mymp3::audioslider_show(){audioslider->setHidden(false);setFocusProxy(audioslider);}void Mymp3::audioslider_Hidden(){audioslider->setHidden(true);H2->addStretch();}void Mymp3::lastBtn_slot(){system("killall -9 madplay");int i=tab->myMusic_widget->stack->stack->currentIndex();cout<<"i="<<i<<endl;if(i==0){if(tab->myMusic_widget->stack->list1->currentRow()==0){tab->myMusic_widget->stack->list1->setCurrentRow(tab->myMusic_widget->stack->list1->count( )-1);emitchange_music(tab->myMusic_widget->stack->filenamelist1[tab->myMusic_widget->stack->list1-> currentRow()]);}else{tab->myMusic_widget->stack->list1->setCurrentRow(tab->myMusic_widget->stack->list1->curren tRow()-1);emitchange_music(tab->myMusic_widget->stack->filenamelist1[tab->myMusic_widget->stack->list1-> currentRow()]);}}else{if(tab->myMusic_widget->stack->list2->currentRow()==0){tab->myMusic_widget->stack->list2->setCurrentRow(tab->myMusic_widget->stack->list2->count( )-1);emitchange_music(tab->myMusic_widget->stack->filenamelist2[tab->myMusic_widget->stack->list1-> currentRow()]);}else{tab->myMusic_widget->stack->list2->setCurrentRow(tab->myMusic_widget->stack->list2->curren tRow()-1);emitchange_music(tab->myMusic_widget->stack->filenamelist2[tab->myMusic_widget->stack->list2-> currentRow()]);}}}void Mymp3::playBtn_slot(){QIcon icon;if(state==1){system("killall -STOP madplay &");QPixmap playpix("./image/stop.png");icon.addPixmap(playpix);playBtn->setIcon(playpix);timer->stop();delete timer;state=2;}else if(state==2){system("killall -CONT madplay &");QPixmap playpix("./image/play.png");icon.addPixmap(playpix);playBtn->setIcon(playpix);timer=new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(set_time()));timer->start(1000);state=1;}else if(state==0){emit change_music(tab->myMusic_widget->stack->filenamelist1[0]);tab->myMusic_widget->stack->list1->setCurrentRow(0);}}void Mymp3::play_music_slot(QString music_filename){state=1;timeLed->display("00:00");system("killall -9 madplay");int pid;delete timer;time=music_time(music_filename);timeSlider->setRange(0,time);songnameLabel->setText(music_filename.section("/",-1));cur_time=0;timer=new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(set_time()));timer->start(1000);pid=fork();if(pid==0){execlp("madplay","madplay","-v",music_filename.toLocal8Bit().data(),"&",NULL);}}void Mymp3::set_time(){QTime t(0,0,0);QTime t_t=t.addSecs(cur_time);QString str_time=t_t.toString("mm:ss");timeLed->display(str_time);timeSlider->setValue(cur_time);cur_time++;if(cur_time>time+2)nextBtn_slot();}void Mymp3::nextBtn_slot(){system("killall -9 madplay");int i=tab->myMusic_widget->stack->stack->currentIndex();if(i==0){if(tab->myMusic_widget->stack->list1->currentRow()==(tab->myMusic_widget->stack->list1->cou nt()-1)){tab->myMusic_widget->stack->list1->setCurrentRow(0);emit change_music(tab->myMusic_widget->stack->filenamelist1[0]);}else{tab->myMusic_widget->stack->list1->setCurrentRow(tab->myMusic_widget->stack->list1->curren tRow()+1);emitchange_music(tab->myMusic_widget->stack->filenamelist1[tab->myMusic_widget->stack->list1-> currentRow()]);}}else{if(tab->myMusic_widget->stack->list2->currentRow()==(tab->myMusic_widget->stack->list2->cou nt()-1)){tab->myMusic_widget->stack->list2->setCurrentRow(0);emit change_music(tab->myMusic_widget->stack->filenamelist2[0]);}else{tab->myMusic_widget->stack->list2->setCurrentRow(tab->myMusic_widget->stack->list2->curren tRow()+1);emitchange_music(tab->myMusic_widget->stack->filenamelist2[tab->myMusic_widget->stack->list2-> currentRow()]);}}}int Mymp3::music_time(QString music_filename){int time;int end_pos;int rate=0;int Frame_head;char data_Frame[4];ifstream in(music_filename.toLatin1().data(),ios::binary);in.seekg(0,ios::end);end_pos=in.tellg();in.seekg(0,ios::beg);in.read((char*)&Frame_head,(sizeof(int)));in.close();sprintf(data_Frame,"%x",Frame_head);switch(data_Frame[2]+1){case '6':rate=192;break;case '4':rate=128;break;case '8':rate=256;break;case 'a':rate=320;break;case '3':rate=96;break;case '7':rate=224;break;default:;}time=(int)(end_pos/1024*8/(rate));cout<<"size is "<<end_pos<<endl;cout<<"rate"<<rate<<endl;cout<<"time is"<<time<<endl;return time;}void Mymp3::set_audio(int value){FILE *mixer_fd;int mixer;mixer_fd=fopen("/dev/mixer","r");mixer=fileno(mixer_fd);ioctl(mixer,SOUND_MIXER_WRITE_VOLUME,&value);fclose(mixer_fd);cout<<value<<endl;}void Mymp3::audioBtn_slot(){if(audio_bool==true){set_audio(audioslider->value());audiobtn->setIcon(QIcon("./image/audio.png"));audio_bool=false;}else{set_audio(0);audiobtn->setIcon(QIcon("./image/noaudio.png"));audio_bool=true;}}#ifndef MYWIDGET_H#define MYWIDGET_H#include <QtGui>class audioBtn:public QPushButton{Q_OBJECTpublic:audioBtn(QWidget *parent=0);signals:void mouseEnter();void mouseLeave();private:void enterEvent(QEvent *);void leaveEvent(QEvent *);};class audioSlider:public QSlider{Q_OBJECTpublic:audioSlider(Qt::Orientation orientation);void enterEvent(QEvent*);void leaveEvent(QEvent *);signals:void mouseenter();void mouseleave();};#endif // MYWIDGET_H#ifndef MYWIDGET_CPP#define MYWIDGET_CPP#include "mywidget.h"audioBtn::audioBtn(QWidget *parent):QPushButton(parent) {}void audioBtn::enterEvent(QEvent *e){emit mouseEnter();void audioBtn::leaveEvent(QEvent *e){emit mouseLeave();}audioSlider::audioSlider(Qt::Orientation orientation):QSlider(orientation) {}void audioSlider::enterEvent(QEvent*){emit mouseenter();}void audioSlider::leaveEvent(QEvent *){emit mouseleave();}#endif // MYWIDGET_CPP#ifndef TABDIALOG_H#define TABDIALOG_H#include <QtGui>#include <iostream>class stack_Music:public QFrame{Q_OBJECTpublic:stack_Music(QWidget *parnet=0);QStackedWidget *stack;QListWidget *list1;QListWidget *list2;int state;QList<QString> filenamelist1;QList<QString> filenamelist2;public slots:void add_music();void del_music();void Music_item_clicked(QListWidgetItem *item);signals:void change_music(QString music_name );};class myMusic:public QWidget{public:myMusic(QWidget *parent=0);QSplitter *splitter_myMusic;QPushButton *add;QPushButton *del;stack_Music *stack;};class historyMusic:public QWidget{Q_OBJECTpublic:historyMusic(QWidget *parent=0);QListWidget *musicList;QList<QString> filenamelist;signals:void change_music(QString);public slots:void add_music_history(QString);void musicList_clicked(QListWidgetItem*);};class tabDialog : public QWidget{Q_OBJECTpublic:tabDialog(QWidget *parent = 0);QTabWidget *tabWidget;historyMusic *historyMusic_widget;myMusic *myMusic_widget;signals:};#endif // TABDIALOG_H#include "tabdialog.h"historyMusic::historyMusic(QWidget *parent):QWidget(parent){musicList=new QListWidget(this);musicList->setMinimumSize(QSize(275,255));connect(musicList,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(musicList_clicked(QL istWidgetItem*)));}void historyMusic::add_music_history(QString str){musicList->addItem(str.section("/",-1));filenamelist.append(str);}void historyMusic::musicList_clicked(QListWidgetItem* item){int i=0;while(item->text()!=filenamelist[i].section("/",-1))i++;emit change_music(filenamelist[i]);}myMusic::myMusic(QWidget *parent):QWidget(parent){resize(280,250);splitter_myMusic=new QSplitter(Qt::Horizontal,0);splitter_myMusic->setOpaqueResize(false);splitter_myMusic->setHandleWidth(1);splitter_myMusic->setStretchFactor(0,0);splitter_myMusic->setMaximumWidth(280);QListWidget *myMusic_list=new QListWidget(splitter_myMusic);myMusic_list->setMaximumSize(50,230);myMusic_list->insertItem(0,"my love");myMusic_list->insertItem(1,"ofen");stack=new stack_Music(splitter_myMusic);connect(myMusic_list,SIGNAL(currentRowChanged(int)),stack->stack,SLOT(setCurrentIndex(int)));QIcon icon;add=new QPushButton();QPixmap addpix("./image/add.png");icon.addPixmap(addpix);add->setIcon(icon);add->setIconSize(QSize(25,25));add->setFixedSize(addpix.size());add->setMask(addpix.mask());del=new QPushButton();QPixmap delpix("./image/delete.png");icon.addPixmap(delpix);del->setIcon(icon);del->setIconSize(QSize(25,25));del->setFixedSize(delpix.size());del->setMask(delpix.mask());connect(add,SIGNAL(clicked()),stack,SLOT(add_music()));connect(del,SIGNAL(clicked()),stack,SLOT(del_music()));QHBoxLayout *h=new QHBoxLayout;h->addWidget(add);h->addWidget(del);h->addStretch();QVBoxLayout *v=new QVBoxLayout;v->addWidget(splitter_myMusic);v->addLayout(h);setLayout(v);}tabDialog::tabDialog(QWidget *parent) :QWidget(parent){tabWidget=new QTabWidget(this);historyMusic_widget=new historyMusic;myMusic_widget=new myMusic;tabWidget->addTab(myMusic_widget,"myMusic");tabWidget->addTab(historyMusic_widget,"HistoryMusic");connect(myMusic_widget->stack,SIGNAL(change_music(QString)),historyMusic_widget,SLOT(add _music_history(QString)));}stack_Music::stack_Music(QWidget *parent):QFrame(parent){setMaximumWidth(210);stack=new QStackedWidget(this);list1=new QListWidget;list1->setMaximumSize(195,200);list2=new QListWidget;list1->addItem("123.mp3");list1->addItem("1.mp3");list1->addItem("2.mp3");filenamelist1.append("/music/123.mp3");filenamelist1.append("/music/1.mp3");filenamelist1.append("/music/2.mp3");list2->setMaximumSize(195,200);stack->addWidget(list1);stack->addWidget(list2);/* add=new QPushButton;add->setIcon(QIcon("./image/add.png"));del=new QPushButton;del->setIcon(QIcon("./image/delete.png"));*//* QHBoxLayout *h=new QHBoxLayout();h->addStretch();h->addWidget(add);h->addWidget(del);*/QVBoxLayout *v=new QVBoxLayout(this);v->addWidget(stack);//v->addLayout(h);connect(list1,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(Music_item_clicked(QList WidgetItem*)));connect(list2,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(Music_item_clicked(QList WidgetItem*)));}void stack_Music::add_music(){QString filename;state=stack->currentIndex();filename=QFileDialog::getOpenFileName(this,"add Music","/","mp3 file (*.mp3)");if(stack->currentIndex()==0){filenamelist1.append(filename);list1->addItem(filename.section("/",-1));}if(stack->currentIndex()==1){filenamelist2.append(filename);list2->addItem(filename.section("/",-1));}}void stack_Music::del_music(){if(stack->currentIndex()==0){QListWidgetItem *item=list1->takeItem(list1->currentRow());filenamelist1.removeAt(list1->currentRow());delete item;}if(stack->currentIndex()==1){QListWidgetItem *item=list2->takeItem(list2->currentRow());filenamelist2.removeAt(list2->currentRow());delete item;}}void stack_Music::Music_item_clicked(QListWidgetItem *item){int i=0;if(stack->currentIndex()==0){while(item->text()!=filenamelist1[i].section("/",-1)){i++;}emit change_music(filenamelist1[i]);}if(stack->currentIndex()==1){i=0;while(item->text()!=filenamelist2[i].section("/",-1))i++;emit change_music(filenamelist2[i]);}}。

播放MP3的类(C#)

播放MP3的类(C#)

播放MP3的类(C#)1. 具体源码如下:<转载>2.3. ⼀、使⽤API函数mciSendString构成的媒体播放类。

4.5. 程序代码6.7. using System;8. using System.Runtime.InteropServices;9. using System.Text;10. using System.IO ;11. namespace clsMCIPlay12. {13. /// <SUMMARY>14. /// clsMci 的摘要说明。

15. /// </SUMMARY>16. public class clsMCI17. {18. public clsMCI()19. {20. //21. // TODO: 在此处添加构造函数逻辑22. //23. }24.25. //定义API函数使⽤的字符串变量26. [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260)]27. private string Name = "" ;28. [MarshalAs(UnmanagedType.ByValTStr,SizeConst=128)]29. private string durLength = "" ;30. [MarshalAs(UnmanagedType.LPTStr,SizeConst=128)]31. private string TemStr ="";32. int ilong;33. //定义播放状态枚举变量34. public enum State35. {36. mPlaying = 1,37. mPuase = 2,38. mStop = 339. };40. //结构变量41. public struct structMCI42. {43. public bool bMut;44. public int iDur;45. public int iPos;46. public int iVol;47. public int iBal;48. public string iName;49. public State state;50. };51.52. public structMCI mc =new structMCI() ;53.54. //取得播放⽂件属性55. public string FileName56. {57. get58. {59. return mc.iName;60. }61. set62. {63. //ASCIIEncoding asc = new ASCIIEncoding();64. try65. {66. TemStr ="";67. TemStr = TemStr.PadLeft(127,Convert.ToChar(" "));68. Name = Name.PadLeft(260,Convert.ToChar(" ")) ;69. mc.iName = value;70. ilong = APIClass.GetShortPathName(mc.iName,Name, Name.Length);71. Name = GetCurrPath(Name);72. //Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";73. Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";74. ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length , 0);75. ilong = APIClass.mciSendString( Name, TemStr, TemStr.Length, 0);76. ilong = APIClass.mciSendString("set media time format milliseconds", TemStr, TemStr.Length , 0);77. mc.state = State.mStop;78. }79. catch80. {81. MessageBox.Show("出错错误!");82. }83. }84. }85. //播放86. public void play()87. {88. TemStr = "";89. TemStr = TemStr.PadLeft(127,Convert.ToChar(" "));90. APIClass.mciSendString("play media", TemStr, TemStr.Length , 0);91. mc.state = State.mPlaying ;92. }93. //停⽌94. public void StopT()95. {96. TemStr = "";97. TemStr = TemStr.PadLeft(128,Convert.ToChar(" "));98. ilong = APIClass.mciSendString("close media", TemStr, 128, 0);99. ilong = APIClass.mciSendString("close all", TemStr, 128, 0);100. mc.state = State.mStop ;101. }102.103. public void Puase()104. {105. TemStr = "";106. TemStr = TemStr.PadLeft(128,Convert.ToChar(" "));107. ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0);108. mc.state = State.mPuase ;109. }110. private string GetCurrPath(string name)111. {112. if(name.Length <1) return "";113. name = name.Trim();114. name = name.Substring(0,name.Length-1);115. return name;116. }117. //总时间118. public int Duration119. {120. get121. {122. durLength = "";123. durLength = durLength.PadLeft(128,Convert.ToChar(" ")) ;124. APIClass.mciSendString("status media length", durLength, durLength.Length, 0);125. durLength = durLength.Trim();126. if(durLength == "") return 0;127. return (int)(Convert.ToDouble(durLength) / 1000f);128. }129. }130.131. //当前时间132. public int CurrentPosition133. {134. get135. {136. durLength = "";137. durLength = durLength.PadLeft(128,Convert.ToChar(" ")) ;138. APIClass.mciSendString("status media position", durLength, durLength.Length, 0); 139. mc.iPos = (int)(Convert.ToDouble(durLength) / 1000f);140. return mc.iPos;141. }142. }143. }144.145. public class APIClass146. {147. [DllImport("kernel32.dll", CharSet = CharSet.Auto)]148. public static extern int GetShortPathName (149. string lpszLongPath,150. string shortFile,151. int cchBuffer152. );153.154. [DllImport("winmm.dll", EntryPoint="mciSendString", CharSet = CharSet.Auto)]155. public static extern int mciSendString (156. string lpstrCommand,157. string lpstrReturnString,158. int uReturnLength,159. int hwndCallback160. );161. }162. }。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
static HANDLE hSlider;
static MCI_PLAY_PARMS mciPlay;
static MCI_OPEN_PARMS mciOpen;
static MCI_DGV_SETAUDIO_PARMS mciSetAudioPara;
memset(FileName, 0, sizeof(FileName) );
FileNames.hInstance = NULL ;
FileNames.lpstrFilter = szFilter ;
FileNames.lpstrCustomFilter = NULL ;
FileNames.nMaxCustFilter = 0 ;
}
c[7+i+j]=a[7];
c[8+i+j]=a[8];
memcpy(szFilter, c,100);
FileNames.lStructSize = sizeof (OPENFILENAME) ;
FileNames.hwndOwner = hwnd ;
FileNames.nFilterIndex = 0 ;
FileNames.lpstrFile = szFileName ;
FileNames.nMaxFile = MAX_PATH ;
FileNames.lpstrFileTitle = szTitleName ;
return 0;
}
mciSetAudioPara.dwValue = iPosition*10;
mciSendCommand(mciOpen.wDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM,(DWORD)(LPVOID)&mciSetAudioPara);
return 0;
default:return 0;
}
return 0;
case WM_COMMAND:
switch(LOWORD(wParam) )
{
case IDB_SCAN:
_GetFileName(Fiபைடு நூலகம்eName, hwnd, "mp3");//打开文件
FileNames.nFileOffset = 0 ;
FileNames.nFileExtension = 0 ;
FileNames.lpstrDefExt = NULL;
FileNames.lCustData = 0 ;
mciSendCommand(mciOpen.wDeviceID, MCI_PAUSE, MCI_NOTIFY, (DWORD)&mciPlay);
return 0;
default:return 0;
}
return 0;
default:return 0;
}
{//该函数实现“打开文件名填充在FileName数组中, char *lei为需要打开的文件类型,如:mp3, 则传入"mp3"
int i;
int j;
int len;
char c[100]={0};
char a[]="(*.)\0*.\0\0";
OPENFILENAME FileNames;
mciSetAudioPara.dwValue = 200;
mciSetAudioPara.dwItem = MCI_DGV_SETAUDIO_VOLUME;
return 0;
//音量调节的核心代码
case WM_HSCROLL:
switch(LOWORD(wParam) )
GetDlgItemText(hwnd, IDC_EDIT, mciOpen.lpstrElementName, 250);
mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
mciSendCommand(mciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD)&mciPlay);
switch(message)
{
case WM_CLOSE:
EndDialog( hwnd, 0);
return 0;
case WM_INITDIALOG:
hSlider = GetDlgItem(hwnd, IDC_SLIDER1);
SendMessage(hSlider, TBM_SETPOS, TRUE, 20);
c[2]=a[2];
for(i=0;i<len;i++)
{
c[3+i]=lei[i];
}
c[3+i]=a[3];
c[4+i]=a[4];
c[5+i]=a[5];
c[6+i]=a[6];
for(j=0;j<len;j++)
{
c[7+i+j]=lei[j];
}
LONG WINAPI
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
InitCommonControls();
DialogBoxParam(hInstance, IDD_DIALOG1, NULL, DlgProc,NULL);
SetDlgItemText(hwnd, IDC_EDIT, FileName);
SetFocus(GetDlgItem(hwnd, IDB_PLAY) );
//开始播放
mciOpen.lpstrElementName=(char *)malloc(250*sizeof(char));
{
if(szFileName[i]=='\\')
{
FileName[j++] = szFileName[i];
FileName[j]='\\';
}
else
FileName[j]=szFileName[i];
}
FileName[j] = 0;
return 0;
//从暂停中恢复播放
case IDB_PLAY:
mciSendCommand(mciOpen.wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD)&mciPlay);
return 0;
//暂停
case IDB_PAUSE:
static char szFileName[MAX_PATH];
static char szTitleName [MAX_PATH] ;
static TCHAR szFilter[100] = {0};
len = strlen(lei);
c[0]=a[0];
c[1]=a[1];
FileNames.lpfnHook = NULL ;
FileNames.lpTemplateName = NULL ;
GetOpenFileName(&FileNames);
for(i=0,j=0; szFileName[i]; i++,j++)
FileNames.nMaxFileTitle = MAX_PATH ;
FileNames.lpstrInitialDir = NULL ;
FileNames.lpstrTitle = NULL ;
FileNames.Flags = 0 ;
}
LONG CALLBACK
DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static char FileName[250];
static char buffer[100];
static int iPosition;
{
case SB_THUMBPOSITION:
case SB_PAGERIGHT:
case SB_PAGELEFT:
iPosition = SendMessage(hSlider, TBM_GETPOS, 0, 0);
mciSetAudioPara.dwItem = MCI_DGV_SETAUDIO_VOLUME;
#include<windows.h>
#include<mmsystem.h>
#include<digitalv.h>
#include<commctrl.h>
#include<stdio.h>
#include "resource.h"
int _GetFileName(TCHAR *FileName, HANDLE hwnd,char *lei)
//设置初始音量
mciSendCommand(mciOpen.wDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM,(DWORD)(LPVOID)&mciSetAudioPara);
return 0;
相关文档
最新文档