Search Unity

[RELEASED] SoundManagerPro: Easy Game Music Plugin

Discussion in 'Assets and Asset Store' started by AntiLunchBox, Jun 12, 2013.

  1. MoribitoMT

    MoribitoMT

    Joined:
    Jun 1, 2013
    Posts:
    301
    Hi,

    I need to get music and sound volume for my adjustable slide volume bars. I just cannot find a method like getVolumeMusic or similar ? . It really looks like silly question I know :)
     
  2. Apiweb

    Apiweb

    Joined:
    Nov 26, 2011
    Posts:
    57
    Sorry for my english, I'm french, and I have some questions (I guess I'm too dumb), and some suggestions, here we go:


    • As integration with Ngui works, it plays a sound in SFX category or in Music category?
    • Has some function so that I can turn off / on sfx and music globally? I want to leave this option on the options screen.
    • All SoundConnection must necessarily be at a specific level?
    • What is the cap?
    • Generally I like to create an empty object (called God) and put it inside these management objects, plugins, etc ... Why is not recommended to put the prefab SoundManager as the son of an object?
    • In AudioToolkit I could easily do, but I could not do the SoundManager. There was an option when I created a group like footsteps or gunshots, and would add several audios to each of these groups, so when the character walked or was shooting, I would send that group play, and the plugin, chose a random audio within the group and played, so the character had various sounds when he walked or was shooting, how I do it in SoundManager? is via the SoundConnection?
    • I think it would be cool to have more help indicators, in the Properties panel, as well as the SFX has.
    • It would be a suggestion, but I think it would also be nice to have an icon indicating which SoundConnection is playing at the moment.

    Thanks, this is a great plugin.
     
  3. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey MorbitoMT,

    This is probably something I'll make easier to get in the next update, but it's just an instance variable. There are stuff like the crossDuration, sfxvolume, musicvolume, mastervolume, list of stored sfxs, etc that you can access.

    Just use something like:
    SoundManager.Instance.volumeSFX

    It's at the bottom of the documentation.

    -ALB
     
  4. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    • It plays in the SFX category.
    • Yes, along with the volume control functions for sfx, music and master, there is mute control for sfx, music, and master. There is also a toggle mute.
    • No, you can make custom SoundConnections that can be called at any point. You can also set it to ignore the level loading AI if you want to handle it yourself completely. You should check out the in-depth youtube video on SoundConnections.
    • The SFX cap (should you choose to use it) defaults at 3. You can set it with SoundManger.SetSFXCap.
    • This was actually a bug where it would lose the parent data. But this got fixed a long time ago I believe. You should be able to have it as a child of another. Where does it still say this?
    • SoundConnections are only for music, what you want to do is use a SFXGroup. In the SFX section, create a group, then next to the clip you added you can select the group from the dropdown to assign it. Then when you want to play a random clip from a group, instead of using SoundManager.Load--you can use SoundManager.LoadFromGroup. That will choose a random clip from the group.
    • That's a good idea, I'll add that to the queue. You should check the youtube videos in the meantime. They go in depth into sfx, music, memory management, etc. They are split up so that you can specifically look at what you want to without having to watch a whole lengthy video: www.youtube.com/antilunchbox.
    • That wouldn't be that hard. I'll add that to the queue. If you want to know that programmatically, you can access it by looking in the instance variables. I believe its SoundManager.Instance.currentSoundConnection. Then you can look inside the connection for levelname.

    Hope that helps,
    ALB
     
  5. BinaryOrange

    BinaryOrange

    Joined:
    Jul 27, 2012
    Posts:
    138
    I just found this. This is a GREAT asset! It's really helping me to make my game's music flow throughout the game. And it's very easy to use, I just spent ten minutes playing with it and have it mostly figured out.


    Thanks for taking the time to make such an excellent tool! :D
     
  6. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Thanks Jeremy!
     
  7. Robert-Briscoe

    Robert-Briscoe

    Joined:
    Jul 4, 2013
    Posts:
    19
    Hi I just bought this great asset and I have a quick question regarding using the SoundManagerPro "Play Clip" Playmaker Action. Are clips that are played this way cached at all? Is it a good idea to use it?

    I'm thinking of adapting SoundManager to trigger and blend between various soundscapes instead of music, and rather than creating a massive list of custom sound connections, create a GameObject variable in Playmaker and expose it to the inspector so I can easily set a different clip per-trigger (if that makes sense)
     
    Last edited: Jan 11, 2014
  8. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    If you use PlayClip that uses the string to reference the name of the clip on the SoundManager, then yes.
     
  9. Robert-Briscoe

    Robert-Briscoe

    Joined:
    Jul 4, 2013
    Posts:
    19
    I'm not sure what you mean by "...PlayClip that uses the string to reference the name of the clip on the SoundManager", as PlayClip only lets you use a Game Object and not a string, same with 'Play Capped Sfx' and 'Play Pooled Sfx'.

    Are you referring to the 'Play Soundconnection' Action?
     
  10. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Oh that was my mistake, didn't answer that correctly.

    What you want to do is use the Load Clip or Load Random Clip From Group actions before using PlayClip and assign that variable to an Object. Then use that Object in the PlayClip action.

    ALB
     
  11. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    I know that SoundManagerPro supports NGUI but how do I USE SoundManagerPro with NGUI? That is not mentioned anywhere.

    For example. I have a NGUI UIButton (GameObject with a UIButton script component). And one component of that button is a UIButton Sound script that contains an AudioClip. Now this is not connected to or related in any way to SoundManagerPro…So how do I get SoundManagerPro to handle/manage this NGUI Button sound?

    NOTE: As recommended I updated NGUITools.c with the patch. e.g.

    /* REPLACED!!!!
    AudioSource source = mListener.audio;
    if (source == null) source = mListener.gameObject.AddComponent<AudioSource>();
    source.pitch = pitch;
    source.PlayOneShot(clip, volume);
    */
    return SoundManager.PlaySFX(mListener.gameObject, clip, false, volume, pitch);
     
  12. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey TokyoDan,

    Once you update the NGUITools.cs file, you can use it just as you normally would. Just now, each sound that NGUI plays are considered SFX and they will respect your SFX settings set in the SoundManager.

    You have done it correctly. Let me know if you need anything else.

    ALB
     
  13. EddieChristian

    EddieChristian

    Joined:
    Oct 9, 2012
    Posts:
    725
    I have a similar question. I just started with Daikon Forge and I was wondering how I use this with Daikon. and if there are any tutorials. Especially one about having an event trigger a sound. I have a sliding menu and when it slides I need to trigger a sound.

    And Lastly I have a Feature Request. I would Love to see Integration for Adventure Creator :

    https://www.assetstore.unity3d.com/#/content/11896
     
  14. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey SoloChristian,

    If you go in the SoundManager/Scripts/Extensions folder, there will be a UnityPackage that you can unpack into your project. It'll add a file to DF-GUI that will add an extra menu item and functionality. It'll also have a README inside that explains how to use it. I'm not at my computer right now but the new option should be under the "Add Binding..." menu next to Event Binding. It is used in the exact same way that Event Binding is used. Instead you just select the event from the available list and put in an AudioClip in.

    ALB
     
  15. EddieChristian

    EddieChristian

    Joined:
    Oct 9, 2012
    Posts:
    725
  16. EddieChristian

    EddieChristian

    Joined:
    Oct 9, 2012
    Posts:
    725
    Noob question:

    I just changed my project to have multiple scenes. Do I add the prefab to every scene or just the first scene?
     
  17. EddieChristian

    EddieChristian

    Joined:
    Oct 9, 2012
    Posts:
    725
    I am getting this error with the new Version of sound manager pro:

    Code (csharp):
    1. NullReferenceException: Object reference not set to an instance of an object
    2. SoundManagerEditor.ShowAddSongList () (at Assets/SoundManagerPro/Editor/SoundManagerEditor.cs:755)
     
  18. Stilghar

    Stilghar

    Joined:
    Feb 4, 2013
    Posts:
    82
    Hi Alb,

    I'm having lots of problem with SoundManager Pro. Maybe I'm using it wrong or something...

    If I add the prefab only to the first scene in my build, the game runs fine in unity editor as long as I start it from that scene. If I open any other scene and play the game I get no music or sounds. Moreover, I can't build the game. I always get the same error:

    Error building Player: Couldn't build player because of unsupported data on target platform.

    Plus lots of these:

    An asset is marked as dont save, but is included in the build:
    Asset: 'Assets/Music/music_introSeq.wav'
    UnityEditor.HostView:OnGUI()

    With different wav files.

    Am I doing something wrong? I have three scenes. An intro, a menu, and one level. For the level I have four songs that I have put in custom soundconnections (as I want to play them at different parts of the level). I'm using Unity 4.3.3 and the latest SoundManager Pro from the asset store.

    I have also tried to reimport fully the package, adding the soundmanager prefab to all my scenes putting my sound connections in every one of them an no luck. I'm out of ideas...

    Any help will be appreciated.
     
  19. EddieChristian

    EddieChristian

    Joined:
    Oct 9, 2012
    Posts:
    725
    I'm getting that error and on android builds songs either cut off early or don't play at all.
     
  20. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    I have three scenes also. I just make a GameObject in the 1st scene and mark it as DontDestroyOnLoad(gameObject).
    Then I make the SoundManager prefab a child of that GameObject... therefore I have my sounds and music across all scenes. And the music never skips a beat when I move from one scene to another.
     
  21. GattsGK

    GattsGK

    Joined:
    May 5, 2013
    Posts:
    18
    Hi!

    First of all, great asset, makes all the music management so easy!

    My question. I have, for example, a walk sound for an enemy, but it is not on screen, I don't want to hear its steps. Is there any way of making the sound play louder using the distances of the objects to the camera? I always play the sounds this way: Soundmanager.PlaySFX/PlaySFXLoop(gameObject, audioclip);

    Thanks!
     
  22. GattsGK

    GattsGK

    Joined:
    May 5, 2013
    Posts:
    18
    Ok, just found the option 3D of the audio clips, but with this checked the sounds are too low, can't be heard if there is background music playing.
     
  23. EddieChristian

    EddieChristian

    Joined:
    Oct 9, 2012
    Posts:
    725
    I tried the don't destroy on load option in scene 1. I am still getting all kinds of errors on unity android builds. On continuous play on 1 song it fades the music out after a few seconds and it never comes back. Android builds has major issues for music. Soundfx are fine.
     
  24. Stilghar

    Stilghar

    Joined:
    Feb 4, 2013
    Posts:
    82
    Thanks for the tip, but that doesn't make too much sense... In the documentation ALB has put a big warning saying:

    Important note: Don’t set the SoundManager a child of another GameObject

    Moreover, SoundManager is a singleton so we shouldn't have to use DontDestroyOnLoad. Again, maybe I'm missing something.

    It's a pity, I couldn't make it work in time so I had to remove SoundManager Pro from my game and I had to resort to use Unity's own sound tools.

    I'm also worried about the Android/iOS builds... Can anybody else confirm if there is a problem?
     
  25. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    I did not see that warning. But it works perfectly and was the only way I could get my sounds centralized and play across all scenes with out including the prefab in ever scene.

     
    Last edited: Jan 29, 2014
  26. Stilghar

    Stilghar

    Joined:
    Feb 4, 2013
    Posts:
    82
    And what about your builds? Can you build without problems for standalone and mobile using your approach?

    Let's see if ALB can clarify this. It seems the documentation does not match with your implementation...
     
  27. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    It runs like a dream on my iPad. Also web build and Mac build. Perfectly.

     
  28. TokyoDan

    TokyoDan

    Joined:
    Jun 16, 2012
    Posts:
    1,080
    i just tried un-parenting the Soundmanager prefab from the DontDestroyOnLoad GameObject in my 1st scene. And it also works perfectly across all scene loads.

     
  29. Stilghar

    Stilghar

    Joined:
    Feb 4, 2013
    Posts:
    82
    Ok... then, my problem is even more strange. I will wait for ALB to give me some feedback.
     
  30. dkoontz

    dkoontz

    Joined:
    Aug 7, 2009
    Posts:
    198
    I'm trying to play several SFX from a SFX Group in rapid succession. There are 3 clips in the group and I am intending to pitch the clips up to give that "collecting successive coins" type effect from the Super Mario games. I am having problems getting the clips to play even a small number simultaneously.

    My SFX Group that contains the 3 clips is named "DestroyedTile" and I am calling it like this:

    Code (csharp):
    1.  
    2. SoundManager.PlaySFX(SoundManager.LoadFromGroup("DestroyedTile"));
    3.  
    When I trigger 3 rapid instances I hear 1 or 2 of them. Then, after the clips have finished, if I trigger 3 more I might hear no sound or perhaps 1 and occasionally 2. I have the cap set at no cap and the default cap is still at 3. All my clips are set to 2d in the import settings. Does anyone know why this might be happening or what I am doing wrong?
     
  31. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey SoloChristian,

    Sorry I've been out for the week, but I'm back to answer questions!

    So right now, you want to have the prefab just in your start scene. It will persist across any other scenes in your project. You CAN however, include many SoundManagers in different scenes, but at the moment you'd have to recreate the SoundConnections. There is a Unity Editor serialization bug since there are some things that Unity can't serialize. So there are some prefab functionalities you can't do right now. This will be fixed in SMP3, which I have planned to come out soon within the week. I'm just working out some kinks. But for now, I'd say to keep the SoundManager in your start scene.

    For development purposes, if you want to put it in additional scenes, use Window>AntiLunchBox>Create SoundManager. The use that to recreate the soundconnections and sfx.

    Sorry for the trouble it may cause, but the bug will be fixed soon.

    -ALB
     
  32. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey Stilghar,

    Sorry I've been out for the week for emergency purposes. However, I'm here to answer questions now. I just answered this question above actually:

    So right now, you want to have the prefab just in your start scene. It will persist across any other scenes in your project. You CAN however, include many SoundManagers in different scenes, but at the moment you'd have to recreate the SoundConnections. There is a Unity Editor serialization bug since there are some things that Unity can't serialize. So there are some prefab functionalities you can't do right now. This will be fixed in SMP3, which I have planned to come out soon within the week. I'm just working out some kinks. But for now, I'd say to keep the SoundManager in your start scene.

    For development purposes, if you want to put it in additional scenes, use Window>AntiLunchBox>Create SoundManager. The use that to recreate the soundconnections and sfx.

    Sorry for the trouble it may cause, but the bug will be fixed soon.

    AS for the music file error, that's a Unity bug. There are two ways to fix this, just change something on the audio importer, apply changes, then change back, and apply changes again. Or you can just re add the file. You'll be able to build again.

    -ALB
     
  33. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey GattsGK,

    I believe you emailed me and I answered your question, if not let me know!

    ALB
     
  34. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey Stilghar,

    I hope my earlier post helps. If not, it'd be great if you can send me an example of how you are using SMP. Did you watch the youtube videos?

    ALB
     
  35. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey dkoontz,

    Do you mind sharing the code you used the play the SFX in rapid succession? It might also help to debug out the time you are playing them. So right after you call that, put:

    Debug.Log("Playing from DestroyedTile (" + Time.time + ")");

    If you have 2 playing at the same time, they could just be playing one on top of another.

    -ALB
     
  36. dkoontz

    dkoontz

    Joined:
    Aug 7, 2009
    Posts:
    198
    Thanks, I did some more testing with different sfx and I think it is my sample. They weren't playing at exactly the same time but the clips were a bit too long with some dead silence at the end and that was causing problems when they overlapped.
     
  37. Stilghar

    Stilghar

    Joined:
    Feb 4, 2013
    Posts:
    82
    Hi ALB,

    Thanks for the reply :D. I had to fix it fast for the GGJ so in the end I didn't use SMP. Anyway, we are working now on it again and I would like to put SMP back there.

    I think my problem may have come from the fact that originally the game had only one scene with the SMP prefab in it. It was working perfectly fine, but when we added a Splash scene and an Menu scene before our Game scene in the build settings SMP started to missbehave...

    I assume the problem was that our first scene was not our first scene anymore. I tried to add new SMP prefabs to the other scenes, but I was getting audio only in some scenes. It is very clear now that the SMP prefab has to be in the first scene. The problem I have with this is that when I'm developing I have no access to it in the other scenes (only in play mode and when you start playing from the first scene) which is a major issue in my opinion. Please correct me if I'm wrong... Recreating the SMP prefab with the same sound connections was giving me unstable results (again, maybe it was my fault).

    You mention that in SMP3 this will be fixed. Do you have an ETA for SMP3? I can wait a week or so for it to come out, otherwise I will just go with SMP2 and work as you suggest (even if looks kinda hacky to me :rolleyes:).

    Cheers,

    Stilghar
     
  38. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey Stilghar,

    SMP3 will be out late tonight actually! Barring any setbacks.

    ALB
     
  39. Stilghar

    Stilghar

    Joined:
    Feb 4, 2013
    Posts:
    82
    Cool! Thanks!
     
  40. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Turns out it will have to come out tomorrow (technically today where I am). I added an extra improvement to the update, but now I have to recreate the demo scenes before I submit. This will be one of the biggest updates, so before updating I would recommend removing any SMP you have in your project.

    I'm really excited about this release because a lot got reworked. There are more options, better performance, better editor performance, and brand new features like ---AudioSourcePro. And some event driven actions. But not only standard events, but events pulled right from other custom scripts your wrote that are attached to the same gameobject. And it's still all simply done just by clicking. And the unity serialization fix is huge!

    Anyway, sorry to make you wait an extra day but I have to get the demo scenes together! Will keep you updated and post a full changelog tomorrow.

    ALB
     
  41. EmeralLotus

    EmeralLotus

    Joined:
    Aug 10, 2012
    Posts:
    1,462
    Awesome work. Very excited.
     
  42. Stilghar

    Stilghar

    Joined:
    Feb 4, 2013
    Posts:
    82
    No problem ALB, keep the good work, I can wait even one more week to fit in the audio in the game.

    BTW, I don't know if this comes already in the new features of SMP3 but would it be possible to have multi-track layered music? I mean, our musician wants to have several audio tracks that when combined will produce the full song. The idea is to add/remove this layers/tracks at certains points through the level. With the current system, I can just play them all but then (unless I start playing all at the same time) they'll be out of sync. Any way to do this and have the different layers in sync?

    The hacky way I thought about was just to play them all from the beginning of the level and just use the volume of the different tracks to give the impression that they start playing at certain moments. Any other possibility?
     
  43. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Are all the tracks the same length? If so, you can start playing a track by the samples its at (its more accurate to use samples instead of time). Any SFX function returns the resulting AudioSource. So you can get the samples of your first track, and use that to set the samples of addition tracks when you are about to play them.

    ALB
     
  44. Stilghar

    Stilghar

    Joined:
    Feb 4, 2013
    Posts:
    82
    Let's see if I understand... I'm talking about music not SFX. If I want multi-layer music using different tracks playing at the same time, can I do that with the soundconnections? From your last post, I seem to understand that it is not possible and I should instead treat music as SFX and use the returned audiosources to check for the number of samples they are at. Then, start the next SFX at a given sample so that they are in sync. Is that what you mean?

    Why do they need to be of the same lenght?
     
  45. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Well right now, the SoundManager only plays one SoundConnection at a time. So if you are playing a SoundConnection, playing another will switch from the old to the new.

    So from what I understand (I don't think I quite understand what you're trying to do), you want to play multiple tracks at once? Or do you want to play tracks in succession? There is a function to get the current playing BGM audiosource (they are hidden in the inspector) and current playing BGM audioclip. You can also access the two audiosources that SMP uses with: SoundManager.Instance.audios[indexes 0 or 1]. When changing tracks, I don't think it would mess anything up to changes the samples of the next track playing.

    ALB
     
  46. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Also, it looks like I'm going to wait on the release of SMP3 again >.<

    I almost submitted last night. I had all the updates written out and then my computer restarted to install updates (with no warning, damn Windows!) and everything got erased. So I have to type it out again. Not a big deal, but I just went to sleep after that happened. Will be coming soon!

    ALB
     
  47. Stilghar

    Stilghar

    Joined:
    Feb 4, 2013
    Posts:
    82
    Ok, understood.

    I want both. I want to play multiple tracks at once and they may not start all at the same point on the level. Progressing through the level will add/remove tracks to the current playing ones. So the number of multiple tracks playing at the same time will change over time. Of course I need to start the new tracks when I add them at the correct moments so that they are in sync with the ones already playing.

    If I can't play multiple soundconnections (so only one music track playing at once via soundconnections) I may need to treat music as SFX???

    Sorry to hear that you had an issue and SMP3 is delayed, when do you think it will be out then?
     
  48. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Hey Stilghar,

    I'm uploading SMP3 right now. Will be up shortly.

    I think right now your best option would be to do what you need with the SFX functions. This is the first time something like this has been requested, but I'll look into it for you. It shouldn't be bad. The SoundManager would just have to add more audiosources.

    ALB
     
  49. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    SoundManagerPro 3 is finally released!

    A lot has been added in this update.

    IMPORTANT NOTE: It is highly recommended to remove any traces of SoundManagerPro before updating.

    Changelog in 3.0:
    • Added a new class, AudioSourcePro, that extends AudioSource to load clips from SoundManager or SFXGroups
    • AudioSourcePro has the ability to set event triggers, like OnTriggerEnter, OnEnable, OnDisable, OnStart, etc.
    • AudioSourcePro has the ability to query scripts on the same object for events. It can then bind actions to those custom events.
    • Added extension methods to AudioSource to play SFX functions
    • Added a new class, AudioSubscription, that ties events to SoundManager actions
    • Namespaced the Singleton class
    • Removed unnecessary editor classes
    • Greatly improved editor performance
    • Greatly improved in-game performance
    • Gave option for lo-impact editor performance
    • Added option to turn off automatic update checks
    • Fixed bug with prefab serialization. Can now treat the SoundManager as a regular prefab
    • Added DF-GUI and UFPS integration from menus
    • Greatly improved audio pooling
    • Added prepooling per clip
    • Added lifetime to sfx objects over the prepool amount
    • Added easier access to commonly used instance variables like: muted, volume, pitch, crossfade duration, current sound connection, default resources path, etc.
    • Added additional developer settings
    • Added Demo Part 2 to highlight AudioSourcePro features
     
  50. AntiLunchBox

    AntiLunchBox

    Joined:
    Jun 6, 2013
    Posts:
    470
    Also Stilghar,

    I figured out an easier way to do that. I'll implement the feature for you. I will have to update my other asset, MustHave iOS first though. It needs some love =].

    ALB