blob: 4b13076fa055f920941362f7a8429fd1e5feb681 [file] [log] [blame]
Gregory Maxwell635b5f22012-08-21 14:24:38 -04001== Opus audio codec ==
2
Gregory Maxwell42815772012-04-25 13:30:21 -04003Opus is a codec for interactive speech and audio transmission over the Internet.
4
5 Opus can handle a wide range of interactive audio applications, including
6Voice over IP, videoconferencing, in-game chat, and even remote live music
7performances. It can scale from low bit-rate narrowband speech to very high
8quality stereo music.
9
Gregory Maxwell635b5f22012-08-21 14:24:38 -040010 Opus, when coupled with an appropriate container format, is also suitable
11for non-realtime stored-file applications such as music distribution, game
12soundtracks, portable music players, jukeboxes, and other applications that
13have historically used high latency formats such as MP3, AAC, or Vorbis.
Gregory Maxwell42815772012-04-25 13:30:21 -040014
Gregory Maxwell635b5f22012-08-21 14:24:38 -040015 Opus is specified by IETF RFC 6716:
Mark Harris699b6432015-10-23 13:19:48 -040016 https://tools.ietf.org/html/rfc6716
Gregory Maxwell635b5f22012-08-21 14:24:38 -040017
18 The Opus format and this implementation of it are subject to the royalty-
19free patent and copyright licenses specified in the file COPYING.
Gregory Maxwell42815772012-04-25 13:30:21 -040020
21This package implements a shared library for encoding and decoding raw Opus
22bitstreams. Raw Opus bitstreams should be used over RTP according to
Mark Harris699b6432015-10-23 13:19:48 -040023 https://tools.ietf.org/html/rfc7587
Gregory Maxwell42815772012-04-25 13:30:21 -040024
25The package also includes a number of test tools used for testing the
26correct operation of the library. The bitstreams read/written by these
27tools should not be used for Opus file distribution: They include
28additional debugging data and cannot support seeking.
29
30Opus stored in files should use the Ogg encapsulation for Opus which is
31described at:
Mark Harris1b584462018-05-06 20:31:30 -070032 https://tools.ietf.org/html/rfc7845
Gregory Maxwell42815772012-04-25 13:30:21 -040033
34An opus-tools package is available which provides encoding and decoding of
35Ogg encapsulated Opus files and includes a number of useful features.
Gregory Maxwell635b5f22012-08-21 14:24:38 -040036
Gregory Maxwell42815772012-04-25 13:30:21 -040037Opus-tools can be found at:
Mark Harris8aa77672020-05-09 15:06:58 -070038 https://gitlab.xiph.org/xiph/opus-tools.git
Gregory Maxwell635b5f22012-08-21 14:24:38 -040039or on the main Opus website:
Mark Harris699b6432015-10-23 13:19:48 -040040 https://opus-codec.org/
Gregory Maxwell42815772012-04-25 13:30:21 -040041
42== Compiling libopus ==
Gregory Maxwell635b5f22012-08-21 14:24:38 -040043
Jean-Marc Valin4468c752010-07-08 13:40:07 -040044To build from a distribution tarball, you only need to do the following:
Jean-Marc Valin8ba2a772010-07-05 14:55:02 -040045
Ralph Giles1eaa67c2017-05-10 10:46:22 -070046 % ./configure
47 % make
Jean-Marc Valin8ba2a772010-07-05 14:55:02 -040048
Kat Walsh3269dce2011-08-15 22:43:51 -040049To build from the git repository, the following steps are necessary:
Jean-Marc Valin4468c752010-07-08 13:40:07 -040050
Ralph Gilesbadd1e52017-05-10 10:37:46 -0700510) Set up a development environment:
52
53On an Ubuntu or Debian family Linux distribution:
54
Ralph Giles1eaa67c2017-05-10 10:46:22 -070055 % sudo apt-get install git autoconf automake libtool gcc make
Ralph Gilesbadd1e52017-05-10 10:37:46 -070056
57On a Fedora/Redhat based Linux:
58
Ralph Giles1eaa67c2017-05-10 10:46:22 -070059 % sudo dnf install git autoconf automake libtool gcc make
Ralph Gilesbadd1e52017-05-10 10:37:46 -070060
61Or for older Redhat/Centos Linux releases:
62
Ralph Giles1eaa67c2017-05-10 10:46:22 -070063 % sudo yum install git autoconf automake libtool gcc make
Ralph Gilesbadd1e52017-05-10 10:37:46 -070064
65On Apple macOS, install Xcode and brew.sh, then in the Terminal enter:
66
Ralph Giles1eaa67c2017-05-10 10:46:22 -070067 % brew install autoconf automake libtool
Ralph Gilesbadd1e52017-05-10 10:37:46 -070068
Jean-Marc Valinfe741252011-04-30 14:21:35 -0400691) Clone the repository:
Jean-Marc Valin4468c752010-07-08 13:40:07 -040070
Mark Harris8aa77672020-05-09 15:06:58 -070071 % git clone https://gitlab.xiph.org/xiph/opus.git
Ralph Giles1eaa67c2017-05-10 10:46:22 -070072 % cd opus
Jean-Marc Valin4468c752010-07-08 13:40:07 -040073
Gregory Maxwell635b5f22012-08-21 14:24:38 -0400742) Compiling the source
Jean-Marc Valin4468c752010-07-08 13:40:07 -040075
Ralph Giles1eaa67c2017-05-10 10:46:22 -070076 % ./autogen.sh
77 % ./configure
78 % make
Jean-Marc Valin4468c752010-07-08 13:40:07 -040079
Gregory Maxwell0a171852012-09-16 01:07:09 -0400803) Install the codec libraries (optional)
81
Ralph Giles1eaa67c2017-05-10 10:46:22 -070082 % sudo make install
Gregory Maxwell0a171852012-09-16 01:07:09 -040083
Gregory Maxwell635b5f22012-08-21 14:24:38 -040084Once you have compiled the codec, there will be a opus_demo executable
85in the top directory.
Jean-Marc Valin4468c752010-07-08 13:40:07 -040086
Gregory Maxwella5ff49e2011-10-26 19:56:00 -040087Usage: opus_demo [-e] <application> <sampling rate (Hz)> <channels (1/2)>
Gregory Maxwell3bcf3672011-09-09 17:11:43 -040088 <bits per second> [options] <input> <output>
Gregory Maxwella5ff49e2011-10-26 19:56:00 -040089 opus_demo -d <sampling rate (Hz)> <channels (1/2)> [options]
Gregory Maxwell3bcf3672011-09-09 17:11:43 -040090 <input> <output>
Jean-Marc Valin4468c752010-07-08 13:40:07 -040091
Gregory Maxwell3bcf3672011-09-09 17:11:43 -040092mode: voip | audio | restricted-lowdelay
Jean-Marc Valin08062002011-03-09 13:24:24 -050093options:
Gregory Maxwell635b5f22012-08-21 14:24:38 -040094 -e : only runs the encoder (output the bit-stream)
95 -d : only runs the decoder (reads the bit-stream as input)
96 -cbr : enable constant bitrate; default: variable bitrate
97 -cvbr : enable constrained variable bitrate; default:
98 unconstrained
99 -bandwidth <NB|MB|WB|SWB|FB>
100 : audio bandwidth (from narrowband to fullband);
101 default: sampling rate
102 -framesize <2.5|5|10|20|40|60>
103 : frame size in ms; default: 20
104 -max_payload <bytes>
105 : maximum payload size in bytes, default: 1024
106 -complexity <comp>
107 : complexity, 0 (lowest) ... 10 (highest); default: 10
108 -inbandfec : enable SILK inband FEC
109 -forcemono : force mono encoding, even for stereo input
110 -dtx : enable SILK DTX
111 -loss <perc> : simulate packet loss, in percent (0-100); default: 0
Jean-Marc Valin78a4b582010-07-08 15:51:49 -0400112
Gregory Maxwell635b5f22012-08-21 14:24:38 -0400113input and output are little-endian signed 16-bit PCM files or opus
114bitstreams with simple opus_demo proprietary framing.
Gregory Maxwell42815772012-04-25 13:30:21 -0400115
116== Testing ==
117
118This package includes a collection of automated unit and system tests
Gregory Maxwell635b5f22012-08-21 14:24:38 -0400119which SHOULD be run after compiling the package especially the first
Gregory Maxwell42815772012-04-25 13:30:21 -0400120time it is run on a new platform.
121
122To run the integrated tests:
Ralph Giles1eaa67c2017-05-10 10:46:22 -0700123
124 % make check
Gregory Maxwell42815772012-04-25 13:30:21 -0400125
126There is also collection of standard test vectors which are not
127included in this package for size reasons but can be obtained from:
Mark Harris1b584462018-05-06 20:31:30 -0700128https://opus-codec.org/docs/opus_testvectors-rfc8251.tar.gz
Gregory Maxwell42815772012-04-25 13:30:21 -0400129
130To run compare the code to these test vectors:
Gregory Maxwell635b5f22012-08-21 14:24:38 -0400131
Mark Harris1b584462018-05-06 20:31:30 -0700132 % curl -OL https://opus-codec.org/docs/opus_testvectors-rfc8251.tar.gz
133 % tar -zxf opus_testvectors-rfc8251.tar.gz
134 % ./tests/run_vectors.sh ./ opus_newvectors 48000
Gregory Maxwell42815772012-04-25 13:30:21 -0400135
136== Portability notes ==
137
138This implementation uses floating-point by default but can be compiled to
139use only fixed-point arithmetic by setting --enable-fixed-point (if using
140autoconf) or by defining the FIXED_POINT macro (if building manually).
141The fixed point implementation has somewhat lower audio quality and is
142slower on platforms with fast FPUs, it is normally only used in embedded
143environments.
144
145The implementation can be compiled with either a C89 or a C99 compiler.
146While it does not rely on any _undefined behavior_ as defined by C89 or
147C99, it relies on common _implementation-defined behavior_ for two's
148complement architectures:
149
150o Right shifts of negative values are consistent with two's
151 complement arithmetic, so that a>>b is equivalent to
152 floor(a/(2^b)),
153
154o For conversion to a signed integer of N bits, the value is reduced
155 modulo 2^N to be within range of the type,
156
157o The result of integer division of a negative value is truncated
158 towards zero, and
159
160o The compiler provides a 64-bit integer type (a C99 requirement
161 which is supported by most C89 compilers).