If MMF have now a great and easy to use visual engine, it's not the samething for the basic audio layer...
Imagine a nice extention that allow you to set listener position to follow the player on the screen and the possibility to manage all sounds and audio loops simply by using an action to play sound or looped sound on an object or at a specific coordinate...
The engine will automaticaly determine if the player listen the sound or the loop and will auto ajust volume and pan of the sound ! With this extention the sound could become a real positionning tool to listen where the action happen...
Multimedia fusion have a philosophy to help user to made game more eficiantly as possible and more quickly. To implement this kind of sounds feature without a "non-existant" extention until now, could be really hard to manage and it will take a lot of useless events !
Unfortunatly I don't have the required skills to program this advanced sound object...
I wait for it since some years and it's not the first time that I submit the idea... But I hope that this idea could interest some of you !
To help you to conceptualise the extention I took the time to write a long Action, Event and Expression list that I would want to appear in this kind of extention
My ideas are inspired of a really nice sound extention unfortunately never ported to MMF2 named "DirectSound 2"
An autopositionning extention adapted to the Multimedia fusion Philosophy that I used in my games in the past...
I added some feature like fadding (when I talk about fadding, it the PAN but for "front" - "rear") and pitch to allow to made litle quick variations of the sounds... we can also add volume on all autoplay action but we will see !
- Play sound (expression for file path, pitch) [Simply play sound ignoring the positioning engine]
- Play sound in space (expression for file path, pitch, pan -100 to 100, fade -100 to 100) [Simply play sound ignoring the positioning engine]
- Autoplay Sound at position (expression for file path, pitch, x, y)
- Autoplay Sound on object (expression for file path, pitch, an object picker) [With this method, the sound is attached to the targeted object and it follow it if the object move... If the object is destroyed, the sound have to resume at the last place of the object before it disapearing]
- Autoplay Loop Sound at position (expression for file path, pitch, loop, x, y, transition time)
- Autoplay Loop Sound on object (expression for file path, pitch, loop, an object picker, transition time) [A looped sound on an object UNLIKE a unlooped sound have to stop if the object is destroyed ... if a transition time is specified the object have to fade out at the last position of the destroyed object]
- Stop Sounds on object (an object picker, transition out time) [Stop all sounds played on an object]
- Stop Sounds in area (x, y, width, height, transition out time) [Stop all sound played on a specific game area]
- Set listener position ('x, y') [Define where all the sound are listened]
- Set listener position on an object (an object picker)
- Set listener volume (0-100)
- Set listener equaliser () [Allow to change equalizer settings of the listener (nice example, if the main character is in water we want to reduce all hight frequences and amplify the bass for the underwater effect)]
- Mute listener ()
- Unmute listener ()
- Set maximum position volume (0-100)
- Set minimum position volume (0-100)
- Set maximum position distance (pixel number)
- Set position pan range (pixel number) [the progressive horizontal range to change pan]
- Set position fade range (pixel number) [for rear speackers and front speacker]
- Set maximum position panning (0-100) [at 0, all the sound are played at the midle panning. At 100, if an object play a sound more far than the max pan range, the sound will be played only by left or by right speacker depending of the side]
- Set maximum position fading (0-100) [for rear speackers and front speacker]
- Set rear speacker behavior [Define reare speacker behavior mode with the autoplay actions... One mode can enable the fading params using Y coordinate (For example : if is played under the listener, the sound will be more loud on rears speacker using the fading previous params to define the range and the distinction level, a sound played at the top of the listener not too mush in the sides could be more loud in the front center speacker)... An other behavior could be to don't use Y coordinate and play all sound by default on front side speackers We can imagine others possible behavior of positioning for surround speacker + The extention also have to autodect the available sounds chanel like mono, stereo, quad, suround to avoid to play sound into inexistant speacker]
- force speackers mode (a choice between "auto", "mono", "stereo", "Quad", "Surround")
- force layer specific fading (layer, -100 to 100 [0=side front speacker, -100=rears speackers, 100=front center speacker]) [Allow to force the fade position of all sounds played on objects of a specific layer... this feature could be nice to put on background layer having some moving object that made sounds or noises... It's could also give to the user another way to use sound fading than the autoplay vertical position behavior]
- remove layer specific fading (layer) [Remove forced fading on a layer and put it in automatic mode]
- Enable EAX (enable EAX engine)
- Disable EAX (disable EAX engine)
- Set EAX to presset (a list of some habitual EAX preset like : "Auditorium", "Bathroom", "Concert room", "Crush", etc...)
- Add all parameter required to configure a EAX environement presset realtime (I don't known all theses parameters for now)
- Listener is muted () Negatable
- A specific sound is played (expression for file path) Negatable
- A specific sound is played on any position (expression for file path) Negatable
- A specific sound is played on any object (expression for file path) Negatable
- An object is playing a random sound (an object picker) Negatable
- A specific sound is played on an object (an object picker, expression for file path) Negatable
- EAX engine is active () Negatable
- Get last played sound Path ()
- Get listener X ()
- Get listener Y ()
- Get listener volume ()
- Get maximum position volume ()
- Get minimum position volume ()
- Get maximum position distance ()
- Get position pan range ()
- Get position fade range ()
- Get maximum position panning ()
- Get maximum position fading ()
- Get rear speacker behavior ()
- Number of actives speacker (return 1 for mono, return 2 for stereo, return 4 for quad, return 6 for surround)
- Imagine here others usefull expression [Ask me if you want others idea]
- A specific sound is played on an object (an object picker, expression for file path)
- get eax preset name ()
- get eax parameters () [mettre des expressions pour chaques paramètres des EAX]
I think that I made all that I can do to help for a nice MMFusion Sound engine !
I you need an icon and graphical ressource for this future extention : I can do it
I also translated some part of this request in french if you need it
Thank, with a lot of hope !