Пример #1
0
/*!
 * Stops the music with a fadeout.
 * \param ms The length in milliseconds of the fade out.
 */
void SdlMixerMusic::stopFadeOut(int ms) const
{
    while (!Mix_FadeOutMusic(ms) && Mix_PlayingMusic()) {
        SDL_Delay(100);
    }
    Mix_RewindMusic();
}
Пример #2
0
void
sndMusic::Rewind()
{
	if ( m_playing )
	{
		Mix_RewindMusic();
		m_startTick = sysTimer::Instance()->GetMicroseconds();
	}
}
Пример #3
0
static void free_music(void)
{
  if (!info.music)
    return;

  Mix_HaltMusic();
  Mix_RewindMusic();
  Mix_FreeMusic(info.music);
  info.music = NULL;
}
Пример #4
0
void
sndMusic::Start()
{
	int loops = (m_looping)?-1:1;
	if ( m_playing )
		Mix_HaltMusic();
	if(Mix_PlayMusic(m_music, loops)!=-1) 
	{
		m_playing = true;
		
		Mix_RewindMusic();	// this is stupid, but it's the only way I've found to
		Mix_RewindMusic();	// make SDL_Mixer start playing at a reliable place and time.
		Mix_RewindMusic();	// Why three calls?  I don't know.  But it works, as a hack.  :(
							// (Without this, there was up to a 1 second uncertainty in when music actually started)
		
		m_startTick = sysTimer::Instance()->GetMicroseconds();
	}
	else
		printf("Mix_PlayMusic: %s\n", Mix_GetError()); // well, there's no music, but most games don't break without music, so don't assert.
}
Пример #5
0
void ReplayWave ( int no )
{
	switch ( s_iYGSSoundType[no] )
	{
	case YGS_SOUNDTYPE_WAV:
		Mix_Resume(no);
		break;

	case YGS_SOUNDTYPE_MUS:
		Mix_RewindMusic();
		break;
	}
}
Пример #6
0
void SoundManager::pauseMusic()
{
	if (m_state != ERROR)
	{
		// If music is playing, handle the pause request
		if (Mix_PlayingMusic() == 1)
		{
			if (Mix_PausedMusic() == 1)
			{
				// If the music is already paused, resume it with a rewind
				Mix_RewindMusic();
				Mix_PlayMusic(m_music, -1);
				m_state = PLAYING;
			}
			else
			{
				// Otherwise, pause the music
				Mix_PauseMusic();
				m_state = PAUSED;
			}
		}
	}
}
Пример #7
0
void CMusic::Rewind()
{
	Mix_RewindMusic();
}
Пример #8
0
int main( int argc, char* args[] )
{
    int quit = false;

    if( init() == false )
    {
        return false;
    }

    if( load_files() == false )
    {
        return false;
    }

    apply_surface( 0, 0, background, screen );

    message = TTF_RenderText_Solid( font, "Start game", textColor );

    if( message == NULL )
    {
        return false;
    }

    apply_surface( ( SCREEN_WIDTH - message->w ) / 2, 100, message, screen );

    SDL_FreeSurface( message );

    message = TTF_RenderText_Solid( font, "Options", textColor );

    if( message == NULL )
    {
        return false;
    }

    apply_surface( ( SCREEN_WIDTH - message->w ) / 2, 200, message, screen );

    SDL_FreeSurface( message );

    message = TTF_RenderText_Solid( font, "Exit", textColor );

    if( message == NULL )
    {
        return false;
    }

    apply_surface( ( SCREEN_WIDTH - message->w ) / 2, 300, message, screen );

    SDL_FreeSurface( message );

    message = TTF_RenderText_Solid( font, "Press 9 to play/pause the music", textColor );

    if( message == NULL )
    {
        return false;
    }

    apply_surface( ( SCREEN_WIDTH - message->w ) / 2, 400, message, screen );

    SDL_FreeSurface( message );

        message = TTF_RenderText_Solid( font, "Press 0 to stop the music", textColor );

    if( message == NULL )
    {
        return false;
    }

    apply_surface( ( SCREEN_WIDTH - message->w ) / 2, 500, message, screen );

    SDL_FreeSurface( message );

    if( SDL_Flip( screen ) == -1 )
    {
        return false;
    }

    while( quit == false )
    {
        while( SDL_PollEvent( &event ) )
        {
            if( event.type == SDL_KEYDOWN )
            {
                if( event.key.keysym.sym == SDLK_6)
                {
                    Mix_RewindMusic();
                    if(Mix_SetMusicPosition(60.0)==-1)
                    {
                        return false;
                    }
                }
                else if( event.key.keysym.sym == SDLK_9 )
                {
                    if( Mix_PlayingMusic() == 0 )
                    {
                        if( Mix_PlayMusic( music, -1 ) == -1 )
                        {
                            return false;
                        }
                    }
                    else
                    {
                        if( Mix_PausedMusic() == 1 )
                        {
                            Mix_ResumeMusic();
                        }
                        else
                        {
                            Mix_PauseMusic();
                        }
                    }
                }
                else if( event.key.keysym.sym == SDLK_0 )
                {
                    Mix_HaltMusic();
                }
            }
            if( event.type == SDL_QUIT )
            {
                quit = true;
            }

        }
    }

    clean_up();

    return 0;
}
Пример #9
0
void Music::restart() {
	Mix_RewindMusic();
}
Пример #10
0
void SoundManager::stopBackground() {
    Mix_PauseMusic();
    Mix_RewindMusic();
}
Пример #11
0
	void Music::Pause() { Mix_RewindMusic (); }
