Informace o zvukovém souboru

Pro posun na další strany použijte kurzorové šipky

Ⓒ Tomáš Bořil
borilt@gmail.com, 9. 3. 2015

Zadání

Vypište obecné informace o digitálním zvuku v souboru .wav, priklad_data.zip (milanek.wav).

  • Celkové trvání
  • Totéž jen na 2 desetinná místa
  • Počet kanálů
  • Vzorkovací frekvenci

Varianta A

Do skriptu zadejte napevno cestu k souboru. Předpokládá se minimální interakce uživatele. Použití např. pro bakalářské práce, demonstrace určitého jevu či jednorázovou analýzu konkrétních souborů (reprodukovatelný postup pro výzkumný experiment). Uživatele pouze instruujeme, ať si na začátku skriptu upraví cesty k souborům, skript spustí a sleduje výsledky.

Manuální postup

Do hlavního okna (Praat Objects) načteme zvuk ze souboru.

  • Open, Read from file..., vybereme na disku soubor .wav.
  • Pokud je tento objekt označen, máme v pravé části okna celou řadu tlačítek obsahujících funkce, které lze s tímto objektem provádět.
  • Mnoho dotazů na vlastnosti najdeme pod tlačítkem Query.

Úkoly

  • Projděte si důkladně, jaké možnosti tlačítko Query nabízí.
  • Které funkce využijeme pro naše zadání?

Manuální postup

  1. Celkové trvání zjistíme Query time domain, Get total duration.

    • Vzhledem k tomu, že zvukové objekty mohou vzniknout jako výřez z jiných zvuků, nemusí být počáteční čas vždy roven nule. V takovém případě se Get total duration nebude rovnat Get end time. Trvání je rozdíl end a start time.
  2. Počet kanálů vrátí funkce Get number of channels.

  3. Vzorkovací frekvence se týká přímo vzorkování digitálních signálů, a proto ji najdeme v Query time sampling, Get sampling frequency.

Úkoly

  • Ručně zavolejte tyto funkce, výsledky se zobrazují v okně Praat Info.
  • Zamyslete se, zda obdržená čísla dávají smysl.

Vzorkovací frekvence

  • Udává počet diskrétních časových okamžiků za sekundu. Čím je vyšší, tím přesněji zachytí rychlé změny signálu související s vysokými frekvencemi.
  • Musí být vyšší než dvojnásobek maximální frekvence, kterou chceme v signálu zaznamenat. Pro audio signál v rozsahu 20 Hz – 20 kHz se proto volí nejčastěji 44100 Hz (CD kvalita) nebo 48000 Hz (standard počítačových zvukových karet).

Vytvoření skriptu

Abychom si celý postup uložili a nemuseli ho vždy ručně po krocích provádět, vytvoříme skript.

  • Menu Praat, New Praat script

Neznáme konkrétní příkazy, použijeme trik.

  • Praat si ukládá do historie všechny příkazy, které provádíme.
  1. Smažeme ji ve skriptu Edit, Clear history.
  2. Provedeme příkaz(y) "manuálním způsobem" tlačítky, jak jsme byli zvyklí.
  3. Do skriptu vložíme historii Edit, Paste history (Ctrl-H).
  4. Vymažeme řádky, které nechceme mít součástí skriptu.

Vytvoření skriptu

Tímto způsobem vytvořte skript, který

  1. Otevře zvukový soubor .wav.
  2. Vypíše celkové trvání.
  3. Napíše počet kanálů.
  4. Sdělí vzorkovací frekvenci.

Skript uložte do souboru s příponou .praat.

Pozn. v různých verzích Praatu se mohou názvy příkazů drobně měnit.

Spuštění skriptu

Read from file: "D:\AKU\milanek.wav"
Get total duration
Get number of channels
Get sampling frequency

Skript spustíme Run, Run (Ctrl-R)

V okně Praat Info se zobrazila ale jen hodnota vzorkovací frekvence 32000 Hz.

Jak je to možné? Podívejme se na průběh skriptu krok po kroku.

Spuštění skriptu

Read from file: "D:\AKU\milanek.wav"               <==
Get total duration
Get number of channels
Get sampling frequency

Načte se zvukový soubor, přidá se jako nový objekt Sound do okna Objects a bude označen. Vzhledem k tomu, že jsme již asi dříve ten samý soubor otevírali, bude v okně Objects vícekrát. Zatím to neřešme.

Spuštění skriptu

Read from file: "D:\AKU\milanek.wav"
Get total duration                                 <==
Get number of channels
Get sampling frequency

Okno Praat Info se smaže a vypíše se do něj celkové trvání zvuku.

Spuštění skriptu

Read from file: "D:\AKU\milanek.wav"
Get total duration
Get number of channels                             <==
Get sampling frequency

Okno Praat Info se smaže a vypíše se do něj počet kanálů.

Spuštění skriptu

Read from file: "D:\AKU\milanek.wav"
Get total duration
Get number of channels
Get sampling frequency                             <==

Okno Praat Info se smaže a vypíše se do něj vzorkovací frekvence.

Spuštění skriptu

Read from file: "D:\AKU\milanek.wav"
Get total duration
Get number of channels
Get sampling frequency

