summaryrefslogtreecommitdiff
path: root/plugins/gme/Game_Music_Emu-0.5.2/player/player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/gme/Game_Music_Emu-0.5.2/player/player.cpp')
-rw-r--r--plugins/gme/Game_Music_Emu-0.5.2/player/player.cpp213
1 files changed, 0 insertions, 213 deletions
diff --git a/plugins/gme/Game_Music_Emu-0.5.2/player/player.cpp b/plugins/gme/Game_Music_Emu-0.5.2/player/player.cpp
deleted file mode 100644
index a0685997..00000000
--- a/plugins/gme/Game_Music_Emu-0.5.2/player/player.cpp
+++ /dev/null
@@ -1,213 +0,0 @@
-/* How to play game music files with Music_Player (requires SDL library)
-
-Run program with path to a game music file.
-
-Left/Right Change track
-Space Pause/unpause
-E Normal/slight stereo echo/more stereo echo
--/= Adjust tempo
-1-9 Toggle channel on/off
-0 Reset tempo and turn channels back on */
-
-int const scope_width = 512;
-
-#include "Music_Player.h"
-#include "Audio_Scope.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include "SDL.h"
-
-void handle_error( const char* );
-
-static bool paused;
-static Audio_Scope* scope;
-static Music_Player* player;
-static short scope_buf [scope_width * 2];
-
-static void init()
-{
- // Start SDL
- if ( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_AUDIO ) < 0 )
- exit( EXIT_FAILURE );
- atexit( SDL_Quit );
- SDL_EnableKeyRepeat( 500, 80 );
-
- // Init scope
- scope = new Audio_Scope;
- if ( !scope )
- handle_error( "Out of memory" );
- if ( scope->init( scope_width, 256 ) )
- handle_error( "Couldn't initialize scope" );
- memset( scope_buf, 0, sizeof scope_buf );
-
- // Create player
- player = new Music_Player;
- if ( !player )
- handle_error( "Out of memory" );
- handle_error( player->init() );
- player->set_scope_buffer( scope_buf, scope_width * 2 );
-}
-
-static void start_track( int track, const char* path )
-{
- paused = false;
- handle_error( player->start_track( track - 1 ) );
-
- // update window title with track info
-
- long seconds = player->track_info().length / 1000;
- const char* game = player->track_info().game;
- if ( !*game )
- {
- // extract filename
- game = strrchr( path, '\\' ); // DOS
- if ( !game )
- game = strrchr( path, '/' ); // UNIX
- if ( !game )
- game = path;
- else
- game++; // skip path separator
- }
-
- char title [512];
- sprintf( title, "%s: %d/%d %s (%ld:%02ld)",
- game, track, player->track_count(), player->track_info().song,
- seconds / 60, seconds % 60 );
- SDL_WM_SetCaption( title, title );
-}
-
-int main( int argc, char** argv )
-{
- init();
-
- // Load file
- const char* path = (argc > 1 ? argv [argc - 1] : "test.nsf");
- handle_error( player->load_file( path ) );
- start_track( 1, path );
-
- // Main loop
- int track = 1;
- double tempo = 1.0;
- bool running = true;
- double stereo_depth = 0.0;
- int muting_mask = 0;
- while ( running )
- {
- SDL_Delay( 1000 / 100 );
-
- // Update scope
- scope->draw( scope_buf, scope_width, 2 );
-
- // Automatically go to next track when current one ends
- if ( player->track_ended() )
- {
- if ( track < player->track_count() )
- start_track( ++track, path );
- else
- player->pause( paused = true );
- }
-
- // Handle keyboard input
- SDL_Event e;
- while ( SDL_PollEvent( &e ) )
- {
- switch ( e.type )
- {
- case SDL_QUIT:
- running = false;
- break;
-
- case SDL_KEYDOWN:
- int key = e.key.keysym.sym;
- switch ( key )
- {
- case SDLK_q:
- case SDLK_ESCAPE: // quit
- running = false;
- break;
-
- case SDLK_LEFT: // prev track
- if ( !paused && !--track )
- track = 1;
- start_track( track, path );
- break;
-
- case SDLK_RIGHT: // next track
- if ( track < player->track_count() )
- start_track( ++track, path );
- break;
-
- case SDLK_MINUS: // reduce tempo
- tempo -= 0.1;
- if ( tempo < 0.1 )
- tempo = 0.1;
- player->set_tempo( tempo );
- break;
-
- case SDLK_EQUALS: // increase tempo
- tempo += 0.1;
- if ( tempo > 2.0 )
- tempo = 2.0;
- player->set_tempo( tempo );
- break;
-
- case SDLK_SPACE: // toggle pause
- paused = !paused;
- player->pause( paused );
- break;
-
- case SDLK_e: // toggle echo
- stereo_depth += 0.2;
- if ( stereo_depth > 0.5 )
- stereo_depth = 0;
- player->set_stereo_depth( stereo_depth );
- break;
-
- case SDLK_0: // reset tempo and muting
- tempo = 1.0;
- muting_mask = 0;
- player->set_tempo( tempo );
- player->mute_voices( muting_mask );
- break;
-
- default:
- if ( SDLK_1 <= key && key <= SDLK_9 ) // toggle muting
- {
- muting_mask ^= 1 << (key - SDLK_1);
- player->mute_voices( muting_mask );
- }
- }
- }
- }
- }
-
- // Cleanup
- delete player;
- delete scope;
-
- return 0;
-}
-
-void handle_error( const char* error )
-{
- if ( error )
- {
- // put error in window title
- char str [256];
- sprintf( str, "Error: %s", error );
- fprintf( stderr, str );
- SDL_WM_SetCaption( str, str );
-
- // wait for keyboard or mouse activity
- SDL_Event e;
- do
- {
- while ( !SDL_PollEvent( &e ) ) { }
- }
- while ( e.type != SDL_QUIT && e.type != SDL_KEYDOWN && e.type != SDL_MOUSEBUTTONDOWN );
-
- exit( EXIT_FAILURE );
- }
-}