Blame platform-demos/cs/guitar-tuner.c.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="guitar-tuner.c" xml:lang="cs">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <title type="text">Kytarová ladička (C)</title>
Packit 1470ea
    <link type="guide" xref="c#examples"/>
Packit 1470ea
Packit 1470ea
    <desc>Jak použít GTK+ a GStreamer k sestavení jednoduché aplikace pro GNOME fungující jako kytarová ladička. Předvedeme si, jako používat návrhář rozhraní.</desc>
Packit 1470ea
Packit 1470ea
    <revision pkgversion="0.1" version="0.1" date="2010-12-02" status="review"/>
Packit 1470ea
    <credit type="author">
Packit 1470ea
      <name>Dokumentační projekt GNOME</name>
Packit 1470ea
      <email its:translate="no">gnome-doc-list@gnome.org</email>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="author">
Packit 1470ea
      <name>Johannes Schmid</name>
Packit 1470ea
      <email its:translate="no">jhs@gnome.org</email>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="editor">
Packit 1470ea
      <name>Marta Maria Casetti</name>
Packit 1470ea
      <email its:translate="no">mmcasetti@gmail.com</email>
Packit 1470ea
      <years>2013</years>
Packit 1470ea
    </credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
<title>Kytarová ladička</title>
Packit 1470ea
Packit 1470ea
<synopsis>
Packit 1470ea
  

V této lekci vytvoříme program, který přehrává tóny, které můžete použít k ladění kytary. Naučíte se, jak udělat tyto věci:

Packit 1470ea
  <list>
Packit 1470ea
    <item>

Vytvořit základní projekt ve studiu Anjuta.

</item>
Packit 1470ea
    <item>

Vytvořit jednoduché GUI v návrháři GUI ve studiu Anjuta.

</item>
Packit 1470ea
    <item>

Použít GStreamer k přehrání zvuku.

</item>
Packit 1470ea
  </list>
Packit 1470ea
  

Abyste mohli pokračovat v této lekci, budete potřebovat následující:

Packit 1470ea
  <list>
Packit 1470ea
    <item>

Nainstalovanou kopii <link xref="getting-ready">IDE Anjuta</link>

</item>
Packit 1470ea
    <item>

Základní znalosti programovacího jazyka C

</item>
Packit 1470ea
  </list>
Packit 1470ea
</synopsis>
Packit 1470ea
Packit 1470ea
<media type="image" mime="image/png" src="media/guitar-tuner.png"/>
Packit 1470ea
Packit 1470ea
<section id="anjuta">
Packit 1470ea
  <title>Vytvoření projektu ve studiu Anjuta</title>
Packit 1470ea
  

Než začnete s kódováním, musíte ve studiu Anjuta vytvořit nový projekt. Tím se vytvoří všechny soubory, které budete později potřebovat k sestavení a spuštění kódu. Je to také užitečné kvůli udržení všeho pohromadě.

Packit 1470ea
  <steps>
Packit 1470ea
    <item>
Packit 1470ea
    

Spusťte IDE Anjuta a klikněte na <guiseq><gui>Soubor</gui> <gui>Nový</gui> <gui>Projekt</gui></guiseq>, aby se otevřel průvodce projektem.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Na kartě <gui>C</gui> zvolte <gui>GTK+ (jednoduchý)</gui>, klikněte na <gui>Pokračovat</gui> a na několika následujících stránkách vyplňte své údaje. Jako název projektu a složky použijte <file>guitar-tuner</file>.

Packit 1470ea
   	</item>
Packit 1470ea
    <item>
Packit 1470ea
    

Ujistěte se, že <gui>Konfigurovat externí balíčky</gui> je přepnuto na <gui>Zapnuto</gui>. Na následující stránce vyberte v seznamu gstreamer-0.10, aby se knihovna GStreamer zahrnula do vašeho projektu.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Klikněte na <gui>Použít</gui> a vytvoří se vám projekt. Otevřete <file>src/main.c</file> na kartě <gui>Projekt</gui> nebo <gui>Soubor</gui>. Měli byste vidět kód, který začíná řádky:

Packit 1470ea
    
Packit 1470ea
#include <config.h>
Packit 1470ea
#include <gtk/gtk.h>
Packit 1470ea
    </item>
Packit 1470ea
  </steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="build">
Packit 1470ea
  <title>Prvotní sestavení kódu</title>
Packit 1470ea
  

