GOM(1)

πŸ“¦
version 0.30.5 Β· 3 versions
, in debian trixie, ubuntu questing, ubuntu resolute, ubuntu stonking

✨ GOM(1) ✨

okay bestie, welcome to GOM(1) β€” the contributed tool manual, and no I will not be normal about it πŸ’…


πŸŽ€ NAME πŸŽ€

gom β€” a generic audio mixer (supports: OSS and derivatives) 🎧✨


🌸 SYNOPSIS 🌸

gom {OPTION}

πŸ¦‹ VERSION πŸ¦‹

This manual page was distributed with gom 0.30.5 (31 May 2004). yes it's vintage, no we're not apologizing, it's giving elder icon πŸ‘‘


πŸ’– DESCRIPTION πŸ’–

gom is a command line mixer manipulation program. It also has a minimal but honestly fully functional internal interactive text based interface, because why would it not. πŸ’…

Right now there's also an internal X (xview) interface, but bestie, it's not well maintained, and it's gonna get removed eventually once a proper alternative shows up. So like... don't get attached. πŸ™ˆ

At the moment, gom only supports the Open Sound System (OSS) and its derivatives β€” that's OSS/Lite, OSS/Free (these two are, and I quote, obviously obsolete πŸ’€), and the new Linux Sounddriver, etc.

The way gom sees it, its whole job is to give you a complete and convenient interface for every kind of audio mixer manipulation. Its facilities include:

  • sound driver independence (decided at compile time) and sound card independence (decided at run time) ✨
  • arbitrary mixer selection
  • loading and saving of mixer settings
  • volume fading
  • verbosity-level driven output
  • "Un*x-like scripting support"
  • etc. 🫢

And apart from the exhaustive command line interface this manual is about, gom has a built-in interactive terminal interface that the author calls gomii β€” that's gom interactive interface β€” built on ncurses. It supports adjustable real time updating, and yes, "adjustable" includes disabling it entirely. The gomii is not explained in this manual page; go read its specific online help when you're using it. But honestly its handling should be obvious, and it "tries to resemble" the command line options, so. 😌

There's one more gomii for X using the xview toolkit. But gom has to be especially compiled to include that one, and it's intended to be replaced eventually by some frontend for X that uses the gom binary. So, again, don't get attached. 🌸

And remember: gom is spelled g-o-m, but pronounced backwards for compatibility reasons. Its real, actual and recursive title is gom, and GOM is nOt yet another Mixer β€” for reasons that are, and I'm quoting, beyond the scope of this manual. iconic behavior, no notes. πŸ‘‘


πŸ’œ CONFIGURING GOM πŸ’œ

Good news: there is no mandatory configuration for gom. It runs fine exactly as it is, no config, zero setup. But for senseful use without configuration, you always need to at least specify the mixer you want to use. For example:

gom --device=/dev/mixer2 --mute-all

However!! You can configure gom in two flavors:

  1. for the system πŸ–₯️
  2. for an individual user 🧍

And each user configuration is preferred in favor of the corresponding system configuration. In fact, the routine for loading any option file goes like this: 1st it tries the user file, then the system file, and else it fails. That's it, that's the whole algorithm. πŸ’…

To configure, you should use the script gomconfig(8) (or, most likely, gomconfig --force) that comes with the distribution. Using it as root will change the system configuration; normal users will change their own configuration. You may well skip the rest of this chapter if you do that. πŸ™Œ

All configuration files for gom are simply gatherings of command line options to gom β€” where some files are restricted to certain options. Please see --get-options below. πŸ‘€

Here are the configuration files. (Replace the ~/.gom with /etc/gom for the system configuration.)

  • ~/.gom/conf.default_mixer β€” Loaded on every startup of gom. Restricted to: -d. Provides implicit opening of a mixer device. 🎚️
  • ~/.gom/conf.initialize β€” Loaded with the option -O, --originate, --initialize. Unrestricted. Provides creation of an initialization routine, even for multiple mixers. ✨
  • ~/.gom/conf.gom β€” Loaded on every startup of gom. Restricted to -v, -q, -F, -U. Provides implicit creation of certain bevaviours. Discouraged. πŸ™ˆ
  • ~/.gom/<mixer-device>.<name> β€” These file are accessed simply by their <name> when <mixer-device> is opened. See --get-options below. 🌸

🌈 TERMINOLOGY, PHILOSOPHY 🌈

A mixer is a set of channels (e.g. vol, line, cd). Each channel has a set of volume channels (e.g. left, right), and optionally a recording source flag. πŸ“»

The evaluation of which channels are available β€” and, for an available channel, which volume channels and which flags are available on that specific channel β€” is being done at runtime. This is sound card dependent, and possibly sound driver dependent too. iykyk. πŸ’…

