---
name: "ogg123"
section: "1"
platform: "linux"
package: "vorbis-tools"
version: "1.4.3-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/ogg123"
---

# ogg123(1)

plays Ogg, and FLAC files

## NAME

ogg123 - plays Ogg, and FLAC files

## SYNOPSIS

**ogg123** \[ **-vqrzZVh** \] \[ **-k** *seconds* \] \[ **-x** *nth* \] \[ **-y** *ntimes* \] \[ **-b** *buffer\_size* \] \[ **-d** *driver* \[ **-o** *option:value* \]  \[ **-f** *filename* \] \] *file* **...** \| *directory* **...** \| *URL* **...**

## DESCRIPTION

**ogg123** reads Ogg/Vorbis, Ogg/Speex, Ogg/Opus, Ogg/FLAC, and native FLAC audio files and decodes them to the devices specified on the command line.  By default, **ogg123** writes to the standard sound device, but output can be sent to any number of devices.  Files can be read from the file system, or URLs can be streamed via HTTP.  If a directory is given, all of the files in it or its subdirectories will be played.

## OPTIONS

- \--audio-buffer n

  Use an output audio buffer of approximately 'n' kilobytes.

- \-@ playlist, --list playlist

  Play all of the files named in the file 'playlist'.  The playlist should have one filename, directory name, or URL per line.  Blank lines are permitted. Directories will be treated in the same way as on the command line.

- \-b n, --buffer n

  Use an input buffer of approximately 'n' kilobytes.  HTTP-only option.

- \-p n, --prebuffer n

  Prebuffer 'n' percent of the input buffer.  Playback won't begin until this prebuffer is complete.  HTTP-only option.

- \-d device, --device device

  Specify output device.  See **DEVICES** section for a list of devices.  Any number of devices may be specified.

- \-f filename, --file filename

  Specify output file for a file device previously specified with --device.  The filename "-" writes to standard out.  If the file already exists, **ogg123** will overwrite it.

- \-h, --help

  Show command help.

- \-k n, --skip n

  Skip the first 'n' seconds.  'n' may also be in minutes:seconds or  hours:minutes:seconds form.

- \-K n, --end n

  Stops playing 'n' seconds from the start of the stream.  'n' may also have the same format as used in the *--skip* option.

- \-o option\[:value\], --device-option option\[:value\]

  Sets the option *option* to  *value* for the preceding device.  See **DEVICES** for a list of valid options for each device.

- \-q, --quiet

  Quiet mode.  No messages are displayed.

- \-V, --version

  Display version information.

- \-v, --verbose

  Increase verbosity.

- \-x n, --nth

  Play every 'n'th decoded block.  Has the effect of playing audio at 'n' times faster than normal speed.

- \-y n, --ntimes

  Repeat every played block 'n' times.  Has the effect of playing audio 'n' times slower than normal speed.  May be with -x for interesting fractional speeds.

- \-r, --repeat

  Repeat playlist indefinitely.

- \-z, --shuffle

  Play files in pseudo-random order.

- \-Z, --random

  Play files in pseudo-random order forever.

## DEVICES

**ogg123** supports a variety of audio output devices through libao.  Only those devices supported by the target platform will be available.  The **-f** option may only be used with devices that write to files.

Options supported by all devices:

- debug

  Turn on debugging output \[if any\] for a chosen driver.

- matrix:value

  Force a specific output channel ordering for a given device.   *value* is a comma  separated list of AO style channel names, eg, L,R,C,LFE,BL,BR,SL,SR.

- verbose

  Turn on verbose output for a chosen driver. the -v option will also set the  driver verbose option.

- quiet

  Force chosen driver to be completely silent.  Even errors will not produce any  output. -q will also set the driver quiet option.

- aixs

  **AIX live output driver. Options:**

  - dev:value

    Set AIX output device to *value*

- alsa

  **Advanced Linux Sound Architecture live output driver. Options:**

  - buffer\_time:value

    Override the default hardware buffer size (in milliseconds).

  - dev:value

    ALSA device label to use. Examples include "hw:0" for the first soundcard  and "hw:1" for the second.  The alsa driver normally chooses one of  "surround71",  "surround51",  "surround40" or  "default"  automatically depending on number of output channels.  For more information, see http://alsa.opensrc.org/ALSA+device+labels

  - period\_time:value

    Override the default hardware period size (in microseconds).

  - period\_time:value

    Override the default hardware period size (in microseconds).

  - use\_mmap:value

    *value* is set to "yes" or "no" to override the compiled-in default to use or not use  mmap device access.  In the past, some buggy alsa drivers have behaved better when not using mmap access at the penalty of slightly higher CPU usage.

- arts

  **aRts Sound Daemon live output driver. Options:**

  - multi:value

    *value* is set to "yes" or "no" to allow opening the aRts playback device for multiply concurrent playback.  Although the driver works properly in multi mode, it is  known to occasionally crash the aRts server itself.  Default behavior is "no".

- au

  **Sun audio file output.  Writes the audio samples in AU format.  The AU** format supports writing to unseekable files like standard out.  In such circumstances, the AU header will specify the sample format, but not the length of the recording.