C je celkem „upovídaný“ jazyk, takže nebuďte překvapeni, že soubor obsahuje poměrně hodně kódu. Většina toho je kód šablony. Načte (prázdné) okno ze souboru s popisem uživatelského rozhraní a zobrazí jej. Dále to podrobněji rozebereme. Pokud jste již pochopili základy, tak tento seznam můžete přeskočit:

Packit 1470ea
Packit 1470ea
  <list>
Packit 1470ea
  <item>
Packit 1470ea
    

Tři řádky #include na začátku vkládají knihovny config (užitečné definice pro sestavení pomocí autotools), gtk (uživatelské rozhraní) a gi18n (internacionalizace). Funkce z těchto knihoven se používají ve zbytku kódu.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
    

Funkce create_window vytvoří nové okno ze souboru GtkBulder (<file>src/guitar-tuner.ui</file>, definováno o pár řádků výše), připojí jeho signály a zobrazí jej v okně. Soubor GtkBuilder obsahuje popis uživatelského rozhraní a jeho prvků. K návrhu uživatelského rozhraní GtkBuilder můžete použít editor přímo ve vývojářském studiu Anjuta.

Packit 1470ea
    

Napojení signálu je způsob, jak definovat, co se má stát, když zmáčknete tlačítko nebo se prostě něco přihodí. Zde je zavolána metoda destroy (a ukončení aplikace) při zavření okna.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
    

Funkce main se spustí jako výchozí, když spustíte aplikaci napsanou v jazyce C. Volá pár funkcí, které nastaví a spustí aplikaci. Funkce gtk_main spustí hlavní smyčku GTK, která spustí uživatelské rozhraní a začne naslouchat událostem (jako je kliknutí nebo zmáčknutí klávesy).

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
    

Podmíněná definice ENABLE_NLS nastavuje gettext, což je základní konstrukce pro překládání aplikací do národních jazyků. Tyto funkce určují, jak mají překladové nástroje pracovat s vaší aplikací za běhu.

Packit 1470ea
   </item>
Packit 1470ea
  </list>
Packit 1470ea
Packit 1470ea
  

Kód je připravený k použití, takže jej můžete zkompilovat kliknutím na <guiseq><gui>Sestavit</gui> <gui>Sestavit projekt</gui></guiseq> (nebo zmáčknutím <keyseq><key>Shift</key> <key>F7</key></keyseq>).

Packit 1470ea
  

V následujícím okně zmáčkněte <gui>Spustit</gui>, aby se nakonfigurovalo ladicí sestavení. Stačí to udělat jen jednou, pro první sestavení.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="ui">
Packit 1470ea
  <title>Vytvoření uživatelského rozhraní</title>
Packit 1470ea
  

Popis uživatelského rozhraní se nachází v souboru GtkBuilder. Když chcete uživatelské rozhraní upravit, otevřete <file>src/guitar_tuner.ui</file>. Přepnete se tím do návrháře rozhraní. Navrhované okno je uprostřed, widgety a jejich vlastnosti jsou nalevo a paleta dostupných widgetů je napravo.

Packit 1470ea
  

Rozvržení každého uživatelského rozhraní v GTK+ je provedeno pomocí boxů a mřížek. Zde použijeme svislý GtkButtonBox, do kterého přiřadíme šest GtkButtons, jedno pro každou z kytarových strun.

Packit 1470ea
Packit 1470ea
<media type="image" mime="image/png" src="media/guitar-tuner-glade.png"/>
Packit 1470ea
Packit 1470ea
  <steps>
Packit 1470ea
   <item>
Packit 1470ea
   

Vyberte <gui>GtkButtonBox</gui> z oddílu <gui>Kontejnery</gui> v <gui>Paletě</gui> napravo a vložte jej do okna. V panelu <gui>Vlastnosti</gui> nastavte počet prvků na 6 (pro 6 strun) a orientaci na svislou.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
    

Nyní v paletě zvolte <gui>GtkButton</gui> a vložte jej do první části boxu.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
    

Zatímco je tlačítko stále vybráno, změňte vlastnost <gui>Popisek</gui> na kartě <gui>Widgety</gui> na <gui>E</gui>. Bude se jednat o spodní strunu E.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
     

Přepněte se na kartu <gui>Signál</gui> (uvnitř karty <gui>Widgety</gui>) a podívejte se po signálu clicked tlačítka. Můžete jej použít k napojení na obsluhu signálu, která bude volána, když uživatel na tlačítko klikne. Provede se to kliknutím na signál a vepsáním on_button_clicked do sloupce <gui>Obslužná rutina</gui> a zmáčknutím <key>Enter</key>.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Zopakujte předchozí kroky pro ostatní tlačítka, takže přidáte následujících 5 strun s názvy A, D, G, B a e.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Návrh uživatelského rozhraní uložte (kliknutím na <guiseq><gui>Soubor</gui> <gui>Uložit</gui></guiseq>) a ponechte jej otevřený.

