I am looking for documentation for the 'SYNC' files for the Curse of Monkey Island voice clips.
I am a huge Monkey Island fan, so imagine my delight when I found an electronic talking skull for sale at Wal-Mart... I chopped the innards out of the skull, and have rewired it to my computer with a D to A device. I can now trigger the mouth movement and speaker inside the skull from my computer. I Extracted a couple 'Murray' sound files using 'SCUMM Revisited' and I wrote a quick c++ app to play the sound files through the speaker inside my new skull, and to also move the mouth.
I would like to be able to use the lip-sync data fromt eh SCUMM files to sync the skull baw movement with teh sound files. (Right now, I am manually analyzing each wav file, and deciding where to put the breaks.)
Does anyone know where I can find documentation of the file format of those particular files? (SCUMM Revisited calls them 'iMUSE Voice Synchronication' files.)
Documentation of the SCUMM Sync File format?
Moderator: ScummVM Team
There are no "SYNC" files. Rather, there are "SYNC" chunks contained in the iMUSE Digital data contained within the COMI data files. AFAIK there is no documentation for these except for the ScummVM source code itself. The relevant function would be IMuseDigital::getLipSync, contained in engines/scumm/imuse_digi/dimuse_script.cpp.
I think the person who wrote that code is aquadran. If you have trouble understanding that code, I guess somebody of the team (aquadran, me, somebody else) could try to write down a sketch of the format of the SYNC chunks.
I think the person who wrote that code is aquadran. If you have trouble understanding that code, I guess somebody of the team (aquadran, me, somebody else) could try to write down a sketch of the format of the SYNC chunks.
Thanks for the quick reply. If I am reading the function correctly, it looks like the SYNC chuck is composed of 4 byte 'records' with the following format:
First 2 bytes (16bit unsigned int): Position within the sound.
Third byte: width
Fourth byte: height
I am having a little difficulty using the 'position' value. Is this some kind of refernce to the byte position within the sound file? Or is this position a time-relative position? (I.e. number of ms into the sound file or something along those lines.)
I am going off the assumption for the moment that 'width' and 'height' refer to the size of the character's mouth.
I'll play around with this and see how it goes. If I'm wildly off, please let me know, otherwise I'll post back here when I get something working.
Thanks again,
Alex
First 2 bytes (16bit unsigned int): Position within the sound.
Third byte: width
Fourth byte: height
I am having a little difficulty using the 'position' value. Is this some kind of refernce to the byte position within the sound file? Or is this position a time-relative position? (I.e. number of ms into the sound file or something along those lines.)
I am going off the assumption for the moment that 'width' and 'height' refer to the size of the character's mouth.
I'll play around with this and see how it goes. If I'm wildly off, please let me know, otherwise I'll post back here when I get something working.
Thanks again,
Alex
Alright, I got it all figured out and working. I'll try to post some video later. I was pretty much correct in my previous post. I would note that the 2 byte 'position' value is in Big Endian order, which is important. Also, each bit in the 'position' value seems to represent 16 ms of sound (at last for the files from curse of monkey island), so the SYNC records are time-indexed animation instructions.
Thanks again for the help,
Alex
Thanks again for the help,
Alex