用C语言制作播放器
C#开发多媒体播放器

第一章绪论1.1 为什么使用C#在学校学习过C++和JAVA,而这次毕业设计我却选用了C#。
我的理由是C#简单而强大,而.net2003操作又非常方便。
2001年微软发布了.NET平台和C#语言。
做为一种可与JAVA相媲美的新一代编程程语言,C#给人们带来了太多惊喜。
诸如C#本身依托在强大的.NET Framework平台上、具有同C++一样灵活的代码控制能力、更强的面向对象特性等等新特性,而对于我这个刚刚接触C#的新手而言,最重要的还是简洁的语法和快速应用程序开发(Rapid Application Development RAD)的设计思想,使我快速的入门,并感到使用C#编写程序真的是so easy !1.2 背景我所从事的职业是测绘技术工作,平时对计算机多媒体应用较感性趣,常非常想自己亲手编写一个媒体播放器,所以这次毕业设计我的选题是编写一个简易的媒体播放器。
在Windows平台上编写流媒体应用程序的通常使用Directshow技术。
DirectShow技术是DirectX推出的建立在DirectDraw和DirectSound组件基础之上的多媒体应用程序开发工具包,它提供对多媒体数据流的高质量捕获和回放,代表着未来多媒体应用程序开发的方向。
本来C#是不直接支持Directshow技术的,但最近有人使用.net平台重写了Directshow运行时库,在.net环境中引用这个库,就可以和使用VC++开发Directshow一样,不同之处是一些接口的名称结构的差别。
就这样,我才得以实现用C#来编写这个媒体播放器,名称叫做”Octupus Player 章鱼播放器”,叫它做章鱼是希望它像章鱼一样八面玲珑,尽管它到现在还简单的可怜。
第二章开发环境和主要技术介绍2.1选用工具简介Visual C#.NET ,Microsoft公司推出了“ 下一代互联网软件和服务战略”,使.NET利用以互联网为基础的分布式计算和通信激增的特点,通过先进的软件构架,利用网络协议和格式,来协调众多的智能设备和网站。
C语言实现音响系统代码

C语言实现音响系统代码```c#include <stdio.h>#define MAX_SONG_LENGTH 100#define MAX_PLAYLIST_SIZE 50typedef struct {char title[MAX_SONG_LENGTH];char artist[MAX_SONG_LENGTH];int duration;} Song;typedef struct {Song songs[MAX_PLAYLIST_SIZE];int size;} Playlist;void initializePlaylist(Playlist *playlist) {playlist->size = 0;}void addSong(Playlist *playlist, const char *title, const char *artist, int duration) {if (playlist->size < MAX_PLAYLIST_SIZE) {Song song;snprintf(song.title, MAX_SONG_LENGTH, "%s", title);snprintf(song.artist, MAX_SONG_LENGTH, "%s", artist);song.duration = duration;playlist->songs[playlist->size] = song;playlist->size++;printf("Successfully added the song: %s - %s\n", song.artist, song.title);} else {printf("Playlist is full. Cannot add song.\n");}}void removeSong(Playlist *playlist, const char *title) {for (int i = 0; i < playlist->size; i++) {if (strcmp(playlist->songs[i].title, title) == 0) {printf("Successfully removed the song: %s - %s\n", playlist->songs[i].artist, playlist->songs[i].title);for (int j = i; j < playlist->size - 1; j++) {playlist->songs[j] = playlist->songs[j + 1];}playlist->size--;return;}}printf("Song not found in the playlist.\n");}void printPlaylist(const Playlist *playlist) {printf("Current Playlist:\n");for (int i = 0; i < playlist->size; i++) {printf("%d. %s - %s\n", i + 1, playlist->songs[i].artist, playlist->songs[i].title);}}int main() {Playlist myPlaylist;initializePlaylist(&myPlaylist);addSong(&myPlaylist, "Song A", "Artist A", 180);addSong(&myPlaylist, "Song B", "Artist B", 230);addSong(&myPlaylist, "Song C", "Artist C", 200);printPlaylist(&myPlaylist);removeSong(&myPlaylist, "Song B");printPlaylist(&myPlaylist);return 0;}```以上是使用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#编写的音乐播放器

