怎样用C#做一个媒体播放器..可以实现调节左右声道,音量大小和多个音乐文件
mp3,wav等的播放..最好有个显示播放的进度的可以拖放的进度条!!!
比如用delphi做的一些简单的播放器!!!

解决方案 »

  1.   

    用MS的Mediaplayer控件,这是个Active控件,需要你自己添加,给分
      

  2.   

    直接用Mediaplayer控件就行了!~在工具里添加一下!
      

  3.   

    去下个.NET中的多媒体类库
    http://www.5ivb.net/club/dispbbs.asp?boardID=22&ID=27820
      

  4.   

    音量大小等控制用directX编成。可以看一下相关SDK,不知道支不支持c#调用API。
    http://www.5ivb.net/club/dispbbs.asp?boardID=22&ID=27820直接问斑竹请教好了。
    音乐文件格式的编码是比较好搞定的。
      

  5.   

    我用VB做过
    C#还没写
    要不要看看?
      

  6.   

    能否给我(cybernik)
    [email protected]
    thanks
      

  7.   

    用Mediaplayer控件挺不错的。网的例子挺多的。
      

  8.   

    我在网上找的一个用DirectShow做的,你自己可以改改,就成了。
      

  9.   

    好的,现在在公司,晚上回家发给各位,是半成品,不过要求的功能都有。
    [email protected][email protected][email protected][email protected][email protected][email protected]
      

  10.   

    谢谢各位豪情在多多指教一二!!小弟愚笨至今未在.net里找到MediaPlayer 控件!!!唉.........
      

  11.   

    不是豪情!!时还请!!谢谢各位还请在多多指教一二!!  
                  ~~~~ 
    小弟愚笨至今未在.net里找到MediaPlayer  控件!!!  
     
    唉.........
      

  12.   

    在工具箱--windows窗体--里点右建
    选择添加/移除项---COM组件----找到Windows Media Player
      

  13.   

    在工具箱--windows窗体--里点右建
    选择添加/移除项---COM组件----找到Windows Media Player没有呀!!是不是要下载安装什么控件??找不到Windows Media Player这一项呀!!
      

  14.   

    不是COM组件,是Active组件,好象是!
      

  15.   

    找到就好呀
    其实使用时候可以参考MSDN呀
    一般讲这个的书较少
    或者我常用的办法是在已经加入 了组件的项目里
    输入AxWMPLib.AxWindowsMediaPlayer.
    便会出现该控件的属性了 
    你选中一个就会有中文提示呀,笨办法的说
      

  16.   

    1.我们按照向导做的缺乏将媒体文件传递给axPlayer的方法。
    现在,打开工具箱,拖一个Button(按钮)到MPlayer表单中,改其名为btn_Open,Text为“打开”。如果你希望这个按钮是图形按钮,还可以为其指定图片(Image)。然后,双击“打开”按钮,此时,系统自动为“打开”按钮创建了一个Click事件处理函数:btn_Open_Click(),我们将在这里写代码装入媒体文件。
    以下是btn_Open_Click()的代码:
    private void btn_Open_Click(object sender, System.EventArgs e){
    String sFileName;
    OpenFileDialog openDlg = new OpenFileDialog();
    openDlg.InitialDirectory = "c:\\" ;
    openDlg.Filter = "All files (*.*)|*.*" ;
        openDlg.RestoreDirectory = true ;
                if(openDlg.ShowDialog() == DialogResult.OK){
    sFileName = openDlg.FileName;
    this.Text = sFileName;
    axPlayer.FileName = sFileName;
       }
      }
    OpenFileDialog类是System.Windows.Forms的一个子类,它的作用是打开一个对话框供用户选取一个或多个文件并返回文件名。得到文件名后,只要将其赋值给ActiveMovie axPlayer的FileName属性即可。
    现在,这个媒体播放机可以用了
    2.加入菜单
    具体操作及菜单,子菜单的id不写了,我把函数贴出来:
    /* 打开菜单项                                                       */
    private void menuItem_Open_Click(object sender, System.EventArgs e){
    String sFileName;
    OpenFileDialog openDlg = new OpenFileDialog();
    openDlg.InitialDirectory = "c:\\" ;
    openDlg.Filter = "All files (*.*)|*.*" ;
    openDlg.RestoreDirectory = true ;
    if(openDlg.ShowDialog() == DialogResult.OK){
    sFileName = openDlg.FileName;
    axPlayer.FileName = sFileName;
    }
    }        /* 开始菜单项                                                    */
    private void menuItem_Start_Click(object sender, System.EventArgs e){
    if (axPlayer.FileName != "" )
    axPlayer.Run();
    }        /* 暂停菜单项                                                   */
    private void menuItem_Pause_Click(object sender, System.EventArgs e){
    axPlayer.Pause();
    }        /* 停止菜单项                                                  */
    private void menuItem_Stop_Click(object sender, System.EventArgs e){
    axPlayer.Stop();
    }        /* 退出菜单项                                                  */
    private void menuItem_Exit_Click(object sender, System.EventArgs e){
    axPlayer.FileName = "";     //先关闭文件
    this.Close();               //调用本表单的Close方法退出
    }
            /* 原始大小菜单项                                                 */
    /* Amovie在工程的References中有引用,Amovie.WindowSizeConstants  */
    /* 为一个表示控件大小的枚举                                        */
    private void menuItem_Origin_Click(object sender, System.EventArgs e){
    axPlayer.MovieWindowSize = AMovie.WindowSizeConstants.amvOriginalSize;
    }        /* 双倍显示菜单项                                                 */
    private void menuItem_Double_Click(object sender, System.EventArgs e){
    int iWidth, iHeight;
    iWidth = axPlayer.Width;
    iHeight = axPlayer.Height;
    axPlayer.MovieWindowSize = AMovie.WindowSizeConstants.amvDoubleOriginalSize;
    this.Width  = this.Width + ( axPlayer.Width - iWidth );  //调整表单大小
    this.Height = this.Height + ( axPlayer.Height - iHeight );
    }        /* 音量加大菜单项                                               */
            /* axPlayer的音量调节为一个int型的属性完成,范围为-10000  0,其 */
            /* 中-10000声音最小,0最大。                                   */
    private void menuItem_Loud_Click(object sender, System.EventArgs e){
    if ( axPlayer.Volume + 500 <= 0 )
    axPlayer.Volume += 500;
    else
    axPlayer.Volume = 0;
    }        /* 音量放小菜单项                                               */
    private void menuItem_Quiet_Click(object sender, System.EventArgs e) {
    if ( axPlayer.Volume - 500 >= -10000 )
    axPlayer.Volume -= 500;
    else
    axPlayer.Volume = -10000;
    }        /* 消声菜单项                                                  */
    private void menuItem_Silent_Click(object sender, System.EventArgs e){
    axPlayer.Volume = -10000;
    }        /* 关于菜单项                                                  */
    private void menuItem_About_Click(object sender, System.EventArgs e){
    axPlayer.AboutBox();
    }
      

  17.   

    我继续帮你改进MPlayer,将为其加上“最近播放列表”功能,这涉及到文件I/O和菜单控制方面的内容。
    现在,我们着手为MPlayer增加播放列表功能。首先添加控制播放列表读写的类。在Solution Explorer中右击工程MPlayer&#61664;Add&#61664;Add New Item,选取Class类型,取名为PlayList.cs,打开。这样,系统便创建了一个新类PlayList,为其编码如下:
    using System;
    using System.IO;                     //IO处理名字空间
    namespace MPlayer{
      public class PlayList{
        private static string sFile;          //文件名 public PlayList(){
    } public static void SetFileName( string sName ){ //设定文件
    sFile = sName;
    }        //取播放列表,返回一字符串数组
    public static void GetFileList( ref string[] sList ){
    int i = 0;
                for (i=0;i<5;i++)              //设初值
    sList[i] = "";
                //新创建一个文件流,sFile为文件全名,以读方式打开(FileAccess.Read),//如果文件不存在,则创建一个(FileMode,OpenOrCreate)
    FileStream fs = new FileStream(sFile, FileMode.OpenOrCreate, 
    FileAccess.Read);
    StreamReader r = new StreamReader(fs);    //新建阅读器
    // 把读指针指向文件的开头
    r.BaseStream.Seek(0, SeekOrigin.Begin);    
    i=0;
                //Peek函数阅读下一个字节,如果<=-1,则说明已至文件尾
    while (r.Peek() > -1) {    
        sList[i] = r.ReadLine();     //一次读取一行
    i++;
    if (i>=5)                  //最多只需要5行
    break;
    }
    r.Close();                     //关闭阅读器
                fs.Close();                    //关闭文件流
    } public static void SetFileList( string[] sList )  //设置播放列表
    {
    int i = 0;   //以写方式打开文件
    for (i=0;i<5;i++)                    //容错,防止有空字符串出现
    if (sList[i] == null)
    sList[i] = "";
                //以写方式打开文件流,如文件不存在,新建一个
    FileStream fs = new FileStream(sFile, FileMode.OpenOrCreate, 
    FileAccess.Write);
    StreamWriter w = new StreamWriter(fs);     //创建书写器
    // 把写指针指向文件的开头
    w.BaseStream.Seek(0, SeekOrigin.Begin);   
                for (i=0; i< sList.Length; i++ )
    w.WriteLine( sList[i] );   //一次写一行
                fs.Flush();                 //将可能位于缓冲区的内容强制写入文件 
    w.Close();
    fs.Close();
    } public static void AddPlayList( string sNew )    //增加一项
    {
    int i;
    string[] sList = new string[5];
    GetFileList( ref sList );      //读出当前列表
    for (i=4;i>0;i--)             //前面四项后移,空出第一项给新加文件
    sList[i] = sList[i-1];
    sList[0] = sNew;
                SetFileList( sList );         //保存至文件
    }
      }
    }
    现在,我们已将播放列表的功能全部封装在PlayList类当中,接下来便是修改MPlayer表单,调用PlayList类实现功能。
    先为File菜单添加五个菜单项(在Exit项之前),分别取名menuItem_List0 – meuItemList4。然后,为MPlayer类添加播放列表显示函数DisplayPlayList,其代码如下:
    private void DisplayPlayList(){
    string[] sList = new string[5];
                PlayList.GetFileList( ref sList );       //从文件读取当前列表
    if ( sList[0].Length > 0 ){             //然后控制5个菜单项的文本及显示
    menuItem_List0.Text = sList[0];
    menuItem_List0.Visible = true;
    }
    else
    menuItem_List0.Visible = false;
                                       //从menItem_List1 – 3, 省略 if ( sList[4].Length > 0 )
    {
    menuItem_List4.Text = sList[4];
    menuItem_List4.Visible = true;
    }
    else
    menuItem_List4.Visible = false;
    }以上工作完成后,系统至少还有三个部分需要修改:
       1). 程序进入时要显示播放列表。这很容易,直接在MPlayer类的构造函数中调用播放列表显示函数即可。 public MPlayer(){
      InitializeComponent();      //初始化
      PlayList.SetFileName( "playlist.txt" );//设定播放列表文件
          DisplayPlayList();                 //调用播放列表显示函数
       }
    2). 当打开新文件时,要向播放列表中加入一项并重新调整播放列表的显示。这可以通过修改“打开”菜单项的Click处理方法menuItem_Open_Click做到。
       private void menuItem_Open_Click(object sender, System.EventArgs e){
     String sFileName;
     OpenFileDialog openDlg = new OpenFileDialog();
     openDlg.InitialDirectory = "c:\\" ;
     openDlg.Filter = "All files (*.*)|*.*" ;
     openDlg.RestoreDirectory = true ;
                 if(openDlg.ShowDialog() == DialogResult.OK){
    sFileName = openDlg.FileName;
    axPlayer.FileName = sFileName;
                          //以下部分为新加代码
    PlayList.AddPlayList( sFileName );      //增加一项到播放列表
    DisplayPlayList();                      //调整播放列表显示
     }
      }
    3). 当点击播放列表的某一项时,播放机要打开对应文件。这需要给每个播放列表菜单项添加Click处理函数:
       private void menuItem_List0_Click(object sender, System.EventArgs e)
       {
                 axPlayer.FileName = menuItem_List0.Text;
       }
          //menuItem_List1 – menuItem_List4的代码同上,略现在,简单的编译执行,系统的播放列表功能大功告成
      

  18.   

    用media player控件就可以实现
      

  19.   

    cybernik()  这位朋友,能给我来一份代码吗?
    我好好研究,[email protected]多谢了