mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-02-26 06:48:46 +01:00
Fix some Audacious issues
This commit is contained in:
parent
9b0df8652e
commit
6bd4be4a56
@ -35,7 +35,6 @@ extern "C" {
|
|||||||
/* global state */
|
/* global state */
|
||||||
/*EXPORT*/ VgmstreamPlugin aud_plugin_instance;
|
/*EXPORT*/ VgmstreamPlugin aud_plugin_instance;
|
||||||
audacious_settings_t settings;
|
audacious_settings_t settings;
|
||||||
VGMSTREAM* vgmstream = NULL; //todo make local?
|
|
||||||
|
|
||||||
/* Audacious will first send the file to a plugin based on this static extension list. If none
|
/* Audacious will first send the file to a plugin based on this static extension list. If none
|
||||||
* accepts it'll try again all plugins, ordered by priority, until one accepts the file. Problem is,
|
* accepts it'll try again all plugins, ordered by priority, until one accepts the file. Problem is,
|
||||||
@ -51,10 +50,10 @@ const char *const VgmstreamPlugin::exts[] = {
|
|||||||
const char *const VgmstreamPlugin::defaults[] = {
|
const char *const VgmstreamPlugin::defaults[] = {
|
||||||
"loop_forever", "FALSE",
|
"loop_forever", "FALSE",
|
||||||
"ignore_loop", "FALSE",
|
"ignore_loop", "FALSE",
|
||||||
"loop_count", "2", //maybe double?
|
"loop_count", "2.0",
|
||||||
"fade_length", "10.0",
|
"fade_length", "10.0",
|
||||||
"fade_delay", "0.0",
|
"fade_delay", "0.0",
|
||||||
"downmix_channels", "8",
|
"downmix_channels", "2",
|
||||||
"exts_unknown_on", "FALSE",
|
"exts_unknown_on", "FALSE",
|
||||||
"exts_common_on", "FALSE",
|
"exts_common_on", "FALSE",
|
||||||
NULL
|
NULL
|
||||||
@ -73,14 +72,15 @@ const char VgmstreamPlugin::about[] =
|
|||||||
"https://github.com/kode54/vgmstream/\n"
|
"https://github.com/kode54/vgmstream/\n"
|
||||||
"https://sourceforge.net/projects/vgmstream/ (original)";
|
"https://sourceforge.net/projects/vgmstream/ (original)";
|
||||||
|
|
||||||
|
/* widget config: {min, max, step} */
|
||||||
const PreferencesWidget VgmstreamPlugin::widgets[] = {
|
const PreferencesWidget VgmstreamPlugin::widgets[] = {
|
||||||
WidgetLabel(N_("<b>vgmstream config</b>")),
|
WidgetLabel(N_("<b>vgmstream config</b>")),
|
||||||
WidgetCheck(N_("Loop forever:"), WidgetBool(settings.loop_forever)),
|
WidgetCheck(N_("Loop forever:"), WidgetBool(settings.loop_forever)),
|
||||||
WidgetCheck(N_("Ignore loop:"), WidgetBool(settings.ignore_loop)),
|
WidgetCheck(N_("Ignore loop:"), WidgetBool(settings.ignore_loop)),
|
||||||
WidgetSpin(N_("Loop count:"), WidgetInt(settings.loop_count), {1, 20, 1}),
|
WidgetSpin(N_("Loop count:"), WidgetFloat(settings.loop_count), {1, 100, 1.0}),
|
||||||
WidgetSpin(N_("Fade length:"), WidgetFloat(settings.fade_time), {0, 60, 0.1}),
|
WidgetSpin(N_("Fade length:"), WidgetFloat(settings.fade_time), {0, 60, 0.1}),
|
||||||
WidgetSpin(N_("Fade delay:"), WidgetFloat(settings.fade_delay), {0, 60, 0.1}),
|
WidgetSpin(N_("Fade delay:"), WidgetFloat(settings.fade_delay), {0, 60, 0.1}),
|
||||||
WidgetSpin(N_("Downmix:"), WidgetInt(settings.downmix_channels), {1, 20, 1}),
|
WidgetSpin(N_("Downmix:"), WidgetInt(settings.downmix_channels), {0, 8, 1}),
|
||||||
WidgetCheck(N_("Enable unknown exts"), WidgetBool(settings.exts_unknown_on)),
|
WidgetCheck(N_("Enable unknown exts"), WidgetBool(settings.exts_unknown_on)),
|
||||||
// Audacious 3.6 will only match one plugin so this option has no actual use
|
// Audacious 3.6 will only match one plugin so this option has no actual use
|
||||||
// (ex. a fake .flac only gets to the FLAC plugin and never to vgmstream, even on error)
|
// (ex. a fake .flac only gets to the FLAC plugin and never to vgmstream, even on error)
|
||||||
@ -92,7 +92,7 @@ void vgmstream_settings_load() {
|
|||||||
aud_config_set_defaults(CFG_ID, VgmstreamPlugin::defaults);
|
aud_config_set_defaults(CFG_ID, VgmstreamPlugin::defaults);
|
||||||
settings.loop_forever = aud_get_bool(CFG_ID, "loop_forever");
|
settings.loop_forever = aud_get_bool(CFG_ID, "loop_forever");
|
||||||
settings.ignore_loop = aud_get_bool(CFG_ID, "ignore_loop");
|
settings.ignore_loop = aud_get_bool(CFG_ID, "ignore_loop");
|
||||||
settings.loop_count = aud_get_int(CFG_ID, "loop_count");
|
settings.loop_count = aud_get_double(CFG_ID, "loop_count");
|
||||||
settings.fade_time = aud_get_double(CFG_ID, "fade_length");
|
settings.fade_time = aud_get_double(CFG_ID, "fade_length");
|
||||||
settings.fade_delay = aud_get_double(CFG_ID, "fade_delay");
|
settings.fade_delay = aud_get_double(CFG_ID, "fade_delay");
|
||||||
settings.downmix_channels = aud_get_int(CFG_ID, "downmix_channels");
|
settings.downmix_channels = aud_get_int(CFG_ID, "downmix_channels");
|
||||||
@ -104,7 +104,7 @@ void vgmstream_settings_save() {
|
|||||||
AUDINFO("save settings\n");
|
AUDINFO("save settings\n");
|
||||||
aud_set_bool(CFG_ID, "loop_forever", settings.loop_forever);
|
aud_set_bool(CFG_ID, "loop_forever", settings.loop_forever);
|
||||||
aud_set_bool(CFG_ID, "ignore_loop", settings.ignore_loop);
|
aud_set_bool(CFG_ID, "ignore_loop", settings.ignore_loop);
|
||||||
aud_set_int(CFG_ID, "loop_count", settings.loop_count);
|
aud_set_double(CFG_ID, "loop_count", settings.loop_count);
|
||||||
aud_set_double(CFG_ID, "fade_length", settings.fade_time);
|
aud_set_double(CFG_ID, "fade_length", settings.fade_time);
|
||||||
aud_set_double(CFG_ID, "fade_delay", settings.fade_delay);
|
aud_set_double(CFG_ID, "fade_delay", settings.fade_delay);
|
||||||
aud_set_int(CFG_ID, "downmix_channels", settings.downmix_channels);
|
aud_set_int(CFG_ID, "downmix_channels", settings.downmix_channels);
|
||||||
@ -206,11 +206,11 @@ static bool read_info(const char* filename, Tuple & tuple) {
|
|||||||
return true; //must return?
|
return true; //must return?
|
||||||
}
|
}
|
||||||
|
|
||||||
streamfile->stream_index = (subtune + 1);
|
sf->stream_index = (subtune + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
apply_config(vgmstream, &settings);
|
apply_config(infostream, &settings);
|
||||||
|
|
||||||
int output_channels = infostream->channels;
|
int output_channels = infostream->channels;
|
||||||
vgmstream_mixing_autodownmix(infostream, settings.downmix_channels);
|
vgmstream_mixing_autodownmix(infostream, settings.downmix_channels);
|
||||||
@ -220,6 +220,7 @@ static bool read_info(const char* filename, Tuple & tuple) {
|
|||||||
int length_samples = vgmstream_get_samples(infostream);
|
int length_samples = vgmstream_get_samples(infostream);
|
||||||
int length_ms = length_samples * 1000LL / infostream->sample_rate;
|
int length_ms = length_samples * 1000LL / infostream->sample_rate;
|
||||||
|
|
||||||
|
//todo: set_format may throw std::bad_alloc if output_channels isn't supported (only 2?)
|
||||||
// short form, not sure if better way
|
// short form, not sure if better way
|
||||||
tuple.set_format("vgmstream codec", output_channels, infostream->sample_rate, bitrate);
|
tuple.set_format("vgmstream codec", output_channels, infostream->sample_rate, bitrate);
|
||||||
tuple.set_filename(filename); //used?
|
tuple.set_filename(filename); //used?
|
||||||
@ -270,23 +271,18 @@ static void do_seek(VGMSTREAM* vgmstream, int seek_ms, int& current_sample_pos)
|
|||||||
bool VgmstreamPlugin::play(const char * filename, VFSFile & file) {
|
bool VgmstreamPlugin::play(const char * filename, VFSFile & file) {
|
||||||
AUDINFO("play file=%s\n", filename);
|
AUDINFO("play file=%s\n", filename);
|
||||||
|
|
||||||
// just in case
|
|
||||||
if (vgmstream)
|
|
||||||
close_vgmstream(vgmstream);
|
|
||||||
|
|
||||||
STREAMFILE* sf = open_vfs(filename);
|
STREAMFILE* sf = open_vfs(filename);
|
||||||
if (!sf) {
|
if (!sf) {
|
||||||
AUDERR("failed opening file %s\n", filename);
|
AUDERR("failed opening file %s\n", filename);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
vgmstream = init_vgmstream_from_STREAMFILE(sf);
|
VGMSTREAM* vgmstream = init_vgmstream_from_STREAMFILE(sf);
|
||||||
close_streamfile(sf);
|
close_streamfile(sf);
|
||||||
|
|
||||||
if (!vgmstream) {
|
if (!vgmstream) {
|
||||||
AUDINFO("filename %s is not a valid format\n", filename);
|
AUDINFO("filename %s is not a valid format\n", filename);
|
||||||
close_vgmstream(vgmstream);
|
close_vgmstream(vgmstream);
|
||||||
vgmstream = NULL;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -343,6 +339,5 @@ bool VgmstreamPlugin::play(const char * filename, VFSFile & file) {
|
|||||||
AUDINFO("play finished\n");
|
AUDINFO("play finished\n");
|
||||||
|
|
||||||
close_vgmstream(vgmstream);
|
close_vgmstream(vgmstream);
|
||||||
vgmstream = NULL;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ public:
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
bool loop_forever;
|
bool loop_forever;
|
||||||
bool ignore_loop;
|
bool ignore_loop;
|
||||||
int loop_count;
|
double loop_count;
|
||||||
double fade_time;
|
double fade_time;
|
||||||
double fade_delay;
|
double fade_delay;
|
||||||
int downmix_channels;
|
int downmix_channels;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user