Hi there! You are currently browsing as a guest. Why not create an account? Then you get less ads, can thank creators, post feedback, keep a list of your favourites, and more!
Lab Assistant
Original Poster
#1 Old 3rd Jul 2011 at 7:00 PM Last edited by Flyby : 15th Jul 2011 at 6:49 PM. Reason: Claryfy focus
Default Tutorial - How to add and use (true) custom sounds in TS3
I have just released the new version of my MULTI-OWNERS_DOOR V3 controlling software (MOD_Control_1.2) which introduces the use
of true custom sounds in modded Sims3-objects. So I thought it might be a good idea to share the results of my research here on
MTS, to make this knowledge available to other modders either to equip their own mods with custom sounds or - even better - give
others a change to go beyond the point were I stopped and find out more about the parts of the Sims3-sound-engine and how it is
embedded in the .net script structure (and hopefully publish those results!)
That's why I wrote this little tutorial.

Preparations:

Download and install (if necessary) the following software:

- Audacity (freeware), which is a sound-editor
- EAlayer3 (freeware), command-line program, needed to convert to EALayer3 Format.
- HxD (freeware), a hex-editor.
or any other hex-editor.
- cmd.exe, MS-Windows command-window, usually located in 'Windows\System32\'. Make a copy and place it in the same folder
as Ealayer3.
- S3PE (Sims3 Package Editor, freeware).

1.
Your original sound file should be in wav-format, 16bit, 44100khz or any Mp3 format.
The files should be stereo (not tested with mono yet).

2.
Download and install the sound-editor "Audacity" (which is freeware).
Load your file into Audacy.
Make any edits to your liking.

3.
Export your file by using the 'Export' function of Audacity. The browser opens. Browse to the directory where you want to save the
file. Next select 'MP3 Files' from the pull-out menu at the bottom. In the options panel, which can be accessed from the save
(browser) window, by clicking the 'Options...' button make the following settings:

Set 'Bit Rate Mode' to 'Variable'.

Under 'Quality' select: '3, 155-195 kps' (this has proved to be the bit-rate the TS3 sound-engine can handle best)

Set 'Variable Speed' to 'Standard'.

As 'Channel Mode' select 'Joint Stereo'

Now click OK to close the options-window, then name your file and save it. Another window called 'Edit Metadata' pops up. Just
ignore it and click OK. Now you can close Audacity.

4.
Download the free 'Ealayer3', version 3.063 or later. You do not have to install this program, since it runs in the console and
not in MS-Windows. We will need this program to produce several files that we need to edit then before we can import them into a
TS3-package.
The easiest way to work with EAlayer3 is to copy your mp3-file (which you just produced) to the folder that contains the ealayer3.exe.
I also suggest placing a copy of cmd.exe in the same folder as Ealayer3.exe. 'cmd.exe' is the ('DOS'-style) console of MS-Windows
(usually located in Windows\System32\). To run Ealayer3 you need to open the command window first.

When you're done open the command window by dbl-clicking on 'cmd.exe'.
Type in the following command line:

ealayer3 -E your_file.mp3 -o your_file.snr --single-block

...where 'your_file' stands for the name of the mp3-file, which has been exported with Audacity before.

press enter and Ealayer3 will now convert your mp3 and store it in a format like: your_file.snr.
This is one of the files that we will need later.

Next don't close the console window. Type in the following command-line:

ealayer3 -E your_file.mp3 -o your_file.sns

Press Enter. This will produce the second file that we need. In your directory it will appear as:
your_file.sns

Now you can close the console window.

5.
Next we will need a Hex-editor. I am currently using a program called 'HxD' which is also available as freeware. For your own
convenience it might be best to instruct your Windows-Browser to open files of types *.snr, *.sns and *.audtun always in your
hex-editor (when you dbl-click on that type of files).

Open your_file.snr in the Hex Editor. The file starts with:

0504 AC44 00XX XXXX ; (the values of digits marked with X vary depending on your original file.)



