示例#1
0
        private void PlayMusic(int iRow)
        {
            //lblTopTip.Text = "";
            string              strDownloadURL  = "";
            enmMusicSource      emsSource       = (enmMusicSource)dataGVscan.Rows[iRow].Cells["dgvSource"].Value;
            string              strDownloadInfo = dataGVscan.Rows[iRow].Cells["dgvDownloadInfo"].Value.ToString();
            string              strDisplayName  = dataGVscan.Rows[iRow].Cells["dgvDisplayName"].Value.ToString();
            string              strID           = dataGVscan.Rows[iRow].Cells["dgvID"].Value.ToString();
            string              strFileName     = m_strDocument + "\\" + m_strTempData;
            clsMusicOperation   mop             = new clsMusicOperation();
            clsHttpDownloadFile hdf             = new clsHttpDownloadFile();

            try
            {
                if (!Directory.Exists(strFileName))   //如果不存在就创建 临时文件夹
                {
                    Directory.CreateDirectory(strFileName);
                }

                strDownloadURL = mop.GetMusicDownloadURL(strDownloadInfo, emsSource);
                if (strDownloadURL == "")
                {
                    lblTip.Text = "无法获取歌曲“" + strDisplayName + "”的下载地址,试听失败!";
                    WriteLog("无法获取歌曲“" + strDisplayName + "”的下载地址,试听失败!");
                    return;
                }
                strFileName = strFileName + "\\" + strDownloadInfo + mop.GetFileFormat(); //临时文件夹 + dgvDownloadInfo + 格式

                if (!(File.Exists(strFileName)))                                          //不存在缓存,才下载
                {
                    if (!hdf.Download(strDownloadURL, strFileName))
                    {
                        lblTip.Text = "播放发生错误,错误信息:获取音乐缓存失败。";
                        return;
                    }
                }

                //播放音乐
                lblTip.Text = "播放音乐序号:" + strID + "  歌曲名:" + strDisplayName;
                axWindowsMediaPlayer1.URL = strFileName;
                axWindowsMediaPlayer1.Ctlcontrols.play();
                //lblMusicTime.Text = axWindowsMediaPlayer1.currentMedia.durationString;
                timer1.Enabled = true;
            }
            catch (Exception e)
            {
                lblTip.Text = "发生错误,错误信息:" + e.Message;
                WriteLog(strDisplayName + " 试听发生错误,错误信息:" + e.Message);
            }
        }