- esd

  **Enlightened Sound Daemon live output. Options:**

  - host:value

    *value* specifies the hostname where esd is running.  This can include a port number after a colon, as in "whizbang.com:555".  (Default = localhost)

  - client\_name:value

    Sets the client name for the new audio stream. Defaults to "libao client".

- irix

  **IRIX live output audio driver.**

- macosx

  **MacOS X 'AUHAL' live output driver.  This driver supports MacOS X** 10.5 and later (10.4 and earlier uses an earlier, incompatible interface). Options:

  - buffer\_time:value

    Set the hardware buffer size to the equivalent of *value* milliseconds.

- nas

  **Network Audio Server live output driver. Options:**

  - buf\_size:value

    Set size of audio buffer on server in bytes.

  - host:value

    Set location of NAS server; See nas(1) for format.

- null

  **Null driver.  All audio data is discarded.  (Note: Audio data is not** written to  **/dev/null** !)  You could use this driver to test raw decoding speed without output overhead.

- oss

  **Open Sound System driver for Linux and FreeBSD, versions 2, 3 and 4. Options:**

  - dsp:value

    DSP device for soundcard.  Defaults to   **/dev/dsp.**

- pulse

  **Pulseaudio live audio sound driver. Options:**

  - server:value

    Specifies location of remote or alternate Pulseaudio server.

  - sink:value

    Specifies a non-default Pulseaudio sink for audio stream.

- raw

  **Raw file output.  Writes raw audio samples to a file. Options:**

  - byteorder:value

    Chooses big endian ("big"), little endian ("little"), or native ("native") byte order.   Default is native order.

- roar

  **RoarAudio Daemon live output driver. Options:**

  - server:value, host:value

    Specifies location of remote RoarAudio server to use.

  - id:value, dev:value

    Specifies a non-default mixer within a RoarAudio server for audio stream.

  - role:value

    Sets the role setting for the audio stream.

  - client\_name:value

    Sets the client name for the new audio stream. Defaults to "libao client".

- sndio

  **OpenBSD SNDIO live output driver. Options:**

  - dev:value

    Specifies audio device to use for playback.

- sun

  **Sun Audio live output driver for NetBSD, OpenBSD, and Solaris. Options:**

  - dev:value

    Audio device for soundcard.  Defaults to   **/dev/audio.**

- wav

  **WAV file output.  Writes the sound data to disk in uncompressed form.** If multiple files are played, all of them will be concatenated into the same WAV file.  WAV files cannot be written to unseekable files, such as standard out.  Use the AU format instead.

- wmm

  **Windows MultiMedia live output driver for Win98 and later. Options:**

  - dev:value

    Selects audio device to use for playback by device name.

  - id:value

    Selects audio device to use for playback by device id (card number).

## EXAMPLES

The **ogg123** command line is fairly flexible, perhaps confusingly so.  Here are some sample command lines and an explanation of what they do.

Play on the default soundcard:

**ogg123 test.ogg**

Play all of the files in the directory ~/music and its subdirectories.

**ogg123 ~/music**

Play a file using the OSS driver:

**ogg123 -d oss test.ogg**

Pass the "dsp" option to the OSS driver:

**ogg123 -d oss -o dsp:/dev/mydsp**

Use the ESD driver

**ogg123 -d esd test.ogg**

Use the WAV driver with the output file, "test.wav":

**ogg123 -d wav -f test.wav test.ogg**

Listen to a file while you write it to a WAV file:

**ogg123 -d oss -d wav -f test.wav test.ogg**

Note that options apply to the device declared to the left:

**ogg123 -d oss -o dsp:/dev/mydsp -d raw -f test2.raw -o byteorder:big test.ogg**

Stress test your harddrive:

**ogg123 -d oss -d wav -f 1.wav -d wav -f 2.wav -d wav -f 3.wav -d wav -f 4.wav -d wav -f 5.wav test.ogg**

Create an echo effect with esd and a slow computer:

**ogg123 -d esd -d esd test.ogg**

## INTERRUPT

You can abort **ogg123** at any time by pressing Ctrl-C.  If you are playing multiple files, this will stop the current file and begin playing the next one.  If you want to abort playing immediately instead of skipping to the next file, press Ctrl-C within the first second of the playback of a new file.

Note that the result of pressing Ctrl-C might not be audible immediately, due to audio data buffering in the audio device. This delay is system dependent, but it is usually not more than one or two seconds.

## FILES

- /etc/libao.conf

  Can be used to set the default output device for all libao programs.

- \~/.libao

  Per-user config file to override the system wide output device settings.

## BUGS

Piped WAV files may cause strange behavior in other programs.  This is because WAV files store the data length in the header.  However, the output driver does not know the length when it writes the header, and there is no value that means "length unknown".  Use the raw or au output driver if you need to use ogg123 in a pipe.

## AUTHORS

- Program Authors:

  Kenneth Arnold \<kcarnold-xiph@arnoldnet.net\>\
   Stan Seibert \<volsung@xiph.org\>\

- Manpage Author:

  Stan Seibert \<volsung@xiph.org\>

## SEE ALSO

[**libao.conf**(5)](/libao.conf/5.md), [**oggenc**(1)](/oggenc/1.md), [**vorbiscomment**(1)](/vorbiscomment/1.md), [**ogginfo**(1)](/ogginfo/1.md)
