aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--nncmpp.c16
2 files changed, 13 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index cae7dc5..75cc843 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,8 @@ Unreleased
* Added a "z" binding to center the view on the selected item
+ * Made it possible to adjust the spectrum analyzer's FPS limit
+
* Fixed possibility of connection timeouts with PulseAudio integration
diff --git a/nncmpp.c b/nncmpp.c
index 3a7227e..84192ee 100644
--- a/nncmpp.c
+++ b/nncmpp.c
@@ -741,7 +741,8 @@ spectrum_sample (struct spectrum *s)
}
static bool
-spectrum_init (struct spectrum *s, char *format, int bars, struct error **e)
+spectrum_init (struct spectrum *s, char *format, int bars, int fps,
+ struct error **e)
{
errno = 0;
@@ -817,8 +818,7 @@ spectrum_init (struct spectrum *s, char *format, int bars, struct error **e)
s->top_bins[bar] = MIN (top_bin, used_bins);
}
- // Limit updates to 30 times per second to limit CPU load
- s->samples = s->sampling_rate / s->bins * 2 / 30;
+ s->samples = s->sampling_rate / s->bins * 2 / MAX (fps, 1);
if (s->samples < 1)
s->samples = 1;
@@ -1461,6 +1461,10 @@ static struct config_schema g_config_settings[] =
.comment = "Number of computed audio spectrum bars",
.type = CONFIG_ITEM_INTEGER,
.default_ = "8" },
+ { .name = "spectrum_fps",
+ .comment = "Maximum frames per second, affects CPU usage",
+ .type = CONFIG_ITEM_INTEGER,
+ .default_ = "30" },
#endif // WITH_FFTW
#ifdef WITH_PULSE
@@ -4349,6 +4353,8 @@ spectrum_setup_fifo (void)
get_config_string (g.config.root, "settings.spectrum_format");
struct config_item *spectrum_bars =
config_item_get (g.config.root, "settings.spectrum_bars", NULL);
+ struct config_item *spectrum_fps =
+ config_item_get (g.config.root, "settings.spectrum_fps", NULL);
if (!spectrum_path)
return;
@@ -4360,8 +4366,8 @@ spectrum_setup_fifo (void)
print_error ("spectrum: %s", "FIFO path could not be resolved");
else if (!g.locale_is_utf8)
print_error ("spectrum: %s", "UTF-8 locale required");
- else if (!spectrum_init (&g.spectrum,
- (char *) spectrum_format, spectrum_bars->value.integer, &e))
+ else if (!spectrum_init (&g.spectrum, (char *) spectrum_format,
+ spectrum_bars->value.integer, spectrum_fps->value.integer, &e))
{
print_error ("spectrum: %s", e->message);
error_free (e);