Problém je tedy v neustálém přemazávání okna Praat Info těmito příkazy. Abychom tomu zabránili, vypočtené hodnoty si nejdříve uložíme pod nějaký název, tzv. proměnnou. S takovými hodnotami pak můžeme kdykoliv v budoucnu dále počítat, a nebo je jen jednoduše na přání kdykoliv vypsat.

Ukládání hodnot do proměnných

Před každý příkaz, ze kterého chceme proměnnou uložit, dáme zápis nazev =, nazev musí začínat malým písmenem a měl by obsahovat jen pismena, cisla, podtržítka. Nepoužívejte diakritiku.

Příklad správného názvu: f1Prumerna, špatného názvu: F1.

Uložené hodnoty vypíšeme příkazem printline 'nazev'. Apostrofy znamenají "vypiš obsah proměnné". Co není v apostrofech, vypíše se jako obyčejný text.

Protože nyní skript neobsahuje nic, co by mazalo okno Praat Info, a přitom chceme začínat vždy s čistou obrazovkou, použijeme příkaz clearinfo.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo

trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá
printline 'trvani'

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"               <==
clearinfo

trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá
printline 'trvani'

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

Načte se zvukový soubor a přidá se jako nový objekt do okna Objects. Zároveň se označí a vše, co bylo do té doby označeno, již označeno nebude.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo                                          <==

trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá
printline 'trvani'

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

Vymaže se okno Praat Info.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo

trvani = Get total duration                        <==
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá
printline 'trvani'

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

trvani: 0.7669375

Do proměnné trvani se uloží hodnota.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo

trvani = Get total duration
pocetKanalu = Get number of channels               <==
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá
printline 'trvani'

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

trvani: 0.7669375
pocetKanalu: 1

Do proměnné pocetKanalu se uloží hodnota.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo

trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency       <==

printline Zvuk trvá
printline 'trvani'

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

trvani: 0.7669375
pocetKanalu: 1
vzorkovaciFrekvence: 32000

Do proměnné vzorkovaciFrekvence se uloží hodnota.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo

trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá                                <==
printline 'trvani'

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

trvani: 0.7669375
pocetKanalu: 1
vzorkovaciFrekvence: 32000

Vypíše se obyčejný text.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo

trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá
printline 'trvani'                                 <==

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

trvani: 0.7669375
pocetKanalu: 1
vzorkovaciFrekvence: 32000

Vypíše se číselná hodnota v proměnné trvani.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo

trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá
printline 'trvani'

printline Kanálů: 'pocetKanalu'.                   <==

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

trvani: 0.7669375
pocetKanalu: 1
vzorkovaciFrekvence: 32000

Vypíše se kombinace obyčejného textu a číselné hodnoty v proměnné pocetKanalu.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo

trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá
printline 'trvani'

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:                    <==
printline 'vzorkovaciFrekvence'

trvani: 0.7669375
pocetKanalu: 1
vzorkovaciFrekvence: 32000

Vypíše se obyčený text.

Ukládání hodnot do proměnných

Read from file: "D:\AKU\milanek.wav"
clearinfo

trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá
printline 'trvani'

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'                    <==

trvani: 0.7669375
pocetKanalu: 1
vzorkovaciFrekvence: 32000

Vypíše se obsah číselné proměnné.

Zaokrouhlování číselných hodnot

V zadání jsme chtěli ale jednu hodnotu vypsat jen na dvě desetinná místa.

K tomu slouží zápis

printline 'nazevPromenne:2'

Celý skript varianty A

Read from file: "D:\AKU\milanek.wav"
clearinfo
trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá 'trvani'.

printline Zaokrouhleno: 'trvani:2' sec.

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

trvani: 0.7669375
pocetKanalu: 1
vzorkovaciFrekvence: 32000

Zadání varianta B

Vyžaduje se interakce uživatele, který si sám nejdříve načte potřebné soubory, ty v okénku Objects označí. A pak spustí náš skript.

Takovéto typy skriptů jsou užitečné pro usnadnění opakovaných činností na různých souborech.

Jak na to?

Oproti variantě A stačí vymazat řádek s načítáním souboru.

Uživatele ale musíme instruovat, aby si nejdříve sám načetl a označil svůj zvukový soubor. A po té může teprve spustit náš skript.

K psaní poznámek můžeme ve skriptu použít tzv. komentář, což je řádek, který začíná znakem #. Vše za ním Praat ignoruje.

Druhou možností komentáře je znak ; (středník), který může (na rozdíl od #) následovat po příkazu i na stejném řádku, a opět znamená komentář do konce řádku.

Celý skript varianty B

# Před spuštěním nutno označit objekt Sound.
clearinfo
trvani = Get total duration
pocetKanalu = Get number of channels
vzorkovaciFrekvence = Get sampling frequency

printline Zvuk trvá 'trvani'.

printline Zaokrouhleno: 'trvani:2' sec.

printline Kanálů: 'pocetKanalu'.

printline Vzorkovací frekvence:
printline 'vzorkovaciFrekvence'

Pokud nebude označen zvuk, skript skončí s chybovou hláškou.

trvani: 0.7669375
pocetKanalu: 1
vzorkovaciFrekvence: 32000

Závěrem

Poslední skript vyžadoval, aby byl načten a označen jeden zvukový soubor.

V případě, že by uživatel načetl a označil více zvukových souborů, tak skript zpracuje stejně pouze ten první, protože nebyl na zpracování více souborů naprogramován.

Zpět na hlavní stranu