Step 1:
Mark everything but the first 16 Hex-digits (eight bytes) and then delete all other data: keep only those 16 digits at the
beginning of the file (as shown above)!

As far as I could see there are two general ways of how sound(source-)files are organized in the game. The first type has only
two files: a .snr-file (containing the mp3-Layer3 sound-data) and an .audtun-file (containing file information).
The other type consists of three parts: one .snr-file(header only), a .sns-file(sound-data) and an .audtun-file (information).

Step 2:
Since we are truncating the .snr-file and thus change a file type carrying sound-data into a pure header-file without any sound-data
we have to change the byte at address 04 into '40' in order to tell the engine that this is a header and not a file containing
sound-data. The final version of your .snr should look like:

Adress: 00 02 04 06
0504 AC44 40XX XXXX

Save the result to a new file, and be aware that the new name also has a 'snr' tag.

The name of the new file should look like this : new_file.snr

Notes:
A)Don't touch the bytes at address 06-07, leave them alone! Don't ask me what they mean. I guess they have something to do with the
file-length. This could be the length in bytes or the amount of samples... however among all the source-files from FullBuild1.package
that I investigated to learn something about the structure there wasn't a single one where this number in the header matched either
of these values.
B)The value 40 (hex) that we wrote into address 04 seems to indicate that the sound file is using mp3 EALayer-format. It has to be
present in the header. If you look at some of the sound files in FullBuild1.package you will find that among those that use a single
.snr file (and no extra .sns) many of them start directly with 40. I have tried to find out how to make my own sounds work in that
format (with a single Block .snr and an .autune only) because that would make things somewhat less complicated, but unfortunately
I didn't succeed.

So we have to do the job in 'three-file-style' which is what I am talking about here.


6.

Next you have to change the name of that new file to a format like this:

S3_01A527DB_001407EC_hashcode_new_file%%+_AUD.snr

In the above name you see the word 'hashcode' as proxy for the hashcode of the file-name. So the next
step would be to generate that hashcode.
I advice you to use S3PE by P.Jones which is also freeware. Later on we will need this program anyway. There is a hashcode tool in S3PE that can be called from the 'Tools' menu by clicking on 'FNV Hash...'.
Type in the name of the new file. In our example this would be : new_file (pay attention to match
case)
The result (FNV64) is 0x131F036BBEF3B4D2. Fill this in by replacing the word 'hashcode' with this
value. You'll get:

S3_01A527DB_001407EC_131F036BBEF3B4D2_new_file%%+_AUD.snr

Now you have your final .snr-file with the correct name, ready to be imported to a TS3-package.

7.

Next we have to deal with the .sns-file that we generated from the original mp3.
To make things easy let's start by renaming it. Before you do so you would want to make a copy in case something goes wrong.
We can use the same hashcode again since the names of the two files have to be the same. Rename it to:

S3_01EEF63A_001407EC_131F036BBEF3B4D2_new_file%%+_AUD.sns

As you can see it looks almost the same as the name of the snr-file. The only difference is that it starts with S3_01EEF63A instead
of S3_01A527DB. These numbers are needed to import the files to a package with S3PE in order to be identified and recognized as the
appropriate file-type.

Now open the file in your Hex-Editor. You'll see a lot of numbers!
First thing is to look for the Hex-values 0480 which are located at address: 0x06 (digit 12-15)

Example:
Address: 00 02 04 06
0000 0106 0000 0480

change these four Hex-digits (or 2 bytes) into: '002F'

Now the first eight bytes of our example file look like this:

00 02 04 06
0000 0106 0000 002F

Next thing we have to do is to insert a block of code into our file. To find out the address where the insert should start, look at
bytes 2&3. These give us the position for the insert.
In our example you see 0106 at address 2&3. This means you have to scroll down in your Hex-Editor until you find the indicated address.
Usually you'd find two bytes of zero (0000) starting at this address. These two bytes as well as all following bytes will be shifted
to a new position when you insert the code-block. It's crucial to find their new position after the insert is done, because the index
at byte 2&3 has to be changed to that new address.



