使用Windows Media Player 其实就是使用组件AxWindowsMediaPlayer。

   添加两个引用:Interop.WMPLib.dll和AxInterop.WMPLib.dll。
       添加命名空间using AxWMPLib;

在使用时还有两个基本的条件:1、控件要依附在某个父控件上,比如form,panel;因为这样可以让组件保持长期性(网上这样说)。2、依附的控件是要有句柄;3、在使用前进行如下的初始化:

                  ((System.ComponentModel.ISupportInitialize)(this.ax1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ax1)).EndInit();

  第一种情况不满足时,出现错误“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常,解决的办法可以像这样:

         AxWindowsMediaPlayer ax1 = new AxWindowsMediaPlayer();
Form f = new Form();
f.Controls.Add(ax1);

  但是,这个Form不是按常规来创建的,据个人猜测是没有执行像CreateWindow类似的函数吧。所以它是没有句柄的,这样情况出现如下:
         在一个类库中想使用AxWindowsMediaPlayer,并且使用了多线程:

          class DDX
{
AxWindowsMediaPlayer ax1 = new AxWindowsMediaPlayer();
Form f = new Form();//为了满足条件1 public delegate void STARTSOUND(bool b);//委托,副线程中调用主线程上的组件 public DDX()
{
int i = f.Handle;//这是为了满足条件2,这样操作的作用是强制为f创建句柄,以使Invoke方法能执行
}
void button1_click(object o,EventArgs e)
{
new Thread(new ThreadStart(InmoitorFun)).start();
} void InmoitorFun()//因为是在线程中,所以要使用控件的Invoke来调用方法,ax1是在主线程中创建的
{
while(true)
{
...
f.Invoke(new STARTSOUND(StartSound),new object[]{false});//一定要有前面的int i = f.Handle,不然会出现异常,Invoke方法执行的条件
...
}
} void StartSound(bool b)
{
((System.ComponentModel.ISupportInitialize)(this.ax1)).BeginInit();//还要进行初始化,为了满足第3个条件,
((System.ComponentModel.ISupportInitialize)(this.ax1)).EndInit();
ax1.URL="F:\\1.mp3";
ax1.settings.setMode("loop",true);
ax1.play();
}
}

C#----使用WindowsMediaPlayer 同时播放多个声音的更多相关文章

  1. MmSystem播放Wav格式声音

    //MmSystem播放Wav格式声音 //MmSystem 支持 *.wav声音格式 snd ->SoundRecorderuses MmSystem; //引用MmSystem//播放系统声 ...

  2. 解决:编辑一条彩信,附件选择添加音频,返回到编辑界面选择play,不能播放,没有声音

    [操作步骤]:编辑一条彩信,附件选择添加音频(外部音频),返回到编辑界面选择play,菜单键选择view slideshow [测试结果]:不能播放,没有声音 [预期结果]:可以播放 根据以往的经验( ...

  3. iOS AVAudioPlayer播放音频时声音太小

    iOS AVAudioPlayer播放音频时声音太小 //引入AVFoundation类库,设置播放模式就可以了 do { try AVAudioSession.sharedInstance().ov ...

  4. 【分享】4412开发板ubuntu 12.0.4播放音乐没有声音解决方法

    转自迅为论坛:http://bbs.topeetboard.com 准备工作 1.下载 vim 在命令行上输入 apt-get install vim 下载 vim 2.输入 vim /etc/hos ...

  5. 解决Ubuntu SMPlayer播放视频无声音问题

    问题:Ubuntu Kylin 14.04 系统默认装好之后,smplayer播放视频都是正常的,但最近可能由于一些误设置,导致smplayer播放任何格式的视频都无声.解决方法:由于ALSA是Lin ...

  6. MFC中使用SDL播放音频没有声音的解决方法

    本文所说的音频是指的纯音频,不包含视频的那种. 在控制台中使用SDL播放音频,一般情况下不会有问题. 但是在MFC中使用SDL播放音频的时候,会出现没有声音的情况.经过长时间探索,没有找到特别好的解决 ...

  7. 更改电脑名称后, Cnario无法播放画面和声音, 开机后停留在桌面, Cnario Player软件界面的停止按钮为蓝色可选状态

    症状描述 Cnario Player正常工作期间, 更改了电脑的Windows系统计算机名称(不是登录Windows的用户名), 重启后, 新计算机名生效. 此时Cnario自动启动, 但没有进入播放 ...

  8. swift AVAudioPlayer播放音频时声音太小

    设置下声音输出的扬声器就行了 代码如下 do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionP ...

  9. audio.js – 随时随地,播放 HTML5 的声音

    audio.js是一个HTML5标签的简易包装.但它不仅在支持HTML5的浏览器上能够轻松调用标签,并在不支持HTML5的浏览器上也能通过Flash作为B计划使用.除此之外,audio.js所提供的界 ...

随机推荐

  1. easyui-datagrid 报错:TypeError: col is null

    一般是由于设置的属性用到的列,如: idField:'aa', sortName:'bb' 等在 columns:[[{field:'cc',width:80,title:'列cc'}, {field ...

  2. Swift 中的指针使用

    SWIFT 中  指针被映射为泛型 UnsafePointer<T> UnsafeMutablePointer<T> 表示一组连续数据指针的 UnsafeBufferPoint ...

  3. 使用kuernetes提供高可用的logstash服务

    在kubernetes集群中部署logstash步骤如下: 1:logstash安装文件(目前最新版本2.3.4): 2:编写Dockerfile及执行点脚本文件run.sh,并且修改logstash ...

  4. 【POJ 1523】SPF(割点)

    儿子数大于1的树根或者 Low[v] >= DFN[u]的非树根节点v 就是割点. #include <cstdio> #include <cstring> const ...

  5. 精通Web Analytics 2.0 (1) 引言

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 前言 我对这本书抱有一个简单的愿望,也许是崇高的目标:改变世界对线上事情作决策的方式. 长久以来,我们在线上的举动已经被准确的归 ...

  6. sax 解析 xml

    SAX(Simple API for XML) https://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html persons.xml &l ...

  7. 【bzoj2118】 墨墨的等式

    http://www.lydsy.com/JudgeOnline/problem.php?id=2118 (题目链接) 题意 给出${B}$的取值范围${[Bmin,Bmax]}$,求方程${a_{1 ...

  8. Cache Helper类

    using System; using System.Collections.Generic; using System.Web; using System.Collections; using Sy ...

  9. $(document).click() 在苹果手机上不能正常运行

    前几天,一位同事在微信上测试一个JQuery的写的购物车功能,出现了一个很奇怪的现象,在android系统上可以正常绑定,但是在iOS上确不能用,经过排除分析,发现其使用了jquery的$(docum ...

  10. 帝国cms一些常用的修改路径

    1.信息提示改成弹出框提示 修改e/message/index.php 2.修改提示信息 语言包e/data/language/gb/pub/q_message.php 3.文章设置权限后没登录提示模 ...