Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
|
2015:audio-visual-out [2016/01/17 21:38] Daniel Kresta vytvořeno |
2015:audio-visual-out [2016/01/17 23:12] (aktuální) Daniel Kresta [Praktická ukázka] |
||
|---|---|---|---|
| Řádek 57: | Řádek 57: | ||
| } | } | ||
| </code> | </code> | ||
| + | Tato funkce je volána při inicializaci všech zařízení (mimo jiné i LCD pomocí MX_LTDC_Init() ) v hlavním kódu main.c. | ||
| Veškerá obsluha audio device by měla být vytvořena v dalším vygenerovaném souboru usbd_audio_if.c, který obsahuje funkce volané při určitých jevech, jako například připojení zařízení k PC: | Veškerá obsluha audio device by měla být vytvořena v dalším vygenerovaném souboru usbd_audio_if.c, který obsahuje funkce volané při určitých jevech, jako například připojení zařízení k PC: | ||
| Řádek 118: | Řádek 119: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| + | ===== Vykreslení spektra na LCD ===== | ||
| Funkce DrawSpectrum má jediný vstupní parametr a to ukazatel na začátek pole s vzorky audio spektra. Při prvním vykreslení dojde k vymazání obsahu displeje a pak je postupně v cyklu vykreslen jeden sloupec (o šířce 1px) pro každý vzorek. Výška sloupce je pak dána hodnotou vzorku. V případě dalšího kreslení téhož sloupce v následujícím cyklu je porovnána aktuální hodnota s tou předchozí a na základě nerovnosti je pak dokreslen rozdíl; tedy černý sloupec tam, kde je aktuální hodnota menší a zelený při vyšší aktuální hodnotě. Díky tomu není nutné při každém novém vykreslování vymazávat obsah displeje a spektrum pak v čase //nemrká//. | Funkce DrawSpectrum má jediný vstupní parametr a to ukazatel na začátek pole s vzorky audio spektra. Při prvním vykreslení dojde k vymazání obsahu displeje a pak je postupně v cyklu vykreslen jeden sloupec (o šířce 1px) pro každý vzorek. Výška sloupce je pak dána hodnotou vzorku. V případě dalšího kreslení téhož sloupce v následujícím cyklu je porovnána aktuální hodnota s tou předchozí a na základě nerovnosti je pak dokreslen rozdíl; tedy černý sloupec tam, kde je aktuální hodnota menší a zelený při vyšší aktuální hodnotě. Díky tomu není nutné při každém novém vykreslování vymazávat obsah displeje a spektrum pak v čase //nemrká//. | ||
| Řádek 125: | Řádek 128: | ||
| #define fft_display_offset (200) // nastaveni odstupu od spodni strany displeje | #define fft_display_offset (200) // nastaveni odstupu od spodni strany displeje | ||
| #define y_res (1) // nasobek pro zvetseni | #define y_res (1) // nasobek pro zvetseni | ||
| + | //... | ||
| + | static float32_t fft_signal_temp[FFT_SIZE/2]; | ||
| //... | //... | ||
| void DrawSpectrum(float32_t* fft_signal){ | void DrawSpectrum(float32_t* fft_signal){ | ||
| Řádek 155: | Řádek 160: | ||
| ===== Praktická ukázka ===== | ===== Praktická ukázka ===== | ||
| + | |||
| + | Audio je do videa přidáno dodatečně, proto je zvuk trošku nesynchronizovaný. | ||
| + | {{youtube>YwCvOcq2hdQ}} | ||
| + | |||
| ===== Závěr ===== | ===== Závěr ===== | ||