It could be quite useful if you could define “Attack” and “Release” envelopes for any layer in the event. For example, if you have a looping electric motor servo sound, you could make it pitch down and fade out as the motor is stopped, without having to spend memory on creating a pre pitch bended version of the same sample.
Here’s how it could work: By default, if you Play and Stop an event, it starts and stops instantly. But if you add special parameters called AttackTime and ReleaseTime, these would affect the Event’s values oneshot when the Event is started (AttackTime) and after the event is stopped (ReleaseTime). By changing the Velocity of these parameters, you could affect the length of the Attack / Release phase. Adding Effects and envelopes to these parameters could then be used for various effects.
Alternately, there could be just a single special parameter called “ASR”, which would have three phases it goes through when the sound is started, keeps playing, and is stopped. Again, the Velocity of this parameter could be changed to affect the length of the ASR envelope.
BTW, I tried creating a Pitch envelope for a sample on FMOD Designer, but the pitching is quite rough and creates a glissando-like effect.
[quote="brett":3rus1sbn]It just sounds like you can already add one of these envelopes using add effect->pitch.[/quote:3rus1sbn]
Pitch envelope alone wasn’t the idea here, the idea was that an event could have distinct start, sustain and end. For example, in the start it would fade in and pitch up, then during sustain it would trigger a sample at regular intervals and loop another (and keep doing this forever until told to stop), then during end (release) it would fade out and pitch down.
After an Event like this has been built, all the level designer / programmer has to do, is to start the Event when the machine is started, and stop the event when the machine stops, without having to start and stop several audio events or involve any parameters. Everything would be in one neat package.
In XACT (Xbox360 SDK), this is done by using AttackTime and ReleaseTime variables which are, respectively, triggered and run through as the sound gets started and stopped.
[quote:3rus1sbn]If you’re looking for sustain, well we havent got that yet but it could be done by using a parameter and controlling the rate from the programmer side.[/quote:3rus1sbn]
Yes; with a programmer I could agree that we can create (for example) an “ASR” variable, which the game engine would start at 0, run until 0.33333 to 0.66666…, then loop back to 0.333333, and repeat, and when the event is stopped, jump to 0.666666, run to 1 and stop.
However, if it was done this way in-game from the programmer side, it would also have to be auditioned in the game, rather than inside FMOD Designer.
Hmm. I could always create a separate Event for the “start up” and “power down” sounds, which uses the same WAVs. Just have to get the pitch and the volume envelope point values matched with the “servo running” event.
Generally, how do I make an Event that stops, ie, has a beginning and an end? Currently all Events play forever until they are manually stopped, and when they are, they stop instantly. Or alternately, how do I make and Event that has a distinct sound in the beginning, then continues running and triggering other Sounds, but not the one in the beginning? Example: a heavy mechanical sliding door, that starts with a “CREAK!”, then keeps rattling and clanking until it is fully opened. Would these have to be two separate events? From a level designer’s standpoint, it would be easier to use just a single event that does it all.
I probably have misunderstood some principles behind the concepts in FMOD Designer. And I realize it’s still on the works. I just like to speculate. Also, I’m not a programmer and we haven’t actually implemented the FMOD API to our game engine yet, so I have probably missed some features that are available for the programmer (like the realtime stitching mentioned in that other thread?).
[quote:3rus1sbn]I’m a bit hesitant to add a ‘keyoff’ function to the programmers side, it doesnt sound much different to the programmer involvement of doing it using parameters. (although less work, it can still lead to programmer mistakes)[/quote:3rus1sbn]
Such as…? Leaving the event running forever? (I’m not a programmer)
[quote:3rus1sbn]pitch gets updated about once per 20ms, which is more than enough to produce a smooth envelope. Things like the car engine using autopitch also sound smooth. We have several examples of envelope based pitch bending, they don’t glissando at all. I’d be interested to see what you did to make it do that.[/quote:3rus1sbn]
Oh, sorry, I remembered wrong. It wasn’t a sample but a Sine oscillator that had a glissando like effect when I used a rather fast pitch envelope.
[quote="brett":1rbn9j17]It depends on the input as well, if how fast you moved the mouse, the framerate of the application, the mouse input rate.[/quote:1rbn9j17]
I used a parameter named “Time” that had velocity so it was moving by itself. But the 20ms update rate you mentioned explains it.
[quote="brett":13aeoi6d]Just in case you didnt know, parameters can have a velocity of their own, that is shown in some of the examples.[/quote:13aeoi6d]
Yup, I’ve actually used a sliding parameter named “Time” to create some looping soundscapes.
There’s one problem with these, though: they always loop. Sometimes I may want to create an event that has sounds triggered at specific times, but with a start and an end.
For example, a randomized footstep sound with a separate “heel” and “foot” part which are 0.2 seconds apart (a set of 4 heel and 4 foot souds creates 16 different variations with small memory usage). Or maybe a thunderclap with a set of randomized starts and end rumbles, to create maximum variety of randomized thuderclaps out of small-footprint source material. Or maybe the sound of a wooden crate smashing to pieces, with a set of randomized “start crash” and various spawned “clunk, clatter” sounds playing afterwards. What each of these examples have in common is that some sounds are triggered at the start, some later, but the event ends and doesn’t loop.
Mind you, I’m basing this observation solely on using FMOD Designer. I don’t know if there’s actually a “Play event with a sliding variable just once” command available for programmers?
[quote:13aeoi6d]But the issue is that there needs to be different speeds, and a sustain. The different speeds part wouldnt be hard if there were sustain points. I guess it makes sense, as something like a chainsaw could have an attack sound (the chainsaw startin gup), the sustain (where the loop is) then a release (puttering out). Same for a machine gun.
Then the programmer just goes
Exactly. This would be a handy feature, to take work away from programmers, and at the same time give more power to the sound designer.
[quote:13aeoi6d]Now that i think of it, 1 keyoff function isn’t probably that bad.
We could do this, but as i’ve said before, we already have enough on our plate at the moment, we’ll just have to put it on the list and you’ll have to see if you can work out another way.[/quote:13aeoi6d]
Understood. We’re pretty early on our project ourselves as well, so I’m just speclating, seeing what FMOD can be used or and what not, and what could be implemented. I don’t mean to sound impatient, and I apologize if I do.
Please login first to submit.