/*
 *  call-seq:
 *    volume = new_vol
 *
 *  Set the new #volume level of the music.
 *  0.0 is totally silent, 1.0 is full volume.
 * 
 *  Volume cannot be set while the music is fading in or out.
 *  Be sure to check #fading? or rescue from SDLError when
 *  using this method.
 *
 *  May raise::  SDLError if the music is fading in or out.
 *      
 */
static VALUE rg_music_setvolume( VALUE self, VALUE volume )
{
  RG_Music *music;
  Data_Get_Struct(self,  RG_Music, music);

  /* If the music is current, we'll change the current volume. */
  if( _rg_music_current_check(self) )
  {
    /* But only if it's not fading right now. */
    if( Mix_FadingMusic() == MIX_NO_FADING )
    {
      music->volume = NUM2DBL(volume);
      Mix_VolumeMusic( (int)(MIX_MAX_VOLUME * music->volume) );
    }
    else
    {
      rb_raise(eSDLError, "cannot set Music volume while fading");
    }
  }
  else
  {
    /* Save it for later. */
    music->volume = NUM2DBL(volume);
  }

  return volume;
}