我感觉声音的播放比较简单。我们从播放声音开始。为什么我这么觉得?我也不知道。
这里是展示最简单的DirectX播放声音的例子,我尽量省略了无关的代码。最后的代码只有19行,够简单了吧?
准备工作:
1.安装了DirectX SDK(有9个DLL文件)。这里我们只用到MicroSoft.DirectX.dll 和 Microsoft.Directx.DirectSound.dll
2.一个WAV文件。(这样的文件比较好找,在QQ的目录里就不少啊。这里就不多说了。)名字叫SND.WAV,放在最后目标程序的同个目录下面
开始写程序啦。随便用个UltraEdit就好了。
1.引入DirectX 的DLL文件的名字空间:
using Microsoft.DirectX; using Microsoft.DirectX.DirectSound; |
2.建立设备。在我们导入的Microsoft.DirectX.DirectSound空间中,有个Device的类。这个是表示系统中的声音设备。
3.设置CooperativeLevel。因为windows是多任务的系统,设备不是独占的,所以在使用设备前要为这个设备设置CooperativeLevel。调用Device的SetCooperativeLevel方法:其中,第一个参数是一个Control,第二个参数是个枚举类型。
在这个程序中,Control我随便弄了个参数塞进去(很汗吧!)。如果在windows程序中,可以用this代替。第二个参数就是优先级别,这里表示优先播放。
dv.SetCooperativeLevel((new UF()),CooperativeLevel.Priority); |
4.开辟缓冲区。对于上面的声音设备,他有个自己的缓冲区,叫主缓冲区。系统中,一个设备有唯一的主缓冲区。由于windows是多任务(又是这个!),所以可以有几个程序同时利用一个设备播放声音,所以每个程序都自己开辟一个二级缓冲区,放自己的声音。
系统根据各个程序的优先级别,按照相应的顺序分别去各个二级缓冲区中读取内容到主缓冲区中播放。这里,我们为SND.WAV开辟一个缓冲区。
其中,第一个参数表示文件名(傻瓜都看出来了!),第二个就是需要使用的设备。
SecondaryBuffer buf=new SecondaryBuffer(@"snd.wav",dv); |
5.接下来就可以播放啦。第一个参数表示优先级别,0是最低的。第2个参数是播放方式,这里是循环播放。
buf.Play(0,BufferPlayFlags.Looping); |
6.由于命令行程序没有消息循环,执行完代码就退出了,所以,我们需要暂停程序。
7.关键的部分已经完了,这里只是交代一下刚才的那个倒霉的new UF() 是什么东西。这个完全是为了应付SetCooperativeLevel的参数要求。我不知道这样做有什么附作用(各位如果因此把声卡烧了…………)
8.代码写完啦~~~。下面可以编译了,这里编译比较复杂点。
csc /r:directX\MicroSoft.DirectX.dll;directX\Microsoft.Directx.DirectSound.dll dxsnd.cs |
这里,我把2个DLL文件放在当前目录的directx目录下(这个是我自己建的,你只需要指出这2个文件的位置就可以了。)
顺便把我的目录结构说明一下:
|
|--dxsnd.cs
|--snd.wav
|--<directx>
|
|--MicroSoft.DirectX.dll
|--Microsoft.Directx.dll
下面是完整代码:
//dxsnd.cs using System; using Microsoft.DirectX; using Microsoft.DirectX.DirectSound; using System.Windows.Forms; namespace test1 { class test { public static void Main(string [] args) { Device dv=new Device(); dv.SetCooperativeLevel((new UF()),CooperativeLevel.Priority); SecondaryBuffer buf=new SecondaryBuffer(@"snd.wav",dv); buf.Play(0,BufferPlayFlags.Looping); Console.ReadLine(); } class UF:Form{} } } |
分享到:
相关推荐
在C#编程环境中,利用DirectX的DirectSound组件可以实现高效、低延迟的声音播放功能。DirectSound是微软为Windows平台开发的一个高级音频处理API,它提供了丰富的音频处理能力,包括混音、3D音效、硬件加速等。下面...
### C# 下利用 DirectSound 实现声音播放 ...通过以上步骤,我们可以在 C# 应用程序中利用 DirectSound 实现声音的播放功能。这种方式不仅简单高效,而且适用于多种应用场景,包括但不限于游戏开发、媒体播放器等。
在C#中使用DirectX编程,主要是借助微软提供的DirectX SDK,这是一个强大的工具集,包含了多个组件,用于创建高质量的实时应用程序,特别是游戏和多媒体软件。DirectX的主要目标是实现硬件无关性和为硬件开发提供...
在本文中,我们将重点讨论如何利用DirectX来实现特定的音频功能,即“DirectX方式指定声卡播放声音”。这个主题通常涉及到在多声卡环境下,通过编程控制每张声卡独立播放不同的声音文件,甚至可以实现简单的IP网络...
DirectX 9.0 SDK是微软为开发人员提供的一套工具和库,用于在Windows操作系统上创建高性能的图形和多媒体应用程序。C#版本的DirectX 9.0 SDK文档中文译本是专为使用C#语言进行DirectX编程的开发者准备的宝贵资源,它...
在声音录制和播放领域,基于DIRECTX的实现是一种常见的技术选择。DIRECTX是微软推出的一套应用程序接口(API),主要用于多媒体应用开发,特别是在游戏和图形处理方面。它包含多个子组件,其中DirectSound是用于音频...
通过学习和分析这些示例代码,开发者可以更好地理解如何在C#中使用DirectX进行图形和音频编程,如何处理用户输入,以及如何实现网络通信等功能。 总之,DirectX SDK对于想要用C#开发游戏的程序员来说是一份宝贵的...
这些例子涵盖了DirectX的基础使用到进阶应用,帮助开发者更好地理解和学习如何在C#环境中利用DirectX进行图形渲染、声音处理、输入控制等操作。 首先,我们可以从基础部分开始,了解如何在C#中初始化DirectX。这...
- **工具选择**:DirectSound 类用于实现声音采集。DirectSound 是 DirectX 库的一部分,提供了对音频设备的底层访问,非常适合用于实时音频处理。 - **关键步骤**: - 设置 PCM (Pulse Code Modulation) 格式,...
根据提供的标题、描述、标签及部分内容,本文将详细介绍在C#窗体中播放声音的四种方法,这四种方法包括:使用DirectX库、利用Microsoft Speech Object Library、采用System.Media.SoundPlayer类以及通过Windows ...
本示例将探讨如何在C#中实现一个简单的“键盘钢琴”功能,利用Microsoft.DirectX.DirectSound库来播放声音。这个库提供了对DirectSound API的封装,使得在Windows平台上播放和处理声音变得简单。 首先,我们需要...
在DirectX 9.0中,C#开发者可以利用它来实现复杂的3D模型渲染、光照、纹理贴图、阴影以及复杂的图形特效。C#的.NET Framework提供了封装DirectX的类库,如Microsoft.DirectX和Microsoft.DirectX.Direct3D,使得C#...
在本项目中,"C#播放器 使用dx Quartz库"是一个基于C#编程语言开发的媒体播放器,它利用了DirectX Quartz库来实现多媒体播放功能。DirectX Quartz是DirectX的一部分,主要用于视频处理和音频播放,提供了丰富的API...
总的来说,这个基于Visual C#的DirectX开发实例将涵盖从基础的DirectX组件使用,到高级的3D图形和音频编程技巧,旨在帮助开发者掌握在C#环境下利用DirectX进行游戏和图形应用开发的能力。通过深入学习和实践,你不仅...
在C#中,我们可以利用开源库如libVLC或SharpDX来处理这两种协议的播放。 1. **libVLC**: libVLC是一个跨平台的多媒体框架,提供了强大的媒体播放功能,包括对RTMP和RTSP的支持。通过NuGet包管理器可以将libVLCSharp...
在.NET环境中,C#语言通常用于开发...总结来说,C#中操作DirectX虽然相比C++有一定复杂性,但通过有效的库(如SharpDX)和适当的学习资源,开发者能够充分利用DirectX的强大功能,创建出高性能的图形和音频应用。
在C#编程中,利用Microsoft.DirectX.DirectSound.dll和Microsoft.DirectX.dll库可以实现音频录制功能。这两个DLL文件是微软DirectX SDK的一部分,主要用于游戏开发和多媒体应用,提供了与声音硬件交互的底层接口。 ...