• 在一个GameObject上进行多个AudioSource的控制


    1. http://www.verydemo.com/demo_c161_i105215.html?qqdrsign=03f8c
    2. using UnityEngine;  
    3. using System.Collections;  
    4.   
    5. public class SoundSwitch : MonoBehaviour {  
    6.     public AudioSource as1;  
    7.     public AudioSource as2;  
    8.     public AudioClip[] a1;  
    9.     // Use this for initialization  
    10.     void Start () {  
    11.        //代码关键点1(可选):增加两个AudioSource到GameObject  
    12.     this.gameObject.AddComponent("AudioSource");  
    13.     this.gameObject.AddComponent("AudioSource");  
    14.        //代码关键点2:GetComponents方法获得所有该GameObj上的AudioSource对象。这样就可以分别进行控制了。  
    15.     var as_array=this.gameObject.GetComponents(typeof(AudioSource));  
    16.     as1=(AudioSource)as_array[0];  
    17.     as2=(AudioSource)as_array[1];  
    18.     as1.clip=a1[1];  
    19.     as2.clip=a1[2];  
    20.     AudioPlay();  
    21.     }  
    22.       
    23.     // Update is called once per frame  
    24.     void Update () {  
    25.       
    26.     }  
    27.       
    28.     void AudioPlay()  
    29.     {  
    30.         as2.Play();  
    31.         as1.Play();  
    32.     }  
    33. }  

    另外

    http://www.codefans.net/articles/1334.shtml

    这是我收集的一个由C#编写的音乐播放器的主Form代码,觉得里面有一些小技巧还是不错的,特此发给大家。里面有播放器背景设置、线程定义、调用读取文件目录方法、播放时间计数器、设置LV背景、获取播放歌曲、播放按钮,切换播放or暂停、切换歌曲到下一首,调用切歌方法、显示播放列表、歌词局中、播放窗体最小化隐藏到托盘设置、进度条滚动模块、从歌曲列表中删除文件等。

    001
    using System;
    002
    using System.Collections.Generic;
    003
    using System.ComponentModel;
    004
    using System.Data;
    005
    using System.Drawing;
    006
    using System.Linq;
    007
    using System.Text;
    008
    using System.Windows.Forms;
    009
    using System.IO;
    010
    using System.Drawing.Imaging;
    011
    using System.Threading;
    012
    namespace MyMusicBox
    013
    {
    014
        public partial class MainForm : Form
    015
        {
    016
            public MainForm()
    017
            {
    018
                InitializeComponent();
    019
                SetStyle(ControlStyles.UserPaint, true);
    020
                SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
    021
                SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    022
                SetStyle(ControlStyles.DoubleBuffer, true);
    023
               
    024
            }
    025
            Song mySong = null;//播放的歌曲对象
    026
            ListViewItem itemLrc;//打开歌词路径项
    027
            Bitmap bm ;//用于动态设置LV背景
    028
            public SavingInfo sa = null;//持久化信息类
    029
            Thread thread;//后台线程
    030
      
    031
            #region 加载事件
    032
            private void MainForm_Load(object sender, EventArgs e)
    033
            {
    034
                    //调用读取配置文件方法
    035
                    Path.ReadPath();
    036
                    //窗体背景设置为配置文件中的图片
    037
                    this.BackgroundImage = Image.FromFile(Path.bgPath);
    038
                    //调用读取文件目录方法
    039
                    Path.ReadSong();
    040
                    //读取播放列表
    041
                    sa = new SavingInfo();
    042
                    sa.LoadPlayList();
    043
                    //绑定LV
    044
                    BindAllLV();
    045
                    BindPlayLV();
    046
                    SetLV();
    047
                    SetLrcBG();
    048
                    timer1.Enabled = Path.Playing;
    049
                    //显示时间
    050
                    lblTime.Text = System.DateTime.Now.ToString();
    051
                    //两个lbl用来根据歌曲总长和播放长度显示进度,设置位置重叠
    052
                    lblRuning.Location = lblLong.Location;
    053
                    //启动线程
    054
                    thread = new Thread(Renovate);
    055
                    thread.IsBackground = true;
    056
                    thread.Start();
    057
                 
    058
            }
    059
            #endregion
    060
            #region 后台刷新
    061
            /// <summary>
    062
            /// 时间计数状态等刷新
    063
            /// </summary>
    064
            private void Renovate()
    065
            {
    066
                //while (true)
    067
                //{
    068
                //    //计数
    069
                //    Count();
    070
                //    //获取当前时间
    071
                //    lblTime.Text = System.DateTime.Now.ToString();
    072
                //    //无歌曲提示,如果播放列表为空且当前播放列表为显示状态
    073
                //    if (lvPlay.Items.Count == 0 && lvPlay.Visible)
    074
                //        lblTs.Visible = true;
    075
                //    else
    076
                //        lblTs.Visible = false;
    077
                //    Thread.Sleep(1000);
    078
                //}
    079
            }
    080
            #endregion
    081
            #region 设置LV背景
    082
            /// <summary>
    083
            /// 设置LV背景
    084
            /// </summary>
    085
            public void SetLV()
    086
            {
    087
                bm = new Bitmap(this.BackgroundImage, this.Width, this.Height);
    088
                //绘制矩形,定义起始位置和宽高
    089
                Rectangle r = new Rectangle(lvPlay.Location.X, lvPlay.Location.Y, lvPlay.Width, lvSong.Height);
    090
                //按矩形尺寸和起始位置截取bm的一部分
    091
                bm= bm.Clone(r,bm.PixelFormat);
    092
                //把截取到的图片设置为lv背景,达到与主窗体背景完美契合的效果
    093
                lvSong.BeginUpdate();
    094
                lvSong.BackgroundImage = (Image)bm;
    095
                lvSong.EndUpdate();
    096
                lvPlay.BeginUpdate();
    097
                lvPlay.BackgroundImage = (Image)bm;
    098
                lvPlay.EndUpdate();
    099
            }
    100
            #endregion
    101
             
    102
            #region 获取歌曲
    103
            /// <summary>
    104
            /// 获取播放歌曲
    105
            /// </summary>
    106
            private void GetSong()
    107
            {
    108
                //接收播放歌曲方法,获得一个歌曲对象
    109
                this.mySong = PlayList.Play();
    110
                //如果歌曲对象不为空
    111
                if (mySong != null)
    112
                {
    113
                    //播放器路径设置为该歌曲路径
    114
                    wmp.URL = mySong.FileName;
    115
                    //调用方法,显示歌曲名、歌手
    116
                    lblName.Text = PlayList.GetName();
    117
                    lblSinger.Text = PlayList.GetSinger();
    118
                    mySong.SongState = SongPlayState.played;//修改播放状态
    119
                    //播放按钮图片修改为暂停图片
    120
                    btnPlay.Image = Image.FromFile("Images\stop.png");
    121
                    try
    122
                    {
    123
                         
    124
                        //读取歌词路径
    125
                        Path.ReadLrc();
    126
                        AddLrc();
    127
                        //启动一个定时器,此定时器只控制歌词轮播
    128
                        timer2.Start();
    129
                    }
    130
                    catch (Exception)
    131
                    {
    132
                        LrcNull();
    133
                        itemLrc = new ListViewItem();
    134
                        itemLrc.SubItems.Add("找不到该歌曲歌词文件!");
    135
                        itemLrc.ForeColor = Color.Blue;
    136
                        itemLrc.Font = new Font("微软雅黑", 14.25F, ((FontStyle)((FontStyle.Bold | FontStyle.Underline))), GraphicsUnit.Point, ((byte)(134)));
    137
                        lvLrc.Items.Add(itemLrc);
    138
                    }
    139
                }
    140
            }
    141
            #endregion
    142
            #region 主定时器
    143
            //定时器1
    144
            private void timer1_Tick(object sender, EventArgs e)
    145
            {
    146
                if (Path.songPath == "")
    147
                {
    148
                    timer1.Enabled = false;
    149
                    return;
    150
                }
    151
                 
    152
                //如果当前无播放歌曲,调用获取歌曲的方法
    153
                if (this.mySong == null)
    154
                {
    155
                    GetSong();
    156
                }
    157
                //自动下一首,如果当前播放完毕
    158
                if (this.wmp.playState == WMPLib.WMPPlayState.wmppsStopped)
    159
                {
    160
                    this.mySong = null; // 将歌曲设为空
    161
                    Path.lrcPath = "";
    162
                    Path.dicLrc.Clear();
    163
                    PlayModel();
    164
                    PlayList.PlayNext();
    165
                    Thread.Sleep(1000);
    166
                }
    167
                // 切歌,当前有播放歌曲且播放状态为cut
    168
                if (this.mySong != null && this.mySong.SongState == SongPlayState.cut)
    169
                {
    170
                    this.wmp.URL = "";//置空
    171
                    timer2.Stop();
    172
                    Path.dicLrc.Clear();
    173
                    Path.lrcPath = "";
    174
                    this.mySong = null;
    175
                }
    176
                //如果当前有播放歌曲,需要获取的一些属性
    177
                if (wmp.URL!="")
    178
                {
    179
                    //设置当前播放歌曲颜色
    180
                    SongColor();
    181
                    //获取音量控件显示值,根据控制刻度数量计算
    182
                    this.trackBar1.Value = wmp.settings.volume / 10;
    183
                    //歌曲时间显示,一个是总长度,一个是已播放长度,字符串类型
    184
                    lblAll.Text = wmp.currentMedia.durationString;
    185
                    lblRun.Text = wmp.Ctlcontrols.currentPositionString;
    186
                    //进度条,使用了两个lbl控件,歌曲长度/已播放长度=lbl1的宽/lbl2的宽
    187
                    //乘1000为防止数据过小出现错误
    188
                    double temp = (wmp.currentMedia.duration*1000) / (wmp.Ctlcontrols.currentPosition*1000);
    189
                    double width = lblLong.Width;
    190
                    double avg = width / temp;
    191
                    //判断>1为了防止avg数值小于int界限
    192
                    if(avg>1)
    193
                        lblRuning.Width = Convert.ToInt32(avg);
    194
                    picRun.Left = lblRuning.Right;
    195
                    //托盘显示播放歌曲
    196
                    this.notifyIcon1.Text =lblName.Text  + lblSinger.Text;
    197
                }
    198
            }
    199
            #endregion
    200
            #region 播放按钮
    201
            /// <summary>
    202
            /// 播放按钮,切换播放or暂停
    203
            /// </summary>
    204
            private void btnPlay_Click(object sender, EventArgs e)
    205
            {
    206
                if(!timer1.Enabled)
    207
                    timer1.Start();
    208
                //如果当前为正在播放
    209
                if (wmp.playState == WMPLib.WMPPlayState.wmppsPlaying)
    210
                {
    211
                    //暂停播放
    212
                    wmp.Ctlcontrols.pause();
    213
                    //按钮图片修改为播放
    214
                    btnPlay.Image = Image.FromFile("Images\play.png");
    215
                    //停止控制歌词滚动的定时器
    216
                    if (timer2.Enabled)
    217
                        timer2.Stop();
    218
                }
    219
                else if (wmp.playState == WMPLib.WMPPlayState.wmppsPaused)
    220
                {
    221
                    //开始播放
    222
                    wmp.Ctlcontrols.play();
    223
                    //按钮图片修改为暂停
    224
                    btnPlay.Image = Image.FromFile("Images\stop.png");
    225
                    //启动歌词滚动
    226
                    if (!timer2.Enabled&&Path.dicLrc.Count>0)
    227
                        timer2.Start();
    228
                }
    229
            }
    230
            #endregion
    231
            #region 切歌
    232
            //切换下一首,调用切歌方法
    233
            private void btnRight_Click(object sender, EventArgs e)
    234
            {
    235
                PlayList.Cut(false);
    236
            }
    237
            //上一首,调用切歌方法
    238
            private void btnLeft_Click(object sender, EventArgs e)
    239
            {
    240
                PlayList.Cut(true);
    241
            }
    242
            #endregion
    243
            #region 音量
    244
            //静音,静音!=音量为0
    245
            private void btnModel_Click(object sender, EventArgs e)
    246
            {
    247
                //如果播放器非静音状态,前景文字显示红叉,状态改为静音
    248
                if (wmp.settings.mute == false)
    249
                {
    250
                    btnSound.Text = "×";
    251
                    wmp.settings.mute = true;
    252
                }
    253
                else//反之,已是静音状态,清空红叉,设置非静音状态
    254
                {
    255
                    btnSound.Text = "";
    256
                    wmp.settings.mute = false;
    257
                }
    258
            }
    259
            //设置音量,此事件为控制刻度值变化时
    260
            private void trackBar1_Scroll(object sender, EventArgs e)
    261
            {
    262
                //音量设置为控制刻度*10(因为初始化的时候是/10)
    263
                wmp.settings.volume = this.trackBar1.Value * 10;
    264
            }
    265
            #endregion
    266
            #region 歌曲列表操作
    267
            /// <summary>
    268
            /// 绑定所有歌曲LV数据
    269
            /// </summary>
    270
            private void BindAllLV()
    271
            {
    272
                //如果所有歌曲集合为空,结束
    273
                if (PlayList.song == null)
    274
                    return;
    275
                lvSong.Items.Clear();
    276
                //遍历集合绑定到所有歌曲LV
    277
                foreach (Song s in PlayList.song)
    278
                {
    279
                    ListViewItem item = new ListViewItem(s.Name);
    280
                    item.Tag = s;
    281
                    item.SubItems.Add(s.Singer);
    282
                    lvSong.Items.Add(item);
    283
                }
    284
            }
    285
            //点击显示所有歌曲
    286
            private void tslblAll_Click(object sender, EventArgs e)
    287
            {
    288
                //隐藏播放列表
    289
                lvPlay.Visible = false;
    290
                //两个LV位置重叠
    291
                lvSong.Location = lvPlay.Location;
    292
                //点击后改变背景色
    293
                tslblAll.BackColor = Color.Silver;
    294
                tslblPlay.BackColor = Color.Transparent;
    295
                //显示所有歌曲LV
    296
                lvSong.Visible = true;
    297
            }
    298
            //点击显示播放列表
    299
            private void tslblPlay_Click(object sender, EventArgs e)
    300
            {
    301
                //调用绑定播放LV数据
    302
                BindPlayLV();
    303
                //背景色改变
    304
                tslblPlay.BackColor = Color.Silver;
    305
                tslblAll.BackColor = Color.Transparent;
    306
                //隐藏所有歌曲LV
    307
                lvSong.Visible = false;
    308
                //显示播放LV
    309
                lvPlay.Visible = true;
    310
            }
    311
            /// <summary>
    312
            /// 绑定播放列表
    313
            /// </summary>
    314
            private void BindPlayLV()
    315
            {
    316
                //如果播放集合不为空
    317
                if (PlayList.play!=null)
    318
                {
    319
                    lvPlay.Items.Clear();
    320
                    //遍历集合绑定播放LV
    321
                    foreach (Song s in PlayList.play)
    322
                    {
    323
                        int id = lvPlay.Items.Count + 1;
    324
                        s.Id = id;
    325
                        ListViewItem item = new ListViewItem(id.ToString());
    326
                        item.SubItems.Add(s.Name);
    327
                        item.Tag = s;
    328
                        lvPlay.Items.Add(item);
    329
                    }
    330
                }
    331
            }
    332
            /// <summary>
    333
            /// 歌曲计数
    334
            /// </summary>
    335
            private void Count()
    336
            {
    337
                //if (lvSong.Visible)
    338
                //    lblCount.Text = "已选" + lvSong.CheckedItems.Count + "\总" + lvSong.Items.Count;
    339
                //if (lvPlay.Visible)
    340
                //    lblCount.Text = "总" + lvPlay.Items.Count;
    341
            }
    342
            #endregion
    343
            #region 歌词操作
    344
            /// <summary>
    345
            /// 设置歌词背景
    346
            /// </summary>
    347
            public void SetLrcBG()
    348
            {
    349
                bm = new Bitmap(this.BackgroundImage, this.Width, this.Height);
    350
                //绘制矩形,定义起始位置和宽高
    351
                Rectangle r = new Rectangle(lvLrc.Location.X, lvLrc.Location.Y, lvLrc.Width, lvLrc.Height);
    352
                //按矩形尺寸和起始位置截取bm的一部分
    353
                bm = bm.Clone(r, PixelFormat.Undefined);
    354
                //把截取到的图片设置为lv背景,达到与主窗体背景完美契合的效果
    355
                lvLrc.BeginUpdate();
    356
                lvLrc.BackgroundImage = (Image)bm;
    357
                lvLrc.EndUpdate();
    358
            }
    359
            int nullCount;//记录空行位置
    360
            /// <summary>
    361
            /// 设置空行,使歌词局中
    362
            /// </summary>
    363
            private void LrcNull()
    364
            {
    365
                lvLrc.Items.Clear();
    366
                nullCount = (int)Math.Ceiling(Convert.ToDouble(lvLrc.Height / 30 / 2));
    367
                for (int i = 0; i <= nullCount; i++)
    368
                {
    369
                    lvLrc.Items.Add("");
    370
                }
    371
            }
    372
            /// <summary>
    373
            /// 添加歌词
    374
            /// </summary>
    375
            private void AddLrc()
    376
            {
    377
                LrcNull();
    378
                foreach (string key in Path.dicLrc.Keys)
    379
                {
    380
                    ListViewItem item = new ListViewItem();
    381
                    item.SubItems.Add(Path.dicLrc[key]);
    382
                    item.Tag = key;
    383
                    lvLrc.Items.Add(item);
    384
                }
    385
            }
    386
            //只控制歌词轮播
    387
            private void timer2_Tick(object sender, EventArgs e)
    388
            {
    389
                //调用显示歌词的方法
    390
                ShowLrc();
    391
            }
    392
            /// <summary>
    393
            /// 显示歌词
    394
            /// </summary>
    395
            private void ShowLrc()
    396
            {
    397
                foreach (ListViewItem item in lvLrc.Items)
    398
                {
    399
                    if (item.Tag == null)
    400
                        continue;
    401
                    if (item.Tag.ToString() == lblRun.Text )
    402
                    {
    403
                        item.ForeColor = Color.DarkOrange;
    404
                        item.Font = new Font("华文琥珀", 16F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(134)));
    405
                        lvLrc.Items[item.Index -1].ForeColor = Color.Silver;
    406
                        lvLrc.Items[item.Index - 1].Font = new Font("微软雅黑", 12F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(134)));
    407
                        if (item.Index + 1<lvLrc.Items.Count)
    408
                            lvLrc.Items[item.Index+1].EnsureVisible();             
    409
                    }
    410
                }
    411
            }
    412
            #endregion
    413
            #region  窗体隐藏到托盘设置
    414
            //最小化到托盘
    415
            private void btnMix_Click(object sender, EventArgs e)
    416
            {
    417
                this.Hide();
    418
            }
    419
            //主窗体大小状态变化时
    420
            private void MainForm_SizeChanged(object sender, EventArgs e)
    421
            {
    422
                if (this.WindowState == FormWindowState.Minimized)
    423
                {
    424
                    //启动一个控件,该控制可以让程序在右下角显示图标,需要提前设置该控制显示的图标图片
    425
                    this.notifyIcon1.Visible = true;
    426
                }
    427
            }
    428
            //托盘显示,双击显示窗体
    429
            private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    430
            {
    431
                ShowMain();
    432
            }
    433
            /// <summary>
    434
            /// 显示主窗体
    435
            /// </summary>
    436
            public void ShowMain()
    437
            {
    438
                if (!this.Visible)
    439
                {
    440
                    this.TopMost = true;
    441
                    this.Show();
    442
                    this.TopMost = false;
    443
                }
    444
                else
    445
                {
    446
                    this.TopMost = true;
    447
                    this.TopMost = false;
    448
                }
    449
            }
    450
            //托盘打开窗体
    451
            private void tsmiShow_Click(object sender, EventArgs e)
    452
            {
    453
                ShowMain();
    454
            }
    455
            //托盘退出
    456
            private void tsmiExit_Click(object sender, EventArgs e)
    457
            {
    458
                Application.Exit();
    459
            }
    460
            #endregion
    461
            #region  窗体位移
    462
            Point mouseOff;//鼠标移动位置变量
    463
            bool leftFlag;//标记是否为左键
    464
            private void pnlMain_MouseDown(object sender, MouseEventArgs e)
    465
            {
    466
                if (e.Button == MouseButtons.Left)
    467
                {
    468
                    mouseOff = new Point(-e.X, -e.Y); //得到变量的值
    469
                    leftFlag = true; //点击左键按下时标注为true;
    470
                }
    471
            }
    472
            private void pnlMain_MouseMove(object sender, MouseEventArgs e)
    473
            {
    474
                if (leftFlag)
    475
                {
    476
                    Point mouseSet = Control.MousePosition;
    477
                    mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
    478
                    Location = mouseSet;
    479
                }
    480
            }
    481
            private void pnlMain_MouseUp(object sender, MouseEventArgs e)
    482
            {
    483
                if (leftFlag)
    484
                {
    485
                    leftFlag = false;//释放鼠标后标注为false;
    486
                }
    487
            }
    488
        #endregion
    489
            #region 进度条滚动块移动
    490
            int runX;//记录滚动块初始位置
    491
            private void picRun_MouseDown(object sender, MouseEventArgs e)
    492
            {
    493
                runX = e.X;
    494
            }
    495
            //释放鼠标位移,进度前进
    496
            private void picRun_MouseUp(object sender, MouseEventArgs e)
    497
            {
    498
                picRun.Left += e.X - runX - picRun.Width / 2;
    499
                if (picRun.Left > lblLong.Right)
    500
                    picRun.Left = lblLong.Right;
    501
                if(picRun.Left<lblLong.Left)
    502
                    picRun.Left = lblLong.Left;
    503
                if (mySong != null)
    504
                {
    505
                    lblRuning.Width = picRun.Right- lblRuning.Left;
    506
                    double temp = (lblLong.Width*1000.0 )/ (lblRuning.Width*1000.0);
    507
                    wmp.Ctlcontrols.currentPosition = wmp.currentMedia.duration / temp;
    508
                }
    509
            }
    510
            #endregion
    511
            #region 歌曲增删操作
    512
            //添加歌曲到播放列表
    513
            private void tsmiAdd_Click(object sender, EventArgs e)
    514
            {
    515
                if (lvSong.CheckedItems.Count > 0)
    516
                {
    517
                    foreach (ListViewItem item in lvSong.CheckedItems)
    518
                    {
    519
                         // 遍历播放集合,如果存在不添加
    520
                         foreach (Song s in PlayList.play)
    521
                         {
    522
                             if (s.Name == item.Text)
    523
                             {
    524
                                 PlayList.play.Remove(s);
    525
                                 break;
    526
                             }
    527
                         }
    528
                         PlayList.play.Add(item.Tag as Song);
    529
                    }
    530
                }
    531
            }
    532
            //所有歌曲:删除选中歌曲
    533
            private void tsmiDel_Click(object sender, EventArgs e)
    534
            {
    535
                foreach (ListViewItem item in lvSong.Items)
    536
                {
    537
                    if (item.Checked)
    538
                    {
    539
                        PlayList.song.Remove(item.Tag as Song);
    540
                    } 
    541
                }
    542
                BindAllLV();
    543
            }
    544
            //全选歌曲
    545
            private void tsmiCheck_Click(object sender, EventArgs e)
    546
            {
    547
                foreach (ListViewItem item in lvSong.Items)
    548
                {
    549
                    if (tsmiCheck.Text == "全部选中")
    550
                    {
    551
                        item.Checked = true;
    552
                        if(item.Index+1==lvSong.Items.Count)
    553
                            tsmiCheck.Text = "取消选中";
    554
                    }
    555
                    else
    556
                    {
    557
                        item.Checked = false;
    558
                        if (item.Index + 1 == lvSong.Items.Count)
    559
                            tsmiCheck.Text = "全部选中";
    560
                    }
    561
                }
    562
            }
    563
            //选中项的同时选中复选框
    564
            private void lvSong_MouseDown(object sender, MouseEventArgs e)
    565
            {
    566
                if (lvSong.SelectedItems.Count > 0 && e.Button == MouseButtons.Left)
    567
                {
    568
                    lvSong.SelectedItems[0].Checked = true;
    569
                }
    570
            }
    571
            //播放列表删除事件
    572
            private void tsmiPlayDel_Click(object sender, EventArgs e)
    573
            {
    574
                foreach (ListViewItem item in lvPlay.Items)
    575
                {
    576
                    if (item.Selected)
    577
                    {
    578
                        //PlayList.id = (lvPlay.Items[item.Index+1].Tag as Song).Id;
    579
                        //this.song = null;
    580
                        PlayList.play.Remove(item.Tag as Song);
    581
                    }
    582
                }
    583
                BindPlayLV();
    584
            }
    585
            //清空播放列表
    586
            private void tsmiPlayClear_Click(object sender, EventArgs e)
    587
            {
    588
                PlayList.play.Clear();
    589
                this.mySong = null;
    590
                BindPlayLV();
    591
            }
    592
            //从播放列表删除文件
    593
            private void tsmiPlayDelFile_Click(object sender, EventArgs e)
    594
            {
    595
                if (lvPlay.SelectedItems.Count > 0)
    596
                {
    597
                    DelFile(lvPlay.SelectedItems[0]);
    598
                }
    599
            }
    600
            /// <summary>
    601
            /// 删除某项对应文件
    602
            /// </summary>
    603
            /// <param name="item"></param>
    604
            private void DelFile(ListViewItem item)
    605
            {
    606
                try
    607
                {
    608
                    string path = (item.Tag as Song).FileName;
    609
                    File.Delete(path);
    610
                    BindAllLV();
    611
                    BindPlayLV();
    612
                }
    613
                catch (Exception)
    614
                {
    615
                    MessageBox.Show("该文件为只读文件或用户权限不够,无法删除!");
    616
                }
    617
            }
    618
            //从所有歌曲中删除文件
    619
            private void tsmiDelFile_Click(object sender, EventArgs e)
    620
            {
    621
                if (lvSong.SelectedItems.Count > 0)
    622
                {
    623
                    DelFile(lvSong.SelectedItems[0]);
    624
                }
    625
            }
    626
            //双击列表项播放歌曲
    627
            private void lvPlay_DoubleClick(object sender, EventArgs e)
    628
            {
    629
                if (!timer1.Enabled)
    630
                {
    631
                    PlayList.id = (lvPlay.SelectedItems[0].Tag as Song).Id;
    632
                    timer1.Start();
    633
                }
    634
                if (lvPlay.SelectedItems.Count > 0)
    635
                {
    636
                    PlayList.id = (lvPlay.SelectedItems[0].Tag as Song).Id;
    637
                    this.mySong = null;
    638
                }
    639
            }
    640
            #endregion
    641
            #region 设置
    642
            //跳转设置窗体
    643
            private void btnSet_Click(object sender, EventArgs e)
    644
            {
    645
                SetForm set = new SetForm();
    646
                set.parent = this;//把主窗体传过去
    647
                set.Show(this);
    648
            }
    649
            #endregion
    650
            #region 回滚
    651
            /// <summary>
    652
            /// 路径重置后
    653
            /// </summary>
    654
            public void Back()
    655
            {
    656
                BindAllLV();
    657
                PlayList.Update();
    658
                timer1.Start();
    659
            }
    660
            #endregion
    661
            #region 退出
    662
            //关闭时保存列表
    663
            private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
    664
            {
    665
                if (Path.SaveList)
    666
                    sa.SavePlayList();
    667
            }
    668
            //面板退出
    669
            private void btnExit_Click(object sender, EventArgs e)
    670
            {
    671
                if (Path.Exit)
    672
                {
    673
                    Application.Exit();
    674
                }
    675
                else
    676
                {
    677
                    this.Hide();
    678
                }
    679
            }
    680
      
    681
            #endregion
    682
            #region 背景颜色等变换控制
    683
            private void btnLeft_MouseEnter(object sender, EventArgs e)
    684
            {
    685
                ((Button)sender).BackgroundImage = Image.FromFile("Images//allbtn_highlight.png");
    686
            }
    687
            private void btnLeft_MouseLeave(object sender, EventArgs e)
    688
            {
    689
                ((Button)sender).BackgroundImage = null;
    690
            }
    691
            private void tslblPlay_MouseEnter(object sender, EventArgs e)
    692
            {
    693
                ((ToolStripLabel)sender).BackgroundImage = Image.FromFile("Images//Album_bkg_wubian.png");
    694
            }
    695
            private void tslblPlay_MouseLeave(object sender, EventArgs e)
    696
            {
    697
                ((ToolStripLabel)sender).BackgroundImage = null;
    698
            }
    699
            //选中改变颜色
    700
            private void lvSong_ItemChecked(object sender, ItemCheckedEventArgs e)
    701
            {
    702
                foreach (ListViewItem item in lvSong.Items)
    703
                {
    704
                    if (item.Checked)
    705
                    {
    706
                        item.ForeColor = Color.DarkOrange;
    707
                    }
    708
                    else
    709
                    {
    710
                        item.ForeColor = Color.DimGray;
    711
                    }
    712
                }
    713
            }
    714
            /// <summary>
    715
            /// 当前播放歌曲改变颜色
    716
            /// </summary>
    717
            private void SongColor()
    718
            {
    719
                foreach (ListViewItem item in lvPlay.Items)
    720
                {
    721
                    if (item.SubItems[1].Text == lblName.Text)
    722
                    {
    723
                        item.ForeColor = Color.DeepSkyBlue;
    724
                    }
    725
                    else
    726
                    {
    727
                        item.ForeColor = Color.White;
    728
                    }
    729
                }
    730
            }
    731
            #endregion
    732
            #region 选择歌词
    733
            private void lvLrc_MouseDown(object sender, MouseEventArgs e)
    734
            {
    735
                if (lvLrc.SelectedItems.Count>0&&lvLrc.SelectedItems[0] == itemLrc)
    736
                {
    737
                    if (Path.OpenLrc())
    738
                    {
    739
                        AddLrc();
    740
                        //启动一个定时器,此定时器只控制歌词轮播
    741
                        timer2.Start();
    742
                    }
    743
                }
    744
            }
    745
            #endregion
    746
            #region 窗体最大化设置
    747
            Size now;//原始尺寸
    748
            Point pN;//原始位置
    749
            //最大化
    750
            private void btnMax_Click(object sender, EventArgs e)
    751
            {
    752
                Size max = new Size(Screen.PrimaryScreen.WorkingArea.Width - 10, Screen.PrimaryScreen.WorkingArea.Height - 20);
    753
                if (this.Size != max)
    754
                {
    755
                    pN = this.Location;
    756
                    now= this.Size;
    757
                    this.Size = max;
    758
                    this.Left = 5;
    759
                    this.Top = 5;
    760
                    btnMax.Image = Image.FromFile("Images//max1.png")
    761
    ;
    762
                }
    763
                else
    764
                {
    765
                    this.Location = pN;
    766
                    this.Size = now;
    767
                    btnMax.Image = Image.FromFile("Images//max.png");
    768
                }
    769
                SetLV();
    770
                SetLrcBG();
    771
            }
    772
            #endregion
    773
            #region 歌词、MV切换
    774
            private void tsmiLrc_Click(object sender, EventArgs e)
    775
            {
    776
                lvLrc.Visible = true;
    777
                wmp.Visible = false;
    778
                tsmiLrc.BackColor = Color.LawnGreen;
    779
                tsmiMv.BackColor = Color.Transparent;
    780
            }
    781
            private void tsmiMv_Click(object sender, EventArgs e)
    782
            {
    783
                wmp.Location = lvLrc.Location;
    784
                wmp.Size = lvLrc.Size;
    785
                lvLrc.Visible = false;
    786
                wmp.Visible = true;
    787
                tsmiLrc.BackColor = Color.Transparent;
    788
                tsmiMv.BackColor = Color.LawnGreen;
    789
            }
    790
            #endregion
    791
            #region 播放模式切换
    792
            /// <summary>
    793
            /// 播放模式
    794
            /// </summary>
    795
            private void PlayModel()
    796
            {
    797
                if (tsmiOne.Checked)
    798
                {
    799
                    PlayList.PlayOne();
    800
                }
    801
                else if (tsmiSJ.Checked)
    802
                {
    803
                    PlayList.PlayRandom();
    804
                }
    805
            }
    806
            private void tsmiXH_Click(object sender, EventArgs e)
    807
            {
    808
                ToolStripMenuItem ts=((ToolStripMenuItem)sender);
    809
                foreach(ToolStripMenuItem item in tsmiModel.DropDownItems)
    810
                {
    811
                    if (ts.Checked && ts == item)
    812
                    {
    813
                        continue;
    814
                    }
    815
                    else
    816
                    {
    817
                        item.Checked = false;
    818
                    }
    819
                }
    820
            }
    821
            #endregion
    822
             
    823
        }
    824
    }
  • 相关阅读:
    Android 之 进度条样式
    最佳下载实例
    最佳下载实例
    使用git将项目上传到github(最简单方法)
    使用git将项目上传到github(最简单方法)
    打开URL启动android默认浏览器,启动指定浏览器
    打开URL启动android默认浏览器,启动指定浏览器
    android指定浏览器打开特定网页
    【POJ】[3026]Borg Maze
    【POJ】[3026]Borg Maze
  • 原文地址:https://www.cnblogs.com/lfy007/p/4816342.html
Copyright © 2020-2023  润新知