第一步:

创建一个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. PHP Math

    PHP Math 简介 Math 函数能处理 integer 和 float 范围内的值. 安装 PHP Math 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. PHP 5 Math 函 ...

  2. Knockoutjs官网翻译系列(二) Observable 数组

    承接前文,前文书说道了KO框架中如何使用observable的视图模型属性来与UI元素进行绑定并自动进行双向更新的事儿.observable属性除了服务基础数据类型之外,还定义了专门为服务数组类型的o ...

  3. java事件处理3

    鼠标拖动事件 接口MouseMotionListener 两个方法 mouseDragged(MouseEvent)//拖动鼠标 mouseMoved(MouseEvent)//移动鼠标 一个拖动按钮 ...

  4. 百度文本编辑器 Ueditor for net 使用七牛存储附件的实现

    百度编辑器功能强大,确实好用,可惜附件使用本地存储,如果网站的用户量巨大,则会使得网站目录变得非常庞大,而且文件不易于管理,七牛云存储在附件存储方面下了不少功夫,用起来感觉不错,要是将ueditor ...

  5. validate()的配置项

    1.submitHandler //通过验证成功后运行的函数 代码: $("#mainForm").validate({ ...... rules:{ username:{//此处 ...

  6. 命令passwd报错因inode节点处理记录

    命令passwd报错因inode节点处理记录故障现象:1.修改密码时报错 passwd: Authentication token manipulation error2.添加用户报错:unable ...

  7. js本地存储解决方案(localStorage与userData)

    WEB应用的快速发展,是的本地存储一些数据也成为一种重要的需求,实现的方案也有很多,最普通的就是cookie了,大家也经常都用,但是cookie的缺点是显而易见的,其他的方案比如:IE6以上的user ...

  8. windows编辑文本和unix编辑文本的回车符问题

    我们的开发环境一般都使用windows操作系统,而测试环境和线上环境一般使用linux.windows下编辑的shell脚本,上传到windows下会发生错误.出现两种情况: 1.BOM头问题,前面有 ...

  9. python内置函数(4)

    12.pow:      >>> 2**10 1024 >>> pow(2,10) 1024 13.repr():忽略.. 14.reversed():反转.. 1 ...

  10. 限制对比度自适应直方图均衡(Contrast Limited Adaptive histgram equalization/CLAHE)

    转自:http://www.cnblogs.com/Imageshop/archive/2013/04/07/3006334.html 一.自适应直方图均衡化(Adaptive histgram eq ...