Opened 17 years ago

Closed 7 years ago

Last modified 13 months ago

#7230 closed enhancement

AUDIO: Support custom music instrumentation for Mac

Reported by: SF/superqult Owned by: lordhoto
Priority: low Component: Engine: SCUMM
Keywords: Cc:
Game:

Description

It would be very nice if ScummVM could read the iMuse Setups file
contained in lucasarts games for mac. It holds all the music instrument
samples, as well as sound effect/voice samples used in the game. The
music sounds so much better using these samples instead of the standard
MIDI sounds.

Ticket imported from: #587807. Ticket imported from: feature-requests/46.

Change History (19)

comment:1 by SF/jamieson630, 17 years ago

We'll address this alongside support for native MT-32 devices.
I have some MAC tracks I'm looking through now.

comment:2 by SF/jamieson630, 17 years ago

Owner: set to SF/jamieson630
Priority: normallow

comment:3 by SF/jamieson630, 17 years ago

Summary: Using iMuse Setups file instead of MIDI.Support custom music instrumentation for Mac

comment:4 by SF/jamieson630, 16 years ago

Markus, you provided the information basis for our Mac0
conversion routine (FR #781797). How does this FR relate to
that? Are there supposed to be instrument defs for the 4-
character instrument references in the Mac0? Or does this FR
relate to GM-based games?

I looked at this FR and realized that the request is extremely
vague; hence the questions. What games, exactly, are
supposed to include custom instrument samples?

(All I have for Mac games are game data files. If instruement
samples are in the music driver files, I won't have seen them.)

comment:5 by SF/superqult, 16 years ago

OK, I'll try to explain this a bit more. The mac versions
Monkey Island 1 and 2, and Fate of Atlantis (maybe others
too) uses an extra file containing custom samples. This file
is called "iMuse Setups". The samples in this file are in
mac standard 'snd' resource format (raw format). No other
information is contained in the file, which means that the
handling of these samples must've been done entirely by the
interpreter itself. I could of course send you one of these
files for analyze, but I'm not sure that it's legal to do
so. Anyway, feel free to ask more questions, and I'll gladly
supply all information I'm able to. I really want to see
this implemented.

comment:6 by SF/superqult, 16 years ago

Oh, I found some info on the 'snd '-resource as well:

http://developer.apple.com/documentation/mac/Sound/Sound-60.html#MARKER-9-400

comment:7 by SF/jamieson630, 16 years ago

Thanks for the URL, that helps to an extent. One thing I'm
not clear on (moreso since I *don't* have a copy of
this "iMuse Setups" file lying around) is this:

In MI1-Mac, the music is in SOUN/Mac0 resources, and is in a
format that includes 4-character instrument names for each
channel.

In MI2-Mac, the music is in SOUN/SOU/MAC resources, and is
SMF-formatted with numeric program changes.

So my question is -- how does one get from the 4-character
instrument name or numeric program number to an index into
the "iMuse Setups" file and the correct sample? I suppose if I
were looking at the guts of the file, the answer might turn out
to be pretty self-evident.

Markus, do you ever stop by the IRC channel?

comment:8 by SF/jamieson630, 16 years ago

Latest word from Fingolfin (now pretty old, but I'm just now
getting around to posting it):

The 'snd ' resources in the earlier Mac games are designed to
be used with the now-deprecated Sound Manager. CoreAudio
and QuickTime are the standard music layers for modern Mac
systems, and since 'snd ' resources include command
codes/parameters that were interpreted by Sound Manager,
it's safe to say that they are not supported by CoreAudio or
QuickTime.

Consequently, emulation is probably the only viable option for
making this happen. We might be able to wrap the
Player_MOD capabilities in a MidiDriver designed to work with
the custom sampled sounds. Furthermore, the implementation
would require that the 'snd ' resources be extracted from the
resource fork of the "iMuse Setups" file (or equivalent;
according to Fingolfin at least one game has the sampled
sounds embedded in the resource fork of the main
executable) into separate files to be used by ScummVM. This
is necessary because only a Mac can read resource forks, and
the Mac data files could be used on other systems (with
ScummVM).

This may yet be a while in coming. I once again find myself
with very little time to even look at my TODO list, let alone
the code.

comment:9 by SF/lechimp, 16 years ago

A small comment on the location of sound resources : Mac
versions of Monkey 1 and Loom both have the sound resources
embedded in the main application. Monkey 2 and Indy 4 have
them in the "iMuse Setups" file. Indy 3 does not have any 'snd '
resources.

I guess three things will be needed to run the sampled Mac
sounds :
(1) a tool to create a .rsrc file from the application or iMuse
Setups file.
macfork does something similar from .bin files and I seem to
recall it as being open source. But no matter what, users will still
need a Mac to convert the file to .bin format.

(2) Routines to locate and load the 'snd ' resources from the .rsrc
file.

(3) an interpreter or converter for a small subset of the
SoundManager routines, supposedly just very few of the
commands - it seems the resources are either in the ancient
Hypercard format and use command 80 (sound) or the newer
Sound Manager format using command 81 (buffer).

By the way, Sound Manager routines are very much available on
modern Mac systems (like MacOS X), through the Carbon
libraries. Most Sound Manager routines are also available with
Quicktime for Windows.
So writing a routine that plays 'snd ' resources though Quicktime
does not seem all too difficult. But it obviously would not work for
platforms without Quicktime support. And we don't know how
long Apple will support Carbon routines anymore.

comment:10 by SF/superqult, 16 years ago

http://developer.apple.com/documentation/QuickTime/RM/MusicAndAudio/Sound/index.html

comment:11 by fingolfin, 16 years ago

Summary: Support custom music instrumentation for MacAUDIO: Support custom music instrumentation for Mac

comment:12 by sev-, 14 years ago

Back to the pool.

comment:13 by sev-, 14 years ago

Owner: SF/jamieson630 removed

comment:14 by SF/raptor007, 14 years ago

I agree! I was about to post this feature request when I
saw it was already here. This would be REALLY nice, those
instruments worked very well and they're up the nostalgia
value even more. :¬)

comment:15 by SF/raptor007, 14 years ago

On a more constructive note, we could extract the 'snd '
resources to .wav files and use them as instrument samples.
It's fairly easy (on a Mac) to take each 'snd ' resource
and convert it to a wave file.

comment:16 by SF/lechimp, 14 years ago

I like the idea of converting them, but I think it creates another problem.....
If we convert the sounds and make them available for download, we'd
probably infringe copyright. But I admit I'm no expert on these matters,
maybe LucasArts will ignore this for so old games.

And yes it's easy for _some_ people to convert the sounds, but it still takes
some tweaking to do it right, naming them correctly and so on. Your average
non-programmer would not find it easy, I believe.

Also, remember that ResEdit runs in Classic only (therefore not on intel Macs
or newer standard OS X installations), and Resorcerer is not free. Most
available free resource editors are quite unstable IMHO, and not being worked
on.

comment:17 by lordhoto, 7 years ago

We recently implemented support for the original Loom, Monkey Island 1, Monkey Island 2 and Indiana Jones and the Fate of Atlantis sound resources of the m68k versions. Thus I am closing this one.

Support for Loom and Monkey Island 1 was merged with 97d7bf9b9aaa1aac4939d2a690f65fde7e844b63
Support for Monkey Island 2 was merged with 4522d182d44134d48ed0de86863f21a128f5f593
Support for the m68k version of Indiana Jones and the Fate of Atlantis was added in fc6ab89b504e15ea14208301acd727893d113381

comment:18 by lordhoto, 7 years ago

Owner: set to lordhoto
Status: newclosed

comment:19 by digitall, 13 months ago

Component: Engine: SCUMM
Note: See TracTickets for help on using tickets.