summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-07-17 20:03:24 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-07-17 20:03:24 +0200
commitbf4c1afea0afe5519e53d3b7f5a8e07c5df1c344 (patch)
treed6f4ec71a403042cea61630f3dd00e8575f2c230
parentf43f9b570a2ab8629bd4b203a28f27b7852ccb50 (diff)
fixed gme codec
-rw-r--r--callbacks.c2
-rw-r--r--cgme.c27
-rw-r--r--main.c5
-rw-r--r--playlist.c8
-rw-r--r--psdl.c2
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 ();
diff --git a/cgme.c b/cgme.c
index c6706fb4..93bbe118 100644
--- a/cgme.c
+++ b/cgme.c
@@ -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
diff --git a/main.c b/main.c
index f9ac91fb..688f9ee5 100644
--- a/main.c
+++ b/main.c
@@ -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 ();
diff --git a/playlist.c b/playlist.c
index cb97bc50..06f3aaaf 100644
--- a/playlist.c
+++ b/playlist.c
@@ -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;
diff --git a/psdl.c b/psdl.c
index 31ed3c3d..04975b79 100644
--- a/psdl.c
+++ b/psdl.c
@@ -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;