/* * call-seq: * fade_out( fade_time ) -> self * * Fade out to silence over the given number of seconds. Once the music * is silent, it is automatically stopped. * * Returns:: The receiver (self). * * **NOTE**: If the music is currently paused, the fade will start, * but you won't be able to hear it happening unless you #unpause during * the fade. * * Does nothing if the music is currently stopped. * */ static VALUE rg_music_fadeout( VALUE self, VALUE fade_time ) { RG_Music *music; Data_Get_Struct(self, RG_Music, music); int fade_ms = (int)(1000 * NUM2DBL(fade_time)); if( fade_ms < 0 ) { rb_raise(rb_eArgError, "fade_time cannot be negative (got %.2f)", fade_ms / 1000); } /* Check that the music is current */ if( _rg_music_current_check(self) ) { int result = Mix_FadeOutMusic( fade_ms ); if ( result < 0 ) { rb_raise(eSDLError, "Error fading out music: %s", Mix_GetError()); } } return self; }