『原创』+『参考』亲手实验:使用C#在PPC中播放声音
今天,项目中要求用声音来提示用户程序的某个状态被激活了,发现,.Net CF下没有System.Media这种好东东鸟~,于是乎,股沟、百毒最后再来个ZZK,发现MSDN和小镇的文章都有提及在PPC下如何播放声音(还有很多文章提到的方法差不多,但是都有网友反映不能成功播放,所以我在这里就过滤掉了),msdn中说道的文章,好多朋友反映是播放不出来,在此我没有去考证,我直接使用了小镇的代码,并且成功的播放了声音,所以,写下此篇随笔,一来做个备份,二来和大家分享一下~
首先,我们建立一个.net cf 2.0下,名称为SoundPlay的WM5 ppc项目,当然语言我选择的是C#。
然后界面设计如下:其中:
lblFileName——Text属性:文件地址
btnOpen——Text属性:浏览文件
btnPlay——Text属性:播放声音
新建一个类:Sound,代码和小镇的差不多,不过我做过一小点修改,所以也贴出来,方便大家查阅:
using System;
using System.Runtime.InteropServices;
using System.IO;
using System.Collections.Generic;
using System.Text;
namespace SoundPlay
{
public class Sound
{
private byte[] m_soundBytes;
private enum Flags
{
SND_SYNC = 0x0000, /* play synchronously (default) */
SND_ASYNC = 0x0001, /* play asynchronously */
SND_NODEFAULT = 0x0002, /* silence (!default) if sound not found */
SND_MEMORY = 0x0004, /* pszSound points to a memory file */
SND_LOOP = 0x0008, /* loop the sound until next sndPlaySound */
SND_NOSTOP = 0x0010, /* don't stop any currently playing sound */
SND_NOWAIT = 0x00002000, /* don't wait if the driver is busy */
SND_ALIAS = 0x00010000, /* name is a registry alias */
SND_ALIAS_ID = 0x00110000, /* alias is a predefined ID */
SND_FILENAME = 0x00020000, /* name is file name */
SND_RESOURCE = 0x00040004 /* name is resource name or atom */
}
[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int MobilePlaySound(string szSound, IntPtr hMod, int flags);//播放外部声音文件
[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int MoiblePlaySoundBytes(byte[] szSound, IntPtr hMod, int flags);//播放嵌入声音资源
/// <summary>
/// Construct the Sound object to play sound data from the specified stream.
/// </summary>
public Sound(Stream stream)
{
// read the data from the stream
m_soundBytes = new byte[stream.Length];
stream.Read(m_soundBytes, 0, (int)stream.Length);
}
/// <summary>
/// 从一个声音byte流构造函数Sound
/// </summary>
/// <param name="snd"></param>
public Sound(byte[] snd)
{
m_soundBytes = snd;
}
/// <summary>
/// 构造一个空Sound函数,此函数用于播放外部文件
/// </summary>
public Sound()
{
}
/// <summary>
/// Play the sound File播放外部文件的Play方法
/// </summary>
public void Play(string filename)
{
MobilePlaySound(filename, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME));
}
/// <summary>
/// Play The Stream Sound,此方法应该对应从Byte和Stream构造的Sound
/// 注意,它的Flags设置为SND_MEMORY,因为我们的声音文件已经转换到内存中了
/// </summary>
public void Play()
{
MoiblePlaySoundBytes(m_soundBytes, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_MEMORY));
}
}
}
然后,主界面上的按钮事件代码如下:
private void btnOpen_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
if (ofd.ShowDialog() == DialogResult.OK)
{
lblFileName.Text = ofd.FileName;
}
}
}
private void btnPlay_Click(object sender, EventArgs e)
{
Sound sound = new Sound();
sound.Play(lblFileName.Text);
}
够清楚了吧,经过测试,两种方式(通过流或者指定文件路径)均能播放出选中的.wav声音文件。
『原创』+『参考』亲手实验:使用C#在PPC中播放声音相关推荐
- 『原创』+『参考』使用C#在PPC的Today界面上的任务栏加入应用程序图标
最近在做的一个项目,需要程序像桌面版的"微缩"到任务栏中,类似于QCellCore的功能.于是乎股沟.百毒一番,发现如下两篇文章提及的方法不错,并且通过我亲手实验,验证了两篇文章所 ...
- 『参考』.net CF组件编程(4)——为自定义组件添加工具箱图标!
前言: 在前三篇的文章中,和大家一起创建了一个用于TCP连接检测的小组件,如果你记不得了,可以通过以下链接去回顾一下: 『参考』.net CF组件编程(1)--基础之后 『参考』.net CF组件编程 ...
- 微软云盘配合服务器,『原创』开源5T微软云盘搭建教程onedrive index
前言 为什么搭建一个微软共享云盘?百度云.蓝奏云不好吗?百度云有会员限制功能,各种限制更是不少,蓝奏云速度超快,但是貌似不支持大文件.微软毕竟是大厂,可用的5T教育邮箱现在也很好搞到,之所以采用是因为 ...
- 『深度学习项目四』基于ResNet101人脸特征点检测
相关文章: [深度学习项目一]全连接神经网络实现mnist数字识别 [深度学习项目二]卷积神经网络LeNet实现minst数字识别 [深度学习项目三]ResNet50多分类任务[十二生肖分类] 『深度 ...
- 『力扣刷题』5275_找出井字棋的获胜者 解题代码
LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5275_找出井字棋的获胜者 * 5275. 找出井字棋的获胜者 显示英文描述* 用户通过次数0* 用户尝试次数0* ...
- 『TopCoder 组件开发指南』
导读: 『TopCoder 组件开发指南』 Ⅰ. 简介 TopCoder 组件开发 TopCoder 组件开发使用的语言包括Java 和C#,尽管这两种语言有较大差别,但开发过 程却非常相似.本指南将 ...
- 『力扣刷题』5276_不浪费原料的汉堡制作方案 解题代码
LeetCode-cn 力扣刷题 LeetCode-cn力扣刷题目录 165周赛 5276_不浪费原料的汉堡制作方案 * 5276. 不浪费原料的汉堡制作方案 显示英文描述* 用户通过次数212* 用 ...
- 『力扣刷题』5238_找出给定方程的正整数解 解题代码
html: embed_local_images: true embed_svg: true offline: true toc: undefined print_background: false ...
- 『TensorFlow2.0正式版』TF2.0+Keras速成教程·零:开篇简介与环境准备
此篇教程参考自TensorFlow 2.0 + Keras Crash Course,在原文的基础上进行了适当的总结与改编,以适应于国内开发者的理解与使用,水平有限,如果写的不对的地方欢迎大家评论指出 ...
最新文章
- PHP开发移动端接口(增强版)
- 【python】简单实现一个模板引擎
- 使用JSP处理用户注册和登陆
- 【正一专栏】从“欣欣像蓉”谈网络暴力
- php strrchar,php文件上传
- Bicolored RBS
- org.hibernate.annotationexception no identifier specified for entity
- 网络新潮文化:Wiki不完全手册
- 全球首款采用离心风扇/90Hz刷新率的电竞手机红魔3发布
- html css浮动标签,12种超酷HTML5 SVG和CSS3浮动标签效果
- 通向财务自由之路09_知道何时收手:如何保护你的资本
- 阿里云加密服务产品优势及使用场景
- 理顺8个版本vue的区别
- 普通计算机安装服务器系统安装教程,Windows Server操作系统详细安装教程
- 【供应链架构day5】美团供应链架构的演进之道 - 团购时代
- HTML表格的单元格合并
- 如何降低图片kb大小?教你两个快速压缩图片大小的方法!
- 首个Nginx windows Stable 版--轻量级Web服务器Nginx 0.7.59
- Linux服务 Nginx(一)
- STM32利用SPI读写SD卡的程序详解
热门文章
- 关于H3 BPM数据库如何实现排序取数据的问题
- lucene 高亮显示
- Altium Designer哪里下载和导入元件库_图文教程
- CKeditor自定义上传图片功能
- DataGridView里的Checkbox全选问题解决了!
- PHP常量:define和const的不同之处
- html 像素跟百分比,html – 将百分比宽度与边距(以像素为单位)组合起来
- 文件设置索引_什么样的网站结构备受搜索引擎喜爱?
- mysql 值到99999后不增值了_MySQL必知必会3
- python 参数个数 同名函数_Python——函数的参数