2.2 Выводы Технология Майкрософт COM является мощным инструментом, делающим возможным модификацию и расширение функциональных возможностей программного обеспечения в процессе его использования конечным пользователем и без изменения «ядра» программы. Технология Майкрософт COM легла в основу многокомпонентной системы индексации аудио, описанной в следующей главе.
ГЛАВА 3. СИСТЕМА ИНДЕКСАЦИИ АУДИОПОСЛЕДОВАТЕЛЬНОСТЕЙ Представленные в предыдущих главах стандарты легли в основу системы индексации аудиопоследовательностей, одним из разработчиком которой является автора данной работы. Главными требованиями, предъявляемыми к системы были:
расширяемость – возможность дополнения функциональных возможностей сторонними разработчиками, кроме того система должна иметь возможность работы с различными форматами данных, в том числе и пользовательскими
язык писания экспериментов – возможность описания последовательности действий над исходными данными
визуализация – возможность графического представления как результатов всего эксперимента, так и любого его этапа
В данной главе будут представлены предложенные решения для первых
двух задач.
3.1 Процессоры Решением первой задачи стало создания обобщенного программного интерфейса, с одной стороны предоставляющего унифицированный доступ ко всем компонентам обработки сигнала (получившим название процессоров), а с другой стороны, предоставляющего пользователю доступ по всех возможностям настройки работы процессора. Решение объединило два описанных в предыдущих главах стандарта – описание настроек процессора при помощи XML позволило скрыть различия внутренней структуры процессоров от ядра системы, а общий для всех компонент COM-интерфейс позволил системе работать с любым процессором, зарегистрированным в системе вне зависимости от его функциональных особенностей. Ниже представлен интерфейс, который реализует каждый процессор, и который используется для взаимодействия процессоров с системой:
сlass Processor : public Idispatch {
public:
virtual HRESULT STDMETHODCALLTYPE loadSettings(const char* settings);
virtual HRESULT STDMETHODCALLTYPE work(DataStruct** data) ;
virtual HRESULT STDMETHODCALLTYPE getProcessorId(char** id) ;
virtual HRESULT STDMETHODCALLTYPE getSize(int* val) ;
virtual HRESULT STDMETHODCALLTYPE getStep(int* val) ;
virtual HRESULT STDMETHODCALLTYPE getSettings(char**) ;};
Метод loadSettings(const char* settings) предназначен для загрузки настроек. Настройки представляют собой XML-строку. Если настройки не указываются, устанавливаются настройки по умолчанию.
В методе work(DataStruct** data) выполняется то, что должен выполнять процессор. Через аргумент передаются данные над которыми должен работать процессор и результат работы процессора.
Метод getProcessorId(char** id) возвращает через аргумент имя процессора.
Метод getSize(int* val) возвращает через аргумент размер данных, с которыми будет работать процессор.
Метод getStep(int* val) возвращает через аргумент шаг, с которым следует читать данные из базы.
Метод getSettings(char**) возвращает через аргумент XML-строку с дефолтными настройками.
3.2 Компоненты чтения Компоненты чтения решают задачу возможности работы с различными форматами данных. Для добавления в систему поддержки нового формата данных пользователю необходимо реализовать представленный ниже интерфейс и зарегистрировать соответствующий компонент чтения в системе.
class ReaderInterface : public IDispatch
{
public:
virtual HRESULT STDMETHODCALLTYPE open(const char*, ResultStruct*); virtual HRESULT STDMETHODCALLTYPE read(DataStruct**, ResultStruct);};
Метод open(const char* name, ResultStruct* result) открывает файл с именем name и возвращает результат открытия через result.
Если open отработал успешно, метод read(DataStruct** data, ResultStruct* result) считывает данные из файла в data и возвращает результат чтения через result.
3.3 Язык описания сценариев Разработанная система предоставляет пользователю простой, интуитивно понятный и в то же время предоставляющий определенную свободу действий язык описания сценариев, основанный на XML. В этом разделе представлено описания языка описания сценариев.
Эксперимент состоит из отдельных этапов, каждый из которых описывается своим именованным сценарием. Сценарий содержит в себе список обрабатываемых данных и список процессоров для обработки.. Результаты работы процессоров последовательно передаются по сценарию слева на право. Результаты работы сценария сохраняются в базу по заданному имени. Количество позиций в списке выходных данных должно соответствовать количеству позиций в списке входных данных. Каждая строка завершается точкой с запятой.
Общий вид сценария следующий:
[имя_сценария] : [входные_данные_1], [входные_данные_2] … [входные_данные_N] | [процессор_1], [процессор_2] … [процессор_N] -> [имя_результата_1], [имя_результата_2] … [имя_результата_N];
В качестве входных данных могут выступать данные, хранящиеся в базе или в файле. При использовании даны, в хранящихся в базе необходимо предварять имя данных знаком ’&’ Результаты работы сценария сохраняются в базу данных.
Для улучшения читаемости сценария предусмотрена возможность переименования данных, процессоров:
[новое_имя] = [имя_понятное_системе];
Переименование может производиться в любом месте файла эксперимента и действует глобально.
Имена файлов записываются в двойных кавычках “имя_файла”. Для каждого сценария может использоваться список специфических настроек для каждого процессора. Список настроек процессоров для сценария задается в следующем виде:
<@ имя_сценария>[список настроек]@>
Список настроек для процессоров выглядит следующим образом:
[имя_процессора]:<settings>
<свойство_1>[значение_свойства_1]свойство_1>
<свойство_2>[значение_свойства_2]свойство_2>
settings>;
3.4 Выводы Представленные в данной главе решения задач, поставленных перед разработчиками системы индексации аудиопоследовательностей демонстрируют применение стандартов, описанных в первых двух главах для решения задач статистической радиофизики, одной и главных среди которых, на современном этапе развития, является задача индексации аудиопоследовательностей. Разработанная система обладает запасом гибкости, который может в дальнейшем позволить решать на ее основе и другие задачи обработки данных, например, задачу обработки изображений.
|