Commit graph

175 commits

Author SHA1 Message Date
Jaroslav Kysela
84d0a91f11 alsamixer: fix calculation in set_normalized_volume (overflow)
Lowering volume below 0 causes overflow spike to 100% volume (volume goes
below 0 and back to 100 repeatedly). 0 overflows past infinity when holding
down z,x,c.

> value = lrint_dir(6000.0 * log10(volume), dir) + max;
   (where volume = 0 , and dir = -1 . min = -9999999 , and max = -6)
> log10(0) is negative infinity = error

Fixes: https://github.com/alsa-project/alsa-utils/pull/266
Reported-by: genr8eofl <genBTC@gmx.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2024-05-23 13:14:20 +02:00
Jaroslav Kysela
10a2557d7e alsamixer: fix the verbose compilation warnings for latest gcc
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-08-30 12:36:45 +02:00
Jaroslav Kysela
dad2161d3c alsamixer: add -B,--black-background option
Fixes: https://github.com/alsa-project/alsa-utils/issues/176
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-02-10 13:36:23 +01:00
Jaroslav Kysela
788cfa71ea alsamixer: add alsamixer.rc.example file
Fixes: https://github.com/alsa-project/alsa-utils/issues/112
From: Bertram Felgenhauer / int-e / github
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-05-31 14:16:30 +02:00
Takashi Iwai
c511b49bf6 alsamixer: Revert has_mouse() check
has_mouse() function of ncurses doesn't seem working reliably.
Revert the previous change for addressing the regressions.

Fixes: 31820c5f23 ("alsamixer: Check the availability of mouse")
BugLink: https://github.com/alsa-project/alsa-utils/issues/139
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2022-01-28 17:46:45 +01:00
Takashi Iwai
40202a522a alsamixer: Fix regression in color setup
The recent change to add the background config broke the color setup
via the config file due.  Fix the regression by restoring the
initialization order back again, and changing the logic for the
default background color to be re-initializing color pairs instead.

