Feature request: event notes and parameter tooltips in FMODEvent uassets

Hi Firelight!

My team and I’ve been using FMOD for a couple of years now and are very happy with the possibilities it provides.
As our projects get more complex, we’d like to be able to provide more easily accessible information to other (non-audio) designers and programmers on our team. For them, when they’re optimizing or iterating on game logic involving FMOD events, it’s a bit of a black box when we use parameters to drive audio (which we do a lot). It would help if we could give more information in our FMOD Event uassets!

To that end, we’d like to request the following features:

  • We can already set event notes in FMOD Studio. Could these also be shown in the FMOD event’s uasset in UE?
  • An FMOD event’s uasset shows the event’s parameters. There, the tooltip defaults to ‘[parameter name + min-max values]’. It’d be great if we could write custom tooltips for parameters.

Custom tooltip parameters allow us to explain the general behavior of a parameter, while notes let us explain event-specific timeline and parameter behavior.

I’m not sure if there are any performance costs associated with exposing such data to FMOD event uassets. Looking forward to hearing your thoughts. Thanks for your time and consideration!

Thanks for the feature requests - I definitely understand the use-case for them. While I’ve added them to our internal feature/improvement tracker, they both come with some caveats that make them a little more complex than they seem.

Event notes are intended to be used by sound designers to more easily understand the project within Studio, and as such are currently not encoded into banks in the bank building process, which means they cannot be accessed by the UE plugin the same way that user properties are. A change like, for example, allowing event notes to be optionally built to the master strings bank, is substantial enough that it would likely only be considered for a major version release (i.e. 2.03).

This is more feasible - the tooltip for event parameters in generated assets is set from the file SFMODEventEditorPanel.cpp, in SFMODEventEditorPanel::ConstructParameters. If you wanted to, you could modify the .cpp as desired and rebuild the project from your IDE. However, the custom tooltip still needs to be serialized in some manner.

A more bespoke workaround for both cases would be to use custom Studio script to write your event notes to file, and then parse them in editor as needed to set up tooltips or an extra UI section for event notes - the following Studio script provides a simple example of writing event notes to a text file:

studio.menu.addMenuItem({
    name: "Build + Write Event Notes",
    execute: function() {
        writeLenToFile("EventNotes");
    }
});

function writeLenToFile(objectType){

    // Save project and build banks before doing anything else
    studio.project.save();
    studio.project.build();

    // Get project path and custom build directory if one is set, and define txt file output path
    var projectPath = studio.project.filePath;
    var projectName = projectPath.substr(projectPath.lastIndexOf("/") + 1, projectPath.length);
    if(typeof studio.project.workspace.builtBanksOutputDirectory == 'undefined'){
        outputPath = projectPath.substr(0, projectPath.lastIndexOf("/") + 1) + "Build/" + objectType + ".txt";
    } else {
        outputPath = studio.project.workspace.builtBanksOutputDirectory + objectType+ ".txt";
    }
    
    // Open txt file at output path, returning early if file cannot be opened
    var textFile = studio.system.getFile(outputPath);
    if (!textFile.open(studio.system.openMode.WriteOnly)) {    
        alert("Failed to open file {0}\n\nCheck the file is not read-only.".format(outputPath));
        console.error("Failed to open file {0}.".format(outputPath));
        return;
    }

    // Write description of info contained in file
    textFile.writeText(objectType + " for '" + projectName +"'\r\n\r\n");
    
    // Call function to go through Studio project
    IterateEvents(textFile);
    
    textFile.close();
    console.log("File containing " + objectType + " successfully created at: " + outputPath);
}

function IterateEvents(textFile){

    // get all events and iterate through them
    var events = studio.project.model.Event.findInstances();
    events.forEach(function(event) {

        // write event name
        textFile.writeText("Event Name = " + event.name + "\r\n"
            );
        
        // write event note
        textFile.writeText(
            "\t" + " Note = " + event.note + "\r\n"
            );
        
        // write horizontal rule
        textFile.writeText("****" + "\r\n\r\n");

        
    });
}
2 Likes

Hi Louis, thanks for the elaborate answer! I wanted to run this by our tech team before getting back to you. It looks like we can make this work, so we’re going to give it a shot! Thanks so much!

No problem, feel free to get back to me if you run into any issues that you require assistance with!