主要代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Media;using System.Drawing.Drawing2D;using System.Data.OleDb;namespace MusicPlayer{public partial class Form1 : Form{public Form1(){InitializeComponent();}string[] MusicFileNames;bool SingleLoop = true;bool AllLoop = true;bool noramal = true;bool RandomLoop = true;#region//播放private void btnPlay_Click(object sender, EventArgs e){noramal = true;if (this.axWindowsMediaPlayer1.Ctlcontrols.currentPosition == 0){if (this.listView1.Items.Count > 0){timer1.Start();if (this.listView1.SelectedItems.Count > 0){int iPos = this.listView1.SelectedItems[0].Index;string FileName = this.listView1.Items[iPos].SubItems[2].Text;this.axWindowsMediaPlayer1.URL = FileName;}}else{MessageBox.Show("请选择歌曲!", "信息提示", MessageBoxButtons.OK,rmation);}}else{this.axWindowsMediaPlayer1.Ctlcontrols.play();}}#endregion#region//停止private void btnStop_Click(object sender, EventArgs e){timer1.Stop();if (this.listView1.Items.Count > 0){if (this.listView1.SelectedItems.Count > 0){timer1.Enabled = false;axWindowsMediaPlayer1.Ctlcontrols.stop();}}else{MessageBox.Show("请选择歌曲!", "信息提示", MessageBoxButtons.OK, rmation);}}#endregion#region//暂停private void btnPause_Click(object sender, EventArgs e){timer1.Stop();if (this.listView1.Items.Count > 0){if (this.listView1.SelectedItems.Count > 0){timer1.Enabled = false;axWindowsMediaPlayer1.Ctlcontrols.pause();}}else{MessageBox.Show("请选择歌曲!", "信息提示", MessageBoxButtons.OK, rmation);}}#endregion#region//上一首private void btnLast_Click(object sender, EventArgs e){if (this.listView1.SelectedItems.Count > 0){int iPos = this.listView1.SelectedItems[0].Index;if (iPos > 0){this.listView1.Items[iPos - 1].Selected = true;string FileName = this.listView1.Items[iPos - 1].SubItems[2].Text;this.axWindowsMediaPlayer1.URL = FileName;}else{MessageBox.Show("这已经是第一首歌曲了!", "信息提示", MessageBoxButtons.OK, rmation);}}else{MessageBox.Show("请选择歌曲!", "信息提示", MessageBoxButtons.OK, rmation);}}#endregion#region//下一首private void btnNext_Click(object sender, EventArgs e){if (this.listView1.SelectedItems.Count > 0){int iPos = this.listView1.SelectedItems[0].Index;if (iPos < this.listView1.Items.Count - 1){this.listView1.Items[iPos + 1].Selected = true;string FileName = this.listView1.Items[iPos + 1].SubItems[2].Text;this.axWindowsMediaPlayer1.URL = FileName;}else{MessageBox.Show("这已经是最后一首歌曲了!", "信息提示", MessageBoxButtons.OK, rmation);}else{MessageBox.Show("请选择歌曲!", "信息提示", MessageBoxButtons.OK, rmation);}}#endregion#region//双击列表private void listView1_DoubleClick(object sender, EventArgs e){timer1.Start();noramal = true;if (this.listView1.Items.Count > 0){if (this.listView1.SelectedItems.Count > 0){int iPos = this.listView1.SelectedItems[0].Index;string FileName = this.listView1.Items[iPos].SubItems[2].Text;this.axWindowsMediaPlayer1.URL = FileName;}}else{MessageBox.Show("请选择歌曲!", "信息提示", MessageBoxButtons.OK, rmation);}}#endregion#region//播放方式(实现循环)private void timer1_Tick(object sender, EventArgs e) //用timer_tick 来实现循环{int record = this.listView1.SelectedItems[0].Index;int iTotal = this.listView1.Items.Count-1;Random rnd = new Random(); //定义随机函数int rand = rnd.Next(1, iTotal);if (AllLoop == true&&noramal==false){if (this.axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsStopped)if (record < this.listView1.Items.Count - 1){this.listView1.Items[record + 1].Selected = true;string FileName = this.listView1.Items[record + 1].SubItems[2].Text;this.axWindowsMediaPlayer1.URL = FileName;}else if (record == this.listView1.Items.Count - 1){this.listView1.Items[0].Selected = true;string FileName = this.listView1.Items[0].SubItems[2].Text;this.axWindowsMediaPlayer1.URL = FileName;}}}else if (SingleLoop == true&&noramal==false){if (this.axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsStopped){this.listView1.Items[record].Selected = true;this.axWindowsMediaPlayer1.Ctlcontrols.play();}}else if (noramal == true){if (this.axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsStopped){if (record < this.listView1.Items.Count - 1){this.listView1.Items[record + 1].Selected = true;string FileName = this.listView1.Items[record + 1].SubItems[2].Text;this.axWindowsMediaPlayer1.URL = FileName;}else if (record == this.listView1.Items.Count - 1){this.axWindowsMediaPlayer1.Ctlcontrols.stop();}}}else if (RandomLoop == true && noramal == false){if (this.axWindowsMediaPlayer1.playState ==WMPLib.WMPPlayState.wmppsStopped){if ((record+rand) < this.listView1.Items.Count - 1){this.listView1.Items[record + rand].Selected = true;string FileName = this.listView1.Items[record + rand].SubItems[2].Text;this.axWindowsMediaPlayer1.URL = FileName;}else if ((record+rand)>= this.listView1.Items.Count - 1){this.listView1.Items[rand].Selected = true;string FileName = this.listView1.Items[rand].SubItems[2].Text;this.axWindowsMediaPlayer1.URL = FileName;}}}}#endregion#region//添加文件private void 添加文件ToolStripMenuItem_Click(object sender, EventArgs e) //添加文件以及其中的信息{this.openFileDialog1.Multiselect=true;if (this.openFileDialog1.ShowDialog() == DialogResult.OK){MusicFileNames = this.openFileDialog1.FileNames;foreach (string MusicName in MusicFileNames){FileInfo MyFileInfo = new FileInfo(MusicName);//曲名string MyShortFileName = MusicName.Substring(stIndexOf("\\") + 1);MyShortFileName = MyShortFileName.Substring(0, MyShortFileName.Length - 4);//大小float MyFileSize = (float)MyFileInfo.Length / (1024 * 1024);//载入string[] SubItem ={ MyShortFileName, MyFileSize.ToString().Substring(0, 4) + "M", MusicName };ListViewItem Item = new ListViewItem(SubItem);this.listView1.Items.Add(Item);this.listView1.Items[0].Selected = true;WMPLib.IWMPMedia media = this.axWindowsMediaPlayer1.newMedia(MusicName);this.axWindowsMediaPlayer1.currentPlaylist.appendItem(media);}}}#endregion#region//添加文件夹private void 添加文件夹ToolStripMenuItem_Click(object sender, EventArgs e) //添加文件夹以及其中文件的信息{if (this.folderBrowserDialog1.ShowDialog() == DialogResult.OK){DirectoryInfo dir = new DirectoryInfo(this.folderBrowserDialog1.SelectedPath);foreach (FileInfo f in dir.GetFiles("*.*")){//曲名string MyShortFileName = ;MyShortFileName = MyShortFileName.Substring(0, MyShortFileName.Length - 4);//大小float MyFileSize = (float)f.Length / (1024 * 1024);//载入string[] SubItem ={ MyShortFileName, MyFileSize.ToString().Substring(0, 4) + "M",f.FullName };ListViewItem Item = new ListViewItem(SubItem);this.listView1.Items.Add(Item);this.listView1.Items[0].Selected = true;WMPLib.IWMPMedia media = this.axWindowsMediaPlayer1.newMedia(f.DirectoryName);this.axWindowsMediaPlayer1.currentPlaylist.appendItem(media);}}}#endregion#region//播放方式private void 顺序播放ToolStripMenuItem_Click(object sender, EventArgs e){noramal = true;RandomLoop = false;SingleLoop = false;AllLoop = false;this.顺序播放ToolStripMenuItem.Checked = true;this.单曲播放ToolStripMenuItem.Checked = false;this.全部循环ToolStripMenuItem.Checked = false;this.随机播放ToolStripMenuItem.Checked = false;}private void 单曲播放ToolStripMenuItem_Click(object sender, EventArgs e) {SingleLoop = true;AllLoop = false;noramal = false;RandomLoop = false;this.顺序播放ToolStripMenuItem.Checked = false;this.单曲播放ToolStripMenuItem.Checked = true;this.全部循环ToolStripMenuItem.Checked = false;this.随机播放ToolStripMenuItem.Checked = false;}private void 全部循环ToolStripMenuItem_Click(object sender, EventArgs e) {AllLoop = true;SingleLoop = false;noramal = false;RandomLoop = false;this.顺序播放ToolStripMenuItem.Checked = false;this.单曲播放ToolStripMenuItem.Checked = false;this.全部循环ToolStripMenuItem.Checked = true;this.随机播放ToolStripMenuItem.Checked = false;}private void 随机播放ToolStripMenuItem_Click(object sender, EventArgs e) {RandomLoop = true;SingleLoop = false;AllLoop = false;noramal = false;this.顺序播放ToolStripMenuItem.Checked = false;this.单曲播放ToolStripMenuItem.Checked = false;this.全部循环ToolStripMenuItem.Checked = false;this.随机播放ToolStripMenuItem.Checked = true;}#endregion#region//删除文件private void 删除选中的ToolStripMenuItem_Click(object sender, EventArgs e) {timer1.Stop();if (this.listView1.Items.Count > 0){if (this.listView1.SelectedItems.Count > 0){int i = this.listView1.SelectedItems[0].Index;this.listView1.SelectedItems[0].Remove();}else{MessageBox.Show("请选择歌曲!", "信息提示", MessageBoxButtons.OK, rmation);}}else{MessageBox.Show("没有要删除的歌曲!", "信息提示", MessageBoxButtons.OK, rmation);}}private void 全部删除ToolStripMenuItem_Click(object sender, EventArgs e){timer1.Stop();if (this.listView1.Items.Count > 0){this.listView1.Items.Clear();}else{MessageBox.Show("没有要删除的歌曲!", "信息提示", MessageBoxButtons.OK, rmation);}}#endregion}}。
C语言实现音乐播放器

C语言实现音乐播放器音乐是人们生活中不可或缺的一部分,而音乐播放器则是让人们能够随时随地欣赏自己喜爱的音乐的工具。
本文将介绍如何使用C语言来实现一个简单的音乐播放器。
一、背景介绍在开始介绍之前,我们先了解一下C语言。
C语言是一种通用的高级计算机程序设计语言,它广泛应用于软件开发、嵌入式系统、操作系统等领域。
C语言具有简洁、高效、灵活等特点,非常适合用来实现音乐播放器这样的应用程序。
二、功能设计一个音乐播放器需要具备以下几个基本功能:1. 播放音乐:能够将音乐文件加载到内存中,并通过音频设备进行播放。
2. 暂停和继续播放:能够控制音乐的播放状态,实现暂停和继续播放功能。
3. 调节音量:能够通过控制音频设备的音量来调节音乐的播放音量。
4. 播放进度条:能够显示当前音乐的播放进度,并能够通过拖动进度条来控制播放进度。
5. 播放列表:能够显示已加载的音乐文件,并能够选择要播放的音乐。
6. 循环播放:能够实现单曲循环、列表循环和随机播放等不同播放模式。
三、技术实现1. 文件加载:使用C语言的文件操作函数,如fopen、fread等,将音乐文件加载到内存中,也可以使用第三方库来简化操作。
2. 音频播放:使用C语言的音频库,如ALSA、SDL等,通过调用相应的函数实现音频播放。
3. 用户界面:使用C语言的图形库,如GTK、SDL等,创建用户界面并实现各种交互操作。
4. 音频处理:使用C语言的音频处理库,如libao、libmad等,对音乐文件进行解码和处理。
5. 播放控制:使用C语言的多线程或事件驱动机制,实现播放控制功能,包括播放、暂停、继续、音量调节等。
6. 播放列表:使用C语言的链表或数组等数据结构,保存已加载的音乐文件,并能够根据用户选择进行切换和播放。
7. 进度条:使用C语言的图形库,绘制并更新进度条的显示,并通过鼠标或键盘事件实现拖动进度条来控制播放进度。
8. 播放模式:使用C语言的条件语句和控制流程,实现不同的播放模式,并能够根据用户选择切换不同的播放模式。
用C#做一个调用API的MP3播放器

using System;using System.Collections.Generic;using System.Text;//using System.linq;using System.Runtime.InteropServices;using System.IO;namespace Mp3Player{class MP3{public MP3() { }//定义API函数使用的字符串变量[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] private string Name = "";[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] private string durLength = "";[MarshalAs(UnmanagedType.LPTStr, SizeConst = 128)] private string TemStr = "";int ilong;//定义播放状态枚举变量public enum State{mPlaying = 1,mPuase = 2,mStop = 3};//结构变量public struct structMCI{public bool bMut;public int iDur;public int iPos;public int iVol;public int iBal;public string iName;public State state;};public structMCI mc = new structMCI();///<summary>///当前播放状态的属性///</summary>public int GetState{get{if (State.mPlaying == mc.state){return 1;}else if (State.mPuase == mc.state){return 2;}return 3;}set{if (1 == value){mc.state = State.mPlaying;}else if (2 == value){mc.state = State.mPuase;}else if (3 == value){mc.state = State.mStop;}}}///<summary>///设计播放时间的显示格式///</summary>///<param name="Tflag">Tflag:true时显示前进用用时,false时为剩余时间并有'-'</param> ///<returns></returns>public string PlayerNowTime(bool Tflag){int total = CurrentPosition;string t = "";if (Tflag == false){total = Duration - total;t += "-";}int min = total / 60;int second = total % 60;if (min < 10){t += "0";}t += min.ToString();t += ":";if (second < 10){t += "0";}t += second.ToString();return t;}///<summary>///返回播放总时间///</summary>///<returns></returns>public string PlayerAllTime(){int total = Duration;return total.ToString();}///<summary>///打开音乐文件和获取音乐文件时间长度信息///</summary>public string FileName{get{return mc.iName;}set{try{TemStr = "";Name = "";//***清空string add = "For Binary";TemStr = TemStr.PadLeft(127, Convert.ToChar(" "));Name = Name.PadLeft(260, Convert.ToChar(" "));mc.iName = value;ilong = APIClass.GetShortPathName(mc.iName, Name, Name.Length);Name = GetCurrPath(Name);Name = "open "+ Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media"; ilong = APIClass.mciSendString(Name, TemStr, TemStr.Length, 0);ilong = APIClass.mciSendString("set media time format milliseconds", TemStr, TemStr.Length, 0);mc.state = State.mStop;mc.iVol = GetNowVolumn();}catch{}}}///<summary>///当前音量属性///</summary>public int Volume{get{return mc.iVol;}set{SetVolumeTo(value);}}///<summary>///播放位置的属性public int Position{get{return mc.iPos;}set{StepTo(value);}}///<summary>///播放///</summary>public void play(){TemStr = "";//if (mc.state == State.mStop)//{TemStr = TemStr.PadLeft(127, Convert.ToChar(" "));APIClass.mciSendString("play media", TemStr, TemStr.Length, 0);SetVolumeTo(200);mc.state = State.mPlaying;// return;//}//RepeatPlay();}///<summary>///停止///</summary>public void StopT(){TemStr = "";TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("close media", TemStr, TemStr.Length, 0); ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length, 0); mc.state = State.mStop;}///<summary>///暂停///</summary>public void Puase(){TemStr = "";TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0); mc.state = State.mPuase;}///<summary>///循环播放public void RepeatPlay(){TemStr = "";TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("play media repeat", TemStr, TemStr.Length, 0); SetVolumeTo(200);//设置初始化的音量大小mc.state = State.mPlaying;}///<summary>///快进\快退///</summary>public void StepTo(int steps){if (steps < 0){TemStr = "";steps = -steps;TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("step media by reverse", TemStr, steps, 0); mc.state = State.mPlaying;}else{TemStr = "";TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("step media by", TemStr, steps, 0);mc.state = State.mPlaying;}}/////////////////////////////////////////////音量控制///<summary>///获取当前音量///</summary>///<returns></returns>public int GetNowVolumn(){int volumn = 0;TemStr = "";TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("status media volumn", TemStr, volumn, 0);mc.state = State.mPlaying;return volumn;}///<summary>///设置音量///</summary>///<param name="volume">设置的值</param>public void SetVolumeTo(int volume){TemStr = "";volume *= 10;TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("setaudio media volume to "+ volume.ToString(), TemStr, 128, 0);mc.iVol = volume;mc.state = State.mPlaying;}///<summary>///播放完就停止播放///</summary>///<returns></returns>public bool EndToStop(){if (mc.iPos == Duration){StopT();return true;}else{return false;}}///<summary>///得到文件路径///</summary>///<param name="name"></param>///<returns></returns>private string GetCurrPath(string name){if (name.Length < 1){return"";}name = name.Trim();name = name.Substring(0, name.Length - 1);return name;}//总时间public int Duration{get{durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));int ilog = APIClass.mciSendString("status media length", durLength,durLength.Length, 0);durLength = durLength.Trim();if (durLength == ""){return 0;}return (int)(Convert.ToDouble(Convert.ToInt32(durLength)) / 1000f);}}//当前时间public int CurrentPosition{get{durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));int ilog = APIClass.mciSendString("status media position", durLength, durLength.Length, 0);durLength = durLength.Trim();mc.iPos = (int)(Convert.ToDouble(Convert.ToInt32(durLength)) / 1000f);return mc.iPos;}}//录音///<summary>///初始化录音环境///</summary>///<returns></returns>public bool InitalDevice(){durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));//11025ilong = APIClass.mciSendString("set media bitpersample 8", durLength, durLength.Length, 0);ilong = APIClass.mciSendString("set media samplespersec 11025", durLength, durLength.Length, 0);ilong = APIClass.mciSendString("set media channels 2", durLength, durLength.Length, 0); ilong = APIClass.mciSendString("set media format tag pcm", durLength, durLength.Length, 0);return true;}///<summary>///开始录音///</summary>///<returns></returns>public bool BeginRecord(){durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));ilong = APIClass.mciSendString("close My", durLength, durLength.Length, 0);try{ilong = APIClass.mciSendString("open new type waveaudio alias My", durLength, durLength.Length, 0);ilong = APIClass.mciSendString("record My", durLength, durLength.Length, 0);}catch (Exception ex){ex.Message.ToString();}return true;}///<summary>///保存录音///</summary>///<param name="path">保存路径</param>public void SaveMusic(string path){durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));try{ilong = APIClass.mciSendString("save My "+ path, durLength, durLength.Length, 0);APIClass.mciSendString("close My", durLength, durLength.Length, 0);}catch (Exception ex){ex.Message.ToString();}}///<summary>///停止录音///</summary>public void StopRecord(){durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));try{APIClass.mciSendString("stop My", durLength, durLength.Length, 0);}catch (Exception ex){ex.Message.ToString();}}///<summary>///暂停录音///</summary>public void PauseRecord(){durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));try{APIClass.mciSendString("pause My", durLength, durLength.Length, 0);}catch (Exception ex){ex.Message.ToString();}}///<summary>///继续录音///</summary>public void ResumeRecord(){durLength = "";durLength = durLength.PadLeft(128, Convert.ToChar(" "));try{APIClass.mciSendString("resume My", durLength, durLength.Length, 0);}catch (Exception ex){ex.Message.ToString();}}}////////////////////////////////////public class APIClass{[DllImport("kernel32.dll", CharSet = CharSet.Auto)]public static extern int GetShortPathName(string lpszLongPath, string shortFile, int cchBuffer);[DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)] public static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);}}。
在C#中实现视频播放器

在C#中实现视频播放器当我们需要在C#中实现视频播放器的时候,可以使⽤如下⼏种⽅法:⼀、使⽤MediaPlayer ActiveX控件在C#中⽀持视屏播放器最简单的⽅式就是插⼊MediaPlayer控件了,在WPF中还内置了对MediaPlayer的封装MediaElement,可以通过它直接打造⼀个播放器。
使⽤MediaPlayer控件的好处是简单,它已经基本封装了常⽤的功能,只需要很少的⼏⾏代码就可以实现媒体播放器的功能。
并且,由于操作系统中已经内置了MediaPlayer,不需要额外集成播放器的⽂件。
不过,它的⼀个最⼤的问题是视频⽀持格式有限。
这个问题本⾝并不严重,在⼗年前就可以通过安装的⽅式来扩展其⽀持格式的。
对于⼀些私有格式的视频⽂件播放,也可以采⽤这种⽅案。
这种⽅式本⾝还是⾮常强⼤的,不过它带来了插件的安装问题了。
如果你的程序是被许多客户端所使⽤的话,还是会有不少的⿇烦的。
插件不容易被集成安装安装完了后⼜不少参数要设置,并且不容易通过程序来设置它第三⽅插件容易和客户端环境冲突,出问题不容易定位和处理插件更新不⽅便当然,如果客户端较少,可以⼈⼯维护的话,⽤MediaPlayer也不失为⼀种简单易⾏的⽅案。
⼆、使⽤VLC ActiveX控件为了免除插件的⿇烦,⼀种替换⽅案是直接使⽤⼀个⽐较强⼤的播放器VLC Player,通过它的ActiveX控件实现视频播放的功能。
该⽅法本质上和⽅法⼀⼀样,是调⽤的ActiveX控件,好处是可以⾮常快捷的实现播放器的功能。
axVLCPlugin21.playlist.add("mms://new-media/publishingpoint1", "", " :mms-caching=1000");axVLCPlugin21.playlist.play();这种⽅式和前⾯的⽅法⼀样,涉及到第三⽅程序的安装。
用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;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8. 添加菜单的消息映射。并编辑代码响应功能,其代码如下所示:
(1)添加【打开】按钮的处理函数,它的主要功能是初始化路径, 取得播放曲目列表文件的全路径并利用文件对话框打开视频文件,具体实 现 步 骤 为 , 在 对 话 框 资 源 中 , 双 击 打 开 文 件 按 钮 , 出 现 “ Add Member Function”对话框,默认 Member Function Name 为 OnOpen,单击“OK”按 钮,进入 OnOpen()函数编辑区,添加如下代码:
void CMediaPlayerDlg::OnStop() {
//在这里增加控制处理程序代码 m_ActiveMovie.Stop(); KillTimer(0); //关掉定时器 }
(5)添加【暂停】按钮的处理函数,它的主要功能是利用文件对话框暂 停视频文件的播放,具体实现如下:
void CMediaPlayerDlg::OnPause() {
显示媒体文件信息(文件名、路径) 媒体播放控制:打开文件、播放、暂停、 停止、退出、全屏 显 示 播 放 信 息 ( 播 放 进 度 、 状 态 )、 控 制 音量 打开文件、播放、暂停、停止、退出、全 屏 放大音量,减小音量
音量控制和媒体播放对象对界面管理存在依赖关系,这两个对象要从 界面获取控制指令,它们的属性要在界面上显示。本播放器的类图如图 2 所示。
if (IsIconic()) {
CPaintDC dc (this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
//在用户端长方形中置图像 int 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;
m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED); //将窗口显示为最大
m_ActiveMovie.Run(); //继续播放 } (9)设置定时功能 void CMediaPlayerDlg::OnTimer(UINT nIDEvent) {
double CurrentPos=m_ActiveMovie.GetCurrentPosition(); //得到当前位置
图 3 播放器界面设计
四 系统实现
启动 Visual C++ 6.0,执行 New—Project 新建菜单项,新建一个 MFC AppWizard(ExE)应用 ,在 左上 方的工 程文 本 中 输入 “Player”,完 成 后 单 击【确定】按钮,进入 MFCAppWizard 向导。如图 4 所示。
"AVI File (*.avi)|*.avi|" "Movie File (*.mov)|*.mov|" "Media File (*.mmm)|*.mmm|" "Mid File (*.mid;*, rmi)|*.mid;*.rmi|" "MPEG File (*.mpeg)|*.mpeg|" "All File (*.*)|*.*||"; CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); ∥定义打开对话框对象 if (dlg.DoModal()==IDOK) { CString PathName=dlg.GetPathName();//获取一个字符串 PathName.MakeUpper(); m_ActiveMovie.SetFileName(PathName);// 设 置 该 串 为 媒 体 播 放器文件 } } 其 中 ,第 一 条 语 句 用 于 设 置 选 择 文 件 的 类 型 ,第 二 条 语 句 用 于 创 建 一 个“ 打 开文件”的对话框,后面的语句用于选择要播放的文件。 (2)添加【关闭】按钮的处理函数,它的主要功能是利用文件对话框关 闭 视 频 文 件 , 具 体 实 现 步 骤 同 ( 1), 添 加 的 代 码 如 下 : void CMediaPlayerDlg::OnClose() { //在这里增加控制处理程序代码 m_ActiveMovie.CloseWindow(); //关闭窗口 } (3)添加【播放】按钮的处理函数,我们先判断文件的状态,再调用控 件的有关方法来播放视频文件,具体代码如下: void CMediaPlayerDlg::OnPlay() { m_ActiveMovie.Run(); SetTimer(0,20, NULL); //设置定时器模式 } (4)添加【停止】按钮的处理函数,它的主要功能是利用文件对话框停 止视频文件的播放,具体实现如下:
} (8)添加【全屏】按钮的处理函数,它的主要功能是把视频播放器切换 成全屏形式进行播放,具体实现如下: void CMediaPlayerDlg::OnFulscreeen() {
m_ActiveMovie.Pause(); //暂停播放
m_ActiveMovie.SetFullScreenMode(true); //设置全屏模式
void CMediaPlayerDlg::OnOpen () {
char szFileFilter [] = //设置打开下拉菜单
"Mp3 File(*.mp3)|*.mp3|" "Wma File (*.wma)|*.wma|" "Video File (*.dat)|*.dat|" "Wave File (*.wav)|*.wav|"
媒体播放
播放器
<< use>> 用户
音量调节
图 1 视频播放器 UML 用例图
二 对象分析
由于播放器主要围绕实现以上两大功能,可以建立如表 1 所示的对象。
表 1 播放器所建对象列表
对象
操作界面
媒体播放 音量控制
属性
方法
媒 体 文 件 、路 径 ,媒 体 播 放 进 度 、状 态 ,音 量 信息
媒 体 文 件 名 、路 径 ,控 制命令 音量调节
音量控制
+音量大小:unsigned long +增大音量():void +减小音量():void
图 2 播放器类图
三 界面设计
界面应满足以下要求: 1. 界面首先要布置一系列按钮控件实现所有要实现的功能; 2. 设置“播放进度条”来指示媒体文件的播放进度,还应该可以用 鼠标拖动进度条来改变播放进度; 3. 设置音量控制按钮(包括增大和减小); 4. 界面应尽量美观; 根据以上描述,程序运行时效果如图 3 所示。
利用 VC++设计视频播放器
一 需求分析
制作一个视频播放器,能够播放多种格式的多媒体文件:CD 音乐曲目 (.cda)、数字化波形声音(.WAV)、MIDI 文件(. mid, .rmi, .midi)、Windows Media 文件(. asf, .wm, .wma )、电影文件(. mpeg , . mpg , .mp3)、视频 文件(.avi , . wmv)、音频文件(. wav , . snd , .au , .aif )等。能够 有用户自己选择文件,提供媒体播放控制:打开、播放、暂停、停止、全屏能控 制播放音量的大小。应用程序界面美观,使用方便,有完善的操控按钮或进度指 示条等。本课题对软硬件平台要求不高,操作系统可选择 Windows2000/Window XP。在 Visual C++ 6.0 下用 ActiveMovie 控件来实现。 本课程设计用例如图 1 所示,用户使用播放器,播放器完成媒体播放和音量调节 两大功能。
isRepeat=TRUE; //如果重复为真
SetDlgItemText(IDC_STATIC2,"Status:Repeat"); //重复播放 } else{
isRepeat=FALSE; //如果重复为假
SetDlgItemText(IDC_STATIC2,"Status:Normal"); }
//拉图像 dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } }
6. 设置对话框的属性。在对话框的属性框中的 Menu 框中选择 ID_MENU1
菜单。这样就把创建的菜单加入到对话框中。
7. 创建控件类的对象,在对话框类的头文件中添加 CActiveMovie3 类型
if(CurrentPos==0&&isRepeat) m_ActiveMovie.Run();
图 5 ActiveMovie 添加控件
4. 在对话框类的文件夹中包含控件类,添加的代码如下:
//MovieDlg.h : header file #include “activemovie3.h”
5. OnPaint( )
播放器对话框函数。 void CMediaPlayerDlg::OnPaint() {
媒体播放
+媒体文件路径 +媒体文件名 +播放控制命令 +查找文件 +播放():void +暂停():void +停止():Void +退出():Void +全屏():Void