小学生之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 ...
随机推荐
- foreach遍历原理(一)
前言 要使用foreach的遍历的类首先要满足的条件 1. 类要实现公共方法 public IEnumerator GetEnumerator(){},还可以继承IEnumerable接口来实现这个方 ...
- C# 导出word文档及批量导出word文档(3)
在初始化WordHelper时,要获取模板的相对路径.获取文档的相对路径多个地方要用到,比如批量导出时要先保存文件到指定路径下,再压缩打包下载,所以专门写了个关于获取文档的相对路径的类. #regio ...
- 常用shell笔记
一. vi 编辑文件 1. 删除字符:在只读模式下,X:大字的X,每按一次删除光标所在位置的前面一个字符:x:小写字母x 每按一次删除光标所在位置的后面一个字符 2. 进入编辑模式:i.a.o切换进 ...
- 【转】常用背景色RGB数值
[转自]http://blog.sina.com.cn/s/blog_8fc890a201013z8h.html
- startActivityForResult
Activity提供了startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity关闭后会向前面的Ac ...
- JQUERY1.9学习笔记 之基本过滤器(五) 大于选择器
大于选择器:jQuery( ":gt(index)" )jQuery( ":gt(-index)" ) 例:大于TD5 到TD8 用黄色背景,TD8用红色文字. ...
- thinkphp基础入门(1)
ThinkPHP目录如下,Application顾名思义就是应用的意思(我们的代码放在这里),Public就是公共文件的意思(主要放JS CSS 等前端资源文件),ThinkPHP文件是框架的核心包( ...
- php与http协议
1.预定义变量$_SERVER $_SERVER 是一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组. 可以再后台输出 f ...
- 平方和与立方和 AC 杭电
平方和与立方和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- web安全:sql 注入
sql注入获取webshell寻找sql注入页面,操作数据库的地方向网站写入sql语句' union select 1,2, '<?php system($_GET["cmd" ...