Mercurial > audlegacy
changeset 145:8794a4781a15 trunk
[svn] looping stuff
author | nenolod |
---|---|
date | Thu, 10 Nov 2005 17:51:04 -0800 |
parents | 0faf2fa7fc85 |
children | 4309d2df6586 |
files | Plugins/Input/console/Audacious_Driver.cpp Plugins/Input/console/Audacious_Driver.h |
diffstat | 2 files changed, 39 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/Plugins/Input/console/Audacious_Driver.cpp Thu Nov 10 16:48:36 2005 -0800 +++ b/Plugins/Input/console/Audacious_Driver.cpp Thu Nov 10 17:51:04 2005 -0800 @@ -16,10 +16,14 @@ #include "libaudacious/configfile.h" #include "libaudacious/util.h" #include "libaudacious/titlestring.h" +#include "audacious/input.h" #include "audacious/output.h" +#include "audacious/playback.h" }; +struct AudaciousConsoleConfig audcfg = { 180, FALSE, 32000 }; + #include <cstring> #ifdef WORDS_BIGENDIAN @@ -38,7 +42,6 @@ static void console_pause(gshort p); static int get_time(void); static gboolean console_ip_is_going; - extern InputPlugin console_ip; static int is_our_file(gchar *filename) @@ -92,7 +95,11 @@ static void get_song_info(char *filename, char **title, int *length) { (*title) = get_title(filename); - (*length) = -1; + + if (audcfg.loop_length) + (*length) = audcfg.loop_length; + else + (*length) = -1; } static void play_file(char *filename) @@ -113,7 +120,12 @@ name = get_title(filename); - console_ip.set_info(name, -1, spc->voice_count(), 32000, 2); + if (audcfg.loop_length) + console_ip.set_info(name, audcfg.loop_length * 1000, + spc->voice_count(), 32000, 2); + else + console_ip.set_info(name, -1, spc->voice_count(), 32000, 2); + g_free(name); @@ -178,8 +190,16 @@ Spc_Emu *my_spc = (Spc_Emu *) arg; Music_Emu::sample_t buf[1024]; - while (my_spc->play(1024, buf) == NULL && console_ip_is_going == TRUE) - { + for (;;) + { + if (!console_ip_is_going) + break; + + my_spc->play(1024, buf); + + if ((console_ip.output->output_time() / 1000) > + audcfg.loop_length && audcfg.loop_length != 0) + break; console_ip.add_vis_pcm(console_ip.output->written_time(), MY_FMT, 1, 2048, buf); while(console_ip.output->buffer_free() < 2048) @@ -188,6 +208,8 @@ } delete spc; + console_ip.output->close_audio(); + console_ip_is_going = FALSE; g_thread_exit(NULL); return NULL; @@ -195,7 +217,10 @@ static int get_time(void) { - return console_ip.output->output_time(); + if (console_ip_is_going == TRUE) + return console_ip.output->output_time(); + else + return -1; } static void console_init(void)
--- a/Plugins/Input/console/Audacious_Driver.h Thu Nov 10 16:48:36 2005 -0800 +++ b/Plugins/Input/console/Audacious_Driver.h Thu Nov 10 17:51:04 2005 -0800 @@ -8,6 +8,8 @@ #ifndef AUDACIOUS_DRIVER_H #define AUDACIOUS_DRIVER_H +#include <glib.h> + #include "Blip_Buffer.h" #include "Blip_Synth.h" #include "Classic_Emu.h" @@ -41,4 +43,10 @@ #include "blargg_source.h" #include "ym2612.h" +struct AudaciousConsoleConfig { + gint loop_length; // length to loop in seconds + gboolean resample; // whether or not to resample + gint resample_rate; // rate to resample at +}; + #endif