Now:
Open the template file with the code block (CodeBlock(C4).SNS attached to this thread).
Copy the whole block.
Go back to the file opened in the Hex-Editor.
Make sure that the cursor is placed at the exact position of the address (in our case Hex 0106)
Paste in the block.
Try to find the end of the block where the preceeding four zero digits are shifted to. The block ends with: 0008 FFFA FFF3 FFF9;
after these bytes you should find : 0000... this is your new starting address. Now change bytes 2&3 (the index) to that new address. In
our example that would be: 01CA You could also compute the new address by adding the length of the insert-block (Hex : 0xC4) to the
original index (with a calculator that is able to add Hex values): 106 + C4 = 1CA; voila!

Now we have 0000 01CA 0000 002F at the beginning of our file.



You're done! Save the changes in your .sns file and close your Hex-editor.

8.
Now, that we have our .snr-file as well as the .sns-file, both with the proper name format, we are almost
ready for importing them to a package.
However we need to prepare one more file that is needed to manage the information of the two others in order to 'route' the mp3-
sound-stream to the right slot. There are several slots in the game that can pick up or route sound-streams and provide them with
additional parameters like gain, fx, 3d-position (spatial) and so on. You can think of these slots or interfaces as the sub-channels of
a sound-mixer.
The file we need is a file of the type .audtun. The identification-code of this type is:
S3_8070223D_001407EC.
The name of that file can be different from the files it has to manage. So let's give it a slightly different name to make sure the
relationship is still obvious, for example "new_fileA". The name of the .audtun file has to have this format:

S3_8070223D_001407EC_hashcode_new_fileA%%+AUDT.audtun

in order to be readable by S3PE later.

The hashcode of new_fileA is: 0x7167A215781C40B7. So the correct name of that file should be:

S3_8070223D_001407EC_7167A215781C40B7_new_fileA%%+AUDT.audtun

You can use the .audtun template provided with this post to build your audtune-file. It will route your sound to the UI-slot
(or mixer-subgroup) which outputs the sound directly without considering the environment or the position/distance to an object.
This (the UI-slot) is the most simple interface. There are others like the sting-slot, music-slot, ambiance-slot etc. which are more
complicated to handle. So for a start, let's take the UI-slot.
After renaming a copy of that template, open it in the Hex-editor. When you look at it you can easily identify two blocks of four bytes
by the value FF, looking like :
FFFF FFFF. In front of the first of these blocks you see 8 bytes (in Little Endian format) that determine to which sound slot the
managed mp3-stream is routed: it's just the hash code of that particular slot.
But we need to concentrate on the 8-bytes in front of the second occurrence of four times FF (FFFF FFFF). In the template file I have
over-written that block of 8 bytes with eight bytes of '22', so it's easy to find. This is where we have to fill in the (common)
hashcode of our .snr and .sns - files. This code is: 131F036BBEF3B4D2 ('new_file').
Since the format is Little-Endian we have to put this code byte-wise in the 'wrong direction' before inserting it in the .audtun file.
The result (in our example) would be D2B4F3BE6B031F13. Once you have 'twisted' the bytes all you have to do is insert them in front of
the second block of FFFF FFFF instead of the 8 placeholder bytes (2222 22222 2222 22222).



That's it. You're done. Now you can import the files to a package with S3PE (simply drag and drop them!).
The last chapter deals with how to use (or 'call') your own custom sound from within your own
program code.


9.
There is an easy method-call in 'SimIFace.Audio' that you can use to trigger a sound at any time from any location in your code
(all examples in C#):

Audio.StartSound("sound_name"); // (It's a static method, that's why)

This seems to be quite nice and simple, however by using this method you can run into problems. At least that happened to me.
I experienced the sound becoming unavailable sometimes after an uncertain amount of calls, and in some cases my game even crashed.
That is why I consider this way of calling a sound an unsafe method.
In my MODoor-Controller_v_3.2 mod (that is available here on MTS in the downloads) for the first time ever I used custom sounds
produced in the way as described above. The sounds apply to the user-interface of the door, or to be more specific - to the
Object-Picker-Boxes, which allows users to select Sims as key-owners and so on. If you click on a name in the list of Sims the
thumbnail-icon at the end of that row changes and at the same time the sound appears. If you are interested, download it and see
for yourself (the name of the file is 'MODoor-Controller_1.2.rar'). That is the file that contains the code. You need at least
one of the cloned door files to run the mod, e.g. '01_MODoorV3_Luxery...')

