YUAN
FNA集成FMOD记录.txt
Date: 2025/3/26Tags: FMODFNAMonoGameXNA

最近在学习并使用FNA开发游戏,为了更好的处理游戏音频,尝试接入FMOD

主要参考以下教程: https://medium.com/@daisyowl/setting-up-fmod-for-a-c-game-38b5fe82f04a

在导入相关的DLL和C# API源码后 写入以下代码 代码如下:

using FMOD.Studio;
using Gum.Wireframe;
using Microsoft.Xna.Framework;
using MonoGameGum;
using Nez;
using Nez.ImGuiTools;
using Project.Source.Scenes;

namespace Project.Source;
public class Event
{
    public static readonly FMOD.GUID BGM_BGM = new FMOD.GUID { Data1 = 70498606, Data2 = 1274959145, Data3 = 1737589438, Data4 = 336232275 };
}
public class GameRoot : Core
{
    public GameRoot() : base(1920, 1080, false, "ProjF")
    {
        Scene.SetDefaultDesignResolution(1920, 1080, Scene.SceneResolutionPolicy.ShowAll);
    }

    public static GraphicalUiElement UIRoot;
    public static FMOD.Studio.System FMODStudioSystem;

    protected override void Initialize()
    {
        base.Initialize();
        //初始化GUM
        GumService.Default.Initialize(
            this,
            "GumProject/GumProject.gumx");
        Scene = new GameplayScene();
        
        var imGuiManager = new ImGuiManager();
        RegisterGlobalManager( imGuiManager );
        
        FMOD.Studio.System.create(out var fmodStudioSystem);
        fmodStudioSystem.getCoreSystem(out var fmodSystem);
        fmodSystem.setDSPBufferSize(256, 4);
        fmodStudioSystem.initialize(
            128,
            FMOD.Studio.INITFLAGS.NORMAL,
            FMOD.INITFLAGS.NORMAL,
            (IntPtr)0
        );
        
        fmodStudioSystem.loadBankFile(
            // adjust this path to wherever you want to keep your .bank files
            "Desktop/Master.strings.bank",
            FMOD.Studio.LOAD_BANK_FLAGS.NORMAL,
            out Bank strings
        );
        fmodStudioSystem.loadBankFile(
            // adjust this path to wherever you want to keep your .bank files
            "Desktop/Master.bank",
            FMOD.Studio.LOAD_BANK_FLAGS.NORMAL,
            out Bank strin
        );
        fmodStudioSystem.loadBankFile(
            // adjust this path to wherever you want to keep your.bank files
            "Desktop/GamePlay.bank",
            FMOD.Studio.LOAD_BANK_FLAGS.NORMAL,
            out Bank sfx
        );
        fmodStudioSystem.loadBankFile(
            // adjust this path to wherever you want to keep your .bank files
            "Desktop/BGM.bank",
            FMOD.Studio.LOAD_BANK_FLAGS.NORMAL,
            out Bank bank
        );
        FMODStudioSystem = fmodStudioSystem;
        
        
      
        imGuiManager.SetEnabled(true);
    }

    protected override void Update(GameTime gameTime)
    {
        GumService.Default.Update(this,gameTime, UIRoot);
     
        FMODStudioSystem.update();
        base.Update(gameTime);

        if (Input.IsKeyPressed(Microsoft.Xna.Framework.Input.Keys.F10))
        {
            DebugRenderEnabled = !DebugRenderEnabled;
            FMODStudioSystem.getEventByID(Event.BGM_BGM, out EventDescription evDesc);
            evDesc.createInstance(out EventInstance evInst);
            evInst.setVolume(1);
            evInst.start();
        }
    }
}

需要注意的是,加载Bank文件时,为输出目录的相对路径,在这里调试了很久。。。

Published: 2025/3/26