播放音乐下一曲
这其中有个问题每解决,之前创建的音乐播放对象cls因为每个方法里都用得到,所以把它创建在外面,但是创建在外面的时候,点击下一曲上一曲的时候明明调用到那个方法了但是始终不播放
然后我在每个时间里都重新创建了一个cls对象,解决了它不播放的问题,但是不知道问题出在哪里
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace WindowsForms小练习 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //创建一个list集合来存放音乐文件的全路径,用于给下面的音乐播放器使用 List<string> listSongs = new List<string>(); private void button1_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog();//打开文件对话 ofd.Title = "请选择音乐文件"; ofd.InitialDirectory = @"F:\影音\音乐\周杰伦\叶惠美";//initial最初的,字首的,directory 目录,名录 ,指南 ofd.Multiselect = true;//这是是否可以全选,true就是允许全选,不然默认只能选一个 ofd.Filter = "音乐文件|*.mp3|所有文件|*.*";//这是筛选器,怎么用要自己去百度了 ofd.ShowDialog();//dialog 对话的意思,展示对话 //获得我们在文件夹选择所有文件的全路径 string[] path = ofd.FileNames; for (int i = 0; i < path.Length; i++) { //将音乐文件的文件名加载到listbox中 listBox1.Items.Add(Path.GetFileName(path[i])); //将音乐文件的全路径存储到泛型集合中 listSongs.Add(path[i]); } } /// <summary> /// 双击实现播放 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void listBox1_DoubleClick(object sender, EventArgs e) { clsMCI cls = new clsMCI(); cls.FileName = listSongs[listBox1.SelectedIndex];//select选择 index 索引 cls.play(); } /// <summary> /// 点击上一曲 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { clsMCI cls = new clsMCI(); int index = listBox1.SelectedIndex; index--; if (index <0) { index = listBox1.Items.Count-1; } //将改变后的索引重新赋值给我当前选中项的索引,然后listbox里面的蓝条才会跟着移动 listBox1.SelectedIndex = index; cls.FileName = listSongs[index]; cls.play(); } /// <summary> /// 点击下一曲 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { clsMCI cls = new clsMCI(); int index = listBox1.SelectedIndex; index++; if(index==listBox1.Items.Count ) { index = 0; } //将改变后的索引重新赋值给我当前选中项的索引 listBox1.SelectedIndex = index; cls.FileName = listSongs[index]; cls.play(); } } }
插入播放mp3格式音乐的那个类
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace WindowsForms小练习 { /// <summary> /// clsMci 的摘要说明。 /// </summary> public class clsMCI { public clsMCI() { } //定义API函数使用的字符串变量 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] private string Name = ""; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] private string durLength = ""; [MarshalAs(UnmanagedType.LPTStr, SizeConst = 128)] private string TemStr = ""; int ilong; //定义播放状态枚举变量 public enum State { mPlaying = 1, mPuase = 2, mStop = 3 }; //结构变量 public struct structMCI { public bool bMut; public int iDur; public int iPos; public int iVol; public int iBal; public string iName; public State state; }; public structMCI mc = new structMCI(); //取得播放文件属性 public string FileName { get { return mc.iName; } set { try { TemStr = ""; TemStr = TemStr.PadLeft(127, Convert.ToChar(" ")); Name = Name.PadLeft(260, Convert.ToChar(" ")); mc.iName = value; ilong = APIClass.GetShortPathName(mc.iName, Name, Name.Length); Name = GetCurrPath(Name); Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media"; ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length, 0); ilong = APIClass.mciSendString(Name, TemStr, TemStr.Length, 0); ilong = APIClass.mciSendString("set media time format milliseconds", TemStr, TemStr.Length, 0); mc.state = State.mStop; } catch { } } } //播放 public void play() { TemStr = ""; TemStr = TemStr.PadLeft(127, Convert.ToChar(" ")); APIClass.mciSendString("play media", TemStr, TemStr.Length, 0); mc.state = State.mPlaying; } //停止 public void StopT() { TemStr = ""; TemStr = TemStr.PadLeft(128, Convert.ToChar(" ")); ilong = APIClass.mciSendString("close media", TemStr, 128, 0); ilong = APIClass.mciSendString("close all", TemStr, 128, 0); mc.state = State.mStop; } public void Puase() { TemStr = ""; TemStr = TemStr.PadLeft(128, Convert.ToChar(" ")); ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0); mc.state = State.mPuase; } private string GetCurrPath(string name) { if (name.Length < 1) return ""; name = name.Trim(); name = name.Substring(0, name.Length - 1); return name; } //总时间 public int Duration { get { durLength = ""; durLength = durLength.PadLeft(128, Convert.ToChar(" ")); APIClass.mciSendString("status media length", durLength, durLength.Length, 0); durLength = durLength.Trim(); if (durLength == "") return 0; return (int)(Convert.ToDouble(durLength) / 1000f); } } //当前时间 public int CurrentPosition { get { durLength = ""; durLength = durLength.PadLeft(128, Convert.ToChar(" ")); APIClass.mciSendString("status media position", durLength, durLength.Length, 0); mc.iPos = (int)(Convert.ToDouble(durLength) / 1000f); return mc.iPos; } } } public class APIClass { [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern int GetShortPathName( string lpszLongPath, string shortFile, int cchBuffer ); [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)] public static extern int mciSendString( string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback ); } }
加个东西(轮播图)
string[] path = Directory.GetFiles(@"C:\Users\11849\Desktop\壁纸\插画"); int i = 0; private void timer1_Tick(object sender, EventArgs e) { i++; if (i == path.Length) { i = 0; } pictureBox1.Image = Image.FromFile(path[i]); }