Blog Encodec Neural Coder
Post
Cancel

Encodec Neural Coder

Abstract

FreeDV uses speech encoders at about 2.4 kb/s, and sounds a bit robotic. Facebook recently released a neural audio coder that has much better sound quality at only 1.5 kb/s, and is open source: https://github.com/facebookresearch/encodec I installed it on my computer and encoded and decoded my speech. For comparison I encoded it with the “Codec2” speech coder at 1.6 kb/s. These are attached, for a listening comparison. The new coder would make FreeDV more robust and give a better sound.

FreeDV nutzt Sprachcoder mit ca. 2.4 kb/s, und klingt dabei etwas roboterhaft. Facebook hat letztens einen Neural Audio Coder herausgebracht, der bei nur 1.5 kb/s einen deutlich bessere Klangqualität hat, und Open Source ist: https://github.com/facebookresearch/encodec

Ich habs bei mir mal installiert und meine Sprache codiert und decodiert. Zum Vergleich habe ich es mit dem “Codec2” Sprachcoder bei 1.6 kb/s codiert. Die sind im Anhang, fuer einen Hörvergleich. Der neue Coder würde FreeDV robuster machen und einen besseren Klang geben.

Der Encodec Coder

Ich habe Facebooks Encodec audio coder installiert. Hat erstaunliche performance bis herunter nach 1.5 kb/s bei 24 kHz sampling rate! Installation nach https://github.com/facebookresearch/encodec Es hat aber ueber 1 GB Speicherbedarf!

Der coder kann ausgefuehrt werden, im Terminal mit:

1
encodec -b 1.5 test24kHz.wav

Resultat: Original:, test24kHz.wav , 575532 bytes, 12 sekunden codierung
Encodiert: 2317 bytes, test24kHz.ecdc , 2317/12=193 bytes/sec = 1544 bits/sec!

Decodieren mit:

1
encodec -r test24kHz.ecdc test24kHz1_5kbs_decompressed.wav

Resultat: test24khzencdecrec.wav , 575532 bytes, exakt gleiche Groesse wie das Original

Original File:

decodiertes File:

Das decodierte Signal ist etwas gurgelig, aber ansonsten ganz natürlich, deutlich besser als die Vocoder coder, die mehr metallisch robotisch klingen, selbst noch bei 2.4 kb/s. Der Encodec kann 1.5, 3, 6, 12 or 24 kb/s.

Encoder und Decoder sind recht schnell, ich frage mich ob das auch in Echtzeit geht, mit Blockweiser Verarbeitung.

Das Facebook blog post dazu vom 25. Oktober: https://ai.facebook.com/blog/ai-powered-audio-compression-technique/

Als Vergleich der Codec2 speech coder: https://github.com/drowe67/codec2 Installation nach Beschreibung, z.B. in directory ~/Software/codec2/build_linux.

1
2
3
./src/c2enc 1600 ../raw/hts1a.raw hts1a_c2.bit
./src/c2dec 1600 hts1a_c2.bit hts1a_c2_1600.raw
play -r 8000 -b 16 -e signed-integer hts1a_c2_1600.raw

Mit eigenem audio file (muss 8kHz samplingrate mono sein, z.B. “test8kHz.wav”) führt man den Encoder im Terminal aus mit:

1
./src/c2enc 1600 ~/Programs/PythonProgs/test8kHz.wav test8kHz1_6kb.bit

Das encodierte Signal ist dann “test8kHz1_6kb.bit” Der Decoder wird ausgeführt mit:

1
./src/c2dec 1600 test8kHz1_6kb.bit test8kHz1_6kbdec.raw

Das decodierte Signal ist im “raw” Format und muss zum Abspielen erst in das “wav” Format konvertiert werden, mittels:

1
sox -r 8000 -b 16 -e signed-integer test8kHz1_6kbdec.raw test8kHz1_6kbdecCodec2.wav

Original File:

decodiertes File:

Dann kann man es abspielen mit:

1
play test8kHz1_6kbdecCodec2.wav

Viele Gruesse, 73, Gerald Schuller, DL5BBN

This post is licensed under CC BY 4.0 by the author.