Jak nahrát hlášky do asterisku

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.

<iframe width="860" height="600" src="http://www.youtube.com/embed/t4lSO4R5-h8?hl=cs&fs=1" frameborder="0" allowfullscreen></iframe>

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

Vyrábíme slin - neboli 16-bitový raw

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 -s  -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 8000 -s  -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 8000 -s -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.

Je libo kodek alaw?

ž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 8000 -A -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 8000 -A -c 1 "p.alaw" remix 1v0.9

Je libo gsm?

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

Proč tolik kodeků?

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.

Manuálové stránky jsou základ

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).

       --no-glob
              Specifies that filename `globbing' (wild-card matching) should not be performed by SoX on  the  following  filename.
              For example, if the current directory contains the two files `five-seconds.wav' and `five*.wav', then
                 play --no-glob "five*.wav"
              can be used to play just the single file `five*.wav'.

       -r, --rate RATE[k]
              Gives the sample rate in Hz (or kHz if appended with `k') of the file.

              For an input file, the most common use for this option is to inform SoX of the sample rate of a `raw' (`headerless')
              audio file (see the examples in -b and -c above).  Occasionally it may be useful to use this option  with  a  `head‐
              ered'  file,  in order to override the (presumably incorrect) value in the header - note that this is only supported
              with certain file types.  For example, if audio was recorded with a sample-rate of say 48k from a source that played
              back a little, say 1.5%, too slowly, then
                 sox -r 48720 input.wav output.wav
              effectively  corrects  the  speed by changing only the file header (but see also the speed effect for the more usual
              solution to this problem).

              For an output file, this option provides a shorthand for specifying that the rate effect should be invoked in  order
              to  change  (if  necessary)  the sample rate of the audio signal to the given value.  For example, the following two
              commands are equivalent:
                 sox input.wav -r 48k output.wav bass -3
                 sox input.wav        output.wav bass -3 rate 48k
              though the second form is more flexible as it allows rate options to be given, and allows the effects to be  ordered
              arbitrarily.

       -t, --type FILE-TYPE
              Gives  the  type  of the audio file.  For both input and output files, this option is commonly used to inform SoX of
              the type a `headerless' audio file (e.g. raw, mp3) where the actual/desired type cannot be determined from  a  given
              filename extension.  For example:
                 another-command | sox -t mp3 - output.wav

                 sox input.wav -t raw output.bin
              It  can also be used to override the type implied by an input filename extension, but if overriding with a type that
              has a header, SoX will exit with an appropriate error message if such a header is not actually present.

              See soxformat(7) for a list of supported file types.

Jak převést do formátu vhodného pro Asterisk

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" -r 8000 -c 1 "$file_name_without_extension.raw"
rm "$file_name_without_extension.wav"

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 8000 -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

playraw
#!/bin/bash
play -t raw -r 8k -s  -b 16 -c 1 $1

playalaw

playalaw
#!/bin/bash
play -t raw  -r 8k -c 1 -e a-law $1
# jde take u-law a gsm

Jak přehrát pomocí audacity soubor alaw

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) 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. 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 nebo slin.

Konverze alaw to wav (alaw2raw)

#!/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
 
stranky_uzivatelu_4smart/vytvareni_ivr.txt · Poslední úprava: 2016/11/11 12:00 autor: xsouku04