A collection of game-engines, and whether or not they can seamlessly queue audio
Created: / Modified:
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 switching to a different track in the middle (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 the 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.PlayScheduledfunction, which the link describes as "the preferred way to stitch AudioClips in music players"; or via the
MonoBehaviour.OnAudioFilterReadmessage (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
PlayScheduledwas 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
Queuestatement 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."
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"
2The all-caps is mandatory.
Previous: Rule #1 when responding to anything technical: Never ask "Why?" (a rant)
Next: List Of Video Games Where The Final Boss Music Is Also The Game's Themesong
Back to Miscellaneous
Back to Main Page
No comments on this article.