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

原创粉丝点击