freebsd-ports/audio/xmms-nsf/files/patch-src__xmms__nsf.c
Emanuel Haupt 6de5b2ae5e - Fix build with gcc 4.x
- Added a patch to control window to display when an nsf song is played and
  change 'Fadeout' option to 'Silence Until Next Song' [1]
- Cleanup
- Bump PORTREVISION

Obtained from:	gentoo
2007-01-11 14:25:53 +00:00

85 lines
2.4 KiB
C

--- ./src/xmms/nsf.c.orig Sun Jan 7 06:15:12 2001
+++ ./src/xmms/nsf.c Wed Jan 10 20:13:26 2007
@@ -23,7 +23,8 @@
#define VERSION "0.0.3"
#define PLAYTIME 30
-#define FADEOUTTIME 5
+#define SILENCETIME 5
+#define FREQ 44100
#include "nsf.h"
@@ -328,7 +329,7 @@
widget = lookup_widget(nsf_configure_win, "spinbutton1");
gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), nsf_cfg.play_time);
widget = lookup_widget(nsf_configure_win, "spinbutton2");
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), nsf_cfg.fadeout_time);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget), nsf_cfg.silence_time);
gtk_widget_show(nsf_configure_win);
}else{
@@ -357,7 +358,7 @@
nsf_win->dock_window_list = NULL;
nsf_cfg.play_time = PLAYTIME; /* second */
- nsf_cfg.fadeout_time = FADEOUTTIME; /* second */
+ nsf_cfg.silence_time = SILENCETIME; /* second */
nsf_cfg.player_shaded = FALSE;
nsf_cfg.easy_move = FALSE;
@@ -365,7 +366,7 @@
if ((cfg = xmms_cfg_open_file(filename)) != 0){
xmms_cfg_read_int(cfg, "NSF", "play_time", &nsf_cfg.play_time);
- xmms_cfg_read_int(cfg, "NSF", "fadeout_time", &nsf_cfg.fadeout_time);
+ xmms_cfg_read_int(cfg, "NSF", "silence_time", &nsf_cfg.silence_time);
xmms_cfg_free(cfg);
}
}
@@ -439,10 +440,11 @@
{
char data[2048 * 2];
int bytes, blk_size, rate;
+ Uint32 c = 0, count = 0;
//setting NSF
NSFSetSongNo(nsf_file->current_song);
- NESAudioFrequencySet(44100);
+ NESAudioFrequencySet(FREQ);
NESReset();
//16bit/8bit * 1channel * 512 sample = 1024byte
@@ -460,7 +462,15 @@
}
if (bytes > 0){
//read 1024byte = 512 sample * 2byte
- NESAudioRender(data, bytes/2);
+ c = NESAudioRender((Int16*)data, bytes/2);
+ if (c < 512)
+ count = 0;
+ else
+ count += c;
+ if (count > FREQ*nsf_cfg.silence_time) {
+ nsf_file->eos = 1;
+ count = 0;
+ }
nsf_ip.add_vis_pcm(nsf_ip.output->written_time(), (nsf_file->bits_per_sample == 16) ? FMT_S16_LE : FMT_U8,
nsf_file->channels, bytes, data);
@@ -512,11 +522,14 @@
if (!(nsf_file->file = fopen(filename, "rb"))){
return;
}
+
+ nsf_about();
+
fseek(nsf_file->file, 0, SEEK_END);
count = ftell(nsf_file->file);
fseek(nsf_file->file, 0, SEEK_SET);
- (void*)buffer = g_malloc0(count);
+ buffer = (void*)g_malloc0(count);
for(i=0;i<count;i++){
*(buffer+i) = fgetc(nsf_file->file);
}