mirror of
				https://github.com/musix-org/musix-oss
				synced 2025-11-04 03:39:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
== 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:
 | 
						|
                    https://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
 | 
						|
 https://tools.ietf.org/html/rfc7587
 | 
						|
 | 
						|
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:
 | 
						|
 https://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:
 | 
						|
 https://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 https://git.xiph.org/opus.git
 | 
						|
% cd opus
 | 
						|
 | 
						|
2) Compiling the source
 | 
						|
 | 
						|
% ./autogen.sh
 | 
						|
% ./configure
 | 
						|
% make
 | 
						|
 | 
						|
3) Install the codec libraries (optional)
 | 
						|
 | 
						|
% sudo make install
 | 
						|
 | 
						|
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:
 | 
						|
https://opus-codec.org/testvectors/opus_testvectors.tar.gz
 | 
						|
 | 
						|
To run compare the code to these test vectors:
 | 
						|
 | 
						|
% curl -O https://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).
 |