用C语言制作播放器

合集下载

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语言实现音响系统代码```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语言编写的音乐播放器源代码)

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#编写的音乐播放器

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语言是一种通用的高级计算机程序设计语言,它广泛应用于软件开发、嵌入式系统、操作系统等领域。

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播放器

用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#中实现视频播放器当我们需要在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简易播放程序

用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;

教你利用VC++和JAVA 设计视频播放器的详细步骤

教你利用VC++和JAVA 设计视频播放器的详细步骤

利用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所示,用户使用播放器,播放器完成媒体播放和音量调节两大功能。

<< use>> 用户图1 视频播放器UML 用例图二 对象分析由于播放器主要围绕实现以上两大功能,可以建立如表1所示的对象。

表1 播放器所建对象列表对象 属性 方法操作界面媒体文件、路径,媒体播放进度、状态,音量信息 显示媒体文件信息(文件名、路径) 媒体播放控制:打开文件、播放、暂停、停止、退出、全屏 显示播放信息(播放进度、状态)、控制音量 媒体播放媒体文件名、路径,控制命令 打开文件、播放、暂停、停止、退出、全屏 音量控制 音量调节 放大音量,减小音量音量控制和媒体播放对象对界面管理存在依赖关系,这两个对象要从界面获取控制指令,它们的属性要在界面上显示。

本播放器的类图如图2所示。

媒体播放 音量调节 播放器图2 播放器类图三 界面设计界面应满足以下要求:1. 界面首先要布置一系列按钮控件实现所有要实现的功能;2. 设置“播放进度条”来指示媒体文件的播放进度,还应该可以用鼠标拖动进度条来改变播放进度;3. 设置音量控制按钮(包括增大和减小);4. 界面应尽量美观;根据以上描述,程序运行时效果如图3所示。

用C#开发的简单MP3播放器

用C#开发的简单MP3播放器

一、软件说明:功能说明:一个简易小巧的MP3播放器,可以播放已经下载好的MP3格式的音乐。

解决什么样的实际问题:市场上的音乐播放器大都占用资源比较大,而且需要联网,即使播放本地音乐,也会占用较多的网速,而这款播放器解决了这些问题。

(虽然还是有很多缺陷,但用起来还是比较方便的。

)性能说明:可以播放单首或多首歌曲,可以保存或清空当前播放列表,支持列表循环,顺序播放,单曲循环。

(但目前只支持MP3格式。

)程序类型说明:这个播放器是winform应用程序。

二、软件设计软件整体结构图及模块划分:软件整体结构图:控制模块:歌曲列表显示区:在VS的“解决方案资源管理器”中的文件说明:整个项目的文件如下:其中,Properties中所包含的的文件有:这里包含的是定义程序集属性的文件,用来设定生成的有关程序集的常规信息dll文件的一些参数。

引用中包含的文件有:这里包含的是这个项目所用的的一些类库信息。

Form1.cs中包含有:这些是窗体的设计信息,而Program.cs是整个源程序的入口。

各模块对应的主要对象或方法:控制模块中主要用到的是axWindowsmediaPlayer控件以及MenuStrip控件。

其中Windows media Player 控件用到的方法属性主要有:axWindowsMediaPlayer1.BeginInit(); //初始化axWindowsMediaPlayer1.settings.autoStart; //自动播放axWindowsMediaPlayer1.settings.setMode("shuffle", false); //顺序播放axWindowsMediaPlayer1.settings.enableErrorDialogs;axWindowsMediaPlayer1.settings.balance;axWindowsMediaPlayer1.settings.mute;axWindowsMediaPlayer1.settings.volume;MenuStrip控件用到的方法事件有:privatevoid打开文件ToolStripMenuItem1_Click(object sender, EventArgs e);privatevoid添加歌曲ToolStripMenuItem_Click(object sender, EventArgs e);privatevoid添加文件夹ToolStripMenuItem_Click(object sender, EventArgs e);privatevoid退出ToolStripMenuItem_Click(object sender, EventArgs e); privatevoid清空列表ToolStripMenuItem1_Click(object sender, EventArgs e);privatevoid顺序播放ToolStripMenuItem_Click(object sender, EventArgs e);privatevoid单曲循环ToolStripMenuItem_Click(object sender, EventArgs e);privatevoid随机播放ToolStripMenuItem_Click(object sender, EventArgs e);数据库设计或数据文件说明:由于播放器使用数据量较小,故采用TXT保存歌曲文件列表。

C语言实现Mini-Cooledit音频播放器

C语言实现Mini-Cooledit音频播放器
m_playslider.SetPos(0);
GetDlgItem(IDC_play)->SetWindowText("播放");
mciSendCommand(m_DeviceID, MCI_STOP, NULL, NULL);
mciSendCommand(m_DeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
//获得文件播放的当前位置
MCI_STATUS_PARMS mcistatusparms;
mcistatusparms.dwItem = MCI_STATUS_POSITION;
mcistatusparms.dwReturn = 0;
mciSendCommand(m_DeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPMCI_STATUS_PARMS)&mcistatusparms);
m_playslider.SetRange(0,mciStatusParam.dwReturn);
m_playslider.SetPos(0);
m_volumeslider.SetRange(0,100);
m_volumeslider.SetPos(100);
}
wav文件的播放与停止
void CMiniDlg::Onplay()
mciSendCommand(m_DeviceID, MCI_STATUS,MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatusParam);
str.Format("%d",mciStatusParam.dwReturn);

mp3音乐播放器c语言版

mp3音乐播放器c语言版
1.2 背景
说明: 1.软件名称:MP3 播放器。 2.开发小组成员:胥站峰 3.软件平台:windows 操作系统。
1.3 定义
MP3(MPEGAudioLayer-3)是一种数字音频压缩技术,数字压缩速率达到每通道 128kbps,数比 例可以达到 12:1。MP3 播放器的主要作用就是解压压缩的 MP3 数字音频,再现 MP3 音乐,同时为携 带方便还要能存贮 MP3 文件,MP3 歌曲可以从电脑上下载。MP3 播放器主要由 MP3 文件解码部分、 文 件 存 贮 部 分 、文 件 下 载 接 口 和 语 音 播 放 部 分 构 成 。根 据 解 码 的 方 法 播 放 器 可 分 为 软 解 码 和 硬 解 码两种: 软解码是利用控制软件解压缩 MP3 文件,它要求控制器处理速度要快。。
1. 视觉外观:进入播放器时,界面简洁大方,让人一目了然。具有简单易用的特性。 2. 系统使用播放器时能显示播放器的状态,当前播放的歌曲名称和路径。
2.2 界面需求:
播放器界面要求布局合理,颜色舒适。
2.3 性能需求
(1) 当要求歌曲播放时,软件响应时间最长不超过 1 秒 (2) 当要求歌曲暂停时,软件响应时间最长不超过 1 秒 (3) 播放歌曲,采用立体声播放,文件流畅
一:播放器的基本控制需求
(1) 播放:选择歌曲进行播放。 (2) 暂停:输入暂停对应的选项,播放暂停。 (3) 继续播放:输入继续播放对应的选项,实现继续播放。 (4) 停止播放:输入停止播放对应的选项,实现停止播放。 (5) 音量控制:输入音量控制所对应的选项实现音量控制。 (6) 上一首,下一首:输入上一首或者下一首对应的选项实现歌曲的切换。 (7) 播放模式:列表循环播放,列表顺序播放,随机播放,单曲循环播放,单曲播放的选项,选择播

如何使用C#制作播放器技术方法及代码

如何使用C#制作播放器技术方法及代码

如何使用C#制作播放器技术方法及代码要使C# 代码引用COM 对象和接口,需要在C# 内部版本中包含COM 接口的.NET 框架定义。

完成此操作的最简单方法是使用TlbImp.exe(类型库导入程序),它是一个包括在.NET 框架SDK 中的命令行工具。

TlbImp 将COM 类型库转换为.NET 框架元数据,从而有效地创建一个可以从任何托管语言调用的托管包装。

用TlbImp 创建的.NET 框架元数据可以通过/R 编译器选项包括在C# 内部版本中。

如果使用Visual Studio 开发环境,则只需添加对COM 类型库的引用,将为您自动完成此转换。

例如,我们要播放当前目录下的demo.avi文件,需要用到包含在位于Windows 系统目录中的Quartz.dll 中的媒体播放机。

(c:\winnt\system32\quartz.dll)。

可在命令行中运行TlbImp文件(C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\Tlbimp.exe)tlbimp c:\windows\system32\quartz.dll /out:QuartzTypeLib.dll得到的新程序集放到目录C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin下面请注意,得到的DLL 需要命名为QuartzTypeLib,以便.NET 框架可以在运行时正确加载包含类型。

生成程序时使用C# 编译器选项/R 以包含QuartzTypeLib.dll 文件;如果使用Visual Studio 开发环境,直接添加引用即可(using QuartzTypeLib)。

然后就可以使用此程序显示影片了。

具体编写代码时,用到了RenderFile 和Run 方法。

例:private void menuItemOpen_Click(object sender, System.EventArgs e){FilgraphManager m_FilGraphManager = null;IBasicAudio m_BasicAudio = null;IVideoWindow m_VideoWindow = null;IMediaEvent m_MediaEvent = null;IMediaEventEx m_MediaEventEx = null;IMediaPosition m_MediaPosition = null;IMediaControl m_MediaControl = null;OpenFileDialog OpenDialog = new OpenFileDialog();OpenDialog.Filter = "Media Files|*.mpg;*.avi;*.wma;*.mov;*.wav;*.mp2;*.mp3|All Files|*.*"; //本例用对话框读入要显示的影片文件名if (DialogResult.OK == OpenDialog.ShowDialog()){m_FilGraphManager = new FilgraphManager();m_FilGraphManager.RenderFile(OpenDialog.FileName);m_BasicAudio = m_FilGraphManager as IBasicAudio ;try{m_VideoWindow = m_FilGraphManager as IVideoWindow;m_VideoWindow.Owner = (int) panel1.Handle;m_VideoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;//此设置可以不显示播放器的title,使播放器像嵌在窗体中。

C语言基于GTK+Libvlc实现的简易视频播放器 (一)

C语言基于GTK+Libvlc实现的简易视频播放器 (一)
这差不多已经 10 年过去了。今天,在 GTK+ 的最新稳定版本 —— 2.8 版上 (3.0 测试中),仍然在进行许多活动,同时,GIMP 无疑仍然是使用 GTK+ 的 最著名的程序之一,不过它已经不是惟一的使用 GTK+ 的程序了。已经为 GTK+ 编写了成百上千的应用程序,而且至少有两个主要的桌面环境(Xfce 和 GNOME)用 GTK+ 为用户提供完整的工作环境。
playpause_button =
gtk_button_new_from_icon_name("media-playback-start",
GTK_ICON_SIZE_BUTTON);
stop_button = gtk_button_new_from_icon_name("media-playback-stop",
GTK+虽然是用 C 语言写的,但是您可以使用你熟悉的语言来使用 GTK+,因为 GTK+已经被绑定到几乎所有流行的语言上,如:C++,PHP, Guile,Perl, Python, TOM, Ada95, Objective C, Free Pascal, and Eiffel
使用 GTK+的优秀应用程序:
filemenu = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), filemenu_openitem);
// 将 filemenu 设置为上一级 fileitem 的子菜单,然后将 fileitem 添加进 menubar,最后将 menubar 放置进 vbox
//创建一个方向垂直间距为 0 的 box 容器,并添加到前面创建的 window 中 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);

C#下调用vlc库做一个简单播放器

C#下调用vlc库做一个简单播放器

C#下调用vlc库做一个简单播放器C#下调用vlc调做一调调播放器个第一步,调建一个C#工程。

在Form1中拖一个2个plane;上下布局,、label、text、2个button控件。

第二步,把vlc的plugins文件调和libvlccore.dll libvlc.dll放入DEBUG 文件调。

内第三步,调代调~把下面的代调调制到写Form1调中。

public partial class Form1 : Form{public Form1(){InitializeComponent();}//造常调的调构异构体class MediaException{public struct ExceptionStruct{private int raised;private int code;private string message;}}//造构Corehandle调class CoreHandle : SafeHandle{//造方法构public CoreHandle(): base(IntPtr.Zero, true) {}//重的方法写public override bool IsInvalid{get { return handle == IntPtr.Zero; }}protected override bool ReleaseHandle(){if (!IsInvalid){libvlc_release(this);handle = IntPtr.Zero;}return true;}protected override void Dispose(bool disposing){ReleaseHandle();base.Dispose(disposing);}//Dll调调调入[DllImport("libvlc")]private static extern void libvlc_release(CoreHandle coreHandle); }//造构core调class Core{//coreHandle字段和性属private CoreHandle coreHandle;public CoreHandle CoreHandle{get { return coreHandle; }}//造方法构public Core(string[] argv, ref MediaException.ExceptionStruct ex) {byte[][] argvbytes = new byte[argv.Length][];for (int i = 0; i < argv.Length; i++){argvbytes[i] = Encoding.UTF8.GetBytes(argv[i]);}coreHandle = libvlc_new(argv.Length, ReturnIntPtr(argvbytes, argv.Length), ref ex);}//调调函数private IntPtr ReturnIntPtr(byte[][] data, int length){IntPtr[] dataIntPtrArr = new IntPtr[length];for (int i = 0; i < length; i++){dataIntPtrArr[i] = Marshal.AllocHGlobal(data[i].Length *sizeof(byte));Marshal.Copy(data[i], 0, dataIntPtrArr[i], data[i].Length);}IntPtr dataIntPtr = Marshal.AllocHGlobal(length *Marshal.SizeOf(typeof(IntPtr)));Marshal.Copy(dataIntPtrArr, 0, dataIntPtr, length);return dataIntPtr;}//Dll调调调入[DllImport("libvlc")]private static extern CoreHandle libvlc_new(int argc, IntPtr argv, refMediaException.ExceptionStruct ex);}//造构MediaHandle调class MediaHandle : SafeHandle{//造方法构public MediaHandle(): base(IntPtr.Zero, true){}//重的方法写public override bool IsInvalid{get { return handle == IntPtr.Zero; }}protected override bool ReleaseHandle(){if (!IsInvalid){libvlc_media_release(this);handle = IntPtr.Zero;}return true;}protected override void Dispose(bool disposing){ReleaseHandle();base.Dispose(disposing);}//Dll调调调入[DllImport("libvlc")]private static extern void libvlc_media_release(MediaHandle mediaHandle);}//造构Media调class Media{//mediaHandle字段和性属private MediaHandle mediaHandle;public MediaHandle MediaHandle{get { return mediaHandle; }}//造方法构public Media(CoreHandle coreHandle, String filename, ref MediaException.ExceptionStruct ex){//c#调UTF-16调调, libvlc.dll调UTF-8调调, 需要调调.UTF8Encoding utf8 = new UTF8Encoding();mediaHandle = libvlc_media_new(coreHandle, utf8.GetBytes(filename), ref ex);}//Dll调调调入[DllImport("libvlc")]private static extern MediaHandle libvlc_media_new(CoreHandle coreHandle, [MarshalAs(UnmanagedType.LPArray)]byte[] link, ref MediaException.ExceptionStruct ex);}//造构MediaPlayerHandle调class MediaPlayerHandle : SafeHandle{//造方法构public MediaPlayerHandle(): base(IntPtr.Zero, true){}//重的方法写public override bool IsInvalid{get { return handle == IntPtr.Zero; }}protected override bool ReleaseHandle(){if (!IsInvalid){libvlc_media_player_release(this); handle = IntPtr.Zero;}return true;}protected override void Dispose(bool disposing){ReleaseHandle();base.Dispose(disposing);}//Dll调调调入[DllImport("libvlc")]private static extern voidlibvlc_media_player_release(MediaPlayerHandlemediaPlayerHandle);}//造构MediaPlayer调class MediaPlayer{//mediaPlayerHandle字段和性属private MediaPlayerHandle mediaPlayerHandle;public MediaPlayerHandle MediaPlayerHandle{get { return mediaPlayerHandle; }}//造方法构public MediaPlayer(MediaHandle mediaHandle, refMediaException.ExceptionStruct ex){mediaPlayerHandle =libvlc_media_player_new_from_media(mediaHandle, ref ex);}//调置父口窗public void VedioSetParent(CoreHandle coreHandle, IntPtr hDT, ref MediaException.ExceptionStruct ex){libvlc_video_set_parent(coreHandle, hDT, ref ex);}//播放public void Play(ref MediaException.ExceptionStruct ex){libvlc_media_player_play(mediaPlayerHandle, ref ex);}//调停public void Pause(ref MediaException.ExceptionStruct ex){libvlc_media_player_pause(mediaPlayerHandle, ref ex);}//停止public void stop(ref MediaException.ExceptionStruct ex){libvlc_media_player_stop(mediaPlayerHandle, ref ex);}//Dll调调调入[DllImport("libvlc")]private static extern MediaPlayerHandlelibvlc_media_player_new_from_media(MediaHandle libvlc_media_handle, ref MediaException.ExceptionStruct ex);[DllImport("libvlc")]private static extern void libvlc_video_set_parent(CoreHandle coreHandle,IntPtr hDT, ref MediaException.ExceptionStruct ex);[DllImport("libvlc")]private static extern voidlibvlc_media_player_play(MediaPlayerHandlemediaPlayerHandle, ref MediaException.ExceptionStruct ex);[DllImport("libvlc")]private static extern voidlibvlc_media_player_pause(MediaPlayerHandlemediaPlayerHandle, ref MediaException.ExceptionStruct ex);[DllImport("libvlc")]private static extern voidlibvlc_media_player_stop(MediaPlayerHandle mediaPlayerHandle, ref MediaException.ExceptionStruct ex);}//播放按调代调private void button1_Click(object sender, EventArgs e){string path = textBox1.Text;//调行播放的控件的句柄IntPtr hdl = this.panel1.Handle;//播放参数string[] argv = new string[] { "-I", "--ignore-config" };//vlc调象的调建MediaException.ExceptionStruct ex = newMediaException.ExceptionStruct();Core core = new Core(argv, ref ex);Media media = new Media(core.CoreHandle, path, ref ex);MediaPlayer player = new MediaPlayer(media.MediaHandle, ref ex);//回收垃圾GC.Collect();//播放player.VedioSetParent(core.CoreHandle, hdl, ref ex);player.Play(ref ex);//调调回收等相调操作垃圾GC.Collect();GC.WaitForPendingFinalizers();}//退出~调放private void button2_Click(object sender, EventArgs e){string path = textBox1.Text;//调行播放的控件的句柄IntPtr hdl = this.panel1.Handle;//播放参数string[] argv = new string[] { "-I", "--ignore-config" };//vlc调象的调建MediaException.ExceptionStruct ex = newMediaException.ExceptionStruct();Core core = new Core(argv, ref ex);Media media = new Media(core.CoreHandle, path, ref ex);MediaPlayer player = new MediaPlayer(media.MediaHandle, ref ex); GC.Collect();GC.WaitForPendingFinalizers();if (player != null){player.stop(ref ex);player.MediaPlayerHandle.Dispose();player = null;media.MediaHandle.Dispose();media = null;core.CoreHandle.Dispose();core = null;}}}第四步,调调~行。

MFC做音乐播放器——你懂的

MFC做音乐播放器——你懂的

前言:音乐播放器其实我在大一的时候就用非常生硬的语法写出过一个非常简陋的播放器。

这次写的这个是以前那个的加强版。

虽然说还是有很多bug,而且我至今不知道那些BUG是什么地方的问题。

先给个截图吧,播放器的界面:其实看着还是有那么回事的。

恩,其实除了波形和在线下载的话,功能和酷狗,以及千千静听等播放器的功能是一样的。

音乐播放器的关键是播放音乐,所以第一步是要设计一个类,这个类拥有各种各样的播放音乐的能力。

我设计的类名字叫Playerclass Player{public:Player();virtual ~Player();void Play();//播放函数void Pause();//暂停函数void Stop();//停止函数void Jump(DWORD pos);//这个函数是用来通过直接拖动进度条,然后播放从歌曲的相应位置播放的函数void Read(CString str);//这个函数必须在所有函数的前面调用,他有一个传入参数,是指MP3文件的路径void SetVolume(DWORD vol);//音量大小的设定。

这个不难MCI_STATUS_PARMS GetMode();//这个比较关键,是获得当前的播放状态(一首歌是否播放完了就是靠他)MCI_STATUS_PARMS GetNow();//当前是播放的歌曲第几分第几秒?可以用来改变时间栏和进度条MCI_STATUS_PARMS GetLenth();//获得歌曲的长度。

(时间)private:MCI_PLAY_PARMS m_play;MCI_OPEN_PARMS m_open;MCIDEVICEID m_dID;HWND m_parent;MCI_STATUS_PARMS m_status;MCI_SEEK_PARMS m_seek;MCI_STATUS_PARMS m_mode;};各个函数(可以作为以后MCI函数的查阅手册)实现方法是:void Player::Read(CString str){m_dID=NULL;m_open.lpstrElementName=str;mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&m_o pen);//MCI打开文件m_dID=m_open.wDeviceID;}void Player::Play(){m_play.dwCallback=(DWORD)m_parent;mciSendCommand(m_dID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&m_play);//播放.....下面就不写注释了}void Player::Pause(){mciSendCommand(m_dID,MCI_PAUSE,NULL,NULL);void Player::Stop(){mciSendCommand(m_dID,MCI_CLOSE,NULL,NULL);m_status.dwReturn=0;}MCI_STATUS_PARMS Player::GetLenth(){m_status.dwItem=MCI_STATUS_LENGTH;mciSendCommand(m_dID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&m_s tatus);return m_status;}MCI_STATUS_PARMS Player::GetNow(){m_status.dwItem=MCI_STATUS_POSITION;mciSendCommand(m_dID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&m_s tatus);return m_status;}MCI_STATUS_PARMS Player::GetMode(){m_mode.dwItem=MCI_STATUS_MODE;mciSendCommand(m_dID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&m_ mode);return m_mode;}void Player::Jump(DWORD pos){m_seek.dwTo=pos;mciSendCommand(m_dID,MCI_SEEK,MCI_TO|MCI_WAIT,(DWORD)(LPVOID)&m_seekmciSendCommand(m_dID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&m_play);}void Player::SetVolume(DWORD vol){MCI_DGV_SETAUDIO_PARMS mcivol;mcivol.dwCallback=(DWORD)m_parent;mcivol.dwItem=MCI_DGV_SETAUDIO_VOLUME;mcivol.dwValue=vol;mciSendCommand(m_dID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE|MCI_DGV_ SETAUDIO_ITEM,(DWORD)(LPVOID)&mcivol);}基本上都是运用mciSendCommand这个函数,传入不同的参数,就可以达到不同的效果。

基于C#实现音乐播放器功能

基于C#实现音乐播放器功能

闽江学院本科毕业论文(设计)题目基于C#实现音乐播放器功能学生姓名施敏学号 **********系别计算机科学系年级 2012专业通信工程指导教师余根坚职称教授完成日期摘要现代经济发展迅速,科学技术也在不断发展进步,日益繁荣的计算机信息技术带给人们许多便利。

音乐作为人们生活中常见的娱乐方式,也在计算机普及的冲击下发生了革新。

随着音乐的数字化,媒体播放器也往更高质方向进步。

最常见的Windows media player——因其强大的音频解码功能而备受青睐。

当你也想自己动手制作一个能够简单播放歌曲的音乐播放器,体验一下编程的乐趣的时候你可以使用Visual stdio2013工具。

本文的目的在于让大家知道一种简单建造音乐播放器的方法,主要是通过Visual stdio进行。

文章包含了对音乐播放器界面实现的方法和对后台代码的理解及掌握,主要实现通过电脑使用播放器进行音乐播放功能和简单的在线搜索的功能。

通过实践进一步理解播放器的需求,以及其开发过程,基本满足大众播放器的要求。

文中使用面向.net frame框架,设计了一个简单的音乐播放器。

该播放器可以实现播放功能、搜索功能、歌词显示等。

关键字:音乐播放器、Visual studio 2013、.net frameAbstractWith the rapid development of modern economy and the continuous development of science and technology, computer information technology is becoming more and more prosperous. Music as a common way of entertainment in people's lives, but also because of the popularity of computers has changed. With digital music, media players also progress to higher quality direction. Because of the Windows Media Player’s powerful audio decoding, the most common Windows Media Player loved by everyone. If you want to make a simple music player to play songs and to experience the fun of programming,you can use the Visual stdio2013.The purpose of this is to make everyone know a simple way to build a music player, and this method is mainly achieved by the Visual stdio. Article contains the method of a music player interface implementations, to understand and grasp the code-behind, the main function of the music player is to play songs and to search online. Through practice we can further understand the needs of the player and its development process. The music player meets the requirements of the public players basically. This article uses .net framework to design a simple music player. This music player can play songs, search online, and display the lyrics.K eyword s:music player. the visual stdio 2013. .net frame目录1. 引言 (1)1.1 选题背景及意义 (1)1.2 网络流行音乐播放器简介 (1)1.2.1 酷狗音乐 (1)1.2.2 百度音乐 (2)1.3 课题研究思路 (2)2. 开发技术简介 (2)2.1 C#编程语言介绍 (2)2.2 Windows Media Player (3)2.3 Windows控件 (3)2.4 WebBrowser控件 (3)3. 需求分析 (4)3.1 功能需求 (4)3.2开发与运行环境 (6)3.3 可行性分析 (6)3.3.1 技术可行性 (7)3.3.2 经济可行性 (7)3.3.3 法律可行性 (7)4. 系统设计 (7)4.1设计概要 (7)4.2 功能模块 (8)5. 功能实现 (9)5.1 播放器框架设计 (9)5.1.1命名空间结构 (9)5.1.2 App.config (9)5.2 歌曲添加模块 (10)5.3 歌曲删除模块 (11)5.4 播放控制模块 (12)5.4.1 取消自动播放 (12)5.4.2 点击播放音乐 (12)5.4.3歌曲切换 (13)5.5 自动播放下一曲 (13)5.6 显示歌词模块 (14)5.7 显示皮肤模块 (15)5.8 播放器背景模块 (16)5.9 网络连接模块 (16)6. 软件测试 (16)7. 结束语 (24)致谢 (25)参考文献 (26)基于C#实现音乐播放器功能1. 引言1.1 选题背景及意义什么是音乐?是跳动的音符跃然在琴键上,敲击出的空灵;是平稳的音律轻晃在琴弦上,弹奏出的悠闲。

C语言基于GTK+Libvlc实现的简易视频播放器 (二)

C语言基于GTK+Libvlc实现的简易视频播放器 (二)

C语言基于GTK+Libvlc实现的简易视频(二)一、课程说明上一次我们使用gtk+libvlc实现了一个最简单的视频播放器,可以实现点击按钮暂定和停止播放视频,以及同步显示视频播放进度,但即使作为一个视频播放器,只有这些功能也还是不够的,至少我们还应该有全屏播放的功能吧,所以这一次我们就来为上一次的视频播放器添加上全屏播放功能。

这个功能实现起来思路很简单,只是具体实现过程中有很多坑罢了,需要我们注意很多细节问题,还要解决一些bug等等。

这次我们的代码出了增加功能之外,也还会对上一次的基础代码做一些修改。

二、功能实现思路使用gtk提供的API函数,gtk_window_fullscreen可以将窗口设置为全屏,即隐藏标题栏、菜单栏和工具栏,同时隐藏窗口下端的视频控制条,只保留视频播放绘图构件。

在全屏状态时视频的播放控制及进度显示,由另一个单独的浮动弹出式窗体实现。

通过点击浮动控制窗体上的退出全屏按钮使用API函数gtk_window_unfullscreen可以退出全屏状态,此时再还原之前隐藏的正常模式下的控制条构件,及隐藏浮动弹出式窗体。

三、要实现的功能点∙全屏播放∙全屏状态浮动控制条∙无鼠标动作时浮动控制条和鼠标指针自动隐藏∙鼠标动作激活浮动控制条和鼠标指针∙单击播放区域暂停/播放,双击全屏/退出全屏四、功能点具体实现1.全屏播放我们先实现点击全屏按钮进入全屏状态,所以要在之前的底部控制条添加一个全屏按钮,并为其绑定一个点击事件处理函数full_screen_button = gtk_button_new_from_icon_name("view-fullscreen", GTK_ICON_SIZE_BUTTON);gtk_box_pack_end(GTK_BOX(hbox), full_screen_button, FALSE, FALSE, 0);g_signal_connect(full_screen_button, "clicked",G_CALLBACK(on_full_screen), NULL);on_full_screen事件处理函数如下:void on_full_screen(GtkWidget *widget, gpointer data){// 设置正常窗体进入全屏状态gtk_window_fullscreen(GTK_WINDOW(window));// 设置一个已进入全屏状态的标志,也可以通过GDK获得窗口状态,不过会略麻烦is_fullscreen = TRUE;// 隐藏窗口底部控制条和顶部菜单栏gtk_widget_hide(hbox);gtk_widget_hide(menubar);// 显示进入全屏状态后的浮动控制条窗体,后面会说明该窗体的具体实现 gtk_widget_show_all(GTK_WIDGET(ctrl_window));// 根据当前播放状态同步进入全屏状态后的按钮图标,原本考虑在点击按钮时同时设置控制条上的按钮图标和浮动控制条上的// 但因为始终有一个为隐藏状态,设置就会不成功反而会影响当前的按钮图标,故简单的改在进入全屏状态时单独进行同步if(libvlc_media_player_is_playing(media_player) == 1)play_icon_image =gtk_image_new_from_icon_name("media-playback-pause",GTK_ICON_SIZE_BUTTON);elseplay_icon_image =gtk_image_new_from_icon_name("media-playback-start",GTK_ICON_SIZE_BUTTON);gtk_button_set_image(GTK_BUTTON(full_screen_pause_button),play_icon_image);...//下面还会有与实现自动隐藏浮动控制条窗体的代码,后面会说明}on_quit_full_screen事件处理函数如下:void on_quit_full_screen(GtkWidget *widget, gpointer data){gtk_window_unfullscreen(GTK_WINDOW(window));is_fullscreen = FALSE;gtk_widget_show(hbox);gtk_widget_show(menubar);gtk_widget_hide(ctrl_window);// 非全屏状态阻塞控制窗口的移动鼠标自动浮现g_signal_handlers_block_by_func(G_OBJECT(player_widget),on_mouse_motion, NULL);}2.创建一个浮动控制条窗体因为我们是要创建一个特殊的窗体即没有边框,考虑这一点可以使用gtk的弹出窗体类型GTK_WINDOW_POPUP来创建,另外我们还需要固定该窗体的大小和位置,其上的构件基本和主窗体底部的控制条基本一致。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
的变量,如下所示: //MovieDlg.h: header. file Protected : HICON m_hIcon; CActiveMovie3 m_ActiveMovie;
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
相关文档
最新文档