So bestie, there are two vibes of channels:

  • sound driver supported channels
  • specific sound card supported channels 🎧

And gom --info-all shows you all the sound driver supported channels, plus it indicates their specific availability. chef's kiss, genuinely. ✨

Up to the time of this writing, the only sound driver supported is OSS (Open Sound System) and its derivatives. This driver exists for a variety of platforms and in various flavours (especially, the new Sounddriver of Linux is a derivative of OSS). And a remark from the author, verbatim energy: Gom's point of view on how a "generic" mixer should look like may be strongly influenced by the OSS API; however, the author feels that this view might not (yet) be absolutely generic. so, you know, noted. πŸ™ˆ

At the time of this writing, OSS supports 17 channels, and a maximum of two volume channels per channel (i.e., only "mono" or "stereo"). that's the whole ceiling, periodt. πŸŽ€

Of course, since gom depends on the sound driver installed on the system, its proper installation (which is naturally not covered here) is mandatory for gom β€” as it is for any other sound-using program. no driver, no vibes. 😭


πŸ’– still with me? good, because there's more where this came from β€” this was only part 1. 🫢

✨ OPTIONS ✨

Options can show up in literally any order and any amount, bestie β€” gom just computes them in sequence, left to right, like a lil conga line. πŸ’ƒ Default values (if there even are any) get shown in []. And for boolean arguments? "1" means on, "0" means off. That's it, that's the whole vibe check.

🚨 okay this part is IMPORTANT so listen up β€” for options with optional arguments, you gotta glue them together like gom -G<file> (or gom --get-settings=<file>) and NOT like gom -G <file> (or gom --get-settings <file>). If you put a space in there they just get straight-up ignored (or, at least with my implementation of getopt ;). no cap. 😭

