4
Okt

Asterisk sound files converteren met sox

Asterisk ondersteunt verschillende formaten voor de geluidsbestanden. Naast het algemene .wav-formaat ondersteunt het ook verschillende codec-types zoals alaw, g726, g729, gsm en meer.

Wanneer processor-belasting een heikel punt is, dan moet conversie van het ene formaat naar het andere formaat en translatie van de ene codec naar de andere vermeden worden.

Sox is een handig commando om geluidsbestanden te converteren.

Opvolgen:

Asterisk verwacht wav-geluidsbestanden in het formaat 8000Hz, mono. Met het file commando kan je het formaat van het bestand opvragen :

bash-3.2# file sound.wav
sound.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 8000 Hz

Asterisk heeft een ingebouwd commando file convert waarmee we een bepaald geluidsbestand in een bepaalde codec kunnen converteren naar een andere codec.

asterisk16*CLI> file convert
Usage: file convert <file_in> <file_out>
Convert from file_in to file_out. If an absolute path
is not given, the default Asterisk sounds directory
will be used.

Hieronder converteren we een alaw-bestand naar een gsm-bestand :

[root@asterisk16 ~]# /usr/sbin/asterisk -rx "file convert /root/oudbestand.alaw /root/nieuwbestand.gsm"
Converted /root/oudbestand.alaw to /root/nieuwbestand.gsm in 2ms

Let hierbij op dat de juiste modules moeten gecompileerd worden opdat Asterisk de codecs ondersteunt. Alaw en GSM worden ondersteund out-of-the-box. Met g729 is dat anders door licentievereisten.

Ook met wav-bestanden gaat dit, mits ze in het juiste formaat komen :

[root@asterisk16 ~]# file WeAreInLove.wav
WeAreInLove.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz

[root@asterisk16 ~]# /usr/sbin/asterisk -rx "file convert /root/WeAreInLove.wav /root/WeAreInLove.alaw"
Unable to open input file: /root/WeAreInLove.wav
Command 'file convert /root/WeAreInLove.wav /root/WeAreInLove.alaw' failed.

Hier komt sox heel handig om de hoek. Te installeren via yum :

[root@asterisk16 ~]# yum install sox

We gebruiken sox om het wav-bestand te resamplen naar het 8000Hz mono formaat dat Asterisk wenst :

[root@asterisk16 ~]# sox /root/WeAreInLove.wav -c 1 -r 8000 /root/WeAreInLoveAst.wav

Na de conversie met sox, verkrijgen we een bestand dewelke perfect is voor Asterisk :

[root@asterisk16 ~]# file WeAreInLoveAst.wav
WeAreInLoveAst.wav: RIFF (little-endian) data, WAVE audio, mono 8000 Hz

Ditmaal kan Asterisk het wav-bestand converteren naar de gewenste codec :

[root@asterisk16 ~]# /usr/sbin/asterisk -rx "file convert /root/WeAreInLoveAst.wav /root/WeAreInLoveAst.alaw"
Converted /root/WeAreInLoveAst.wav to /root/WeAreInLoveAst.alaw in 0ms

Wanneer bij een VoIP-gesprek wordt gebruik gemaakt van de G711a (alaw) codec, dan zal Asterisk bij het afspelen van het geluidsbestand opteren voor het alaw-bestand.

Mochten we het wav-bestand behouden (zonder conversie naar alaw) dan gaat Asterisk on-the-fly het wav-bestand converteren naar de juiste codec. Dit heeft amper invloed op de prestaties bij 5 gesprekken, maar bij 50 gesprekken zal de processor toch al meer belast worden.

 


free b2evolution skin