Packit 1470ea
    </item>
Packit 1470ea
  </steps>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="signal">
Packit 1470ea
  <title>Vytvoření obsluhy signálů</title>
Packit 1470ea
  

V návrháři uživatelského rozhraní můžete nastavit to, že všechna tlačítka budou při kliknutí volat stejnou funkci <gui>on_button_clicked</gui>. Tuto funkci musíme přidat do zdrojového kódu.

Packit 1470ea
  

K tomu otevřete <file>main.c</file> a soubor s uživatelským rozhraním při tom ponechte stále otevřený. Přepněte se na kartu <gui>Signály</gui>, kterou jste již použili pro nastavení názvu signálu. Nyní chytněte řádek, na kterém jste nastavili signál <gui>clicked</gui> a přetáhněte jej do zdrojového kódu na místo mimo kteroukoliv funkci. Do zdrojového kódu se přidá následující kód:

Packit 1470ea
Packit 1470ea
void on_button_clicked (GtkWidget* button, gpointer user_data)
Packit 1470ea
{
Packit 1470ea
Packit 1470ea
}
Packit 1470ea
  

Obsluha signálu má dva argumenty: ukazatel na GtkWidget, který funkci zavolal (v našem případě vždy GtkButton) a ukazatel na nějaká „uživatelská data“, která si můžete nadefinovat, ale zde je nebudeme chtít použít. (Uživatelská data můžete nastavit zavoláním gtk_builder_connect_signals. Normálně se použivá k předání ukazatele na datovou strukturu, ke které můžete potřebovat přístup uvnitř obsluhy signálu.)

Packit 1470ea
  

Prozatím ponecháme obsluhu signálu prázdnou a budeme pracovat na psaní kódu pro vyluzování zvuků.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="gstreamer">
Packit 1470ea
  <title>Roury systému GStreamer</title>
Packit 1470ea
  

GStreamer je základní multimediální rámec GNOME. Můžete jej použít k přehrávání, nahrávání a zpracování videa, zvuku, vysílání z webové kamery a podobně. Zde jej použijeme ke generování tónu s jednou frekvencí.

Packit 1470ea
  

Koncepčně GStreamer funguje následovně: Vytvoříte rouru (pipeline) obsahující různé prvky zpracující směrem od zdroje (source) do cíle (sink), tj. výstupu. Zdrojem může být například soubor s obrázkem, videosoubor nebo hudební soubor, výstupem pak widget nebo zvuková karta.

Packit 1470ea
  

Na cestě mezi zdrojem a cílem můžete použít různé filtry a převodníky k vytvoření efektů, převodníky formátů atd. Každý prvek roury má vlastnosti, které můžete použít ke změně jeho chování.

Packit 1470ea
  <media type="image" mime="image/png" src="media/guitar-tuner-pipeline.png">
Packit 1470ea
    

Příklad roury systému GStreamer.

Packit 1470ea
  </media>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="pipeline">
Packit 1470ea
  <title>Vytvoření roury</title>
Packit 1470ea
  

V tomto příkladu použijeme jako zdroj tónový generátor nazývaný audiotestsrc a výstup pošleme do výchozího systémového zvukového zařízení autoaudiosink. Nastavit potřebujeme jen frekvenci tónového generátoru. Ta je přístupná přes vlastnost freq zmíněného audiotestsrc.

Packit 1470ea
Packit 1470ea
  

Vložte do <file>main.c</file> následující řádek, hned pod řádek #include <gtk/gtk.h>:

Packit 1470ea
  #include <gst/gst.h>
Packit 1470ea
  

Tímto se vloží knihovna GStreamer. Potřebujete také přidat řádek inicializující GStreamer. Vložte následující kód na řádek nad volání gtk_init do funkce main:

Packit 1470ea
  gst_init (&argc, &argv);
Packit 1470ea
  

Pak nakopírujte následující funkci do <file>main.c</file> nad prázdnou funkci on_button_clicked:

Packit 1470ea
  static void