πŸŽ›οΈ Configuring options πŸŽ›οΈ

  • -d, --device, --mixer <argument> β€” [no mixer] Sets the mixer special device file to <argument>. If the new mixer is valid, the current mixer --if any-- gets closed and the new mixer gets opened. Current channel, current channel volume, the channel lock setting and the snapshot all get reset to defaults. fresh start energy ✨
  • -c, --channel <argument> β€” [first available channel] Sets the current mixer channel to <argument>. You can hand it over as a number or as a name, dealer's choice.
  • -C, --volume-channel <argument> β€” [first available volume channel on current channel] Sets the volume channel on the current mixer channel to <argument> (so like, for stereo, 0 means left, 1 means right volume).
  • -k, --lock <argument> β€” the description for this one is hanging out with -K right below, they're a matching set πŸ’…
  • -K, --lock-all <argument> β€” [1] Locks or unlocks the current channel(s) or all of them. Locking = syncing the stereo volumes (balance) for all the volume settings gom might do. Lowkey crucial: this does not change any volume settings by itself (i.e., it doesn't auto-balance). So yeah, a locked channel might have unbalanced volumes. it's giving "locked but not leveled" πŸ™ˆ
  • -F, --fade-interval <argument> β€” [5] Sets the fade interval to <argument> seconds. Peep --fade-to-loudness.
  • -U, --refresh-interval <argument> β€” [30] Sets the gomii refresh (update) interval to <argument> seconds (zero disables it entirely).
  • -W, --write-config, --save-config β€” this option is obsolete since version 0.29.10. rip, it's retired. πŸͺ¦

πŸ”Š Setting mixer options πŸ”Š

  • -l, --loudness, --volume <argument> β€” Sets the current volume channel on the current channel to <argument>. If your argument starts with a "+" or "-", that value gets added or subtracted from the current value. The allowed range is from zero up to a soundcard driver dependent maximum. πŸ“ˆ
  • -r, --record <argument> β€” Sets recording for the current channel on or off.
  • -R, --record-single β€” Sets recording for the current channel on and disables all other recording sources. one at a time, main character only πŸ‘‘
  • -L, --fade-to-loudness, --fade-to-volume <argument> β€” Like --loudness, but it fades to the new volume within a time given with --fade-interval. smooth transitions, we love to see it 🌸
  • -m, --mute β€” desc is with -M, scroll a lil ⬇️
  • -M, --mute-all β€” Mutes the current channel or all channels. Muting means setting all channel volumes to 0. silence is golden fr fr 🀫

πŸ“ Mixer settings options πŸ“

  • -G, --get-options, --load-options, --get-settings, --load-setting β€” Gets options from/to file <argument>. If no argument is given, the default file (named "default") is used. Non-absolute given filenames get expanded to "<mixer-device>.<argument>", and then first searched for in the user config and -- if this fails -- in the system configuration directory. Any free-form files with gom one-character command line options in any lines starting with a dash (in column zero) will make sense to this option.
  • -S, --save-settings [<argument>] β€” Saves mixer settings to a free-form option file. For the file name, same rules as for loading option files apply, except that only the user configuration dir gets used. Files with thusly expanded filenames get silently overwritten; other files never. When saving, care is being taken that the "last recording source error" can't occur when loading these options (and maybe there are other reasonable side effects apart from the pure mixer settings (e.g. channel locking, current channel)). The bottom line on these load/save options: you can easily save new and load predefined mixer settings from anywhere. it's giving portable slay πŸ’Ύβœ¨
  • -z, --snapshot-settings β€” desc lives with -Z, keep scrolling 🫢
  • -Z, --unsnapshot-settings, --restore-settings β€” [mixer settings after opening a new mixer] Snaps or unsnapshots to/from current mixer settings.
  • -O, --originate, --initialize β€” Loads the options file "initialize"; all options are allowed in this file. This is meant to initialize mixers. For example:
"-d/dev/mixer0 -G -d/dev/mixer1 -G"

This would load the default settings file for both the mixer0 and the mixer1 device. double trouble, but make it organized πŸŽ€


πŸ” Informational options πŸ”

  • -t, --info β€” Displays current channel information.
  • -T, --info-all β€” Displays overall information.
  • -V, --version β€” Displays version information.
  • -w, --copyright, --copyleft, --license, --warranty β€” Displays copyright/license/warranty information. the receipts, basically 🧾
  • -h, --help β€” desc is with -H below πŸ‘‡
  • -H, --help-verbose β€” Displays this help normally or verbose. Both helps are still dependent on the current verbosity level (i.e., higher verbosity levels might still show more; "gom -v0 -H" and "gom -h" produce the same output). For the normal verbosity level, these are reasonable macros. very meta of them πŸ’€

🌟 Special options 🌟

  • -e, --execute <argument> β€” Executes the shell command <argument>. go do your thing, girlie πŸš€

πŸ–₯️ Command line only options πŸ–₯️

  • -Y, --ignore-config β€” Skips all automatically loaded configuration files. This must be given before any other option (except q (quiet) or v (verbose)). order matters, bestie ⚠️
  • -i, --interface, --gomii <argument> β€” Explicitly starts up a build-in gomii (<argument>=t: terminal gomii, <argument>=x: X gomii).
  • -v, --verbose [<argument>] β€” [NORMAL] Sets output verbosity to <argument> (a number β€” the higher, the more verbose). If no argument is given, the level gets increased by 1.
  • -q, --quiet, --silent β€” Sets output verbosity to QUIET (only error / error help messages). shhh 🀐
  • -p, --pure, --print <argument> β€” Pure-prints the current channels value given by <argument> to stdout (<argument>=l|r, according to one character options). Useful for getting values "into" scripts together with the --quiet option. scripting girlies rise up πŸ“œ
  • -x, --extract-settings β€” Extracts all mixer settings as a gom option line to stdout (e.g. for "setting=gom --quiet --extract-settings" and "gom --quiet $settings" later in a bash script).
  • -I, --read-stdin β€” Reads options from stdin (until EOF).

🌿 ENVIRONMENT 🌿

HOME β€” used as prefix for the configuration directory .gom/ for a non-root user. 🏠


πŸ“‚ FILES πŸ“‚

  • /etc/gom/ β€” system configuration directory (user root).
  • $HOME/.gom/ β€” user configuration dir (all non-root users).

Files inside the configuration directory:

  • conf.default_mixer β€” option file for default mixer (loaded on startup).
  • conf.gom β€” option file (loaded on startup).
  • conf.initialize β€” option file for initialization (loaded via --initialize).
  • <mixer-device>.default β€” default options file for <mixer-device> (loaded with --get-options).
  • <mixer-device>.<name> β€” mixer settings that can be easily accessed just by <name> with --get-options=<name> when <mixer-device> is open. so convenient, obsessed πŸ’–

🩺 DIAGNOSTICS 🩺

Exit status is 0 if no errors were detected while running gom; it's greater than 0 if one or more errors were detected. This should be interpreted as a warning, not necessarily as a failure. she's just being cautious, ok 😌

(The amount of detected errors will be printed out if the verbosity level is VERBOSE or higher; the warning exit status is currently always 2, but this may change).


πŸ§ͺ EXAMPLES πŸ§ͺ

(This section is incomplete and most likely confusing ;). iconic honestly πŸ’…

  1. gom as system startup
  2. gom as user startup
  3. gom in a running session
  4. gom in scripts
  5. Some more detailed examples

gom --interface=t, gom -it

Interactively manipulate mixer settings with the terminal gomii. 🎹

gom --get-settings, gom -G

(e.g. when you log in as user). Loads user's default options file.

gom --get-settings=cd, gom -Gcd

Loads options file "cd" (most likely a setting for playing cds). πŸ’Ώ

gom -d/dev/mixer0 -M -d/dev/mixer1 -l100

First, mute mixer 0, then set the volume of the first channel on mixer 1 to 100.

gom -M -c vol -l 90 -c pcm -l 90 -e bplay super.voc -Z

Plays the sample super.voc on channel 4=pcm with all other channels muted, restoring original mixer settings afterwards.

gom -ix -e <any_sound_player> -Z

Plays any sound, interactively setting the mixer before with the X gomii and restoring settings afterwards.


πŸ‘‘ AUTHOR πŸ‘‘

Copyright (c) 1996-2009 Stephan SΓΌrken <absurd@olurdix.de> GPL.

The X gomii of the gom package is also Copyright (c) Hannu Savolainen 1993 (as it is originally based on "xvmixer" by Hannu Savolainen).

The gom package is licensed under the GPL (GNU General Public License). The files "README" and "COPYING" in the original distribution contain the exact terms. read the receipts, bestie πŸ“œ


πŸ”— SEE ALSO πŸ”—

πŸ’€ KNOWN BUGS πŸ’€

Okay bestie, sit down, we gotta talk about the quirks. None of these are gonna unalive your computer, but you deserve to know. 🫢

  • Gom does not detect recursion in option files β€” like, for example, if you add a -Gcd to an options file named cd, gom will just... keep going. No vibe check, no infinite-loop alarm. It does not catch that. πŸ’€
  • There must always be at least one recording source, so when you're writing option files for gom "by hand", do it in this order: first put all to-be-active recording sources on, then all to-be-inactive recording sources off. Otherwise one recording source might not become inactive in unfortunate circumstances. Rude of it, honestly. The mixer settings gom writes automatically for you? Yeah, those are saved in this exact manner already. ✨
  • The mixer settings files may be inconsistent between different sound drivers (i.e., if the channel numbering is different). It's giving chaos across drivers. πŸŒ€
  • Loading settings from an options file that was saved from a different mixer can lead to two flavours of mess: errors (if some option is not available on the current mixer), or silently not-setting newly available options of the current mixer. Lowkey the worst kind of bug because it doesn't even tell you. πŸ™ˆ Saving mixer settings with the mixer name as prefix since 0.29.99 avoids this β€” at least for not explicitly given mixer settings file names. Slay, version bump. πŸ‘‘
  • The "text blocking output" cuts words (true, too, for the OPTIONS section of this manual page). Yeah, it really did that to me too. The irony is not lost. 😭

πŸ¦‹ X gomii bugs πŸ¦‹

The X gomii has some "bugs" due to xview and/or the lack of documentation available for the author. (All the rest of this section, bestie β€” buckle up.)

  • The X gomii creates its display objects with xview, but doesn't check for allocation errors. I guess xview somehow handles this ;). Main character energy: just don't look at the problem and hope it works out. πŸ’…
  • The X gomii's scroll window displays in a non-fixed font. It's giving ✨font chaos✨.
  • Some placements in the X gomii are still static; it could imagine that the display might look a little bit screwed up if you use a different configuration than mine (e.g. a different font). So like, if your setup isn't the author's setup, the layout may simply not eat. πŸ“
  • Xview, in general, "seems to be a little bit unstable". And when I say that, I mean: the author itself locked all his major input devices (i.e., mouse & keyboard β€” you should be so clever to have some other means to access your computer when programming xview ;) ) several times by using xview applications under X (not necessarily the X gomii) for whatever unknown reasons (and without being able to reproduce the bug properly). (()())
Trapped your own mouse and keyboard. While writing the GUI toolkit. Multiple times. That's not a bug, that's a lifestyle. πŸ˜­πŸ‘‘

🌸 KNOWINGLY NO BUGS 🌸

If starting gom results in loading and initializing the kernel sound driver (e.g. if the sound driver gets kerneld-autoloaded under Linux), the sound card's settings are set to the driver's default by the driver itself.

gom has nothing to do with these defaults and doesn't change any settings β€” any program using the sound driver in that situation would have the same effect. So if you were about to blame gom: nope, not it, bestie. Not gom's fault, not gom's problem, periodt. πŸŽ€


And that's the whole page, babes! πŸ’– This one comes to you from a 3rd party, dated 31 May 2004, and it's page GOM(1) of your friendly neighbourhood manual set. Go forth, mix your audio, and remember: always turn your to-be-active recording sources on before your to-be-inactive ones off. Iykyk. πŸ«Άβœ¨πŸ’…

πŸ“¦ where this page comes from