zoukankan      html  css  js  c++  java
  • C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法

    C#播放声音的四种方法

    第一种是利用DirectX 
    1.安装了DirectX SDK(有9个DLL文件)。这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx.DirectSound.dll
    2.引入DirectX 的DLL文件的名字空间: 
     

    [C#] 纯文本查看 复制代码
    01
    02
    using Microsoft.DirectX;
     usingMicrosoft.DirectX.DirectSound;


    3.建立设备
    Device dv=newDevice();
    4.设置CooperativeLevel。因为windows是多任务的系统,设备不是独占的
    SecondaryBufferbuf=new SecondaryBuffer(@"snd.wav",dv);
    5.开辟缓冲区SecondaryBufferbuf=new SecondaryBuffer(@"snd.wav",dv); 
    6.接下来就可以播放啦。第一个参数表示优先级别,0是最低的。第2个参数是播放方式,这里是循环播放。
     buf.Play(0,BufferPlayFlags.Looping);
    第二种是利用Microsoft speech object Library

    [C#] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ///<summary
           /// 播放声音文件
           /// </summary>
           /// <paramname="FileName">文件全名</param>
           public voidPlaySound(string FileName)
           {//要加载COM组件:Microsoft speech object Library
               if (!System.IO.File.Exists(FileName))
               {
                   return;
               }
               SpeechLib.SpVoiceClass pp = new SpeechLib.SpVoiceClass();
     
               SpeechLib.SpFileStreamClass spFs = new SpeechLib.SpFileStreamClass();
     
               spFs.Open(FileName, SpeechLib.SpeechStreamFileMode.SSFMOpenForRead,true);
               SpeechLib.ISpeechBaseStream Istream = spFs as SpeechLib.ISpeechBaseStream;
               pp.SpeakStream(Istream, SpeechLib.SpeechVoiceSpeakFlags.SVSFIsFilename);
               spFs.Close();
           }


    第三种:引用SoundPlayer

    [C#] 纯文本查看 复制代码
    01
    02
    System.Media.SoundPlayersndPlayer = newSystem.Media.SoundPlayer(Application.StartupPath+@"/pm3.wav");
    sndPlayer.PlayLooping();


    第4种:利用Windows Media Player
    新建一个C#的Windows Form工程(Windows应用程序),并且定义两个菜单按钮(menuItem1,menuItem2)。
      选择菜单中的“工具”中的“自定义工具箱(添加/移除工具箱项)”,在自定义工具箱的窗口中,点击展开“COM 组件”项,选中“WindowMedia Player”选项。确定后在“工具箱”中便会出现“Windows Media Player”这一项,然后再将其拖至Form上,调整大小,系统在“引用”中自动加入了对此dll的引用,AxMediaPlayer就是我们使用的 Namespace与class。
      在属性栏中设置好此控件的一些属性,为了方便,这里我把AutoStart设置成为true(其实默认是true),只要FileName被设置(打开了文件),则文件将会自动播放。完整代码如下:

    [C#] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    private voidmenuItem1_Click(object sender, System.EventArgs e)
    {
    OpenFileDialogofDialog = new OpenFileDialog();
    ofDialog.AddExtension= true;
    ofDialog.CheckFileExists= true;
    ofDialog.CheckPathExists= true;
    //the nextsentence must be in single line
    ofDialog.Filter= "VCD文件(*.dat)|*.dat|Audio文件(*.avi)|*.avi
      |WAV文件(*.wav)|*.wav|MP3文件(*.mp3)|*.mp3|所有文件 (*.*)|*.*";
    ofDialog.DefaultExt= "*.mp3";
    if(ofDialog.ShowDialog()== DialogResult.OK)
    {
    // 2003一下版本 方法this.axMediaPlayer1.FileName = ofDialog.FileName;
    this.axMediaPlayer1.URL=ofDialog.FileName;//2005用法
    }
    }


      这里使用的是微软的播放器,大家也可以试试Winamp的控件,如果你只需要播放声音而不需要显示,你只要把AxMediaPlayer的Visible属性设置为false就可以了。

    AxWindowsMediaPlayer的详细用法收藏

    找我把,剛做過,相當熟悉


    属性/方法名: 说明: 
    [基本属性]   
    URL:String; 指定媒体位置,本机或网络地址 
    uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible 
    playState:integer; 播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪 
    enableContextMenu:Boolean; 启用/禁用右键菜单 
    fullScreen:boolean; 是否全屏显示 
    [controls] wmp.controls //播放器基本控制 
    controls.play; 播放 
    controls.pause; 暂停 
    controls.stop; 停止 
    controls.currentPosition:double; 当前进度 
    controls.currentPositionString:string; 当前进度,字符串格式。如“00:23” 
    controls.fastForward; 快进 
    controls.fastReverse; 快退 
    controls.next; 下一曲 
    controls.previous; 上一曲 
    [settings] wmp.settings //播放器基本设置 
    settings.volume:integer; 音量,0-100 
    settings.autoStart:Boolean; 是否自动播放 
    settings.mute:Boolean; 是否静音 
    settings.playCount:integer; 播放次数 
    [currentMedia] wmp.currentMedia //当前媒体属性 
    currentMedia.duration:double; 媒体总长度 
    currentMedia.durationString:string; 媒体总长度,字符串格式。如“03:24” 
    currentMedia.getItemInfo(const string); 获取当前媒体信息"Title"=媒体标题,"Author"=艺术家,"Copyright"=版权信息,"Description"=媒体内容描述,"Duration"=持续时间(秒),"FileSize"=文件大小,"FileType"=文件类型,"sourceURL"=原始地址 
    currentMedia.setItemInfo(const string); 通过属性名设置媒体信息 
    currentMedia.name:string; 同 currentMedia.getItemInfo("Title") 
    [currentPlaylist] wmp.currentPlaylist //当前播放列表属性 
    currentPlaylist.count:integer; 当前播放列表所包含媒体数 
    currentPlaylist.Item[integer]; 获取或设置指定项目媒体信息,其子属性同wmp.currentMedia 
    AxWindowsMediaPlayer控件的属性收藏
    MediaPlayer1.Play          播放  
    MediaPlayer1.Stop          停止  
    MediaPlayer1.Pause          暂停  
    MediaPlayer1.PlayCount        文件播放次数  
    MediaPlayer1.AutoRewind       是否循环播放  
    MediaPlayer1.Balance         声道  
    MediaPlayer1.Volume         音量  
    MediaPlayer1.Mute          静音  
    MediaPlayer1.EnableContextMenu    是否允许在控件上点击鼠标右键时弹出快捷菜单  
    MediaPlayer1.AnimationAtStart    是否在播放前先播放动画  
    MediaPlayer1.ShowControls      是否显示控件工具栏  
    MediaPlayer1.ShowAudioControls    是否显示声音控制按钮  
    MediaPlayer1.ShowDisplay       是否显示数据文件的相关信息  
    MediaPlayer1.ShowGotoBar       是否显示Goto栏  
    MediaPlayer1.ShowPositionControls  是否显示位置调节按钮  
    MediaPlayer1.ShowStatusBar      是否显示状态栏  
    MediaPlayer1.ShowTracker       是否显示进度条  
    MediaPlayer1.FastForward       快进  
    MediaPlayer1.FastReverse       快退  
    MediaPlayer1.Rate          快进/快退速率  
    MediaPlayer1.AllowChangeDisplaySize 是否允许自由设置播放图象大小  
    MediaPlayer1.DisplaySize       设置播放图象大小  
        1-MpDefaultSize         原始大小  
        2-MpHalfSize           原始大小的一半  
        3-MpDoubleSize          原始大小的两倍  
        4-MpFullScreen          全屏  
        5-MpOneSixteenthScreen      屏幕大小的1/16  
        6-MpOneFourthScreen       屏幕大小的1/4  
        7-MpOneHalfScreen        屏幕大小的1/2  
    MediaPlayer1.ClickToPlay       是否允许单击播放窗口启动Media Player  

    http://blog.csdn.net/brouse8079/archive/2007/10/17/1829885.aspx

    AxWindowsMediaPlayer常用属性
    2008-03-18 21:28

    2. Ctlcontrols属性

    Ctlcontrols属性是AxWindowsMediaPlayer的一个重

    要属性, 此控件中有许多常用成员。

    (1) 方法play

    用于播放多媒体文件,其格式为:

    窗体名.控件名.Ctlcontrols.play()

    如: AxWindowsMediaPlayer1.Ctlcontrols.play()

    ‘此处缺省窗体名是Me

    (2) 方法pause

    用于暂停正在播放的多媒体文件,其格式为:

    窗体名.控件名.Ctlcontrols.pause()

    如: AxWindowsMediaPlayer1.Ctlcontrols.pause()

    (3) 方法stop

    用于停止正在播放的多媒体文件,其格式为:

    窗体名.控件名.Ctlcontrols.stop()

    如: AxWindowsMediaPlayer1.Ctlcontrols.stop()

    (4) 方法fastforward

    用于将正在播放的多媒体文件快进,其格式为:

    窗体名.控件名.Ctlcontrols.fastforward()

    如:

    AxWindowsMediaPlayer1.Ctlcontrols.forward()

    (5) 方法fastreverse

    窗体名.控件名.Ctlcontrols.fastreverse()

    如:

    AxWindowsMediaPlayer1.Ctlcontrols.fastreverse

    ()

    6. 属性CurrentPosition

    用于获取多媒体文件当前的播放进度,其值是数值类

    型,使用格式为:

    窗体名.控件名.Ctlcontrols.currentPosition

    d1=AxWindowsMediaPlayer1.Ctlcontrols.currentPosi

    tion

    其中d1 是一个整型变量。

    7. 属性Duration

    用于获取当前多媒体文件的播放的总时间,其值为数

    值类型,其使用格式为:

    窗体名.控件名.currentMedia.duration

    如:d2

    =AxWindowsMediaPlayer1.currentMedia.duration

    其中d2是一个整型变量。
    controls.currentPositionString:string; 当前进

    度,字符串格式。如“00:23”


    属性/方法名: 说明: 
    [基本属性]   
    URL:String; 指定媒体位置,本机或网络地址 
    uiMode:String; 播放器界面模式,可为Full, Mini,

    None, Invisible 
    playState:integer; 播放状态,1=停止,2=暂停,

    3=播放,6=正在缓冲,9=正在连接,10=准备就绪

    player.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(player_PlayStateChange);

    private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
    {
        // Test the current state of the player and display a message for each state.
        switch (e.newState)
        {
            case 0:    // Undefined
                currentStateLabel.Text = "Undefined";
                break;

            case 1:    // Stopped
                currentStateLabel.Text = "Stopped";
                break;

            case 2:    // Paused
                currentStateLabel.Text = "Paused";
                break;

            case 3:    // Playing
                currentStateLabel.Text = "Playing";
                break;

            case 4:    // ScanForward
                currentStateLabel.Text = "ScanForward";
                break;

            case 5:    // ScanReverse
                currentStateLabel.Text = "ScanReverse";
                break;

            case 6:    // Buffering
                currentStateLabel.Text = "Buffering";
                break;

            case 7:    // Waiting
                currentStateLabel.Text = "Waiting";
                break;

            case 8:    // MediaEnded
                currentStateLabel.Text = "MediaEnded";
                break;

            case 9:    // Transitioning
                currentStateLabel.Text = "Transitioning";
                break;

            case 10:   // Ready
                currentStateLabel.Text = "Ready";
                break;

            case 11:   // Reconnecting
                currentStateLabel.Text = "Reconnecting";
                break;

            case 12:   // Last
                currentStateLabel.Text = "Last";
                break;

            default:
                currentStateLabel.Text = ("Unknown State: " + e.newState.ToString());
                break;
        }
    }

     


    enableContextMenu:Boolean; 启用/禁用右键菜单 
    fullScreen:boolean; 是否全屏显示 
    controls.currentPosition:double; 当前进度 
    controls.fastForward; 快进 
    controls.fastReverse; 快退 
    controls.next; 下一曲 
    controls.previous; 上一曲 
    [settings] wmp.settings //播放器基本设置 
    settings.volume:integer; 音量,0-100 
    settings.autoStart:Boolean; 是否自动播放 
    settings.mute:Boolean; 是否静音 
    settings.playCount:integer; 播放次数 
    [currentMedia] wmp.currentMedia //当前媒体属性 
    currentMedia.duration:double; 媒体总长度 
    currentMedia.durationString:string; 媒体总长度

    ,字符串格式。如“03:24” 
    currentMedia.getItemInfo(const string); 获取当

    前媒体信息"Title"=媒体标题,"Author"=艺术

    家,"Copyright"=版权信息,"Description"=媒体内

    容描述,"Duration"=持续时间(秒),"FileSize"=

    文件大小,"FileType"=文件类型,"sourceURL"=原

    始地址 
    currentMedia.setItemInfo(const string); 通过属

    性名设置媒体信息 
    currentMedia.name:string; 同

    currentMedia.getItemInfo("Title") 
    [currentPlaylist] wmp.currentPlaylist //当前播

    放列表属性 
    currentPlaylist.count:integer; 当前播放列表所

    包含媒体数 
    currentPlaylist.Item[integer]; 获取或设置指定

    项目媒体信息,其子属性同wmp.currentMedia

     from:http://www.sufeinet.com/thread-459-1-1.html

    http://www.cnblogs.com/xianyin05/archive/2009/05/05/1449967.html

  • 相关阅读:
    重拾Ajax
    和transformjs一起摇摆
    CSS/JS图片鼠标悬浮一道光闪过
    深究JS异步编程模型
    Vue.js组件
    并行计算基础&amp;编程模型与工具
    Oracle442个应用场景------------基础应用场景
    消息摘要算法-HMAC算法
    linux上网络配置不生效的怪异现象处理
    Eclipse 将projectBuild Path中引用的jar包自己主动复制到WEB-INF下的lib目录下
  • 原文地址:https://www.cnblogs.com/yuxuetaoxp/p/4653162.html
Copyright © 2011-2022 走看看