小学生之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 ...
随机推荐
- c++中 cin、cin.get()、cin.getline()、cin.getchar()的区别
①cin>>:无法接收空格.Tap键且以空格.Tap键.回车符为分隔符: ②cin.get( ):可以接收空格.Tap键且以回车符为结束符: 一:可输入单个字符 格式: char ch; ...
- 你好,C++(28)用空间换时间 5.2 内联函数 5.3 重载函数
5.2 内联函数 通过5.1节的学习我们知道,系统为了实现函数调用会做很多额外的幕后工作:保存现场.对参数进行赋值.恢复现场等等.如果函数在程序内被多次调用,且其本身比较短小,可以很快执行完毕,那么 ...
- php页面显示空白
问题: 本人php初学者,网站下载wamp5,安装好之后,测试环境是否正常,用phpinfo(),但是页面不能正确显示. 1.显示连接错误 2.显示空白页 解决方法: 一.显示连接错误 步骤: 1.p ...
- :after伪类+content内容生成经典应用举例
一.简单说说content内容生成 content内容生成就是通过content属性生成内容,content属性早在CSS2.1的时候就被引入了,可以使用:before以及:after伪元素生成内容. ...
- Mysql中的DQL查询语句
----------------1.查询所有列 --查询 学生 表所有记录(行) select *from 学生 --带条件的查询 select *from 学生 where 年龄>19 --- ...
- 转载:JSONObject.fromObject(map)(JSON与JAVA数据的转换)
转载网址:http://blog.sina.com.cn/s/blog_821025b70100wh6v.html JSON与JAVA数据的转换(JSON 即 JavaScript Object Na ...
- js 音乐
define(function(require,exports,module){ var $music = document.getElementById('music'); var $music_m ...
- Css3 javascript 写的分类
不兼容IE10以下的浏览器 <!DOCTYPE html> <html> <head> <meta charset=utf-> <title> ...
- Swift—final关键字-b
在类的定义中使用final关键字声明类.属性.方法和下标.final声明的类不能被继承,final声明的属性.方法和下标不能被重写. 下面看一个示例: final class Person { //声 ...
- 【原创】CLEVO P157SM外接鼠标键盘失灵解决:更换硅脂(附带最新跑分数据)
作者批注:本文允许转载,并且希望给搜索未来人类.蓝天.CLEVO.更换硅脂或者任何有关关键字的朋友提供帮助. 原文地址:http://www.cnblogs.com/c4isr/p/3514140.h ...