Пример #12
0
/*!
 * Stops the music from playing.
 */
void SdlMixerMusic::stop() const
{
    Mix_HaltMusic();
    Mix_RewindMusic();
}
Пример #13
0
static mrb_value
mrb_sdl2_mixer_rewind_music(mrb_state *mrb, mrb_value self)
{
  Mix_RewindMusic();
  return mrb_nil_value();
}
Пример #14
0
/* On arrete la lecture du midi et on repart du debut */
void StopMidi()
{
  Mix_HaltMusic();
  Mix_RewindMusic();
}
Пример #15
0
bool SDLAudio::RewindMUS(void)
{
    Mix_RewindMusic();
    return true;
}
Пример #16
0
void Music::rewind()
{
	Mix_RewindMusic();
}
Пример #17
0
int main(int argc, char **argv)
{
	int audio_rate,audio_channels;
	Uint16 audio_format;
	Uint32 t;
	Mix_Music *music;
	int volume=SDL_MIX_MAXVOLUME;

	/* initialize SDL for audio and video */
	if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO)<0)
		cleanExit("SDL_Init");
	atexit(SDL_Quit);

	int initted=Mix_Init(0);
	printf("Before Mix_Init SDL_mixer supported: ");
	print_init_flags(initted);
	initted=Mix_Init(~0);
	printf("After  Mix_Init SDL_mixer supported: ");
	print_init_flags(initted);
	Mix_Quit();

	if(argc<2 || argc>4)
	{
		fprintf(stderr,"Usage: %s filename [depth] [any 3rd argument...]\n"
				"    filename is any music file supported by your SDL_mixer library\n"
				"    depth is screen depth, default is 8bits\n"
				"    if there is a third argument given, we go fullscreen for maximum fun!\n",
				*argv);
		return 1;
	}


	/* open a screen for the wav output */
	if(!(s=SDL_SetVideoMode(W,H,(argc>2?atoi(argv[2]):8),(argc>3?SDL_FULLSCREEN:0)|SDL_HWSURFACE|SDL_DOUBLEBUF)))
		cleanExit("SDL_SetVideoMode");
	SDL_WM_SetCaption("sdlwav - SDL_mixer demo","sdlwav");
	
	/* hide the annoying mouse pointer */
	SDL_ShowCursor(SDL_DISABLE);
	/* get the colors we use */
	white=SDL_MapRGB(s->format,0xff,0xff,0xff);
	black=SDL_MapRGB(s->format,0,0,0);
	
	/* initialize sdl mixer, open up the audio device */
	if(Mix_OpenAudio(44100,MIX_DEFAULT_FORMAT,2,BUFFER)<0)
		cleanExit("Mix_OpenAudio");

	/* we play no samples, so deallocate the default 8 channels... */
	Mix_AllocateChannels(0);
	
	/* print out some info on the formats this run of SDL_mixer supports */
	{
		int i,n=Mix_GetNumChunkDecoders();
		printf("There are %d available chunk(sample) decoders:\n",n);
		for(i=0; i<n; ++i)
			printf("	%s\n", Mix_GetChunkDecoder(i));
		n = Mix_GetNumMusicDecoders();
		printf("There are %d available music decoders:\n",n);
		for(i=0; i<n; ++i)
			printf("	%s\n", Mix_GetMusicDecoder(i));
	}

	/* print out some info on the audio device and stream */
	Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels);
	bits=audio_format&0xFF;
	sample_size=bits/8+audio_channels;
	rate=audio_rate;
	printf("Opened audio at %d Hz %d bit %s, %d bytes audio buffer\n", audio_rate,
			bits, audio_channels>1?"stereo":"mono", BUFFER );

	/* calculate some parameters for the wav display */
	dy=s->h/2.0/(float)(0x1<<bits);
	
	/* load the song */
	if(!(music=Mix_LoadMUS(argv[1])))
		cleanExit("Mix_LoadMUS(\"%s\")",argv[1]);

	{
		Mix_MusicType type=Mix_GetMusicType(music);
		printf("Music type: %s\n",
				type==MUS_NONE?"MUS_NONE":
				type==MUS_CMD?"MUS_CMD":
				type==MUS_WAV?"MUS_WAV":
				/*type==MUS_MOD_MODPLUG?"MUS_MOD_MODPLUG":*/
				type==MUS_MOD?"MUS_MOD":
				type==MUS_MID?"MUS_MID":
				type==MUS_OGG?"MUS_OGG":
				type==MUS_MP3?"MUS_MP3":
				type==MUS_MP3_MAD?"MUS_MP3_MAD":
				type==MUS_FLAC?"MUS_FLAC":
				"Unknown");
	}
	/* set the post mix processor up */
	Mix_SetPostMix(postmix,argv[1]);
	
	SDL_FillRect(s,NULL,black);
	SDL_Flip(s);
	SDL_FillRect(s,NULL,black);
	SDL_Flip(s);
	/* start playing and displaying the wav */
	/* wait for escape key of the quit event to finish */
	t=SDL_GetTicks();
	if(Mix_PlayMusic(music, 1)==-1)
		cleanExit("Mix_PlayMusic(0x%p,1)",music);
	Mix_VolumeMusic(volume);

	while((Mix_PlayingMusic() || Mix_PausedMusic()) && !done)
	{
		SDL_Event e;
		while(SDL_PollEvent(&e))
		{
			switch(e.type)
			{
				case SDL_KEYDOWN:
					switch(e.key.keysym.sym)
					{
						case SDLK_ESCAPE:
							done=1;
							break;
						case SDLK_LEFT:
							if(e.key.keysym.mod&KMOD_SHIFT)
							{
								Mix_RewindMusic();
								position=0;
							}
							else
							{
								int pos=position/audio_rate-1;
								if(pos<0)
									pos=0;
								Mix_SetMusicPosition(pos);
								position=pos*audio_rate;
							}
							break;
						case SDLK_RIGHT:
							switch(Mix_GetMusicType(NULL))
							{
								case MUS_MP3:
									Mix_SetMusicPosition(+5);
									position+=5*audio_rate;
									break;
								case MUS_OGG:
								case MUS_FLAC:
								case MUS_MP3_MAD:
								/*case MUS_MOD_MODPLUG:*/
									Mix_SetMusicPosition(position/audio_rate+1);
									position+=audio_rate;
									break;
								default:
									printf("cannot fast-forward this type of music\n");
									break;
							}
							break;
						case SDLK_UP:
							volume=(volume+1)<<1;
							if(volume>SDL_MIX_MAXVOLUME)
								volume=SDL_MIX_MAXVOLUME;
							Mix_VolumeMusic(volume);
							break;
						case SDLK_DOWN:
							volume>>=1;
							Mix_VolumeMusic(volume);
							break;
						case SDLK_SPACE:
							if(Mix_PausedMusic())
								Mix_ResumeMusic();
							else
								Mix_PauseMusic();
							break;
						default:
							break;
					}
					break;
				case SDL_QUIT:
					done=1;
					break;
				default:
					break;
			}
		}
		/* the postmix processor tells us when there's new data to draw */
		if(need_refresh)
			refresh();
		SDL_Delay(0);
	}
	t=SDL_GetTicks()-t;
	
	/* free & close */
	Mix_FreeMusic(music);
	Mix_CloseAudio();
	SDL_Quit();
	/* show a silly statistic */
	printf("fps=%.2f\n",((float)flips)/(t/1000.0));
	return(0);
}
Пример #18
0
void stop_music(void) {
	Mix_RewindMusic();
	Mix_HaltMusic();
}