C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法
第一种是利用DirectX
1.安装了DirectX SDK(有9个DLL文件)。这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx.DirectSound.dll
2.引入DirectX 的DLL文件的名字空间:
|
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
|
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
|
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被设置(打开了文件),则文件将会自动播放。完整代码如下:
|
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 lineofDialog.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
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
|
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是一个整型变量。 度,字符串格式。如“00:23” 属性/方法名: 说明: None, Invisible 3=播放,6=正在缓冲,9=正在连接,10=准备就绪 player.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(player_PlayStateChange); private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) case 1: // Stopped case 2: // Paused case 3: // Playing case 4: // ScanForward case 5: // ScanReverse case 6: // Buffering case 7: // Waiting case 8: // MediaEnded case 9: // Transitioning case 10: // Ready case 11: // Reconnecting case 12: // Last default:
,字符串格式。如“03:24” 前媒体信息"Title"=媒体标题,"Author"=艺术 家,"Copyright"=版权信息,"Description"=媒体内 容描述,"Duration"=持续时间(秒),"FileSize"= 文件大小,"FileType"=文件类型,"sourceURL"=原 始地址 性名设置媒体信息 currentMedia.getItemInfo("Title") 放列表属性 包含媒体数 项目媒体信息,其子属性同wmp.currentMedia |
from:http://www.sufeinet.com/thread-459-1-1.html
http://www.cnblogs.com/xianyin05/archive/2009/05/05/1449967.html
C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法的更多相关文章
- 两个变量交换的四种方法(Java)
对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...
- 织梦DedeCMS模板防盗的四种方法
织梦(DedeCMS)模板也是一种财富,不想自己辛辛苦苦做的模板被盗用,在互联网上出现一些和自己一模一样的网站,就需要做好模板防盗.本文是No牛收集整理自网络,不过网上的版本都没有提供 Nginx 3 ...
- 让一个图片在div中居中(四种方法)
第一种方法: <div class="title"> <div class="flag"></div> <div cl ...
- 运行jar应用程序引用其他jar包的四种方法
转载地址:http://www.iteye.com/topic/332580 大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个ja ...
- 转载:WinForm中播放声音的三种方法
转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...
- java中定时器的四种方法
package com.lid; import java.util.Calendar; import java.util.Date; import java.util.Timer; import ja ...
- Angular--页面间切换及传值的四种方法
1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个produce ...
- MYSQL获取自增ID的四种方法
MYSQL获取自增ID的四种方法 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与tabl ...
- linux下配置ip地址四种方法(图文方法)
主要是用第四种方法 (1)Ifconfig命令 第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig ...
随机推荐
- 手动搭建Vue环境
Vue+webpack+babel环境搭建 github地址 https://github.com/haoyongliang/webpack-babel-Vue 1.首先要了解Vue项目结构 简单的目 ...
- ext grid 前台grid加载数据碰到数据重复只显示一条
在使用gridPanel的时候,如果其数据有字段名为“id”,且数据中id值相同的情况时,相同id的数据只会显示一条,这是因为Ext读取JSON数据的时候采用了类似主键唯一的方式,而这里的主键默认叫“ ...
- python学习历程之split()方法获取cmd mysql 结果集
if __name__=='__main__': FServerId = raw_input("Please input source id:") GetFileKey(FServ ...
- 移动web开发和移动app开发的区分
1.移动web开发 这部分跟web前端开发差别不大,使用的技术都是html+css+js.区别为手机浏览器是webkit的天下,pc端是IE的天 下.手机网页可以理解成pc网页的缩小版加一些触摸特性. ...
- 手机端touch事件 jquery模拟
ontouchstart实现手机触屏中的hover效果 ontouchstart实现手机触屏中的hover效果 最近一直都在做手机网站的项目,会经常遇到手机屏幕触摸无交互效果,今天在一篇文章中看到模拟 ...
- 【IOS学习】1.IOS框架
1.框架概述 iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa ...
- 访问者模式(Visitor Pattern)
定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. Visitor 抽象访问者角色:为该对象结构中具体元素角色声明一个访问操作接口.该操作接口 ...
- js数组键入值push和 arr[]i]区别
push 和 arr[i] 遍历 var arr = new Array(); $(":check").each(function(i){if(this.checked==true ...
- maven-deploy失败
昨天遇到的问题,mavne项目执行deploy的时候,出错.提示 Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1] 很直白 ...
- 基于params,ref,out的参数问题详解
http://www.jb51.net/article/37967.htm 最近在写程序时遇到params,ref,out 参数问题.回头有自习看了看MSDN,才巩固了基础.现在和大家分享一下.par ...