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