GOM(1)
β¨ 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:
- for the system π₯οΈ
- 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 ofgom. 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 ofgom. 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-optionsbelow. πΈ
π 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 likegom -G<file>(orgom --get-settings=<file>) and NOT likegom -G <file>(orgom --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,0means left,1means right volume).-k,--lock <argument>β the description for this one is hanging out with-Kright 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 to0. 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-Hbelow π-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 (exceptq(quiet) orv(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 by1.-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--quietoption. 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 π
- gom as system startup
- gom as user startup
- gom in a running session
- gom in scripts
- 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 π
gomconfig(8)- Information about OSS can currently (1999 August 18) be found at
"http://www.opensound.com/".
π 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
-Gcdto an options file namedcd, 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
- debian trixie: gom 0.30.5-1
- ubuntu questing: gom 0.30.5-1
- ubuntu resolute: gom 0.30.5-1build1
- ubuntu stonking: gom 0.30.5-1build1
- Copyright (c) 1996-2009 Stephan SΓΌrken <absurd@olurdix.de> GPL
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms