Jsou dva způsoby, jak si je pořídit . Buď je nahraji pomocí telefonu, přičemž použiji aplikace record (v extensions.conf),
[studio2] ; nahraji hlášku pod zadanou číslicí exten => _X!,1,Wait(1) exten => _X!,n,Record(NAHREJ2/${EXTEN}:alaw) exten => _X!,n,Wait(1) exten => _X!,n,Playback(NAHREJ2/${EXTEN}) exten => _X!,n,Hangup ; pokud to začíná hvězdičkou, tak to přehraji exten => _*.,1,Wait(1) exten => _*.,n,Playback(NAHREJ2/${EXTEN:1}) exten => _*.,n,Hangup
nebo je nahraji pomocí své kvalitní zvukové karty a mikrofonu (nejlépe USB sluchátka nebo kvalitní mikrofon na kameře) a převedu do tvaru, kterému rozumí asterisk. Výhoda tohoto řešení je, že mohu záznam např. rozsekat a např. vizuálně vidím, jestli není překřičen. Odstřihnout mohu též zbytečně dlouhá prázdná místa a pod. Použít lze např. audacity, který má verzi pro Linux i Windows. Velmi důležitý je kvalitní mikrofon. Jak si vyladit zvuk a mikrofon pod linuxem. Nahrávání wav souborů mohu tedy provést i pod Windows, a teprve poté je přemístit na počítač s Linuxem, kde provozuji Asterisk. Tam si též nainstaluji balíček sox a mohu pokračovat podle našeho návodu.
Pokud si soubor nahrajeme v audacity, může být dobré použít potlačení šumu Effects → Noise removal , dále zesílení zvuku na optimální (maximální) úroveň, ale tak aby zvuk nebyl překřičen Effects → Normalize. Pokud chci zesílit i za cenu překřičení nějakého okamžiku (clipped), mohu to docílit pomocí Effect → Amplify.
Pokud nahráváte více různých ale krátkých hlášek, které chcete potom uložit do více souborů (např. číslovky), můžete je nahrát v za sebou a potom rozdělit pomocí Analyze → Sound Finder a potom uložit File → Export Multiple https://fluent-forever.com/forums/topic/a-quicker-way-to-split-words-in-audacity/#.VaLbg0YpBGo
Tento kodek asterisk používá interně, při převádění mezi kodeky. Potencionálně tak dosáhneme nejmenšího snížení kvality zvuku při převodu do různých kodeků. slin, jak jej nazývá asterisk, patří do kategorie raw. Což znamená, že v souboru není žádná informace o tom, v jakém formátu jsou data uložena. Asterisk jej rozpozná pomocí koncovky .slin nebo .raw obecně to ale příkazům, které s nimi pracují, musíme výslovně napsat. Z toho plyne i výhoda jednoduchého spojování “cat hlaska1.raw hlaska2.raw>delsi_Hlaska.raw”
sox -V "p.wav" -r 8000 -c 1 "p.raw" sox -V "p.wav" -t raw -r 8000 -b 16 -s -c 1 "p.raw" # tyhle dva řádky výše se funkčně vůbec neliší, na prvním řádku byly chybějící volby doplněny defaultními. # Typ raw byl určen na prvním řádku pomocí koncovky souboru # Příkaz play - přehrání - už nám ale chybějící údaje neodpustí, takže existuje jen varianta play -r 8k -e signed-integer -b 16 -c 1 p.raw # jediný, co nám ale dovolí, je chybějící parametr -t raw, poznal to podle koncovky souboru. cp p.raw p.slin # pokud by měl soubor jinou koncovku, musíme -t raw dodat též play -t raw -r 8k -e signed-integer -b 16 -c 1 p.slin # v mém případě vrátilo varování #sox WARN rate: rate clipped 103 samples; decrease volume? #sox WARN dither: dither clipped 95 samples; decrease volume? # proto jsem přidal ještě volbu na snížení hlasitosti sox -V "p.wav" -r 8k -e signed-integer -b 16 -c 1 "p.raw" remix 1v0.9
po úspěšném provedení vypíše mimo jiné následující
Output File : 'p.raw' Channels : 1 Sample Rate : 8000 Precision : 16-bit Duration : 00:00:09.37 = 74972 samples ~ 702.862 CDDA sectors Sample Encoding: 16-bit Signed Integer PCM Endian Type : little Reverse Nibbles: no Reverse Bits : no Comment : 'Processed by SoX
Tyto údaje se nám budou hodit, pokud bychom soubor chtěli otevřít např. v audacity např. pro ořezání. Ano jistě, lepší je ořezávat ještě s plnou kvalitou, ale někdy můžeme chtít ořezávat i hlášky, které namluvil někdo jiný a my již soubor s plnou kvalitou nemáme.
Otevřeme to v menu Soubor→Import→raw-data, vybereme soubor a v následujícím okně budeme dotázáni na tyto údaje.
že chceme kodek alav, řekneme parametrem -A. Parametr -b je již k ničemu, protože kodek alaw má přesnost přibližně 13 bitů a je tedy bezpředmětné to zadávat.
sox -V "p.wav" -t raw -r 8k -e signed-integer -b 16 -c 1 "p.alaw"
Příkaz vypíše:
sox: SoX v14.3.2 sox INFO formats: detected file format type `wav' Input File : 'p.wav' Channels : 1 Sample Rate : 44100 Precision : 16-bit Duration : 00:00:09.37 = 413283 samples = 702.862 CDDA sectors File Size : 827k Bit Rate : 706k Sample Encoding: 16-bit Signed Integer PCM Endian Type : little Reverse Nibbles: no Reverse Bits : no sox INFO sox: Overwriting `p.alaw' Output File : 'p.alaw' (raw) Channels : 1 Sample Rate : 8000 Precision : 13-bit Duration : 00:00:09.37 = 74972 samples ~ 702.862 CDDA sectors Sample Encoding: 8-bit A-law Reverse Nibbles: no Reverse Bits : no Comment : 'Processed by SoX' sox INFO sox: effects chain: input 44100Hz 1 channels sox INFO sox: effects chain: rate 8000Hz 1 channels sox INFO sox: effects chain: dither 8000Hz 1 channels sox INFO sox: effects chain: output 8000Hz 1 channels sox WARN rate: rate clipped 103 samples; decrease volume? sox WARN dither: dither clipped 86 samples; decrease volume?
Zase nám nadává, že máme zvuk překřičen. Vyhovíme a ztlumíme kanál 1.
sox -V "p.wav" -t raw -r 8k -e signed-integer -b 16 -c 1 "p.alaw" remix 1v0.9
Všimněte si, že kromě parametru -g musíme oddělat -t raw
sox -V "p.wav" -r 8000 -g -c 1 "p.gsm" # remix 1v0.9 # možná že vy ztlumovat nemusíte # pro stejný výsledek by dokonce stačilo jen sox -V "p.wav" "p.gsm" # podle koncovky, pozná, že se jedná o gsm, které v jiném než dané -r 8000 variantě neumí.
utput File : 'p.gsm' Channels : 1 Sample Rate : 8000 Precision : 16-bit Duration : 00:00:09.37 = 74972 samples ~ 702.862 CDDA sectors Sample Encoding: GSM Comment : 'Processed by SoX'
gsm zdá se má 16 bitů, tyto údaje se nám budou hodit, pokud bychom chtěli soubor otevřít např. v audacity. Pro přehrání nám stačí jen
play p.gsm
rozpoznáno je totiž podle koncovky
Co se týče kvality, tak ideální je ten první slin. Soubory umístíme do adresáře /var/lib/asterisk/sounds/, kde jsou k dispozici různým příkazům na přehrávání, např. Background(p). Příponu nedáváme a Asterisk si sám vybere kodek ve formátu tak, aby nemusel transkódovat. Pokud kodek, který potřebujeme, není k dispozici, tak transkóduje. Pokud chceme šetřit procesor, můžeme převést i na další používané kodeky pomocí příkazu v CLI file convert Tento příkaz lze zadat po spuštění asterisk, nebo pomocí parametru -x i přímo z příkazové řádky bashe.
Ale jsou tak velké, že byste to podstatné mohli přehlédnout. Proto raději cituji to podstatné. Tohle a spoustu dalšího textu uvidíte pokud zadáte man sox
-s/-u/-f/-A/-U/-o/-i/-a/-g Deprecated aliases for specifying the encoding types signed-integer, unsigned-integer, floating-point, mu-law, a- law, oki-adpcm, ima-adpcm, ms-adpcm, gsm-full-rate respectively (see -e above).
Chceme-li převést jiný formát než wav, můžeme k tomu použít příkaz mplayer viz následující skript.
soubor x2raw
#!/bin/bash # Script to convert any mplayer supported audio file to RAW suitable for Asterisk IVRs. file_name_without_extension="${1%.*}" echo $file_name_without_extension mplayer -ao pcm "$1" -ao pcm:file="$file_name_without_extension.wav" sox -V "$file_name_without_extension.wav" --norm -t raw -r 8000 -e signed-integer -b 16 -c 1 "$file_name_without_extension.raw" rm "$file_name_without_extension.wav"
Marametr –norm provede normování hlasitosti, aby nahrávka nebyla příliš potichu, což je častá chyba.
Délka souboru ve vteřinách
soxi -D out.wav
Pokud mám již wav file, tak stačí
soubor wav2raw
#!/bin/bash sox -V "$1.wav" -r 8k -e signed-integer -b 16 -c 1 "$1.raw"
wav2raw_all
#!/bin/bash # využívá wav2raw a provede převod všech souborů v adresáři (prerekvizita: apt-get instlall parallel) find *.wav | parallel wav2raw {.}
Jedná se o skript x2raw, který je součást stejnojmenného balíčku distribuce archlinux. Ostatní si tento skript mohou vytvořit pomocí copy and paste a umístit ho např do /usr/bin/x2raw (jako root).
kontrola playraw
#!/bin/bash play -t raw -r 8k -e signed-integer -b 16 -c 1 $1
playalaw
#!/bin/bash play -t raw -r 8k -c 1 -e a-law $1 # jde take u-law a gsm
Pokud máme už vygenerovány hlášky v alaw, můžeme chtít zkontrolovat, zda-li jsou stále srozumitelné. Nebo je možné, že máme nějaké starší hlášky, s kterými chceme dále pracovat v audacity. (např. byly nahrány pomocí record, nebo monitor) Soubory, s kterými pracuje asterisk, nemají žádnou informaci o tom, jak jsou v nich data uložena. Asterisk to rozlišuje pomocí koncovky, ale jiným programům to musíme exmplicitně zadat. Podobně by se otvíral soubor ve formátu gsm.
V audacity můžeme otevřít soubor alaw pomocí Soubor→import → raw data a zde vybereme Kodování A-Law “bez indianness” a rychlost vzorkování 8000 Hz.
V audacity můžeme otevřít soubor alaw pomocí Soubor→import → raw data a zde vybereme Kodování “Signed 16-bit PCM”A-Law “, little-endian a rychlost vzorkování 8000 Hz.
#!/usr/bin/ruby # encoding: utf-8 Dir.glob(".") {|f| puts f} #`sox -t raw -b -A -r 8000 old/$1.alaw -t wav -u -b new/$1.wav\n`; # sox -t raw -e a-law -r 8000 old/$1.alaw -t wav new/$1.wav
Pro konverzi do slin je možné použít i příkaz ffmpeg.
ffmpeg -i Operatori\ zaneprazdneni.m4a -af "loudnorm=I=-16:TP=-1.5:LRA=11:print_format=summary" -ar 8000 -ac 1 -acodec pcm_s16le -f s16le -y Output.sln
Část s -af “loudnorm=I=-16:TP=-1.5:LRA=11:print_format=summary” je pro normování hlasitosti zvuku. Když je totiž nahrávka příliš potichu, bude při snížené kvalitě špatně srozumitelná. Aby se normování hlasitosti projevilo, je třebaskript spustit dvakrát.
Parametry pro normování hlasitosti byly použity odsud. https://bytesandbones.wordpress.com/2017/03/16/audio-nomalization-with-ffmpeg-using-loudnorm-ebur128-filter/
Zpátky lze převést jednoduše
ffmpeg -i Input.sln -y Output.flac