Link: https://github.com/alsa-project/alsa-utils/issues/137
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2022-01-20 08:58:48 +01:00
Jaroslav Kysela
c4e43384fc alsamixer: fix typo in man page (and/of -> and/or)
Fixes: https://github.com/alsa-project/alsa-utils/issues/110
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-03 14:55:07 +01:00
Takashi Iwai
5d4442b2cf alsamixer: Allow setting the default background color in config
The recent commit c867aa8a84 ("alsamixer: use background color
instead of COLOR_BLACK") changed the behavior of alsamixer to take the
system default background color instead of black.  This caused
problems on the terminal setups that have bright background colors,
e.g. yellow is very hard to read.

It could be "fixed" by setting up the color configurations in
~/.config/alsamixer.rc, but this needs to change the all colors in
every element, which is pretty cumbersome.  Instead, this patch
extends the config set command to allow user to specify the default
background color.  A user like me can create their own
~/.config/alsamixer.rc file containing the line

  set background black

and the old good black background is back again.

Note that, for achieving the above, we also had to shuffle the
function call order, to parse the config at first, then initialize
curses.  This shouldn't matter for other behavior.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-10-20 17:24:35 +02:00
Takashi Iwai
31820c5f23 alsamixer: Check the availability of mouse
Let's check the availiabiy via has_mouse().  Otherwise the program
aborts unexpectedly just focusing on my rxvt terminal :-(

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2021-10-20 17:24:30 +02:00
braph
2b9bfacca7 Added configuration information to manual page
Added sections FILES and CONFIGURATION.
Removed section BUGS, because the described terminal issues have been fixed.

Signed-off-by: braph <braph93@gmx.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-08-23 16:50:47 +02:00
Jaroslav Kysela
71003a2acb alsamixer: increase control device name buffer (sysdefault)
card_select.c:129:28: warning: ‘%d’ directive writing between 1 and 10 bytes into a region of size 5 [-Wformat-overflow=]
 129 |   sprintf(buf, "sysdefault:%d", number);

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-04-15 11:27:42 +02:00
Jaroslav Kysela
0a6b63a2c4 amixer/alsamixer: use sysdefault:<CARD> devices instead hw:<CARD>
The alsa-lib 1.2.5 introduced a new scheme for the default control
devices.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-04-06 20:25:58 +02:00
Ryan Burns
c867aa8a84 alsamixer: use background color instead of COLOR_BLACK
BugLink: https://github.com/alsa-project/alsa-utils/pull/77
Signed-off-by: Ryan Burns <rtburns@protonmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-03-05 21:25:02 +01:00
Jaroslav Kysela
19cc5daef4 alsamixer: fix shift in parse_words()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-01-11 10:46:49 +01:00
Jaroslav Kysela
e165d3413e alsamixer: remove unused variable y in display_scroll_indicators()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-01-11 10:41:42 +01:00
Jaroslav Kysela
b0c4ed248e alsamixer: remove dead fcn widget_handle_key() in widget.c
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-01-11 10:40:53 +01:00
積丹尼 Dan Jacobson
737b64e194 alsamixer: Fix the mixer views description in man page
Fix grammar mess.

From: Dan Jacobson <jidanni@jidanni.org>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-10-23 11:41:58 +02:00
Jaroslav Kysela
56f2064bb4 alsamixer: remove wrong free(buf) call in read_file()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-07-01 16:16:24 +02:00
braph
0657b2a559 alsamixer: small optimizations
textbox.c, mixer_display.c:
  - Replaced manual line drawing code `for (...) mvwaddch(...)` by the
    functions `mvwhline/mvwvline` provided by standard curses

card_select.c, proc_files.c:
  - Moved duplicate code in the create() functions to menu_widget_create()
    in menu_widget.c

card_select.c:
  - Removed redundant calls to sprintf()

device_name.c:
  - Combined multiple calls to form_opts_off()
  - Recognize ASCII DEL (127) as backspace

widget.c:
  - Uncommented code for setting a dummy key handler (all existing
    widgets do provide a key handling function)

Signed-off-by: Benjamin Abendroth <braph93@gmx.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-07-01 16:10:35 +02:00
braph
89e746368c alsamixer: added configuration file parser
Added configparser.c and curskey.c:
  - Lines starting with arbitrary whitespace + '#' are comments
  - Words in a command name don't have a fixed order (toggle_mute is the
      same as mute_toggle)

Moved read_file() from textbox.c to utils.c, so configparser.c can make
use of it.

Added command line options:
  -f/-F to specify/disable configuration file
  -m/-M to enable/disable mouse

Signed-off-by: Benjamin Abendroth <braph93@gmx.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-07-01 16:10:35 +02:00
braph
32dc22c2bf alsamixer: Use a struct for storing color attributes
This commit is a preparation for the configuration file parser.

The `int attr_*` variables have been moved into a separate struct.
Members of that struct are alphabetically ordered, so an attribute can
later be accessed by its name.

Added `int get_color_pair(short fg, short bg)` for returning or
creating a color pair number.

Added call to `use_default_colors()` for enabling access to the
terminal's default color (-1).

Signed-off-by: Benjamin Abendroth <braph93@gmx.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-07-01 16:10:35 +02:00
braph
ba1c5357a1 alsamixer: added mouse support
Mouse support has been added for mixer_widget.c, card_select.c and
proc_files.c.

In the mixer widget the mouse is handled as follows:
- After an element has been printed in mixer_display.c, a call to
  clickable_set() will store the coordinates of the drawn area plus the
  command enum that should be executed on click. An optional argument
  holds an index which points to the selected mixer control.
- on_mouse_click() searches for a matching rectangle, focuses the mixer
  control and returns the command enum.

In the menu widgets, the menu_driver() function handles mouse input.

Signed-off-by: Benjamin Abendroth <braph93@gmx.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-07-01 16:10:35 +02:00
braph
6e9e84ba60 alsamixer: Replaced hardcoded keys by binding arrays
This commit is a preparation for making keybindings configurable.

The hardcoded keys in the switch statements of mixer_widget.c,
textbox.c, proc_files.c and card_select.c have been replaced by
command enums. The command that shall be executed is looked up in
the arrays `mixer_bindings` and `textbox_bindings`.

The channel_mask enum has been made public, since LEFT and RIGHT are
used as command arguments in bindings.c.

Signed-off-by: Benjamin Abendroth <braph93@gmx.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-07-01 16:10:35 +02:00
braph
706a64c7a0 alsamixer: Fix window_size_changed()
Obtaining the new window size using TIOCGWINSZ and setting it using
resize_term(), so getmaxyx() reports the actual terminal size.

Signed-off-by: Benjamin Abendroth <braph93@gmx.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-07-01 16:10:35 +02:00
Jaroslav Kysela
4aadfe334f alsamixer: suppress _XOPEN_SOURCE compile warning
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-06-05 08:26:30 +02:00
Michael Forney
cb47f6dcf4 Avoid empty initializer list
To zero-initialize an object, use `{0}` instead.

Signed-off-by: Michael Forney <mforney@mforney.org>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2020-02-10 12:39:43 +01:00
Rosen Penev
192fb6220a alsamixer: Remove exp10 usage
exp10 is a GNU extension and not available everywhere (eg. uClibc-ng).

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-09-03 12:17:41 +02:00
Jaroslav Kysela
116488e5f2 alsamixer: define _GNU_SOURCE to get exp10
Fixes Master, Headphones and Speaker stuck at -8 percentage after
building with Clang 7.0.1 and getting warned about implicit declaration
of exp10, which is behind _GNU_SOURCE as a non-standard feature. Thanks
Takashi Iwai for the CFLAGS suggestion on the mailing list. GCC build is
not affected, so not adding a compiler check to the configure script.

uClibc-ng has got exp10 since 1.0.12, so the fallback macro is no longer
needed. However, alsa-utils relies on gettext so might need further
patches to actually work on uClibc systems.

Signed-off-by: makepost <makepost@firemail.cc>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-01-18 09:40:54 +01:00
Jaroslav Kysela
6e90e4fe8e alsamixer: fix gcc warnings
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-14 17:05:22 +02:00
Jaroslav Kysela
c788ce9b60 alsamixer: include missing mixer_controls.h 2014-06-25 10:54:40 +02:00
Jaroslav Kysela
0a6c9e80f7 Makefiles - use AM_CPPFLAGS instead INCLUDES
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-05-07 10:55:59 +02:00
Jaroslav Kysela
5622f3b09f alsamixer: Use isatty() to check the terminal (interactive) availability
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2013-03-22 13:27:26 +01:00
Clemens Ladisch
f282607273 alsamixer: fix handling of removed controls
When we get a notification that an element has been removed, we have to
recreate our internal control representation to avoid accessing freed
memory.  (And the checking for SND_CTL_EVENT_MASK_REMOVE should actually
be done correctly while we're at it.)

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2012-10-19 12:16:33 +02:00
Takashi Iwai
8824d0824d amixer, alsamixer: Add description of volume-mapping
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-03-19 16:05:06 +01:00
Jaroslav Kysela
4c09aaa5c1 alsamixer: Fix X-win related crash for PulseAudio plugin (bad linking)
A lot of reports that alsamixer crashes in X terminal when the PulseAudio
CTL plugin is activated were entered to the tracking systems.

I figured that there is a linking clash for the shutdown() function.
The shutdown() function in glibc is socket related, but the alsamixer code
redefines this function and appearently that under some linking
circumstances - which PA client invokes during the runtime dynamic linking
- the wrong function is called.

This patch, for safety, renames the shutdown() function from alsamixer
to app_shutdown(), but it might make sense to figure the real linking
culprit to avoid future surprises.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2011-11-02 17:27:47 +01:00
Takashi Iwai
3bea722b3b alsamixer: Fix 64bit issues
lrint() returns a long int.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2011-06-03 14:28:28 +02:00
Peter Korsgaard
a7bd33957e alsamixer: fix build on uClibc
exp10 is a glibc extension, which isn't supported on uClibc. Luckily,
exp10() is trivial to compute based on exp(), so add a wrapper for
the uClibc case.

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2011-03-14 10:31:34 +01:00
Raymond Yau
cd26f244e7 alsamixer: fix display of active/inactive controls
Signed-off-by: Raymond Yau <superquad.vortex2@gmail.com>
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2011-02-28 15:36:36 +01:00
Clemens Ladisch
34bb514b5f alsamixer: use cubic scale for volume bars
Instead of mapping the raw volume values linearly to the screen, use
a mapping where the bar height is proportional to the audible volume,
i.e., where the amplitude is the cube of the bar height.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-12-06 14:07:48 +01:00
Clemens Ladisch
70a01748d5 alsamixer: increase step size for big control value ranges
For controls with a big range, stepping through all values can become
tedious and make it impossible to adjust the volume easily.  Therefore,
ensure that all steps are big enough so that the full range has at most
one hundred steps.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-12-06 14:05:10 +01:00
Clemens Ladisch
e57f619c82 alsamixer: remove obsolete e-mail
Remove the no-longer-valid e-mail address also from the man page.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-12-06 14:04:39 +01:00
Clemens Ladisch
f2e9e9a5b0 alsamixer: remove obsolete e-mail
Tim Janik's e-mail address is no longer valid.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-11-10 10:14:53 +01:00
Clemens Ladisch
c9b86f49a8 alsamixer: handle out-of-range volume values
Ensure that control volume values are in their allowed range; otherwise,
the displayed values could be outside the range 0..100 and mess up the
layout.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-02-22 09:42:03 +01:00
Clemens Ladisch
5a016b583b alsamixer: fix division by zero
The attempt to divide by max-min fails if a control has only one valid
value.  In this case, adjust the maximum so that the computation can
succeed; the control will look like 0%.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-02-19 17:07:20 +01:00
Jaroslav Kysela
defee56c41 alsamixer: Improve set_escdelay() function availability detection
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-08-31 17:13:36 +02:00
Clemens Ladisch
077467a87e alsamixer: fix display of inactive volume bar
Fix the volume bar color selection logic so that the current attribute
is used for inactive controls.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2009-06-19 08:40:00 +02:00
Clemens Ladisch
7a3e59cbc5 alsamixer: rename attr to ch
Rename the attr variable because it contains not only the character's
attributes but also the character itself.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2009-06-19 08:39:24 +02:00
Takashi Iwai
29a7dbc552 alsamixer - Tricolorize volume bars
A little of bit of Italian taste was missing...

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-18 14:42:28 +02:00
Clemens Ladisch
05fcb0c79f alsamixer: update man page
Update man page for change in "CAPTURE" field.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2009-06-02 11:19:45 +02:00
Clemens Ladisch
730e8253ef alsamixer: fix text box clipping with multi-column characters
When a multi-column character would straddle the left window border of
a text box, we have to take the inserted space character into account
when we compute how many characters fit into the rest of the line.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2009-05-28 09:16:11 +02:00