小学生之KTV播放原理
第一步:
创建一个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播放原理的更多相关文章
- KTV点歌系统播放原理
北大青鸟KTV点歌系统播放原理 指导老师--原玉明 1.首先知道有两个类(PlayList Song) PlayList类中有一方法 public static bool AddSong(Song ...
- KTV歌曲播放原理
歌曲播放原理 一开始要有一个Song类,在类外面定义枚举,在里面放四种状态, 为:已播放,未播放,重唱,切歌 在类里把歌曲名称和路径封装成字段 起初每首歌的状态默认为未播放 通过MadeSongPla ...
- 小学生之KTV项目文档(bdqn)
第一步:创建数据库连接方法和打开方法和关闭方法! 1 public class DBHelper 2 { 3 private string str = "server=.;database= ...
- KTV项目 SQL数据库的应用 结合C#应用窗体
五道口北大青鸟校区 KTV项目 指导老师:袁玉明 歌曲播放原理 SQL数据库关系图 C#解决方案类图 第一步:创建数据库连接方法和打开方法和关闭方法! public class DBHelper { ...
- iOS视频边下边播--缓存播放数据流
实现视频边下边播,这里的边下边播不是单独开一个子线程去下载,而是把视频播放的数据给保存到本地.简而言之,就是使用一遍的流量,既播放了视频,也保存了视频. 用到的框架:<AVFoundation/ ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇01:播放序列动画》
1.播放序列动画 系列动画播放概述 2D游戏中的动画系统,不同于3D游戏.3D游戏中,角色美术资源不仅包含角色模型的,还包括角色的贴图和动作等,模型本身自带角色的动作动画效果.2D游戏中,角色美术资源 ...
- 视频边下边播--缓存播放数据流-b
google搜索“iOS视频变下边播”,有好几篇博客写到了实现方法,其实只有一篇,其他都是copy的,不过他们都是使用的本地代理服务器的方式. 原理很简单,但是缺点也很明显,需要自己写一个本地代理服务 ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程06:技能播放的逻辑关系》
6.技能播放的逻辑关系 技能播放概述: 当完成对技能输入与检测之后,程序就该对输入在缓存器中的按键操作与程序读取的技能表信息进行匹配,根据匹配结果播放相应的连招技能. 技能播放原理: 按键缓存器中内容 ...
- WM8960音频播放
第一节 音频播放原理首先需要申明一下,本章的代码来自网络,参考了亚嵌教育李明老师(论坛ID:limingth)的帖子: http://www.arm9home.net/read.php?tid=205 ...
随机推荐
- VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程 转载
VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程 转载 #include <stdio.h>#include &l ...
- [转]Windows中的句柄(handle)
1.句柄是什么? 在windows中,句柄是和对象一一对应的32位无符号整数值.对象可以映射到唯一的句柄,句柄也可以映射到唯一的对象.2.为什么我们需要句柄? 更准确地说,是windows需要 ...
- Mysql中的DQL查询语句
----------------1.查询所有列 --查询 学生 表所有记录(行) select *from 学生 --带条件的查询 select *from 学生 where 年龄>19 --- ...
- c++实现dll注入其它进程
DLL注入技术才具有强大的功能和使用性,同时简单易用,因为DLL中可以实现复杂的功能和很多的技术. 技术要点: 1.宿主进程调用LoadLibrary,就可以完成DLL的远程注入.可以通过Create ...
- Number对象
<script type="text/javascript"> /* Number对象. 创建Number对象的方式: 方式1: var 变量= new Number( ...
- mysql 索引管理原则
最近在学习mysql的索引优化,结合着我们网盟系统的一些业务,翻阅一些资料,整理出如下的一些想法: 1.索引建立的原则一:最左前缀匹配原则 ,非常重要的原则,mysql会一直向右匹配直到遇到范围查询( ...
- oldboy第十三天学习
1.现在给我的感觉是,python终于入门了开始越学越简单了.变得更好理解了. 一.memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它 ...
- Xcode中将图片放入Images.xcassets和直接拖入的区别
将图片放入Images.xcassets 在mainBundle里面Xcode会生成一个Assets.car文件,将我们放在Images.xcassets的图片打包在里面.(程序会变大(?)) 无论是 ...
- ubuntu14.04 reaver不能正常使用
原帖地址: ubuntu14.04 reaver不能正常使用 http://forum.anywlan.com/thread-282404-1-1.html (出处: http://www.anywl ...
- Moving Acerage
http://zh.wikipedia.org/zh/%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87