示例#2
0
        /// <summary>
        /// 下载音乐的线程
        /// </summary>
        /// <param name="oRow">object oRow = (object)iRow;</param>
        private void DownloadMusicThread(object oRow)
        {
            int    iRow            = (int)oRow;
            string strDownloadURL  = "";
            string strName         = dataGVscan.Rows[iRow].Cells["dgvName"].Value.ToString();
            string strSinger       = dataGVscan.Rows[iRow].Cells["dgvSinger"].Value.ToString();
            string strDownloadInfo = dataGVscan.Rows[iRow].Cells["dgvDownloadInfo"].Value.ToString();
            //int intSource = Convert.ToInt32(dataGVscan.Rows[iRow].Cells["dgvSource"].Value);
            enmMusicSource      emsSource   = (enmMusicSource)dataGVscan.Rows[iRow].Cells["dgvSource"].Value;
            string              strFileName = m_strDocument;
            clsMusicOperation   mop         = new clsMusicOperation();
            clsHttpDownloadFile hdf         = new clsHttpDownloadFile();
            string              strTempFile = m_strDocument + "\\" + m_strTempData + "\\" + strDownloadInfo;//临时文件
            string              strFormat   = ".mp3";
            int  i = 0;
            bool bolExistsTempFile = false; //是否存在缓存
            bool bolDownloadStatus = false; //是否下载成功

            //lblTip.Text = "正在下载……";
            //SetTipText("正在下载……" + strName);
            lblTip.Invoke(TipCallBack, "正在下载…… " + strName);//调用回调//因为线程无法条用主线的一些控件,必须通过回调函数实现
            try
            {
                if (!Directory.Exists(strFileName))   //如果不存在 m_strDocument 就创建
                {
                    Directory.CreateDirectory(strFileName);
                }

                if ((File.Exists(strTempFile + ".mp3")) || (File.Exists(strTempFile + ".m4a")))//如果存在缓存,不再下载,直接复制
                {
                    bolExistsTempFile = true;
                    if ((File.Exists(strTempFile + ".mp3")))
                    {
                        strTempFile = strTempFile + ".mp3";
                        strFormat   = ".mp3";
                    }
                    if (File.Exists(strTempFile + ".m4a"))
                    {
                        strTempFile = strTempFile + ".m4a";
                        strFormat   = ".m4a";
                    }
                }
                else    //如果不存在,则需要先获取URL,再下载
                {
                    strDownloadURL = mop.GetMusicDownloadURL(strDownloadInfo, emsSource);
                    if (strDownloadURL == "")
                    {
                        lblTip.Invoke(TipCallBack, "无法获取歌曲“" + strName + "”的下载地址,下载失败!");
                        WriteLog("无法获取歌曲“" + strName + "”的下载地址,下载失败!");
                        return;
                    }
                    strFormat = mop.GetFileFormat();
                }

                strFileName = strFileName + "\\" + GetFileName(iRow) + strFormat; //设置文件名
                while (File.Exists(strFileName))                                  //如果存在文件,则添加序号,直到获取到一个可创建的文件名
                {
                    i++;
                    if (i == 1)
                    {
                        strFileName = strFileName.Insert(strFileName.Length - 4, "(" + i + ")");//
                    }
                    else
                    {
                        strFileName = strFileName.Replace("(" + (i - 1) + ")", "(" + i + ")");
                    }
                }

                if (bolExistsTempFile)
                {
                    File.Copy(strTempFile, strFileName, true);//三个参数分别是源文件路径,存储路径,若存储路径有相同文件是否替换
                    //File.Move(strTempFile.Replace("\\" + m_strTempData, ""), strFileName);//修改文件名
                    bolDownloadStatus = true;
                }
                else
                {
                    if (hdf.Download(strDownloadURL, strFileName))
                    {
                        //SetTipText(strName + "下载完成!");
                        //lblTip.Text = "下载完成!";
                        //mop.ChangeFileAttribute(strFileName, dataGVscan.Rows[iRow].Cells["dgvName"].Value.ToString(), dataGVscan.Rows[iRow].Cells["dgvSinger"].Value.ToString());
                        bolDownloadStatus = true;
                    }
                    else
                    {
                        //SetTipText("存在歌曲下载失败,请查看日志!");
                        //lblTip.Text = "下载失败,该名称歌曲可能已经存在,请修改Music文件下的同名歌曲;或者网络出现问题,请检查网络!";
                        WriteLog("歌曲:" + strName + " 下载失败,可能网络出现问题,请检查网络!");
                        //MessageBox.Show("歌曲:" + strName + " 下载失败,该名称歌曲可能已经存在,请修改Music文件下的同名歌曲;或者网络出现问题,请检查网络!");
                        lblTip.Invoke(TipCallBack, "歌曲:" + strName + " 下载失败,可能网络出现问题,请检查网络!");
                        bolDownloadStatus = false;
                    }
                }
                if (bolDownloadStatus)
                {
                    WriteLog(strName + " 下载完成!");
                    lblTip.Invoke(TipCallBack, strName + " 下载完成!");
                    if (strFormat.ToLower() == ".mp3")
                    {
                        //axWindowsMediaPlayer2.Invoke(MusicInfoCallBack, strFileName, strName, strSinger, "");
                        SetMusicInfo(strFileName, strName, strSinger);//设置歌曲信息
                    }
                }
            }
            catch (Exception e)
            {
                //SetTipText("下载线程发生错误,请查看日志!错误信息:" + e.Message);
                //lblTip.Text = "发生错误,错误信息:" + e.Message;
                WriteLog("歌曲:" + strName + " 下载失败,错误信息:" + e.Message);
                //MessageBox.Show("歌曲:" + strName + " 下载失败,错误信息:" + e.Message);
                lblTip.Invoke(TipCallBack, "歌曲:" + strName + " 下载失败,错误信息:" + e.Message);
            }
        }