diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2009-07-17 20:03:24 +0200 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2009-07-17 20:03:24 +0200 |
commit | bf4c1afea0afe5519e53d3b7f5a8e07c5df1c344 (patch) | |
tree | d6f4ec71a403042cea61630f3dd00e8575f2c230 | |
parent | f43f9b570a2ab8629bd4b203a28f27b7852ccb50 (diff) |
fixed gme codec
-rw-r--r-- | callbacks.c | 2 | ||||
-rw-r--r-- | cgme.c | 27 | ||||
-rw-r--r-- | main.c | 5 | ||||
-rw-r--r-- | playlist.c | 8 | ||||
-rw-r--r-- | psdl.c | 2 |
5 files changed, 24 insertions, 20 deletions
diff --git a/callbacks.c b/callbacks.c index eb99458c..1982b32a 100644 --- a/callbacks.c +++ b/callbacks.c @@ -126,6 +126,8 @@ on_add_files_activate (GtkMenuItem *menuitem, gtk_file_filter_add_pattern (flt, "*.mod"); gtk_file_filter_add_pattern (flt, "*.wav"); gtk_file_filter_add_pattern (flt, "*.mp3"); + gtk_file_filter_add_pattern (flt, "*.nsf"); + gtk_file_filter_add_pattern (flt, "*.flac"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dlg), flt); gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dlg), flt); flt = gtk_file_filter_new (); @@ -9,16 +9,17 @@ static Music_Emu *emu; static int reallength; static int nzerosamples; +extern int sdl_player_freq; // hack! int cgme_init (const char *fname, int track, float start, float end) { - gme_open_file (fname, &emu, 44100); + gme_open_file (fname, &emu, sdl_player_freq); gme_start_track (emu, track); track_info_t inf; gme_track_info (emu, &inf, track); cgme.info.bitsPerSample = 16; cgme.info.channels = 2; - cgme.info.samplesPerSecond = 44100; + cgme.info.samplesPerSecond = sdl_player_freq; reallength = inf.length; nzerosamples = 0; if (inf.length == -1) { @@ -41,10 +42,19 @@ cgme_free (void) { int cgme_read (char *bytes, int size) { + float t = (size/4) / (float)cgme.info.samplesPerSecond; + if (cgme.info.position + t >= cgme.info.duration) { + t = cgme.info.duration - cgme.info.position; + if (t <= 0) { + return 0; + } + // DON'T ajust size, buffer must always be po2 + //size = t * (float)cgme.info.samplesPerSecond * 4; + } if (gme_play (emu, size/2, (short*)bytes)) { - return 1; + return 0; } - cgme.info.position += (size/4) / 44100.f; + cgme.info.position += t; if (reallength == -1) { // check if whole buffer is zeroes int i; @@ -55,18 +65,15 @@ cgme_read (char *bytes, int size) { } if (i == size) { nzerosamples += size / 4; - if (nzerosamples > 44100 * 4) { - return -1; + if (nzerosamples > cgme.info.samplesPerSecond * 4) { + return 0; } } else { nzerosamples = 0; } } - if (reallength == -1 && cgme.info.position >= cgme.info.duration) { - return -1; - } - return 0; + return size; } int @@ -99,11 +99,6 @@ main (int argc, char *argv[]) { gtk_set_locale (); gtk_init (&argc, &argv); - /* - * The following code was added by Glade to create one of each component - * (except popup menus), just so that you see something after building - * the project. Delete any components that you don't want shown initially. - */ mainwin = create_mainwin (); gtk_widget_show (mainwin); gtk_main (); @@ -248,10 +248,10 @@ ps_add_file (const char *fname) { codec = &cflac; return codec->add (fname); } -// else if (!strcasecmp (eol, "nsf")) { -// codec = &cgme; -// return codec->add (fname); -// } + else if (!strcasecmp (eol, "nsf")) { + codec = &cgme; + return codec->add (fname); + } // else if (!strcasecmp (eol, "cue")) { // ps_add_cue (fname); // return -1; @@ -12,7 +12,7 @@ int psdl_init (void) { SDL_AudioSpec obt; int formats[] = { AUDIO_S16, -1 }; - int freqs[] = { 44100, 48000, -1 }; + int freqs[] = { 48000, 44100, 96000, 22050, -1 }; const char *fmtnames[] = { "16 bit signed integer" }; int fmt, frq; int success = 0; |