Music Control

Overview

This product is a package for using MIDI files and SoundFonts in the Godot engine. It includes a realtime audio rendering component for rendering MIDI events using a provided SoundFont.

Using this product lets you create advanced music games and tools using Godot.

What You Get

Audio rendering component

Audio Rendering Code

The audio rendering component is a GDExtension written in C++ that handles audio synthesis and event scheduling. The audio renderer is capable of low latency output and can place events at precise sample positions in the output. The renderer runs in a separate Godot audio thread and uses lock-free algorithms for low latency and predictable performance without glitches.

MIDI parser

Representation of MIDI file

The MIDI parser lets you import MIDI files to your Godot project. The imported object is a simple GDScript array of events. Advanced features of MIDI file format are supported as extended events which can be processed or easily ignored.

SoundFont player

Waveform of piano note

The SoundFont player lets you import SoundFont instruments into Godot and use them to play MIDI events. The player supports loading .sf2, .sf3, and .sfo file formats. Each file can contain multiple instruments and multiple samples per instrument.

Demonstration Projects

The demonstration projects show off the capabilities of the product. The first project plays a MIDI file with in-game controls for adjusting instruments, tempo, and other parameters. It also allows the user to play a virtual keyboard along with the music. A second project is a rhythm game demonstration showing how to combine a song in MP3 format with MIDI events that indicate game events.

Documentation

The documentation includes API-level descriptions of the classes, methods, and variables provided by the product. Also included are a setup and installation guide and an extensive user manual that covers many different use case scenarios.

Source Code

You get full source code to everything, including C++ renderer code and GDScript interface code.

Technical Specifications

The audio renderer component:

  • Uses 32-bit floating point sample format
  • Compatible with 22.05kHz, 44.1kHz, 48kHz, and 96kHz samplerates
  • Pre-compiled for:
    • Windows (32-bit)
    • Windows (64-bit)
    • MacOS (Universal)
    • iOS (Universal)
    • Android (ARM 32-bit)
    • Android (ARM 64-bit)
    • Linux x86 (64-bit)

The SoundFont player supports:

  • .sf2, .sf3, and .sfo formats
  • Unlimited logical channels
  • Up to 1024 simultaneous voices
  • Realtime waveform pitch resampling with quality levels:
    • Linear interpolation (default)
    • Cubic Hermite polynomial interpolation
    • 2x oversampling with sinc interpolation
  • Multiple player objects in a scene
  • Immediate mode interface for sending events with lowest latency
  • Scheduled events for sample-precise positioning in output