第一步:

创建一个Song类

//歌曲名称

public  string SongName { get; set; }

//歌曲路劲

public string SongPath { get; set; }

第二步:

创建一个ListSong类

//存储要播放的歌曲

public static  List<Song> list = new List<Song>();

public static int SongIndex = 0;//当前播放的歌曲在集合中的索引

/// <summary>

/// 把歌曲添加到List集合中

/// </summary>

public static void AddSong(Song song)

{

list.Add(song);

}

/// <summary>

/// 获得播放的歌曲

/// </summary>

public static Song GetPalySong()

{

if (list.Count > 0)  àà判断集合中是否是元素

{

if (list.Contains(list[SongIndex]))   //看集合中是否包含list[SongIndex]这首歌

{

return list[SongIndex];

}

}

return null;

}

/// <summary>

/// 获取下一首播放歌曲的名字

/// </summary>

/// <returns></returns>

public static string GetNextSongName()

{

string name=string.Empty;    //定义一个name字段,接受要播放下一首歌曲的名称

if (list.Count>1)     //集合中的元素必须大于1才能获取下一首歌曲的名称

{

name = list[SongIndex + 1].SongName;

}

return name;

}

/// <summary>

/// 播放下一首

/// </summary>

public static void MoveOn()

{

//判断当前的歌曲不等于空并且播放歌曲的状态不是重播的情况下就执行SongIndex++,从而实现播放下一首歌曲

if (list[SongIndex] != null && list[SongIndex].Sate == Sateze.again)

{

list[SongIndex].ChagenSate();

}

else

{

SongIndex++;

}

}

第三步:

在点击DataGirlView控件中的一首歌曲时,

//创建一个Song类对象

Song song = new Song();

//获取歌曲名称

song.SongName = this.dataGridView1.SelectedRows[0].Cells[3].Value.ToString();

//获取歌曲路劲

song.SongPath = this.dataGridView1.SelectedRows[0].Cells[2].Value.ToString();

/调用ListSong中的AddSong方法给集合中添加数据

ListSong.AddSong(song);

第四步:

在主窗体FrmMain中定义一个Song类对象,接受要播放的歌曲

private Song song;//当前播放的歌曲

//定义一个方法播放要播放的歌曲

/// <summary>

/// 播放歌曲

/// </summary>

public void LoadPalyedSong()

{

this.song = ListSong.GetPalySong();//调用ListSong类中的GetPalySong方法,

if (song!=null)

{

this.song.ChagenSate();     //改变歌曲的状态

axWindowsMediaPlayer1.URL = @"E:\KTV\song\" + this.song.SongPath;  //:播放器播放的路劲

this.textBox1.Text = this.song.SongName;   //当前播放的歌曲名称

this.textBox2.Text = ListSong.GetNextSongName();   //调用ListSong类中的GetNextSongName方法获取下一首歌曲的名字

}

}

在主窗体FrmMain中有一个Timer空间,它有一个Tick事件,在它的事件中有这样几句代码

if (song==null)     //强行将song置为空,为了播放歌曲

{

LoadPalyedSong();

}

//播放下一首歌曲                      判断播放器空间的状态为停止时

if (axWindowsMediaPlayer1.playState==WMPLib.WMPPlayState.wmppsStopped)

{

song = null;     //将song置为空,song指向下一首歌曲

ListSong.MoveOn();     //调用ListSong类中的MoveOn方法播放下一首歌曲

}

第五步:

将从DataGirlView空间中选择的歌曲添加到ListView控件中

this.listView1.Items.Clear();   //首先清空一下ListView控件

foreach (Song item in ListSong.list)  //遍历整个集合

{

ListViewItem lvitem = new ListViewItem(item.SongName);

lvitem.SubItems.Add(item.SongPath);

string sate = item.Sate == Sateze.unPaly ? "未播放" : "已播放";

lvitem.SubItems.Add(sate);

this.listView1.Items.Add(lvitem);   //绑定到ListView控件中

}

