DIGILIGHT
Структуры данных | Макросы | Определения типов | Перечисления | Функции
Визуальные эффекты цветомузыки

Программные средства для визуализации мелодии Подробнее...

Структуры данных

struct  effect_t
 тип структуры описания эффекта Подробнее...
 

Макросы

#define MAX_EFFECT_CNT   5
 предельное количество эффектов любого типа
 
#define BACKGROUND_EFFECT   0
 фоновый эффект
 
#define FOREGROUND_EFFECT   1
 основной эффект
 

Определения типов

typedef __flash const char * flash_str_t
 указатель настроку во FLASH.
 
typedef const __flash effect_t flash_effect_t
 тип описания эффекта, размещенного во FLASH.
 

Перечисления

enum  preset_result_t { PRESET_NOTHING = -1, PRESET_HIDDEN = -2 }
 результат функции смены пресета Подробнее...
 

Функции

void register_effect (uint8_t toe, flash_effect_t *eff)
 Регистрация эффекта в списках Подробнее...
 
void execute_effect (signal_t *s)
 Рендеринг эффекта Подробнее...
 
int8_t change_preset (signal_t *s, int8_t delta)
 Смена пресета для текущегоэффекта последовательно Подробнее...
 
char * get_effect_name (signal_t *s)
 Название текущего эффекта Подробнее...
 
void change_effect (signal_t *s, int8_t delta)
 Смена эффекта последовательно Подробнее...
 
void select_fg_effect (signal_t *s, uint8_t num)
 Выбор эффекта непосредственно
 
void select_bg_effect (signal_t *s, uint8_t num)
 Выбор пресета непосредственно
 
void save_all_effects (void)
 Сохранение настроек всех эффектов Подробнее...
 
void show_info (signal_t *s)
 Название текущего пресета для текущего эффекта
 
uint8_t effect_auto_changed (signal_t *s)
 Проверка смены фонового эффекта на основной или наоборот
 

Подробное описание

Программные средства для визуализации мелодии

Визуальные эффекты разделены на ОСНОВНЫЕ и ФОНОВЫЕ.
Основные эффекты сопровождают музыкальный сигнал, т.е. это и есть собственно цветомузыка.
Фоновые эффекты работают при отсутствии входного сигнала, т.е. реализуют функцию подсветки в тишине.

Принципы создания эффектов

Все эффекты реализуются в виде независимых модулей, которые автоматически добавляются в общую систему при помощи функции register_effect. Модуль эффекта, не добавленный этой функцией, в итоговую прошивку не попадает (исключается оптимизатором компилятора).
Модуль эффекта должен обязательно содержать главную функцию эффекта, алгоритм работы которой очень прост: необходимо проанализировать полученное в параметре состояние звукового сигнала и на основе этих вычислений обновить содержимое массива пикселов. Главная функция вызывается каждые 10 мс, т.е. 100 раз в секунду, что можно использовать дя отсчета времени при создании эффектов.
Кроме главной функции, модуль эффекта может содержать и вспомогательные функции, которые используются для изменения алгоритма поведения главной функции.
Готовые модули:

Перечисления

◆ preset_result_t

результат функции смены пресета

Элементы перечислений
PRESET_NOTHING 

нет пресетов

PRESET_HIDDEN 

отображать название пресета не надо

См. определение в файле main_effect.h строка 56

Функции

◆ change_effect()

void change_effect ( signal_t s,
int8_t  delta 
)

Смена эффекта последовательно

Активирует другой эффект из массива в соответствии с текущим уровнем сигнала.

Аргументы
sпараметры звукового сигнала
deltaнаправление смены эффекта

См. определение в файле main_effect.c строка 218

◆ change_preset()

int8_t change_preset ( signal_t s,
int8_t  delta 
)

Смена пресета для текущегоэффекта последовательно

Если текущий эффект содержит функцию смены пресетов, то вызывает ее.

Аргументы
sпараметры звукового сигнала
deltaнаправление смены пресета
Возвращает
PRESET_NOTHING, если пресетов нет, PRESET_HIDDEN, если смена пресетов не должна индицироваться на ЖКИ, или номер нового выбранного пресета в противном случае

См. определение в файле main_effect.c строка 94

◆ execute_effect()

void execute_effect ( signal_t s)

Рендеринг эффекта

Выбирает по уровню сигнала тип эффекта и запускает его работу

Аргументы
sпараметры звукового сигнала

См. определение в файле main_effect.c строка 63

Перекрестные ссылки signal_t::average_vol, BACK, CUR_BACK, CUR_FORE, DEF_SILENCE_LVL, FORE и sens_control().

◆ get_effect_name()

char* get_effect_name ( signal_t s)

Название текущего эффекта

Возвращает название текущего активного эффекта

Аргументы
sпараметры звукового сигнала
Возвращает
указатель на строку во FLASH с названием

См. определение в файле main_effect.c строка 112

◆ register_effect()

void register_effect ( uint8_t  toe,
flash_effect_t eff 
)

Регистрация эффекта в списках

Помещает эффект в массив соответствующего типа, делая его доступным

Заметки
Если массив заполнен, эффект не регистрируется без какого-либо уведомления.
Аргументы
toeтип эффекта BACKGROUND_EFFECT или FOREGROUND_EFFECT
effуказатель на структуру с описанием эффекта

См. определение в файле main_effect.c строка 41

Перекрестные ссылки effect_state_t::effect, MAX_EFFECT_CNT и effect_state_t::total.

◆ save_all_effects()

void save_all_effects ( void  )

Сохранение настроек всех эффектов

Сохраняет в EEPROM настройки всех эффектов.

См. определение в файле main_effect.c строка 200

Используется в power_off().