FMOD在C#下的基本使用
来源:互联网 发布:音频压缩算法开源 编辑:程序博客网 时间:2024/04/30 06:19
FMOD在C#下的基本使用
本文介绍了C#下简单使用FMOD播放音乐和音效,具体例子放后边
由于最近在使用C#开发一款单机小游戏,需要用到声效,声音库,本来使用SDL_mixer库,可在C#下有诸多问题,后来了解到FMOD音效引擎也不错,使用起来也简单,就把自己的经验给大家分享一下。
首先准备 FMOD 的API
官网
https://www.fmod.com/,下载起来比较麻烦,需要注册。
我打包好的
http://download.csdn.net/download/weixin_29034715/10026280
下载完成,一路安装,最后在安装目录 FMOD Studio API Windows\api\lowlevel中找到我们需要的头文件和库
inc中有C/C++的头文件 和 C#的类文件
examples中有C/C++的详细例子
lib中所有的运行库包括x86 x64
在C#中我们需要包含以下三个文件
fmod.cs 包含主要类和方法
fmod_dsp.cs 用于dsp音效插件类
fmod_errors.cs 根据返回值枚举,返回所有的错误信息
然后复制lib/ 下的fmod.dll 到你的项目bin/debug bin/release 中,动态链接库只有一个,1M多一点,很轻巧
到此准备完毕。
打开项目,添加fmod的三个.cs到项目中
fmod.cs中经常用到的类和枚举:
VERSION 版本相关 平台相关 x64 需要用到 fmod64.dll
CONSTANTS 各种属性的最大值
RESULT 所有的返回值枚举
INITFLAGS 初始化类型枚举
SOUND_TYPE 声音的类型枚举
MODE FMOD 中所有的模式枚举(经常使用)
OPENSTATE 声音的打开状态枚举
TAGTYPE 音乐文件中的各种标签枚举(例如:mp3的ID3V1,ID3V2)
TAGDATATYPE 标签的数据类型枚举
TAG 标签数据结构
TIMEUNIT 时间类型枚举(比如获取声音长度毫秒数用:MS)
CREATESOUNDEXINFO 创建声音的扩展信息,这个主要用在从网络创建声音(可以直接提供.mp3后缀的下载链接,很方便),和从内存创建声音
Factory 只有一个函数RESULT System_Create(out System system),用来创建FMOD.System 的实例,一切的起点
System 通过Factory 创建,包含所有的声音创建,各种系统设置,主要用到 init close 方法
Sound 由System.createSound / createStream 创建的声音实例
Channel 每当用System.PlaySound播放一个声音时都会产生一个通道,用来进行声音的暂停,音量等操作
其他还有DSP,3D音效相关的,暂时用不到没研究
好了接下来上代码
具体代码
using FMOD;using System;using System.Diagnostics;namespace FMOD_for_CS{ class Program { static void Main(string[] args) { FMOD.RESULT fmodResult; FMOD.System fmodSystem; // 1.创建System实例 fmodResult = FMOD.Factory.System_Create(out fmodSystem); if(fmodResult != RESULT.OK) { System.Diagnostics.Debug.WriteLine (Error.String(fmodResult)); return; } // 2.初始化System fmodResult = fmodSystem.init(32, INITFLAGS.NORMAL, IntPtr.Zero); if (fmodResult != RESULT.OK) { System.Diagnostics.Debug.WriteLine(Error.String(fmodResult)); return; } FMOD.Sound soundEffect; // 音效 FMOD.Sound backgroundMusic; // 背景音乐 // 3.创建声音资源 // 使用createSound创建音效 创建音效要用MODE.LOOP_OFF关闭循环播放(默认循环开启) out 一个Sound实例 // createSound用来创建比较短不占用空间的音效,例如游戏中的攻击音效,可以在多个通道同时播放 fmodResult = fmodSystem.createSound("test.wav", MODE.LOOP_OFF, out soundEffect); if (fmodResult != RESULT.OK) { System.Diagnostics.Debug.WriteLine(Error.String(fmodResult)); return; } // 使用createStream创建背景音乐 提供文件名 创建BGM可以默认开启循环 out 一个Sound实例 // createStream用来创建比较长的声音,需要不停加载数据 例如游戏中的背景音乐,stream只能在一个通道播放 fmodResult = fmodSystem.createStream("bgm.ogg", MODE.DEFAULT, out backgroundMusic); if (fmodResult != RESULT.OK) { System.Diagnostics.Debug.WriteLine(Error.String(fmodResult)); return; } FMOD.Channel channelMusic; // 背景音乐的播放通道 FMOD.Channel channelEffect; // 音效的播放通道 // 播放音乐 提供Sound 通道组我们没有 开始时是否暂停 是 out 当前声音的播放通道 fmodSystem.playSound(backgroundMusic, null, true, out channelMusic); // 暂停来设置音量 0.0 - 1.0 channelMusic.setVolume(0.5f); // 恢复播放 channelMusic.setPaused(false); // 按下ESC退出播放 while (Console.ReadKey().Key != ConsoleKey.Escape) { // 按下空格播放音效 if(Console.ReadKey().Key == ConsoleKey.Spacebar) fmodSystem.playSound(soundEffect, null, false, out channelEffect); } // 最后释放所有资源 可以代替.close(); fmodSystem.release(); } }}
完整代码http://download.csdn.net/download/weixin_29034715/10026602
- FMOD在C#下的基本使用
- 学习fmod的使用
- fmod:2.SoundManager的解析和在OGRE中使用fmod
- fmod:1.通过SoundManager在OGRE中使用fmod
- 如何在Unity中使用Fmod Studio?
- 如何在Unity中使用Fmod Studio
- FMOD音频引擎的简单使用
- 关于在Eclipse中无法使用pow()、fmod()函数的问题
- Fmod使用总结
- 在C#中使用事件的基本步骤
- 在VS2005.net下使用C#下的XML
- FMOD.dll的介绍
- fmod的细节
- FMOD的循环播放
- 在spring下使用junit做单元测试的基本方法
- 在linux操作系统下使用github的基本流程
- Redis 在Linux下的基本安装和使用
- 在windows下使用cmd的基本命令大全
- springboot 上传下载
- unity学习如何做服务器与客户端
- Subversion代码提交中的org.apache.subversion.javahl.ClientException: svn: E200007: Commit failed异常解决
- anaconda 安装graphviz
- thinkphp实现省,市,区三级联动
- FMOD在C#下的基本使用
- 不容易系列之(1)
- MySQL event
- jsf标签 验证器的使用
- [CodeVersion--GIT]在自己服务器上创建私有代码仓库
- 【LeetCode】C# 93、Restore IP Addresses
- 这8个要点,能让你的网页首图抓住用户注意力
- 51nod 1133 不重叠的线段(贪心)
- 聊天框点击发送闪退问题