zoukankan      html  css  js  c++  java
  • 梦之翼团队项目(音乐播放器)

    一 设计思路

    整体概括:

      当我们得到这个项目时,也感觉到了迷茫,不过经过查阅资料,我们还是克服了,我们想做一个类似于酷狗音乐的那样,但是只是能力有限,做到了现在这个程度,我们用的是程序自身的一个插件,这个插件有许多功能都已经有了,(当时我们也想过使用类库,但是能力可能太差了,不过,我们会尝试的),既然插件自身有许多功能,那么我们就对它没有的功能进行了进一步的开发!

    (1)软件界面介绍:

    上面有:播放,暂停,上一曲,下一曲,音量,添加歌曲及添加歌曲文件夹,单曲循环,随机播放,顺序播放,清空列表,退出程序,添加皮肤等功能

    (2) 添加歌曲或者添加歌曲文件夹

    当播放列表中为空时,进行添加歌曲,有两种方式,一种是歌曲一首或者多首的交叉选择,一种是整个文件夹的选择

    上图:

    (3) 添加完歌曲就可以进行相关操作了,自带插件的功能不做过多分析了,接下来就是播放模式的功能分析,播放模式有单曲循环,随机播放,顺序播放等,每次选择之前必须先暂停歌曲,在进行相关的选择,图片说明:

    (4) 清空列表和退出程序,当用户不想听这些歌曲了,可以清空列表,进行重新的选择,也可以直接退出程序,

    (5)接下来就是一个小功能了,添加皮肤,当用户想更换皮肤时,可以单击右上角的心形图标,即可

    二 代码编写

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Xml;
    
    namespace MusicPlayer
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string[] musicPath = new string[1000];  //用于保存歌曲目录
            int musicCount = 0;
            private void Form1_Load(object sender, EventArgs e)
            {
                axWindowsMediaPlayer1.BeginInit();   //播放器相关属性的设置
                axWindowsMediaPlayer1.settings.autoStart = true;
                axWindowsMediaPlayer1.settings.setMode("shuffle", false);
                axWindowsMediaPlayer1.settings.enableErrorDialogs = true;
                axWindowsMediaPlayer1.settings.balance = 0;
                axWindowsMediaPlayer1.settings.mute = false;
                axWindowsMediaPlayer1.settings.volume = 100;
                if (File.Exists("listbox.txt"))  //如果存在播放列表,那么加载播放列表
                {
                    StreamReader reader = new StreamReader("listbox.txt");
                    try
                    {
                        while (reader.Peek() != -1)
                        {
                            string filepath = reader.ReadLine();
                            if (File.Exists(filepath))
                            {
                                musicPath[musicCount++] = filepath;
                                string filename = Path.GetFileName(filepath);
                                listBox1.Items.Add(filename);  //listbox用来显示歌曲名
                                axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(filepath));
                            }
                        }
                        listBox1.SelectedIndex = 0;
                    }
                    catch (Exception)
                    {
                        listBox1.SelectedIndex = -1;
                        MessageBox.Show("加载播放列表失败或者列表为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    finally
                    {
                        reader.Close();
                    }
                }
            }
    
            private void 添加本地歌曲ToolStripMenuItem_Click(object sender, EventArgs e) //添加本地歌曲的方法
            {
    
               
                aa.FileName = "";
                aa.Multiselect = true;
    
    
                DialogResult dr = aa.ShowDialog();
                if (dr == DialogResult.OK)
                {
    
                    axWindowsMediaPlayer1.URL = aa.FileName;
                    string[] filepath = aa.FileNames;
                    foreach (string filename in filepath)
                    {
                        if (Path.GetExtension(filename) == ".mp3")
                        {
                            string filenam = Path.GetFileName(filename);
                            listBox1.Items.Add(filenam);
                            musicPath[musicCount++] = filename;
                            axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(filename));
                        }
                    }
                }
    
                
            }
           
    
            private void 添加本地歌曲文件夹ToolStripMenuItem_Click(object sender, EventArgs e)//添加本地歌曲文件夹的方法
            {
    
                DialogResult dr = folderBrowserDialog1.ShowDialog();
                if (dr == DialogResult.OK)
                {
                    string[] filepath = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
                    foreach (string s in filepath)
                    {
                        if (Path.GetExtension(s) == ".mp3")
                        {
                            string filename = Path.GetFileName(s);
                            listBox1.Items.Add(filename);
                            musicPath[musicCount++] = s;
                            axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(s));
                        }
                    }
                }
               
            }
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e) //双击列表歌曲播放的方法
            {
                int j = listBox1.SelectedIndex;
                if (listBox1.Items.Count > 0 && listBox1.SelectedIndex >= 0)
                {
                    axWindowsMediaPlayer1.Ctlcontrols.playItem(axWindowsMediaPlayer1.currentPlaylist.get_Item(listBox1.SelectedIndex));
                }
            }
           
            private void button2_Click(object sender, EventArgs e) //添加背景图片的方法
            {
                DialogResult result = openFileDialog1.ShowDialog();
                if (result == DialogResult.OK)
                {
                    pictureBox1.ImageLocation = openFileDialog1.FileName;
                }
            }
    
            private void 顺序播放ToolStripMenuItem_Click(object sender, EventArgs e) //顺序播放的方法
            {
                axWindowsMediaPlayer1.settings.playCount = 1;
                axWindowsMediaPlayer1.currentPlaylist.clear();
                for (int j = 0; j < musicCount; j++)
                {
                    if (musicPath[j] != string.Empty)
                    {
                        axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(musicPath[j]));
                    }
                }
                axWindowsMediaPlayer1.settings.setMode("shuffle", false);
                axWindowsMediaPlayer1.Ctlcontrols.playItem(axWindowsMediaPlayer1.currentPlaylist.get_Item(0));
            }
    
            private void 单曲循环ToolStripMenuItem_Click(object sender, EventArgs e) //单曲循环的方法
            {
                    axWindowsMediaPlayer1.Ctlcontrols.stop();
                    axWindowsMediaPlayer1.currentPlaylist.clear();
                    if (listBox1.SelectedIndex != -1 && listBox1.Items.Count > 0)
                    {
                        int k = listBox1.SelectedIndex;
                        for (int i = 0; i < 1000; i++)
                        {
                           axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(musicPath[k]));
                        }
                    }
                    axWindowsMediaPlayer1.Ctlcontrols.playItem(axWindowsMediaPlayer1.currentPlaylist.get_Item(0));
                }
    
            private void 随机播放ToolStripMenuItem_Click(object sender, EventArgs e) //随机播放的方法
            {
                    axWindowsMediaPlayer1.settings.playCount = 1;
                    axWindowsMediaPlayer1.Ctlcontrols.stop();
                    axWindowsMediaPlayer1.currentPlaylist.clear();
                    Random rd = new Random(DateTime.Now.Millisecond);
                    for (int i = 0; i < 1000; i++)
                    {
                        int j = rd.Next(0, musicCount);
    
                        if (musicPath[j] != string.Empty)
                        {
                            axWindowsMediaPlayer1.currentPlaylist.insertItem(axWindowsMediaPlayer1.currentPlaylist.count, axWindowsMediaPlayer1.newMedia(musicPath[j]));
                        }
                    }
                    axWindowsMediaPlayer1.Ctlcontrols.playItem(axWindowsMediaPlayer1.currentPlaylist.get_Item(0));
            }
    
            private void 清空列表ToolStripMenuItem_Click(object sender, EventArgs e) //清空播放列表的方法
            {
                    axWindowsMediaPlayer1.Ctlcontrols.stop();  //先停止播放器
                    listBox1.Items.Clear();  //清空listbox
                    axWindowsMediaPlayer1.currentPlaylist.clear();  //清空播放列表
                    for (int j = 0; j < musicCount; j++)
                    {
                        musicPath[j] = "";
                    }
            }
    
            private void 退出程序ToolStripMenuItem_Click(object sender, EventArgs e) //退出程序的方法
            {
                    axWindowsMediaPlayer1.Ctlcontrols.stop();
                    axWindowsMediaPlayer1.close();
                    StreamWriter writer = new StreamWriter("listbox.txt", false, Encoding.Unicode);  //保存播放列表
                    for (int i = 0; i <= musicCount - 1; i++)
                    {
                        if (musicPath[i] != string.Empty)
                        {
                            writer.WriteLine(musicPath[i]);
                        }
                    }
                    writer.Close();
                    Application.Exit(); 
            }
           }
        }

    三 软件测试

     软件测试我们遇到许多困难,但是经过成员的努力,也克服了许多,下面直接上图

    四 PSP耗时分析

    五 团队成员任务分配

    六 总结

    这是我们第一进行团队项目,整个过程感觉棒棒哒!经过每位成员的不懈努力,我们终于把这个项目拿下来咯,做出来了一个还算完美的播放器(ps:嘿嘿,小自恋一下咯,这个软件还有需要改进的地方,不过,我们团队还会继续加油的!)哈哈,以后我们就可以用自己做的播放为听歌啦!

    每一个成功的背后都有无数的艰辛与困难,我们团队中间也遇到了许多问题,例如:

     一:团队整体的运行与成员的相互磨合

     二:软件整体功能的架构

     三:相关控件知识的查询(因为有些控件是第一次接触)

     四:软件测试知识缺乏,不懂测试

     五:知识水平层次不同

     ...........

    不过,这些困难经过大家的日夜奋战,我们把其中的大部分都攻破了,现在我真的体会到了,每一个软件的成功发布,都有无数个难以忘记的艰辛所构成,都有一个坚强且伟大的团队所作出的不懈努力!

    接下来,我们就对这个软件团队做一个小总结:

    一:任何一个团队里面都存在分歧,我们所要做的就是认真商议,拿出优秀的解决方案,积极解决一切问题

    二:团队成员的知识能力和编码能力不同,我们一定要把团队结构最优化,每个人做适合自己的任务,并且相互协作,共同完成任务

    三:针对知识能力不同,我们每个成员都要认真学习课本知识,打好基础

    四:成员之间一定要培养默契度,并且都要有一定的时间观念和执行力,只有这样,才能保证一个软件保质保量保时完成。

    五:这样的团队任务很有实际意义,可以增加同学之间的相互交流与团队协作能力,挺好的,么么哒!

    ........

    以上就是我们对这个软件团队项目所作出的总结,希望老师阅读后,批评指正,谢谢老师!

  • 相关阅读:
    Apache 安装及常用参数设置
    Apache 开启压缩传输
    在 CentOS 上编写 init.d service script [转]
    学习资源
    IO流(10)复制多级文件夹
    IO流(9)复制指定文件夹下指定文件到目的文件夹,并改名
    IO流(8)递归删除带文件的目录
    IO流(7)获取指定文件夹下的所有文件
    IO流(6)获取功能
    IO流(5)判断功能
  • 原文地址:https://www.cnblogs.com/good123/p/4944786.html
Copyright © 2011-2022 走看看