Packit 1470ea
play_sound (gdouble frequency)
Packit 1470ea
{
Packit 1470ea
	GstElement *source, *sink;
Packit 1470ea
	GstElement *pipeline;
Packit 1470ea
Packit 1470ea
	pipeline = gst_pipeline_new ("note");
Packit 1470ea
	source   = gst_element_factory_make ("audiotestsrc",
Packit 1470ea
	                                     "source");
Packit 1470ea
	sink     = gst_element_factory_make ("autoaudiosink",
Packit 1470ea
	                                     "output");
Packit 1470ea
Packit 1470ea
	/* nastaví frekvenci */
Packit 1470ea
	g_object_set (source, "freq", frequency, NULL);
Packit 1470ea
Packit 1470ea
	gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
Packit 1470ea
	gst_element_link (source, sink);
Packit 1470ea
Packit 1470ea
	gst_element_set_state (pipeline, GST_STATE_PLAYING);
Packit 1470ea
Packit 1470ea
	/* zastaví to po 500 ms */
Packit 1470ea
	g_timeout_add (LENGTH, (GSourceFunc) pipeline_stop, pipeline);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
  <steps>
Packit 1470ea
    <item>
Packit 1470ea
    

Prvních pět řádků vytvoří prvky GStreamer typu zdroj a cíl (GstElement) a prvek typu roura (který bude použit jako kontejner pro první dva prvky). Roura dostane název „note“. Zdroj je pojmenován „source“ a je nastaven jako audiotestsrc. Cíl je pojmenován „output“ a je nastaven jako autoaudiosink (výchozí výstup zvukové karty).

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Volání g_object_set nastaví vlastnost freq zdrojového prvku na frequency, která byla předána jako argument funkci play_sound. Jedná se o frekvenci tónu v hertzích. Správné frekvence nadefinujeme později.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

gst_bin_add_many vloží zdroj a cíl do roury. Roura je GstBin, což je zase jen prvek, který může obsahovat více dalších prvků GStreamer. Obecně můžete přidat tolik prvků, kolik chcete, pomocí předáním více argumentů do gst_bin_add_many.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
    

Následně je gst_element_link použito k propojení prvků navzájem, takže výstup prvku source (tón) putuje do vstupu prvku sink (což je výstup do zvukové karty). gst_element_set_state je použito ke spuštění přehrávání nastavením stavu roury na přehrávání (GST_STATE_PLAYING).

Packit 1470ea
    </item>
Packit 1470ea
  </steps>
Packit 1470ea
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="stop">
Packit 1470ea
  <title>Zastavení přehrávání</title>
Packit 1470ea
  

Nechceme ale hrát nějaký tón navždycky, takže poslední věcí, kterou play_sound udělá, je, že zavolá g_timeout_add. Tím se nastaví časový limit pro zastavení zvuku. Čeká v délce LENGTH milisekund a pak zavolá funkci pipeline_stop, která vrátí FALSE, jinak by se v jejím volání pokračovalo.

Packit 1470ea
  

Nyní budeme psát funkci pipeline_stop, která je volána z g_timeout_add. Vložte následující kód nad funkci play_sound:

Packit 1470ea
  
Packit 1470ea
#define LENGTH 500 /* Délka přehrávání v ms */
Packit 1470ea
Packit 1470ea
static gboolean
Packit 1470ea
pipeline_stop (GstElement* pipeline)
Packit 1470ea
{
Packit 1470ea
	gst_element_set_state (pipeline, GST_STATE_NULL);
Packit 1470ea
	g_object_unref (pipeline);
Packit 1470ea
Packit 1470ea
	return FALSE;
Packit 1470ea
}
Packit 1470ea
  

Zavolání gst_element_set_state zastaví přehrávání roury a g_object_unref zruší odkazy na rouru, zlikviduje ji a uvolní její paměť.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="tones">
Packit 1470ea
  <title>Definice tónů</title>
Packit 1470ea
  

Když uživatel klikne na tlačítko, chceme zahrát správný zvuk. Nejdříve ze všeho potřebujeme znát frekvence pro šest kytarových strun, které jsou definovány (na začátku <file>main.c</file>) následovně:

Packit 1470ea
  
Packit 1470ea
/* Řetězce pro jednotlivé frekvence */
Packit 1470ea
#define NOTE_E 329.63
Packit 1470ea
#define NOTE_A 440
Packit 1470ea
#define NOTE_D 587.33
Packit 1470ea
#define NOTE_G 783.99
Packit 1470ea
#define NOTE_B 987.77
Packit 1470ea
#define NOTE_e 1318.5
Packit 1470ea
  

Nyní oživíme obsluhu signálu, kterou jsme zadeklarovali již dříve po názvem on_button_clicked. Mohli bychom mít napojená všechna tlačítka na různé obslužné funkce, ale to by vedlo ke zbytečné duplicitě kódu. Místo toho použijeme popisek každého z tlačítek ke zjištění, na které tlačítko bylo kliknuto:

Packit 1470ea
  
Packit 1470ea
/* Zpětná volání pro tlačítka */
Packit 1470ea
void on_button_clicked (GtkButton* button,
Packit 1470ea
                        gpointer user_data)
Packit 1470ea
{
Packit 1470ea
	const gchar* text = gtk_button_get_label (button);
Packit 1470ea
Packit 1470ea
	if (g_str_equal (text, _("E")))
Packit 1470ea
	    play_sound (NOTE_E);
Packit 1470ea
	else if (g_str_equal (text, _("A")))
Packit 1470ea
	    play_sound (NOTE_A);
Packit 1470ea
	else if (g_str_equal (text, _("G")))
Packit 1470ea
	    play_sound (NOTE_G);
Packit 1470ea
	else if (g_str_equal (text, _("D")))
Packit 1470ea
	    play_sound (NOTE_D);
Packit 1470ea
	else if (g_str_equal (text, _("B")))
Packit 1470ea
	    play_sound (NOTE_B);
Packit 1470ea
	else if (g_str_equal (text, _("e")))
Packit 1470ea
	    play_sound (NOTE_e);
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
  

Ukazatel na GtkButton, na které bylo kliknuto je předán jako argument (button) do on_button_clicked. Text tohoto tlačítka můžeme získat pomocí gtk_button_get_label.

Packit 1470ea
  

Text se porovnává s notami, které máme pomocí g_str_equal a play_sound je voláno s příslušnou frekvencí odpovídající notě. Tím se zahraje tón a my máme konečně fungující kytarovou ladičku!

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="run">
Packit 1470ea
  <title>Sestavení a spuštění aplikace</title>
Packit 1470ea
  

Celý kód by nyní měl být připravený k fungování. Klikněte na <guiseq><gui>Sestavit</gui> <gui>Sestavit projekt</gui></guiseq>, aby se vše znovu sestavilo a pak na <guiseq><gui>Spustit</gui> <gui>Spustit</gui></guiseq>, aby se aplikace spustila.

Packit 1470ea
  

Pokud jste tak ještě neučinili, zvolte aplikaci <file>Debug/src/guitar-tuner</file> v dialogovém okně, které se objeví. Nakonec klikněte na <gui>Spustit</gui> a užijte si ji!

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="impl">
Packit 1470ea
 <title>Ukázková implementace</title>
Packit 1470ea
 

Pokud v této lekci narazíte na nějaké problémy, porovnejte si svůj kód s tímto <link href="guitar-tuner/guitar-tuner.c">ukázkovým kódem</link>.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="next">
Packit 1470ea
  <title>Další postup</title>
Packit 1470ea
  

Zde je pár nápadů, jak byste mohli tuto jednoduchou ukázku rozšířit:

Packit 1470ea
  <list>
Packit 1470ea
   <item>
Packit 1470ea
   

Přidat do programu možnost cyklicky procházet tóny.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
   

Naučit program přehrávat nahrávky vybrnkání jednotlivých reálných kytarových strun.

Packit 1470ea
   

Abychom to mohli udělat, potřebujeme sestavit mnohem složitější rouru GStreamer, která umožní načíst a přehrát hudební soubory. Budete muset zvolit prvky GStreamer typu <link href="http://gstreamer.freedesktop.org/documentation/plugins.html">dekodér a demultiplexor</link> podle formátu souborů s vašimi zvukovými nahrávkami – například MP3 používá jiné prvky než Ogg Vorbis.

Packit 1470ea
   

Můžete také potřebovat prvky propojit mnohem komplikovanějším způsobem. Toho lze dosáhnout pomocí <link href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-intro-basics.html">konceptů GStreamer</link>, které jsme v této lekci neprobírali. Mezi ně patří například <link href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-intro-basics-pads.html">přípojné body</link>. Hodit se vám může také příkaz <cmd>gst-inspect</cmd>.

Packit 1470ea
   </item>
Packit 1470ea
   <item>
Packit 1470ea
   

Automaticky analyzovat tóny, které uživatel zahraje.

Packit 1470ea
   

Mohli byste připojit mikrofón a nahrávat z něj zvuky pomocí <link href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-autoaudiosrc.html">vstupního zdroje</link>. Zjistit, který tón je přehráván, by vám možná pomohla <link href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-plugin-spectrum.html">spektrální analýza</link>.

Packit 1470ea
   </item>
Packit 1470ea
  </list>
Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
</page>