I used another approach of calling custom sounds in my script that is a little more complex than the (unsafe) method described
above, anyway - it has proved to be safe:
A variable of the type 'Sims3.SimIFace.Sound' is declared for every sound used in the custom class (controlling the Object.Picker).
You get several new (Sound-) objects as new instances of the 'Sound' class:


Code:
using Sims3.SimIFace;
...
       
public class PickerBox : ModalDialog


    {
       ...
        private Sound mSting_1 = new Sound("sound_name_a");
        private Sound mSting_2 = new Sound("sound_name_b");
        private Sound mSting_3 = new Sound("sound_name_c");
       ...
	private Sound mlastSound;
       ...
       ...
    }



Since you are dealing with objects of the type Sound, you can access (almost) any method or parameter in that class or parent-classes
and thus theoretically be able to control things like volume, pan, fx as post-processing.
The file that you are calling is always the .audtun file. In the instruction I mentioned that the .audtun file should be named slightly
different from the two others (.snr and .sns). In my case I chose to route the audtun to the UI-subchannel, which makes sense because
my sounds are meant to be played in a UI-context (The Object-Picker-Box). Of course you could choose to route your sound to other
interfaces...

The instructions for calling the sounds could be done in the following manner:

Code:
 	if ((this.mlastSound != null) && this.mlastSound.IsPlaying()) // calling method 'isPlaying'
									      // in Class 'SimIFace.Sound'
		
		// make sure the sound is stopped before the next one starts to avoid clash  				
		// or buffer overflow(?))                

		{
                    this.mlastSound.Stop(); // calling method Stop()
                }

                this.mlastSound = playSting; // remember the name of the current sound.

                if (playSting != null)		

                {
                    playSting.Start(); // calling Sound.Start()
                }

These lines have to be placed in the method that reacts to an event. In the MODoor they can be found in:

'private void SelectionChanged(List<ObjectPicker.RowInfo> selectedRows)';

That's almost it...

Finally I did some housecleaning. The following code is located in: 'protected override bool OnEnd(uint endID)', which is called when the
user clicks OK in the Picker (and the window is closing):


Code:
if (this.mlastSound != null)
            	{
                    this.mlastSound.Dispose();
            	}
            	this.mSting_1.Dispose();
            	this.mSting_2.Dispose();
            	this.mSting_3.Dispose();            
            	return true;

To be honest, I am not sure whether this is really necessary, but it's better to be on the safe side.
P.s.:
CodeBlock(C4).sns as well as 'Audtun'-template are contained in this file: Tutorial_Templates.rar!
Screenshots
Attached files:
File Type: rar  Tutorial_templates.rar (395 Bytes, 346 downloads) - View custom content
Description: audtune template, Insert-Block for .sns
Advertisement
Test Subject
#2 Old 3rd Jul 2011 at 7:24 PM
Its Audacity not Audacy but good tutorial though.
Lab Assistant
Original Poster
#3 Old 4th Jul 2011 at 11:40 PM
Quote: Originally posted by ShortYute
Its Audacity not Audacy but good tutorial though.


Oh yes, of course...
Thanks for the note!
Forum Resident
#4 Old 5th Jul 2011 at 8:46 AM
I tried it, and it worked sort of. When I tried to play my sound
it sounded like the first part was playing over and over, it didn't
play the whole way through. Maybe because I had it routed to
the UI channel and I was playing it from an immediate interaction?
Lab Assistant
Original Poster
#5 Old 5th Jul 2011 at 6:12 PM
Quote: Originally posted by lenglel
I tried it, and it worked sort of. When I tried to play my sound
it sounded like the first part was playing over and over, it didn't
play the whole way through. Maybe because I had it routed to
the UI channel and I was playing it from an immediate interaction?


