OggCELT: Difference between revisions
No edit summary |
(tuning from JM) |
||
Line 15: | Line 15: | ||
The [http://www.celt-codec.org/ CELT homepage] has all additional info as well as samples. | The [http://www.celt-codec.org/ CELT homepage] has all additional info as well as samples. | ||
==CELT Tuning== | |||
CELT currently provides three types of tuning knob. | |||
===Frequency-dependent bit allocation=== | |||
This is by far the most important thing to tune. There's a matrix in modes.c called "band_allocation". It has BITALLOC_SIZE lines and BARK_BANDS columns. Each line determines how many bits will be allocated to each critical band at a certain bit-rate. | |||
===Minimum width of bands=== | |||
At low frequencies, critical bands are too narrow to be useful, so CELT imposes a minimum width for the bands. The minimum width is (in MDCT frequency bins) is defined by MIN_BINS in modes.c. The trade off is that for small values, there will be more bands, so more energy data to encode, while for large values, there may not be enough resolution to encode the spectral shape properly. | |||
===Energy encoding resolution=== | |||
The last set of parameters is the resolution at which the energy is encoded. The trade off here is that any bit spent on encoding the energy more accurately isn't spent on the residual signal in 1). The resolution is defined in the "frac" array in quant_bands.c. The values themselves are the number of subdivisions to use in 6 dB, i.e. for band i, the resolution used is 6/frac[i] dB. So the higher the value, the more accurate the encoding and the more bits it takes. | |||
== Ogg mapping (experimental) == | == Ogg mapping (experimental) == |
Revision as of 14:33, 25 April 2008
CELT is an experimental audio codec for use in low-delay communication.
The name stands for "Code-Excited Lapped Transform". It applies some of the CELP principles, but does everything in the frequency domain, which removes some of the limitations of CELP.
The CELT codec is meant to close the gap between Vorbis and Speex for applications where both high quality audio and low delay are desired. It is a
Current features include:
- Ultra-low latency (typically from 3 to 9 ms)
- Full audio bandwidth (44.1 kHz and 48 kHz)
- Stereo support
- Packet loss concealment
- Constant bit-rates from 32 kbps to 128 kbps and above
- A fixed-point version of the encoder and decoder
The CELT homepage has all additional info as well as samples.
CELT Tuning
CELT currently provides three types of tuning knob.
Frequency-dependent bit allocation
This is by far the most important thing to tune. There's a matrix in modes.c called "band_allocation". It has BITALLOC_SIZE lines and BARK_BANDS columns. Each line determines how many bits will be allocated to each critical band at a certain bit-rate.
Minimum width of bands
At low frequencies, critical bands are too narrow to be useful, so CELT imposes a minimum width for the bands. The minimum width is (in MDCT frequency bins) is defined by MIN_BINS in modes.c. The trade off is that for small values, there will be more bands, so more energy data to encode, while for large values, there may not be enough resolution to encode the spectral shape properly.
Energy encoding resolution
The last set of parameters is the resolution at which the energy is encoded. The trade off here is that any bit spent on encoding the energy more accurately isn't spent on the residual signal in 1). The resolution is defined in the "frac" array in quant_bands.c. The values themselves are the number of subdivisions to use in 6 dB, i.e. for band i, the resolution used is 6/frac[i] dB. So the higher the value, the more accurate the encoding and the more bits it takes.
Ogg mapping (experimental)
Default field type: LITTLE ENDIAN unsigned integer
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1| Byte +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | codec_id: Identifier char[8]: 'CELT ' | 0-3 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | 4-7 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | codec_version: char[20] | 8-11 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | 12-15 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | 16-19 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | 20-23 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | 24-27 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | version_id | 28-31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | header_size | 32-35 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | mode | 36-39 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | sample_rate | 40-43 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | nb_channels | 44-47 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | bytes_per_packet | 48-51 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | extra_headers | 52-55 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+