C#----使用WindowsMediaPlayer 同时播放多个声音
使用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 同时播放多个声音的更多相关文章
- MmSystem播放Wav格式声音
//MmSystem播放Wav格式声音 //MmSystem 支持 *.wav声音格式 snd ->SoundRecorderuses MmSystem; //引用MmSystem//播放系统声 ...
- 解决:编辑一条彩信,附件选择添加音频,返回到编辑界面选择play,不能播放,没有声音
[操作步骤]:编辑一条彩信,附件选择添加音频(外部音频),返回到编辑界面选择play,菜单键选择view slideshow [测试结果]:不能播放,没有声音 [预期结果]:可以播放 根据以往的经验( ...
- iOS AVAudioPlayer播放音频时声音太小
iOS AVAudioPlayer播放音频时声音太小 //引入AVFoundation类库,设置播放模式就可以了 do { try AVAudioSession.sharedInstance().ov ...
- 【分享】4412开发板ubuntu 12.0.4播放音乐没有声音解决方法
转自迅为论坛:http://bbs.topeetboard.com 准备工作 1.下载 vim 在命令行上输入 apt-get install vim 下载 vim 2.输入 vim /etc/hos ...
- 解决Ubuntu SMPlayer播放视频无声音问题
问题:Ubuntu Kylin 14.04 系统默认装好之后,smplayer播放视频都是正常的,但最近可能由于一些误设置,导致smplayer播放任何格式的视频都无声.解决方法:由于ALSA是Lin ...
- MFC中使用SDL播放音频没有声音的解决方法
本文所说的音频是指的纯音频,不包含视频的那种. 在控制台中使用SDL播放音频,一般情况下不会有问题. 但是在MFC中使用SDL播放音频的时候,会出现没有声音的情况.经过长时间探索,没有找到特别好的解决 ...
- 更改电脑名称后, Cnario无法播放画面和声音, 开机后停留在桌面, Cnario Player软件界面的停止按钮为蓝色可选状态
症状描述 Cnario Player正常工作期间, 更改了电脑的Windows系统计算机名称(不是登录Windows的用户名), 重启后, 新计算机名生效. 此时Cnario自动启动, 但没有进入播放 ...
- swift AVAudioPlayer播放音频时声音太小
设置下声音输出的扬声器就行了 代码如下 do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionP ...
- audio.js – 随时随地,播放 HTML5 的声音
audio.js是一个HTML5标签的简易包装.但它不仅在支持HTML5的浏览器上能够轻松调用标签,并在不支持HTML5的浏览器上也能通过Flash作为B计划使用.除此之外,audio.js所提供的界 ...
随机推荐
- java定时器
package com.lid; import java.util.Calendar; import java.util.Date; import java. ...
- SwipeRefreshLayout 首次打开出现加载图标
最近要实现如何如图效果: 主要是在初始化,代码如下: , getResources().getDimensionPixelSize(typed_value.resourceId)); refre ...
- Shell命令_if
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #if if [ 条件判断式 ] ...
- nodeJS+express+Jade写一个局域网聊天应用(node基础)
为了复习一下nodeJS, 而且socketIO这东西听起来就好高端有木有, 而且有人写过了open, 也可以作为自己的参考有木有, 点击下载源代码: express是4.x的版本, 跟以前的配置有些 ...
- URI 中特殊字符处理
一.问题阐述 今天写 url 请求时,不管是get 请求还是 post 请求,如果参数中带有 + % # 等特殊符号,就无法正常获得参数 具体现象就是 用URL传参数的时候,用&符号连接,如果 ...
- Windows命令 dos
1.dos下运行netstat -na 查看本机开启的端口
- 资源: StaticResource, ThemeResource
StaticResource ThemeResource 示例1.演示“StaticResource”相关知识点Resource/StaticResourceDemo.xaml <Page x: ...
- 让webstorm支持avalon语法自动补全
在file菜单下选择Settings,选择Editor ——> Inspections ——> Html ——> Unknown HTML tag attibute添加以下标签ms- ...
- 【HDU 2874】Connections between cities(LCA)
dfs找出所有节点所在树及到树根的距离及深度及父亲. i和j在一棵树上,则最短路为dis[i]+dis[j]-dis[LCA(i,j)]*2. #include <cstring> #in ...
- 有一种算法叫做“Union-Find”?
前言: 不少搞IT的朋友听到“算法”时总是觉得它太难,太高大上了.今天,跟大伙儿分享一个比较俗气,但是却非常高效实用的算法,如标题所示Union-Find,是研究关于动态连通性的问题.不保证我能清晰的 ...