FMOD在C#下的基本使用

1 篇文章 0 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值