Music tracker files in Inform6 games?

I’m reading the design manual and it briefly alludes to blorb files being able to contain music tracker files (MOD being singled out). I’m wondering a few things

  1. Are there any I6 games known to have used this?

  2. Do any of the interpreters out there support sound playback?

  3. How could I learn how to embed music tracker music in an I6 project?

  4. Would this also work with games made using PunyInform?

I actually began composing using ScreamTracker and later, ImpulseTracker, as a teenager in the early 90s, and I still sometimes use tracker software (more modern ones like SunVox and Renoise). It would be really cool to be able to include atmospheric music in an otherwise purely text-based game.

1 Like

There has been some recent discussion touching on this at Approaches to sound in The Lurking Horror - #15 by jkj_yuio

Frotz supports sound playback. Ozmoo supports sound playback on MEGA65. There are others as well, but I’m not sure which.

The standard library doesn’t support sound. The PunyInform library doesn’t support sound. Nothing is stopping you from playing sounds though, using either library.

1 Like

I’m aware of one game that uses MOD music, and it’s a Hugo game, not Inform, and over 20 years old:

I used to play with MODs myself a bit, but the spec was sort of vague, meaning my fancypants Mac tracker Meditor didn’t work with anything else but itself. Obviously lots of Amiga games use a simpler and more compatible format.

Anyway, I think due to a combination of MOD’s vagueness, trickiness, and being eclipsed technically in many areas a long time ago (now that storage space is nothing, it’s much easier to just ship rendered audio) nobody’s using it in IF. They weren’t even using it when it was more current.

I don’t know that’s no longer supported per se, but if it is, I can see it inviting tech trouble for a game if you use it, increasing the chances it won’t run in as many venues, or that the music won’t play correctly.

If you value the aesthetic of MOD music, I would make your music in your tracker, then just render it to aif/wav/ogg. etc. and use that in the end file. Looping etc. can be controlled in the interpreter. If you really value having the IF interpreter itself play your actual shipped MOD file, good luck, but that’s probably a fraught road.

-Wade

In addition to “Moments Out of Time” as noted in the “Lurking Horror” link, the Glulx game “Ekphrasis” also includes a MOD (two copies of the same one, actually) in its Blorb file. Presumably it plays them at some point in the game.

Gargoyle has support for MOD files, but I’d agree that unless you really care about file size, converting to Ogg Vorbis first is ideal, since you get completely predictable output that way.

  1. My game project is done in I6 and it has a soundtrack done in MOD and XM.
  2. Frotz seems to play them just fine.
  3. Actually playing the music is easy enough (I use @sound_effect SND_HOME 2 $FFFF; to do looping background music, @sound_effect SND_DEAD; to play a song only once, if that’s any indication). Packing the songs into a blorb together with the game itself may get a little complicated. That’s why I wrote my own packer.
  4. My project is in fact written with the PunyInform library. As @fredrik said, the libaries don’t give you any out-of-the-box functions to play, but the compiler’s support for inline assembly is still there (examples in point 3).
3 Likes

@sound_effect SND_DEAD; is illegal acccording to the standard, and it’s a type of call that doesn’t occur in Infocom story files. Interpreters are recommended to play the sound once, and maybe issue a warning.

I think what you should do is:

@sound_effect SND_DEAD 2 511; ! start playing, one repetition, full volume

It doesn’t really count as a game (more of a demo), but my “Soundtest: An Interactive Noisemaker” plays a MOD file.

Oh nice. Thanks!

1 Like

Do you think you can provide an example of the play routine in some inform code? I don’t know anything about assembly language, unfortunately.

Also on a related note, would it be possible to do a binary release for your packing tool? That could be really amazing to be able to use, but I don’t have any background in compiling C# programs…

It’s wild to me that Frotz basically has a mod player built into it and nobody talks about it…

To start playing a sound:

@sound_effect SOUNDNUMBER 2 511;

To stop playing a sound:

@sound_effect SOUNDNUMBER 3;

SOUNDNUMBER is a constant, 3 or higher, and there must be a sound corresponding to this number in the Blorb file.

You can read up on the details of this instruction and how to use the different parameters at The Z-Machine Standards Document and The Z-Machine Standards Document

1 Like

For anyone wondering why the number must be three or higher:

@sound_effect 1;

Is a brief beep sound (no volume argument used or allowed, and needs no sound file).

@sound_effect 2;

Is a brief boop sound (no volume argument used or allowed, and needs no sound file).

2 Likes