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