小学生之KTV播放原理的更多相关文章

  1. KTV点歌系统播放原理

    北大青鸟KTV点歌系统播放原理 指导老师--原玉明 1.首先知道有两个类(PlayList   Song) PlayList类中有一方法 public static bool AddSong(Song ...

  2. KTV歌曲播放原理

    歌曲播放原理 一开始要有一个Song类,在类外面定义枚举,在里面放四种状态, 为:已播放,未播放,重唱,切歌 在类里把歌曲名称和路径封装成字段 起初每首歌的状态默认为未播放 通过MadeSongPla ...

  3. 小学生之KTV项目文档(bdqn)

    第一步:创建数据库连接方法和打开方法和关闭方法! 1 public class DBHelper 2 { 3 private string str = "server=.;database= ...

  4. KTV项目 SQL数据库的应用 结合C#应用窗体

    五道口北大青鸟校区 KTV项目 指导老师:袁玉明 歌曲播放原理 SQL数据库关系图 C#解决方案类图 第一步:创建数据库连接方法和打开方法和关闭方法! public class DBHelper { ...

  5. iOS视频边下边播--缓存播放数据流

    实现视频边下边播,这里的边下边播不是单独开一个子线程去下载,而是把视频播放的数据给保存到本地.简而言之,就是使用一遍的流量,既播放了视频,也保存了视频. 用到的框架:<AVFoundation/ ...

  6. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇01:播放序列动画》

    1.播放序列动画 系列动画播放概述 2D游戏中的动画系统,不同于3D游戏.3D游戏中,角色美术资源不仅包含角色模型的,还包括角色的贴图和动作等,模型本身自带角色的动作动画效果.2D游戏中,角色美术资源 ...

  7. 视频边下边播--缓存播放数据流-b

    google搜索“iOS视频变下边播”,有好几篇博客写到了实现方法,其实只有一篇,其他都是copy的,不过他们都是使用的本地代理服务器的方式. 原理很简单,但是缺点也很明显,需要自己写一个本地代理服务 ...

  8. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程06:技能播放的逻辑关系》

    6.技能播放的逻辑关系 技能播放概述: 当完成对技能输入与检测之后,程序就该对输入在缓存器中的按键操作与程序读取的技能表信息进行匹配,根据匹配结果播放相应的连招技能. 技能播放原理: 按键缓存器中内容 ...

  9. WM8960音频播放

    第一节 音频播放原理首先需要申明一下,本章的代码来自网络,参考了亚嵌教育李明老师(论坛ID:limingth)的帖子: http://www.arm9home.net/read.php?tid=205 ...

随机推荐

  1. Debian/Ubuntu手动编译安装MongoDB C++11驱动及驱动测试

    本文章仅限cnblogs网站内转载!请某网站自觉,遵纪守法,尊重原创! 系统环境情况: 最小化.无桌面环境 新安装的Debian 8 Server 版本操作系统虚拟机一台 手动编译安装MongoDB ...

  2. jQuery中的$("#my_id").html()中一点要注意的

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAA3CAIAAAB4jZ1xAAAJdUlEQVR4nO2dPU/rPBTHn2/VoVMrXZ

  3. php stripslashes() addslashes() 解析

    stripslashes() 函数删除由 addslashes() 函数添加的反斜杠. 实例: <?php $str = "Is your name O\'reilly?"; ...

  4. 【结构型】Adapter模式

    Adapter模式主要意图是将类或接口转换成客户期望的接口,从而使得原本不兼容.无法在一起工作的接口可以在一起工作.该模式有两种形式的Adapter法,一是继承方式:二是对象关联依赖方式. 继承方式A ...

  5. 针对access数据库的增删改查

    1.执行查询操作:(ExecuteReader方法) string myConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data ...

  6. 发布项目到 Linux 上运行 Core 项目

    发布项目到 Linux 上运行 Core 项目 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win ...

  7. Git使用说明--常用命令

    These are common Git commands used in various situations: start a working area (see also: git help t ...

  8. 深入理解CSS选择器优先级的计算

    选择器的优先级关系到元素应用哪个样式.在CSS2.1的规范(http://www.w3.org/TR/2009/CR-CSS2-20090908/cascade.html#specificity)中是 ...

  9. Altium Designer6打印PCB转印纸设置方法

    在学校经常要用热转印法做一些简单的PCB板,自己用的AD6.6,学校的打印店用99的比较多,这就造成打印不方便.为了充分利用自己实验室的打印机,今天买回来两张PCB打印纸.发现用AD6打印同比例的PC ...

  10. yiic模块module使用

    模块是一个独立的软件单元,它包含 模型, 视图, 控制器 和其他支持的组件. 在许多方面上,模块看起来像一个 应用.主要的区别就是模块不能单独部署,它必须存在于一个应用里. 用户可以像他们访问普通应用 ...