Did you use a short sound file, or rather a long one (>1 minute). The longest sound that I have been using during the testings was approx. 15 seconds. The sounds in the MODoor are very short and I've been using this version (with sounds) for quite a while in order to make sure that it works flawlessly. I didn't observe any strangeness so far, that's why I released my new mod now. I did however see some oddities and crashes while developing this method. For example when you 'fire' a sound using that static method: 'Audio.StartSound("sound_name")' that I mentioned, it produced trouble. Declaring sound objects in your class is the preferable way.
I don't believe that calling a sound from an immediate interaction is the reason for what you describe. As long as you place the start-call in 'Run' (outside of the 'Definition' class) that shouldn't be a problem. I tried that myself in another mod (that I didn't publish) and it worked. BTW : did you care to stop the sound after you called it? If you don't this could be another reason to make sounds vanish completely until you restart, or to play back incorrectly. You could also try to route the sound to the 'Sting' unit. The result is similar to UI. The only drawback is that you won't hear anything when the game is paused, 'cause Stings work only in play-mode. That is the reason I chose the UI channel in my mod (because the game is paused, when the picker-box is called).
˙uʍop ǝpᴉsdn ǝɹ,noʎ 'oN
#6 Old 5th Jul 2011 at 9:42 PM
I have a problem with step 3, I don't have the options you refer to in Audacity.

"Part of being a mesher is being persistent through your own confusedness" - HystericalParoxysm
| (• ◡•)| (❍ᴥ❍ʋ) [◕ ‿ ◕]
Forum Resident
#7 Old 5th Jul 2011 at 10:42 PM
The sound I'm using is 2 seconds long. I followed the instructions step by step, switching between my hex editor and the tutorial
as I went. I think the problem is likely that I was calling dispose() on the sound as well as the lastplayed member of the class.

Here's my code:

Code:
        public class Scream3 : ImmediateInteraction<Sim, Sim>
        {
            // Fields
            public static readonly InteractionDefinition Singleton = new Definition();
            private Sound testsnd = new Sound("new_fileA");
            private Sound lastplayed = null;
            private static Sim theActor = null;
            protected override bool Run()
            {
                theActor = base.Target;
                //play the sound and animation
                base.StandardEntry(true);
                if ((this.lastplayed != null) && this.lastplayed.IsPlaying()) // calling method 'isPlaying'
                // in Class 'SimIFace.Sound'

                // make sure the sound is stopped before the next one starts to avoid clash
                // or buffer overflow(?))
                {
                    this.lastplayed.Stop(); // calling method Stop()
                }

                this.lastplayed = testsnd; // remember the name of the current sound.

                if (testsnd != null)
                {
                    testsnd.Start(); // calling Sound.Start()
                }
                else 
                { 
                    SimpleMessageDialog.Show("Eeeeeeek!!!", "Scream, SCREAM!");
                    return false;
                }
                //Audio.StartSound("new_fileA");
                theActor.PlaySoloAnimation("a_react_loudNoise_x");//
                base.StandardExit(true, true);
                if (this.lastplayed != null)
                {
                    this.lastplayed.Dispose();
                }
                //this.testsnd.Dispose();
                return true;
            }
            //finishedCallback()
            //{
            //}
            // Nested Types
            [DoesntRequireTuning]
            private sealed class Definition : ImmediateInteractionDefinition<Sim, Sim, Clothing.Scream3>
            {
                // Methods
                protected override string GetInteractionName(Sim a, Sim target, InteractionObjectPair interaction)
                {
                    return "Pierce ears.";
                }

                public override string[] GetPath(bool isFemale)
                {
                    return new string[] { "Torments..." };
                }

                protected override bool Test(Sim a, Sim target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
                {
                    bool res;
                    //return ((!target.Genealogy.SimDescription.ChildOrBelow) & !a.Genealogy.SimDescription.ChildOrBelow);
                    res = (!isAutonomous);
                    return res;
                }
            }
        }
Lab Assistant
Original Poster
#8 Old 6th Jul 2011 at 2:54 PM
Quote: Originally posted by cmomoney
I have a problem with step 3, I don't have the options you refer to in Audacity.


Which version do you use? Mine is 1.3.12beta. After loading your sound-file (and editing if needed) you go to the 'File' menu and choose 'Export...'. In the browser window which opens you have to choose 'MP3 Files' from the pull-down-menu located lowest in the window. Then, look for the button called 'options' located close to the bottom right corner of that browser window. Click it, you should see:



Your setup should look exactly like that.
Click OK. In the browser window save your file.
Hope that helps....
Screenshots
Lab Assistant
Original Poster
#9 Old 6th Jul 2011 at 3:30 PM
Quote: Originally posted by lenglel
The sound I'm using is 2 seconds long. I followed the instructions step by step, switching between my hex editor and the tutorial
as I went. I think the problem is likely that I was calling dispose() on the sound as well as the lastplayed member of the class.

Here's my code:

Code:
        public class Scream3 : ImmediateInteraction<Sim, Sim>
        {
           .....
        }


My guess would be that it is a timing conflict between the sound engine and the animation.
Therefore I would suggest to call the sound after or before the 'standard entry - standard exit' cycle but not inside as you did.


theActor = base.Target;

//play the sound and animation

// base.StandardEntry(true); PLACE THIS...

if ((this.lastplayed != null) && this.lastplayed.IsPlaying()) // calling method 'isPlaying'

// in Class 'SimIFace.Sound'

...
...
...

//Audio.StartSound("new_fileA");

// ... HERE:

base.StandardEntry(true);

//-------------------------

theActor.PlaySoloAnimation("a_react_loudNoise_x");//

base.StandardExit(true, true);

if (this.lastplayed != null)

{
this.lastplayed.Dispose(); // That's okay at this place , I think...
}

//this.testsnd.Dispose();

return true;

}

//finishedCallback()

I am looking forward to whether this will solve the problem.
BTW: Looks like an interesting mod...
Test Subject
#10 Old 26th May 2012 at 9:31 PM
I have learned your tutorial and I hope I could exchange Sim voice files in Sims Medieval e.g. Sim greetings in CAS. For a test I have extracted with help of S3PE just one of these voice snr-files (all this files start with prefix vo_). With help of ealayer3 I converted this file into mp3 - I did no changes for the test if the extracting and converting back basically works. After I converted this unchanged MP3 file back into snr with ealayer3 and put into the game, the game plays the sound and then crashes immediately. So I compared both files (the original snr file and the unchanged converted snr file) in a hex editor - I noticed that both look very different. So I tried to save the resulting mp3 file with audacity in the format which you suggested and converted it with ealayer back to snr. In hex editor the original and re-converted files look clearly different and same game crash occurs after playing a re-converted but unchanged snr file.
I hope to exchange some Sim voices on the English conversation (specially the CAS talk of the freshly created Sims in Medieval). But I don't know in which format I would save my MP3 files to best convert them back into snr with ealayer that game would accept the custom snr files without doing crashes.

I took original snr files from "The Sims 3" to "Medieval" and it played without crashing if no file format conversion happened. This means somewhere in the conversion process must happen the error which responsible for the game crashing on that files.
How do I right convert custom mp3 to snr without having the game crashing on my files. Are there any other programs besides of audacity? Are there another format parameters for ealayer3 commandline to convert mp3 to snr with the right results?
Test Subject
#11 Old 14th Dec 2012 at 10:46 AM
Hey, I know this is an old thread but I have a question. Does anything (other than the instance ID at address 0x34 in the audtun file) have to be changed to put the sound in a different slot? I'm making a new radio station and I need the music in the base_stereo slot. So other than changing the instance, does anything else in the sns and audtun file need to be changed?
Test Subject
#12 Old 20th Jan 2013 at 11:35 PM
Hello, I wasn't sure if I should bump this thread or create a new one but the question I have is sort of relevant to this thread. So basically what I'm trying to do is replace all of the build/buy/neighborhood/CAS music with my own. I have converted the mp3s using the same settings as in the tutorial and imported the edited sns and snr files into a package file with s3pe.

When I play the tracks they sound fine at first but then they randomly start to stutter and the game crashes or they will play all the way through but then have trouble fading to the next song and the game crashes then. So I guess my question is what exactly does the c4 code block in the tutorial we insert into the sns files do? Would that have something to do with the instability of the music in the game? Any help would be appreciated.
Forum Resident
#13 Old 21st Jan 2013 at 6:45 AM
Have you looked at this thread? http://www.modthesims.info/showthread.php?t=418050
Test Subject
#14 Old 21st Jan 2013 at 8:03 PM Last edited by soskraid87 : 21st Jan 2013 at 10:17 PM.
Thanks that worked! Also if anyone's game crashes when the song ends, I noticed that if you fade out the end of the song in audacity it fixes it. I did that and now all my music plays perfectly and fades to the next song without crashing!
Forum Resident
#15 Old 22nd Jan 2013 at 1:01 AM
Oh, I should try that! Maybe it will eliminate the popping when a song starts. How did you set the fade? What values did you use?
Test Subject
#16 Old 22nd Jan 2013 at 5:37 PM
What I did was highlight the last second of the song then select fade out from the effects menu in audacity, no menu popped up for me to set any values though that might be different for other programs.

As for the popping when the song starts, I noticed that it happens if the music has a section of silence at the beginning of it. (hope that makes sense) deleting that section of silence usually fixes it for me. But, if the song has a quiet intro it will sometimes still make the popping sound. It seems ealayer3 has trouble converting music with quiet or silent intros.

Another thing I found is that if you have a music file that's kind of long, (mine was 7 min) and it just suddenly ends and plays the next song in the game, changing the 5th byte in the snr file from 40 to 41 fixes it. Not sure what the cutoff time is that requires the byte change, I will have to look into it some more.
˙uʍop ǝpᴉsdn ǝɹ,noʎ 'oN
#17 Old 22nd Jan 2013 at 7:12 PM
Quote: Originally posted by soskraid87
Another thing I found is that if you have a music file that's kind of long, (mine was 7 min) and it just suddenly ends and plays the next song in the game, changing the 5th byte in the snr file from 40 to 41 fixes it. Not sure what the cutoff time is that requires the byte change, I will have to look into it some more.


Interesting.
A problem I have with a custom sound I am using is that it doesn't fade out on zoom out. It always plays full volume, no matter how far away you are from the object, or the lot, or the town for that matter. :P

"Part of being a mesher is being persistent through your own confusedness" - HystericalParoxysm
| (• ◡•)| (❍ᴥ❍ʋ) [◕ ‿ ◕]
Test Subject
#18 Old 22nd Jan 2013 at 9:58 PM
hmm that's weird, the audio system in this game is such a pain to work with.
Forum Resident
#19 Old 22nd Jan 2013 at 11:49 PM
...unless you're ea, and know what all the different values are for. Perhaps now that the custom animation beast has been tamed, the people who figured that out will turn their attention to this. After all, sound effects are part of jazz scripting, too.
Test Subject
#20 Old 12th Feb 2015 at 7:42 PM
Please help me with making my own radio station. I did everything what's written here but i don't know how to make new stations wit new music.
Test Subject
#21 Old 13th Feb 2015 at 12:00 AM
I can not find (CodeBlock(C4).SNS
please help me
Test Subject
#22 Old 13th Feb 2015 at 10:01 AM
Quote: Originally posted by mrwintaketak
I can not find (CodeBlock(C4).SNS
please help me

it's here http://chii.modthesims.info/getfile.php?file=1211063
Field Researcher
#23 Old 4th May 2017 at 5:58 AM
What is CodeBlock(C4) from and what purpose does it serve?
Back to top