Main Page » Miscellaneous »

A collection of game-engines, and whether or not they can seamlessly queue audio

Created: / Modified:

Always use secure-HTTP / Unsecure HTTP / Permanent Link

So, I joked on Twitter: "I judge game engines by whether or not you can do seamless audio queuing." (Then I got distracted for a full week ...)

By "seamless audio queuing" I mean you take two (or more) sound files, and play them in a sequence without a gap in between them. Consider these two audio clips: I'm talking about a game engine which can, in real time, play them as a continuous sound, without a messy-sounding gap.1 Why is this relevant? Well, for one thing, you can have loop points. For another, you can do things like seamlessly switching up the music depending on what's going on: it didn't have to segue into Test2, it could have gone into an appropriately-made guitar riff if things got too hot for Masha to handle.

Someone asked if I had an actual list. I did not at the time, so I've decided to make one! This list does not include other features, such as synchronizing two audio clips to play at the same time, or crossfading between tracks (c.f. Metal Gear Solid 2's different "alert" and "evade" themes).

  • OpenTK: Pass, via the OpenAL API, which permits submitting an OpenAL buffer. (I'm having trouble finding any documentation, but AL.SourceQueueBuffer() is what I'd be looking for if I could find it.)
  • XNA Framework: Pass: the DynamicSoundEffectInstance class exists solely for that very purpose.
  • MonoGame (an open-source implementation of XNA): Currently, there is no official implementation of DynamicSoundEffectInstance. However, version 3.6 is slated to have one.
  • Unity: Pass, either with the AudioSource.PlayScheduled function, which the link describes as "the preferred way to stitch AudioClips in music players"; or via the MonoBehaviour.OnAudioFilterRead message (not yet tested), which the linked documentation specifically says can be used for procedurally generating audio (but which will probably have some of the problems that PlayScheduled was intended to solve).
  • Unreal Engine: Fail (not yet tested). The documentation mentions in multiple places that, while it can do things like branching, it cannot do so seamlessly.
  • Ren'Py: Pass (not yet tested), apparently, via the Queue statement or the renpy.music.queue() function, which appear to be the official (i.e. only) way to have loop-points.
  • RPG Maker: Fail: The documentation only lists functionality for starting and stopping the audio; you can't even pause it! I haven't even found message board posts asking about the subject.
  • Game Maker Studio: Inconclusive: I can't find anything on the subject. This probably means "no."

Less-Open Engines

Engines which are proprietary, don't have publicly-available documentation, or otherwise can only be tested through speculation and observation.

  • Source Engine: Demonstrated in Left 4 Dead 2's procedural combat-music, and to a lesser extent in Portal 2.
  • Platinum Engine: Demonstrated in METAL GEAR RISING: REVENGEANCE's2 boss-battles. The change can be ever so slightly jarring, if you're familiar enough with the melody or they change up at the wrong moment in the lyrics. Or if the lyrics overlap, I literally had one boss fight where the vocals went "DREAAAAAMS WIIIILL DIIISSAAA— DREAAAAMS WILLL DIIISSAAAPPEAAAAAAAAAAR"

1Don't try this with those particular MP3 files — for weird reasons involving synchronizing with 29.97 frames per second, these files have messy-sounding gaps built in.

2The all-caps is mandatory.

Comments (auto-closed) (rss feed)

No comments on this article.