== Opus audio codec ==

Opus is a codec for interactive speech and audio transmission over the Internet.

  Opus can handle a wide range of interactive audio applications, including
Voice over IP, videoconferencing, in-game  chat, and even remote live music
performances. It can scale from low bit-rate narrowband speech to very high
quality stereo music.

  Opus, when coupled with an appropriate container format, is also suitable
for non-realtime  stored-file applications such as music distribution, game
soundtracks, portable music players, jukeboxes, and other applications that
have historically used high latency formats such as MP3, AAC, or Vorbis.

                    Opus is specified by IETF RFC 6716:
                    http://tools.ietf.org/html/rfc6716

  The Opus format and this implementation of it are subject to the royalty-
free patent and copyright licenses specified in the file COPYING.

This package implements a shared library for encoding and decoding raw Opus
bitstreams. Raw Opus bitstreams should be used over RTP according to
 http://tools.ietf.org/html/draft-spittka-payload-rtp-opus

The package also includes a number of test  tools used for testing the
correct operation of the library. The bitstreams read/written by these
tools should not be used for Opus file distribution: They include
additional debugging data and cannot support seeking.

Opus stored in files should use the Ogg encapsulation for Opus which is
described at:
 http://wiki.xiph.org/OggOpus

An opus-tools package is available which provides encoding and decoding of
Ogg encapsulated Opus files and includes a number of useful features.

Opus-tools can be found at:
 https://git.xiph.org/?p=opus-tools.git
or on the main Opus website:
 http://opus-codec.org/

== Compiling libopus ==

To build from a distribution tarball, you only need to do the following:

% ./configure
% make

To build from the git repository, the following steps are necessary:

1) Clone the repository:

% git clone git://git.opus-codec.org/opus.git
% cd opus

2) Compiling the source

% ./autogen.sh
% ./configure
% make

Once you have compiled the codec, there will be a opus_demo executable
in the top directory.

Usage: opus_demo [-e] <application> <sampling rate (Hz)> <channels (1/2)>
         <bits per second> [options] <input> <output>
       opus_demo -d <sampling rate (Hz)> <channels (1/2)> [options]
         <input> <output>

mode: voip | audio | restricted-lowdelay
options:
  -e                : only runs the encoder (output the bit-stream)
  -d                : only runs the decoder (reads the bit-stream as input)
  -cbr              : enable constant bitrate; default: variable bitrate
  -cvbr             : enable constrained variable bitrate; default:
                      unconstrained
  -bandwidth <NB|MB|WB|SWB|FB>
                    : audio bandwidth (from narrowband to fullband);
                      default: sampling rate
  -framesize <2.5|5|10|20|40|60>
                    : frame size in ms; default: 20
  -max_payload <bytes>
                    : maximum payload size in bytes, default: 1024
  -complexity <comp>
                    : complexity, 0 (lowest) ... 10 (highest); default: 10
  -inbandfec        : enable SILK inband FEC
  -forcemono        : force mono encoding, even for stereo input
  -dtx              : enable SILK DTX
  -loss <perc>      : simulate packet loss, in percent (0-100); default: 0

input and output are little-endian signed 16-bit PCM files or opus
bitstreams with simple opus_demo proprietary framing.

== Testing ==

This package includes a collection of automated unit and system tests
which SHOULD be run after compiling the package especially the first
time it is run on a new platform.

To run the integrated tests:
% make check

There is also collection of standard test vectors which are not
included in this package for size reasons but can be obtained from:
http://opus-codec.org/testvectors/opus_testvectors.tar.gz

To run compare the code to these test vectors:

% curl -O http://opus-codec.org/testvectors/opus_testvectors.tar.gz
% tar -zxf opus_testvectors.tar.gz
% ./tests/run_vectors.sh ./ opus_testvectors 48000

== Portability notes ==

This implementation uses floating-point by default but can be compiled to
use only fixed-point arithmetic by setting --enable-fixed-point (if using
autoconf) or by defining the FIXED_POINT macro (if building manually).
The fixed point implementation has somewhat lower audio quality and is
slower on platforms with fast FPUs, it is normally only used in embedded
environments.

The implementation can be compiled with either a C89 or a C99 compiler.
While it does not rely on any _undefined behavior_ as defined by C89 or
C99, it relies on common _implementation-defined behavior_ for two's
complement architectures:

o Right shifts of negative values are consistent with two's
  complement arithmetic, so that a>>b is equivalent to
  floor(a/(2^b)),

o For conversion to a signed integer of N bits, the value is reduced
  modulo 2^N to be within range of the type,

o The result of integer division of a negative value is truncated
  towards zero, and

o The compiler provides a 64-bit integer type (a C99 requirement
  which is supported by most C89 compilers).
