WinCE 下利用CoreDll.dll 播放声音
2010-11-29 15:40
288 查看
此示例演示如何使用平台调用来播放两个 W*** 文件:一个为嵌入的资源,另一个为内容。
若要在 Visual Studio 中实现作为嵌入资源的 W*** 文件,请在“属性”窗格中将其“生成操作”属性设置为“嵌入的资源”。
此示例定义了 Sound 类,该类通过使用 Windows CE 中的 CoreDll.dll 提供下面的本机代码功能:
使用文件名或流播放声音的平台调用方法声明。
用于在平台调用方法调用中传递参数的位值枚举。
Play 方法,用于调用正确的平台调用方法来播放单独的文件或嵌入的资源。
此示例使用名为 Chimes.wav 的声音文件。当包含该声音文件作为嵌入资源时,要通过如下方式为该文件返回资源流:在对 GetManifestResourceStream 的调用中将程序集命名空间添加到原始文件名的前面。
使用平台调用播放声音
1. 将 Sound 类添加到项目中。
2. 添加用于创建 Sound 类的实例和播放文件的方法,例如,在某按钮的 Click 事件中。
此示例需要引用下面的命名空间:
System
System.IO
System.Reflection
System.Runtime.InteropServices
System.Windows.Forms
以上代码是 MSDN 中提供的,我仅仅是经过测试而已。
在 VS2003 下,采用
这个调用方法,只要播发的声音文件的路径是正确的,是可以播放的。
本人亲自测试过,在我的开发板上是可以正常运行的,但是仿真时有问题。
建议大家有硬件平台的直接就在硬件平台上测试。
原文地址:
http://www.cnblogs.com/WorkHard_PlayHarder/articles/1609019.html
若要在 Visual Studio 中实现作为嵌入资源的 W*** 文件,请在“属性”窗格中将其“生成操作”属性设置为“嵌入的资源”。
此示例定义了 Sound 类,该类通过使用 Windows CE 中的 CoreDll.dll 提供下面的本机代码功能:
使用文件名或流播放声音的平台调用方法声明。
用于在平台调用方法调用中传递参数的位值枚举。
Play 方法,用于调用正确的平台调用方法来播放单独的文件或嵌入的资源。
此示例使用名为 Chimes.wav 的声音文件。当包含该声音文件作为嵌入资源时,要通过如下方式为该文件返回资源流:在对 GetManifestResourceStream 的调用中将程序集命名空间添加到原始文件名的前面。
使用平台调用播放声音
1. 将 Sound 类添加到项目中。
public class Sound { private byte[] m_soundBytes; private string m_fileName; 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 WCE_PlaySound(string szSound, IntPtr hMod, int flags); [DllImport("CoreDll.DLL", EntryPoint="PlaySound", SetLastError=true)] private extern static int WCE_PlaySoundBytes (byte[] szSound, IntPtr hMod, int flags); /// <summary> /// Construct the Sound object to play sound data from the specified file. /// </summary> public Sound (string fileName) { m_fileName = fileName; } /// <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> /// Play the sound /// </summary> public void Play () { // if a file name has been registered, call WCE_PlaySound, // otherwise call WCE_PlaySoundBytes if (m_fileName != null) WCE_PlaySound(m_fileName, IntPtr.Zero, (int) (Flags.SND_ASYNC | Flags.SND_FILENAME)); else WCE_PlaySoundBytes (m_soundBytes, IntPtr.Zero, (int) (Flags.SND_ASYNC | Flags.SND_MEMORY)); } }
2. 添加用于创建 Sound 类的实例和播放文件的方法,例如,在某按钮的 Click 事件中。
// To return a Stream object associated with an embedded // resource, you must prepend the namespace to the original // name of the file in the project. private void btnEmbedded_Click(object sender, System.EventArgs e) { Sound sound = new Sound (Assembly.GetExecutingAssembly().GetManifestResourceStream("SoundSample.chimes.wav")); sound.Play(); } private void btnFile_Click(object sender, System.EventArgs e) { Sound sound = new Sound ("Program Files//SoundSample//chord.wav"); sound.Play(); }
此示例需要引用下面的命名空间:
System
System.IO
System.Reflection
System.Runtime.InteropServices
System.Windows.Forms
以上代码是 MSDN 中提供的,我仅仅是经过测试而已。
在 VS2003 下,采用
private void btnFile_Click(object sender, System.EventArgs e) { Sound sound = new Sound ("Program Files//SoundSample//chord.wav"); sound.Play(); }
这个调用方法,只要播发的声音文件的路径是正确的,是可以播放的。
本人亲自测试过,在我的开发板上是可以正常运行的,但是仿真时有问题。
建议大家有硬件平台的直接就在硬件平台上测试。
原文地址:
http://www.cnblogs.com/WorkHard_PlayHarder/articles/1609019.html
相关文章推荐
- WinCE 下利用CoreDll.dll 播放声音(C#)
- DirectX编程:[初级]C#中利用DirectSound播放WAV格式声音[最少只要4句话]
- 【iOS录音与播放】实现利用音频队列,通过缓存进行对声音的采集与播放
- 在C#中利用DirectX实现声音播放
- Delphi利用Bass.dll播放音频
- 在C#中利用DirectX实现声音播放
- 【iOS录音与播放】实现利用音频队列,通过缓存进行对声音的采集与播放
- 利用钩子函数来注入DLL的一个具体应用:点击桌面不同图标,播放相应音符
- 建立第一个directX程序--winform--在C#下利用DirectSound实现声音播放
- iOS开发 ( iPhone/iPad):利用ffmpeg 实现音频解码、声音播放
- 利用VideoView简单实现视频播放 包括 横竖屏切换 声音 亮度 暂停
- 分享一段利用JavaScript实现播放声音/音乐的例子。
- IOS 声音播放(利用AVAudioPlayer)
- 利用vs2005.net编写基于WinCE的DLL
- 通过winmm.dll控制声音播放
- 建立第一个directX程序——在C#下利用DirectSound实现声音播放
- AudioToolbox--利用AudioQueue音频队列,通过缓存对声音进行采集与播放
- 在C#中利用DirectX实现声音播放(winForm)
- DirectX编程:[初级]C#中利用DirectSound播放WAV格式声音[最少只要4句话]
- 在C#中利用DirectX实现声音播放