Jump to content

CELT: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
BattyBot (talk | contribs)
m fixed CS1 errors: dates & General fixes using AWB (9803)
m kBit -> kbit (via WP:JWB)
 
(46 intermediate revisions by 39 users not shown)
Line 1: Line 1:
{{short description|Audio codec and compression format}}
{{About|the audio codec|the proposed telescope|California Extremely Large Telescope|the online database of Irish texts|Corpus of Electronic Texts}}
{{About|the audio codec|the proposed telescope|California Extremely Large Telescope|the online database of Irish texts|Corpus of Electronic Texts|other uses|Celt (disambiguation)}}

{{Infobox file format
{{Infobox file format
| name = CELT
| name = CELT
Line 15: Line 15:
| standard = [http://celt-codec.org/docs/ Documentation]
| standard = [http://celt-codec.org/docs/ Documentation]
}}
}}

{{Infobox software
{{Infobox software
| name = libcelt
| name = libcelt
Line 22: Line 21:
| caption =
| caption =
| developer = [[Xiph.org Foundation]], Jean-Marc Valin
| developer = [[Xiph.org Foundation]], Jean-Marc Valin
| latest preview version = 0.11.1
| latest_release_version =
| latest preview date = {{Release date and age|2011|02|15}}
| latest_release_date =
| latest_preview_version = 0.11.1
| latest_preview_date = {{Release date and age|2011|02|15}}
| operating_system = [[Cross-platform]]
| operating_system_desc =
| size =
| size =
| genre = [[Audio codec]], [[reference implementation (computing)|reference implementation]]
| genre = [[Audio codec]], [[reference implementation (computing)|reference implementation]]
| license = [[BSD licenses|2-clause BSD]] ([[free software]])
| license = [[BSD licenses|2-clause BSD]]
| website = [http://celt-codec.org/ celt-codec.org]
| website = {{URL|opus-codec.org}}
}}
}}


Line 39: Line 34:


The original stand-alone CELT has been merged into [[Opus (audio format)|Opus]].
The original stand-alone CELT has been merged into [[Opus (audio format)|Opus]].
Therefore CELT as stand-alone format is now abandoned and obsolete. Development is going on only for its hybridised form as a layer of Opus, integrated with SILK.
Therefore, CELT as stand-alone format is now abandoned and obsolete. Development is going on only for its hybridised form as a layer of Opus, integrated with [[SILK]].
This article covers the historic, stand-alone format, for the integrated form and its evolution since the integration into Opus see the article on Opus.
This article covers the historic, stand-alone format; for the integrated form and its evolution since the integration into Opus see the article on Opus.


== Properties ==
== Properties ==
CELT's central feature is low algorithmic delay. It allows for latencies of typically 3 to 9 ms but is configurable to below 2 ms at the price of more bitrate to reach a similar audio quality.<ref name="presentation"/> CELT supports mono and stereo audio and is applicable to both speech and music. It can use a [[sampling rate]] from 32&nbsp;kHz to 48&nbsp;kHz and above and an adaptive bitrate from 24 kbit/s to 128 kbit/s per channel and above.<ref name="presentation" />
CELT's central feature is low algorithmic delay. It allows for latencies of typically 3 to 9 ms but is configurable to below 2 ms at the price of more bitrate to reach a similar audio quality.<ref name="presentation"/> CELT supports mono and stereo audio and is applicable to both speech and music. It can use a [[sampling rate]] from 32&nbsp;kHz to 48&nbsp;kHz and above and an adaptive bitrate from 24&nbsp;kbit/s to 128&nbsp;kbit/s per channel and above.<ref name="presentation" />


There are no known intellectual property issues pertaining to the CELT algorithm, and its reference implementation is published under a permissive open-source license (the [[BSD licenses|2-clause BSD]]).<ref name="celt-web" /><ref name="ietf-codec" />
There are no known [[intellectual property]] issues pertaining to the CELT algorithm, and its reference implementation is published under a permissive open-source license (the [[BSD licenses|2-clause BSD]]).<ref name="celt-web" /><ref name="ietf-codec" />


Like [[Vorbis]], CELT is a fullband (entire human [[hearing range]]) general-purpose codec, i.e. not specialized for special types of audio signals and therefore different from its sibling project [[Speex]]. The format enables for [[transparency (data compression)|transparent]] results at high bitrates, as well as very decent quality at lower bitrates. All in all, the compression capabilities are said to be significantly superior to those of [[MP3]], and as another useful feature for realtime applications like telephony, CELT's audio quality at lower bitrates are even on par with [[High-Efficiency Advanced Audio Coding|HE-AAC]]<nowiki />v1, thanks to the band folding.<ref name="AutoV5-2"/><ref name="monty"/> In comparative double-blind listening tests it proved to be noticeably superior to HE-AACv1 at ~64&nbsp;kBit/s.<ref name="AutoV5-3"/>
Like [[Vorbis]], CELT is a fullband (entire human [[hearing range]]) general-purpose codec, i.e. not specialized for special types of audio signals and therefore different from its sibling project [[Speex]]. The format enables for [[transparency (data compression)|transparent]] results at high bitrates, as well as very decent quality at lower bitrates. All in all, the compression capabilities are said to be significantly superior to those of [[MP3]], and as another useful feature for realtime applications like telephony, CELT's audio quality at lower bitrates are even on par with [[High-Efficiency Advanced Audio Coding|HE-AAC]]<nowiki />v1, thanks to the band folding.<ref name="AutoV5-2"/><ref name="monty"/> In comparative double-blind listening tests it proved to be noticeably superior to HE-AACv1 at ~64&nbsp;kbit/s.<ref name="AutoV5-3"/>


It has a comparably low computational complexity that resembles that of the low-delay variant of [[Advanced Audio Coding|AAC]] (AAC-LD) and stays significantly below the complexity of Vorbis.<ref name="TASL"/>
It has a comparably low computational complexity that resembles that of the low-delay variant of [[Advanced Audio Coding|AAC]] (AAC-LD) and stays significantly below the complexity of Vorbis.<ref name="TASL"/>
Line 63: Line 58:
The coefficients are grouped to resemble the [[critical band]]s of the human auditory system. The entire amount of energy of each group is analysed and the values [[Quantization (signal processing)|quantised]] for [[data reduction]] and compressed through prediction by only transmitting the difference to the predicted values ([[delta encoding]]).
The coefficients are grouped to resemble the [[critical band]]s of the human auditory system. The entire amount of energy of each group is analysed and the values [[Quantization (signal processing)|quantised]] for [[data reduction]] and compressed through prediction by only transmitting the difference to the predicted values ([[delta encoding]]).


The (unquantised) band energy values are removed from the raw DCT coefficients (normalisation). The coefficients of the resulting residual signal (so-called “band shape”) are coded by [[Pyramid Vector Quantisation]] (PVQ, a spherical [[vector quantisation]]).<ref name="AutoV5-4"/> This encoding leads to code words of fixed (predictable) length, which in turn enables for robustness against bit errors and leaves no need for [[entropy encoding]].<ref name="monty" /> Finally, all output of the encoder are coded to one bitstream by a [[range encoding|range encoder]].<ref name="AutoV5-5"/> In connection with the PVQ, CELT uses a technique known as band folding, which is said to deliver a similar effect to the [[spectral band replication]] (SBR) by reusing coefficients of lower bands for higher ones, while at the same time it has much less implications on the algorithmic delay and computational complexity than the SBR. This works against “birdie” artifacts by preserving more richness in the appropriate frequency bands.
The (unquantised) band energy values are removed from the raw DCT coefficients (normalisation). The coefficients of the resulting residual signal (so-called “band shape”) are coded by [[Pyramid vector quantization|Pyramid Vector Quantisation]] (PVQ, a spherical [[vector quantisation]]).<ref name="AutoV5-4"/> This encoding leads to code words of fixed (predictable) length, which in turn enables for robustness against bit errors and leaves no need for [[entropy encoding]].<ref name="monty" /> Finally, all output of the encoder are coded to one bitstream by a [[range encoding|range encoder]].<ref name="AutoV5-5"/> In connection with the PVQ, CELT uses a technique known as band folding, which delivers a similar effect to [[spectral band replication]] (SBR) by reusing coefficients of lower bands for higher ones, but has much less impact on the algorithmic delay and computational complexity than the SBR. This works against [[Compression artifact|“birdie” artifact]]s by preserving more richness in the appropriate frequency bands.


The decoder unpacks the individual components from the range coded bitstream, multiplies the band energy to the band shape coefficients and transforms them back (via iMDCT) to PCM data. The individual blocks are rejoined using weighted [[overlap-add method|overlap-add]] (WOLA). Many parameters are not explicitly coded, but instead reconstructed by using the same functions as the encoder.
The decoder unpacks the individual components from the range coded bitstream, multiplies the band energy to the band shape coefficients and transforms them back (via iMDCT) to PCM data. The individual blocks are rejoined using weighted [[overlap-add method|overlap-add]] (WOLA). Many parameters are not explicitly coded, but instead reconstructed by using the same functions as the encoder.


For the [[joint (audio engineering)|channel coupling]] CELT may use [[M/S stereo]] or [[intensity stereo]]. Blocks can be described independent from adjacent frames ([[Intra-frame]]); for example to enable a decoder to jump into a running stream. With transform codecs so-called pre-echo artifacts can get audible, because the quantisation error of sharp, energy-heavy sounds ([[transient (acoustics)|transients]]) can spread over the entire DCT block and the transient doesn't mask them backward in time as well as forward. With CELT each block can be further divided to thwart such artifacts.
For the [[joint encoding|channel coupling]] CELT may use [[joint encoding#M/S stereo coding|M/S stereo]] or [[joint encoding#Intensity stereo coding|intensity stereo]]. Blocks can be described independent from adjacent frames ([[Intra-frame]]); for example to enable a decoder to jump into a running stream. With transform codecs so-called pre-echo artifacts can get audible, because the quantisation error of sharp, energy-heavy sounds ([[transient (acoustics)|transients]]) can spread over the entire DCT block and the transient doesn't mask them backward in time as well as forward. With CELT each block can be further divided to thwart such artifacts.


== History ==
== History ==
Line 84: Line 79:


CELT is also supported or used by:<ref name="software" />
CELT is also supported or used by:<ref name="software" />
* [[Gablarski]]<ref name="gablarski"/>
* [[GStreamer]]
* [[GStreamer]]
* [[JACK Audio Connection Kit|jack-audio-connection-kit]] (netjack)
* [[JACK Audio Connection Kit|jack-audio-connection-kit]] (netjack)
* [[liboggz]]
* [[Mumble (software)|Mumble]] (starting with version 1.2)
* [[Mumble (software)|Mumble]] (starting with version 1.2)
* [[NexGenVoIP]]
* [[Radio CHNC]]
* [[RoarAudio]]
* [[SFLphone]]
* [[SFLphone]]
* [[Soundjack]]
* [[TeamSpeak]] 3
* [[TeamSpeak]] 3
* [[SPICE (protocol)|SPICE]]
* [[SPICE (protocol)|SPICE]]
* [[Dota 2]]<ref name="dota2"/>
* [[Dota 2]]<ref name="dota2"/>
* [[Counter Strike: Global Offensive]]
* [[Team Fortress 2]]<ref name="tf2"/>


== See also ==
== See also ==
{{Portal|Free software}}
{{Portal|Free and open-source software}}
* [[Comparison of audio codecs]]
* [[Comparison of audio coding formats]]
* [[Opus (audio format)]] - successor of CELT


== References ==
== References ==
{{Reflist|2|refs=
{{Reflist|30em|refs=
<ref name="celt-web">Xiph.Org [http://www.celt-codec.org/ The CELT ultra low-delay audio codec - home page], Retrieved 2009-09-01</ref>
<ref name="celt-web">Xiph.Org [http://www.celt-codec.org/ The CELT ultra low-delay audio codec - home page] {{Webarchive|url=https://web.archive.org/web/20180831004441/http://celt-codec.org/ |date=2018-08-31 }}, Retrieved 2009-09-01</ref>


<ref name="presentation">[http://people.xiph.org/~greg/video/linux_conf_au_CELT_2.ogv presentation of the codec] by Timothy B. Terriberry (65 minutes of video in ~100&nbsp;MiB OggTheora+Vorbis, see also [http://www.celt-codec.org/presentations/misc/lca-celt.pdf presentation slides] in PDF, ~2,3&nbsp;MiB)</ref>
<ref name="presentation">[http://people.xiph.org/~greg/video/linux_conf_au_CELT_2.ogv Presentation of the codec] {{Webarchive|url=https://web.archive.org/web/20110807182250/http://people.xiph.org/~greg/video/linux_conf_au_CELT_2.ogv |date=2011-08-07 }} by Timothy B. Terriberry (65 minutes of video in ~100&nbsp;MiB OggTheora+Vorbis, see also [http://www.celt-codec.org/presentations/misc/lca-celt.pdf presentation slides] {{Webarchive|url=https://web.archive.org/web/20110810032741/http://celt-codec.org/presentations/misc/lca-celt.pdf |date=2011-08-10 }} in PDF, ~2,3&nbsp;MiB)</ref>


<ref name="ietf-codec">[https://datatracker.ietf.org/drafts/draft-valin-celt-codec/ CELT IETF draft]</ref>
<ref name="ietf-codec">{{Cite web|url=https://datatracker.ietf.org/drafts/draft-valin-celt-codec/|title=Constrained-Energy Lapped Transform (CELT) Codec|date=8 July 2010 |last1=Valin |first1=Jean-Marc |last2=Terriberry |first2=Timothy B. |last3=Maxwell |first3=Greg |last4=Montgomery |first4=Christopher }}</ref>


<ref name="AutoV5-2">{{Cite web
<ref name="AutoV5-2">{{Cite web
|author = [[Jason Garrett-Glaser]]
|author = Fiona Glaser
|publisher = mplayerhq.hu
|publisher = mplayerhq.hu
|title = Important: upcoming CELT bitstream freeze!
|title = Important: upcoming CELT bitstream freeze!
Line 117: Line 109:
|work = ffmpeg-devel.mplayerhq.hu - FFmpeg development discussions and patches mailing list
|work = ffmpeg-devel.mplayerhq.hu - FFmpeg development discussions and patches mailing list
|date = 2010-11-18
|date = 2010-11-18
|accessdate = 2012-06-11
|access-date = 2012-06-11
}}</ref>
}}</ref>


<ref name="monty">{{Cite web
<ref name="monty">{{Cite web
|author = [[Christopher Montgomery]]
|author = Christopher Montgomery
|author-link = Chris Montgomery
|publisher = Xiph.Org
|publisher = Xiph.Org
|title = next generation audio: CELT update 20101223
|title = next generation audio: CELT update 20101223
Line 127: Line 120:
|work = Monty's demo pages
|work = Monty's demo pages
|date = 2010-12-23
|date = 2010-12-23
|accessdate = 2012-06-11
|access-date = 2012-06-11
|archive-url = https://web.archive.org/web/20130823153533/http://people.xiph.org/~xiphmont/demo/celt/demo.html
}}</ref>
|archive-date = 2013-08-23
|url-status = dead
}}</ref>


<ref name="AutoV5-3">{{Cite web
<ref name="AutoV5-3">{{Cite web
Line 137: Line 133:
|work = MPeX.net
|work = MPeX.net
|date = 2011-04-18
|date = 2011-04-18
|language = German
|accessdate = 2011-04-25
|access-date = 2011-04-25
}}</ref>
}}</ref>


<ref name="TASL">{{citation |first1=Jean-Marc |last1=Valin |first2=Timothy B. |last2=Terriberry |first3=Christopher |last3=Montgomery |authorlink3=Chris Montgomery |first4=Gregory |last4=Maxwell |publisher=IEEE Signal Processing Society |periodical=IEEE Transactions on Audio, Speech, and Language Processing |title=A High-Quality Speech and Audio Codec With Less Than 10 ms Delay |volume=18|issue=1|date=17 April 2009 |url=http://people.xiph.org/~jm/papers/celt_tasl.pdf|access-date=2011-02-16}}</ref>
<ref name="TASL">{{Literatur
|Autor = Jean-Marc Valin, Timothy B. Terriberry, Christopher Montgomery, Gregory Maxwell
|Herausgeber = IEEE Signal Processing Society
|Titel = A High-Quality Speech and Audio Codec With Less Than 10 ms Delay
|Sammelwerk = IEEE Transactions on Audio, Speech and Language Processing
|Band = 18
|Nummer = 1
|Jahr = 2009
|Monat = April
|Tag = 17
|Online = http://people.xiph.org/~jm/papers/celt_tasl.pdf
|Zugriff = 2011-02-16
|Originalsprache = en
}}</ref>


<ref name="AutoV5-4">{{citation|first=Thomas R. |last=Fischer |periodical=IEEE Transactions on Information Theory |title=A pyramid vector quantizer |volume=32 |issue=4 |date=July 1986 |pages=568–583 |doi=10.1109/TIT.1986.1057198}}</ref>
<ref name="AutoV5-4">{{Literatur
|Autor = Thomas R. Fischer
|Herausgeber = IEEE
|Titel = A pyramid vector quantizer
|Sammelwerk = IEEE Transactions on Information Theory
|Band = 32
|Nummer = 4
|Jahr = 1986
|Monat = Juli
|Originalsprache = en
}}</ref>


<ref name="AutoV5-5">[http://tools.ietf.org/html/draft-valin-celt-codec-02 second version of the draft of the specification]</ref>
<ref name="AutoV5-5">[http://tools.ietf.org/html/draft-valin-celt-codec-02 second version of the draft of the specification]</ref>
Line 172: Line 146:
|author = Jean-Marc Valin
|author = Jean-Marc Valin
|title = Experimental release of Ghost/CELT 0.0.1
|title = Experimental release of Ghost/CELT 0.0.1
|url = http://www.hydrogenaudio.org/forums/?showtopic=59581#post-534616
|url = http://www.hydrogenaud.io/forums/?showtopic=59581#post-534616
|work = Hydrogenaudio Forums
|work = Hydrogenaudio Forums
|date = 2007-12-09
|date = 2007-12-09
|accessdate = 2012-06-11
|access-date = 2012-06-11
}}</ref>
}}</ref>
<ref name="AutoV5-1">Xiph.Org (2007-12-08) [http://downloads.xiph.org/releases/celt/ CELT releases – celt-0.0.1.tar.gz], Retrieved 2009-09-01</ref>
<ref name="AutoV5-1">Xiph.Org (2007-12-08) [http://downloads.xiph.org/releases/celt/ CELT releases – celt-0.0.1.tar.gz], Retrieved 2009-09-01</ref>


<ref name="AutoV5-7">{{Internetquelle | url=http://www.heise.de/-858956.html | titel=IETF kümmert sich um lizenzfreien Audiocodec| autor=Monika Ermert | werk=heise online | datum=2009-11-13 | zugriff=2011-02-12}}</ref>
<ref name="AutoV5-7">{{cite web | url=http://www.heise.de/-858956.html |title=IETF kümmert sich um lizenzfreien Audiocodec |author=Monika Ermert |work=heise online |date=2009-11-13 |access-date=2011-02-12}}</ref>


<ref name="AutoV5-8">[http://tools.ietf.org/html/draft-valin-celt-codec-01 first draft of the specification submitted to the IETF]</ref>
<ref name="AutoV5-8">{{Cite journal|url=https://datatracker.ietf.org/doc/html/draft-valin-celt-codec-01|title=Constrained-Energy Lapped Transform (CELT) Codec|first1=Jean-Marc|last1=Valin|first2=Timothy|last2=Terriberry|first3=Gregory|last3=Maxwell|first4=Christopher|last4=Montgomery|website=IETF Datatracker|date=8 July 2010 }}</ref>


<ref name="AutoV5-9">IETF - AVT Working Group (2009-07-04) [http://tools.ietf.org/html/draft-valin-celt-codec-00 Constrained-Energy Lapped Transform (CELT) Codec], Retrieved 2009-09-01</ref>
<ref name="AutoV5-9">IETF - AVT Working Group (2009-07-04) [http://tools.ietf.org/html/draft-valin-celt-codec-00 Constrained-Energy Lapped Transform (CELT) Codec], Retrieved 2009-09-01</ref>
Line 194: Line 168:
|work = CELT-dev
|work = CELT-dev
|date = 2011-02-15
|date = 2011-02-15
|accessdate = 2012-06-11
|access-date = 2012-06-11
|archive-url = https://web.archive.org/web/20120402203648/http://lists.xiph.org/pipermail/celt-dev/2011-February/000580.html
}}</ref>
|archive-date = 2012-04-02
|url-status = dead
}}</ref>


<ref name="AutoV5-12">{{Cite web
<ref name="AutoV5-12">{{Cite web
Line 204: Line 181:
|work = IETF Internet-Drafts
|work = IETF Internet-Drafts
|date = October 2010
|date = October 2010
|accessdate = 2012-06-11
|access-date = 2012-06-11
}}</ref>
}}</ref>


Line 216: Line 193:
|url = http://celt-codec.org/software/
|url = http://celt-codec.org/software/
|work = CELT website
|work = CELT website
|accessdate = 2012-06-12
|access-date = 2012-06-12
}}</ref>
}}</ref>


<ref name="ffmpeg1">http://ffmpeg.org/pipermail/ffmpeg-devel/2011-April/110850.html</ref>
<ref name="ffmpeg1">{{Cite web|url=http://ffmpeg.org/pipermail/ffmpeg-devel/2011-April/110850.html|title=[FFmpeg-devel] [PATCH] Support for Xiph CELT/Opus decoding using libcelt|first=Nicolas|last=George|date=April 20, 2011}}</ref>


<ref name="ffmpeg2">http://git.videolan.org/?p=ffmpeg.git;h=89451dd6e4da40ed73b8bbee2d48d8d8be1d5b0c</ref>
<ref name="ffmpeg2">{{Cite web|url=http://git.videolan.org/?p=ffmpeg.git;h=89451dd6e4da40ed73b8bbee2d48d8d8be1d5b0c|title=git.videolan.org Git - ffmpeg.git/commit|website=git.videolan.org}}</ref>


<ref name="gablarski">[http://www.gablarski.org/ www.gablarski.org]</ref>
<ref name="dota2">{{Cite web|url=http://dev.dota2.com/showthread.php?t=43087|title = Patch Notes - Dota2 Dev}}</ref>


<ref name="dota2">http://dev.dota2.com/showthread.php?t=43087</ref>
<ref name="tf2">{{Cite web|url=https://www.teamfortress.com/post.php?id=25766|title=Team Fortress 2|website=www.teamfortress.com}}</ref>
}}
}}


== External links ==
== External links ==
* [http://celt-codec.org/ Official homepage]
* [https://web.archive.org/web/20110228033837/http://www.celt-codec.org/ Official homepage]


{{Xiph.org}}
{{Xiph.org}}
Line 236: Line 213:


{{DEFAULTSORT:Celt}}
{{DEFAULTSORT:Celt}}
[[Category:Audio codecs]]
[[Category:Speech codecs]]
[[Category:Speech codecs]]
[[Category:Free codecs]]
[[Category:Free audio codecs]]
[[Category:Xiph.Org projects]]
[[Category:Xiph.Org projects]]

Latest revision as of 06:58, 27 April 2024

CELT
Developed byXiph.Org Foundation
Type of formatAudio
Contained byOgg
Extended toOpus
StandardDocumentation
libcelt
Developer(s)Xiph.org Foundation, Jean-Marc Valin
Preview release
0.11.1 / February 15, 2011; 13 years ago (2011-02-15)
TypeAudio codec, reference implementation
License2-clause BSD
Websiteopus-codec.org

Constrained Energy Lapped Transform (CELT) is an open, royalty-free lossy audio compression format and a free software codec with especially low algorithmic delay for use in low-latency audio communication. The algorithms are openly documented and may be used free of software patent restrictions. Development of the format was maintained by the Xiph.Org Foundation (as part of the Ogg codec family) and later coordinated by the Opus working group of the Internet Engineering Task Force (IETF).

CELT was meant to bridge the gap between Vorbis and Speex for applications where both high quality audio and low delay are desired.[1] It is suitable for both speech and music. It borrows ideas from the CELP algorithm, but avoids some of its limitations by operating in the frequency domain exclusively.[1]

The original stand-alone CELT has been merged into Opus. Therefore, CELT as stand-alone format is now abandoned and obsolete. Development is going on only for its hybridised form as a layer of Opus, integrated with SILK. This article covers the historic, stand-alone format; for the integrated form and its evolution since the integration into Opus see the article on Opus.

Properties

[edit]

CELT's central feature is low algorithmic delay. It allows for latencies of typically 3 to 9 ms but is configurable to below 2 ms at the price of more bitrate to reach a similar audio quality.[2] CELT supports mono and stereo audio and is applicable to both speech and music. It can use a sampling rate from 32 kHz to 48 kHz and above and an adaptive bitrate from 24 kbit/s to 128 kbit/s per channel and above.[2]

There are no known intellectual property issues pertaining to the CELT algorithm, and its reference implementation is published under a permissive open-source license (the 2-clause BSD).[1][3]

Like Vorbis, CELT is a fullband (entire human hearing range) general-purpose codec, i.e. not specialized for special types of audio signals and therefore different from its sibling project Speex. The format enables for transparent results at high bitrates, as well as very decent quality at lower bitrates. All in all, the compression capabilities are said to be significantly superior to those of MP3, and as another useful feature for realtime applications like telephony, CELT's audio quality at lower bitrates are even on par with HE-AACv1, thanks to the band folding.[4][5] In comparative double-blind listening tests it proved to be noticeably superior to HE-AACv1 at ~64 kbit/s.[6]

It has a comparably low computational complexity that resembles that of the low-delay variant of AAC (AAC-LD) and stays significantly below the complexity of Vorbis.[7]

It enables for constant and variable bitrate. If the signal disappears into the noise floor in speech pauses and similar cases, the transmission can be limited to signal the output of comfort noise to the decoder. Most settings of the naturally streaming-enabled format can be changed on the fly without interrupting transmission.

The format is robust to transmission errors. Loss of whole packets as well as bit errors can be masked with a steady degradation of audio quality (packet loss concealment, PLC).

Technology

[edit]
block diagram of the codec

CELT is a transform codec based on the modified discrete cosine transform (MDCT) and concepts from CELP (with a code book for excitation, but in the frequency domain).

The initial PCM-coded signal is handled in relatively small, overlapping blocks for the MDCT (window function) and transformed to frequency coefficients. Choosing an especially short block size on the one hand enables for a low latency, but also leads to poor frequency resolution that has to be compensated. For a further reduction of the algorithmic delay to the expense of a minor sacrifice in audio quality, the by nature 50% of overlap between the blocks is practically cut down to half by silencing the signal during one eight at both ends of a block, respectively.[2]

The coefficients are grouped to resemble the critical bands of the human auditory system. The entire amount of energy of each group is analysed and the values quantised for data reduction and compressed through prediction by only transmitting the difference to the predicted values (delta encoding).

The (unquantised) band energy values are removed from the raw DCT coefficients (normalisation). The coefficients of the resulting residual signal (so-called “band shape”) are coded by Pyramid Vector Quantisation (PVQ, a spherical vector quantisation).[8] This encoding leads to code words of fixed (predictable) length, which in turn enables for robustness against bit errors and leaves no need for entropy encoding.[5] Finally, all output of the encoder are coded to one bitstream by a range encoder.[9] In connection with the PVQ, CELT uses a technique known as band folding, which delivers a similar effect to spectral band replication (SBR) by reusing coefficients of lower bands for higher ones, but has much less impact on the algorithmic delay and computational complexity than the SBR. This works against “birdie” artifacts by preserving more richness in the appropriate frequency bands.

The decoder unpacks the individual components from the range coded bitstream, multiplies the band energy to the band shape coefficients and transforms them back (via iMDCT) to PCM data. The individual blocks are rejoined using weighted overlap-add (WOLA). Many parameters are not explicitly coded, but instead reconstructed by using the same functions as the encoder.

For the channel coupling CELT may use M/S stereo or intensity stereo. Blocks can be described independent from adjacent frames (Intra-frame); for example to enable a decoder to jump into a running stream. With transform codecs so-called pre-echo artifacts can get audible, because the quantisation error of sharp, energy-heavy sounds (transients) can spread over the entire DCT block and the transient doesn't mask them backward in time as well as forward. With CELT each block can be further divided to thwart such artifacts.

History

[edit]

First work on plans and drafts for a Vorbis successor was done in 2005 at Xiph.org as part of the Ghost project (initially talked about as “Vorbis II”). This discussion together with Vorbis creator Christopher Montgomery led to Jean-Marc Valin′s interest in a particularly low-latency codec. Valin has worked on CELT since 2007.[5] In December 2007, the first draft version of libcelt was published as version 0.0.1, initially named “Code-Excited Lapped Transform”.[10][11] CELT was established as an IETF technology in July 2009[3][12][13][14] under the "ietfcodec" working group. In May 2009, a draft of RTP payload format for the CELT Codec was published.[15]

In version 0.9, the pitch prediction operating in the frequency domain used until then was replaced by a less complex solution with a pre- and postfilter pair in time domain,[16] which was contributed by Raymond Chen of Broadcom.[5]

With CELT 0.11 from February 4, 2011 the format was tentatively frozen (“soft freeze”) – reserving the possibility of unexpectedly necessary last changes.

Shortly after the advent of the CELT/SILK hybrid codec Opus (formerly known as Harmony), the development of CELT as a separate project was halted, instead living on the basis of Opus,[17] which aims to treat the lower part of the spectral range in the time domain with linear prediction (SILK) and the higher part in the frequency domain with the MDCT. The draft for Opus has been registered at the IETF since September 2010.

Software

[edit]

The software library libcelt serves as the reference implementation for CELT, written in C and published as free software under Xiph's own 3-clause BSD-ish license.

Despite the format not being finally frozen, it was being used in many VoIP applications such as Ekiga[18] and FreeSWITCH,[19] which switched to CELT upon entering soft-freeze in January 2009, as well as Mumble, TeamSpeak and other[20] software. In April 2011, support for CELT was included in FFmpeg.[21][22]

CELT is also supported or used by:[20]

See also

[edit]

References

[edit]
  1. ^ a b c Xiph.Org The CELT ultra low-delay audio codec - home page Archived 2018-08-31 at the Wayback Machine, Retrieved 2009-09-01
  2. ^ a b c Presentation of the codec Archived 2011-08-07 at the Wayback Machine by Timothy B. Terriberry (65 minutes of video in ~100 MiB OggTheora+Vorbis, see also presentation slides Archived 2011-08-10 at the Wayback Machine in PDF, ~2,3 MiB)
  3. ^ a b Valin, Jean-Marc; Terriberry, Timothy B.; Maxwell, Greg; Montgomery, Christopher (8 July 2010). "Constrained-Energy Lapped Transform (CELT) Codec".
  4. ^ Fiona Glaser (2010-11-18). "Important: upcoming CELT bitstream freeze!". ffmpeg-devel.mplayerhq.hu - FFmpeg development discussions and patches mailing list. mplayerhq.hu. Retrieved 2012-06-11.
  5. ^ a b c d Christopher Montgomery (2010-12-23). "next generation audio: CELT update 20101223". Monty's demo pages. Xiph.Org. Archived from the original on 2013-08-23. Retrieved 2012-06-11.
  6. ^ Dirk Bösel (2011-04-18). "CELT beeindruckt beim 64 kb/s Multiformat Hörtest (2011)". MPeX.net (in German). MPeX.net GmbH. Retrieved 2011-04-25.
  7. ^ Valin, Jean-Marc; Terriberry, Timothy B.; Montgomery, Christopher; Maxwell, Gregory (17 April 2009), "A High-Quality Speech and Audio Codec With Less Than 10 ms Delay" (PDF), IEEE Transactions on Audio, Speech, and Language Processing, vol. 18, no. 1, IEEE Signal Processing Society, retrieved 2011-02-16
  8. ^ Fischer, Thomas R. (July 1986), "A pyramid vector quantizer", IEEE Transactions on Information Theory, vol. 32, no. 4, pp. 568–583, doi:10.1109/TIT.1986.1057198
  9. ^ second version of the draft of the specification
  10. ^ Jean-Marc Valin (2007-12-09). "Experimental release of Ghost/CELT 0.0.1". Hydrogenaudio Forums. Retrieved 2012-06-11.
  11. ^ Xiph.Org (2007-12-08) CELT releases – celt-0.0.1.tar.gz, Retrieved 2009-09-01
  12. ^ Monika Ermert (2009-11-13). "IETF kümmert sich um lizenzfreien Audiocodec". heise online. Retrieved 2011-02-12.
  13. ^ Valin, Jean-Marc; Terriberry, Timothy; Maxwell, Gregory; Montgomery, Christopher (8 July 2010). "Constrained-Energy Lapped Transform (CELT) Codec". IETF Datatracker.
  14. ^ IETF - AVT Working Group (2009-07-04) Constrained-Energy Lapped Transform (CELT) Codec, Retrieved 2009-09-01
  15. ^ IETF - AVT Working Group (2009-05-08) RTP Payload Format for the CELT Codec, Retrieved 2009-09-01
  16. ^ Jean-Marc Valin (2011-02-15). "CELT decoder complexity". CELT-dev. Xiph.Org. Archived from the original on 2012-04-02. Retrieved 2012-06-11.
  17. ^ Jean-Marc Valin, Koen Vos (October 2010). "Definition of the Opus Audio Codec". IETF Internet-Drafts. IETF Network Working Group. Retrieved 2012-06-11.
  18. ^ Ekiga 3.1.0 available
  19. ^ FreeSWITCH: New Release For The New Year
  20. ^ a b "Software that uses or supports CELT". CELT website. Xiph.Org. Retrieved 2012-06-12.
  21. ^ George, Nicolas (April 20, 2011). "[FFmpeg-devel] [PATCH] Support for Xiph CELT/Opus decoding using libcelt".
  22. ^ "git.videolan.org Git - ffmpeg.git/commit". git.videolan.org.
  23. ^ "Patch Notes - Dota2 Dev".
  24. ^ "Team Fortress 2". www.teamfortress.com.
[edit]