· Dlldata.c – содержит информацию, необходимую для создания прокси dll
Классы, описанные в файле .h используются в качестве базовых классов для реализации интерфейсов, описанных в idl-файле.
2.1.3 Регистрация COM-компонент
Завершающим шагом создания COM-компонент является их регистрация в системе. Регистрация производится при помощи утилиты regsvr32.exe, которая в качестве аргумента принимает путь к регистрируемому файлу. Если файл содержит COM-компонент и соблюдены все зависимости, регистрация завершается успешно и компонент готов к использованию. Для удаления COM-компонент из системы необходимо вызвать утилиту regsvr32.exe с опцией /u.
Технология Майкрософт COM является мощным инструментом, делающим возможным модификацию и расширение функциональных возможностей программного обеспечения в процессе его использования конечным пользователем и без изменения «ядра» программы. Технология Майкрософт COM легла в основу многокомпонентной системы индексации аудио, описанной в следующей главе.
Представленные в предыдущих главах стандарты легли в основу системы индексации аудиопоследовательностей, одним из разработчиком которой является автора данной работы. Главными требованиями, предъявляемыми к системы были:
· расширяемость – возможность дополнения функциональных возможностей сторонними разработчиками, кроме того система должна иметь возможность работы с различными форматами данных, в том числе и пользовательскими
· язык писания экспериментов – возможность описания последовательности действий над исходными данными
· визуализация – возможность графического представления как результатов всего эксперимента, так и любого его этапа
В данной главе будут представлены предложенные решения для первых
двух задач.
Решением первой задачи стало создания обобщенного программного интерфейса, с одной стороны предоставляющего унифицированный доступ ко всем компонентам обработки сигнала (получившим название процессоров), а с другой стороны, предоставляющего пользователю доступ по всех возможностям настройки работы процессора. Решение объединило два описанных в предыдущих главах стандарта – описание настроек процессора при помощи 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-строку с дефолтными настройками.
Компоненты чтения решают задачу возможности работы с различными форматами данных. Для добавления в систему поддержки нового формата данных пользователю необходимо реализовать представленный ниже интерфейс и зарегистрировать соответствующий компонент чтения в системе.
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.
Разработанная система предоставляет пользователю простой, интуитивно понятный и в то же время предоставляющий определенную свободу действий язык описания сценариев, основанный на XML. В этом разделе представлено описания языка описания сценариев.
Эксперимент состоит из отдельных этапов, каждый из которых описывается своим именованным сценарием. Сценарий содержит в себе список обрабатываемых данных и список процессоров для обработки.. Результаты работы процессоров последовательно передаются по сценарию слева на право. Результаты работы сценария сохраняются в базу по заданному имени. Количество позиций в списке выходных данных должно соответствовать количеству позиций в списке входных данных. Каждая строка завершается точкой с запятой.
Общий вид сценария следующий:
[имя_сценария] : [входные_данные_1], [входные_данные_2] … [входные_данные_N] | [процессор_1], [процессор_2] … [процессор_N] -> [имя_результата_1], [имя_результата_2] … [имя_результата_N];
В качестве входных данных могут выступать данные, хранящиеся в базе или в файле. При использовании даны, в хранящихся в базе необходимо предварять имя данных знаком ’&’ Результаты работы сценария сохраняются в базу данных.
Для улучшения читаемости сценария предусмотрена возможность переименования данных, процессоров:
[новое_имя] = [имя_понятное_системе];
Переименование может производиться в любом месте файла эксперимента и действует глобально.
Имена файлов записываются в двойных кавычках “имя_файла”. Для каждого сценария может использоваться список специфических настроек для каждого процессора. Список настроек процессоров для сценария задается в следующем виде:
<@ имя_сценария>[список настроек]</@>
Список настроек для процессоров выглядит следующим образом:
[имя_процессора]:<settings>
<свойство_1>[значение_свойства_1]</свойство_1>
<свойство_2>[значение_свойства_2]</свойство_2>
</settings>;
Представленные в данной главе решения задач, поставленных перед разработчиками системы индексации аудиопоследовательностей демонстрируют применение стандартов, описанных в первых двух главах для решения задач статистической радиофизики, одной и главных среди которых, на современном этапе развития, является задача индексации аудиопоследовательностей. Разработанная система обладает запасом гибкости, который может в дальнейшем позволить решать на ее основе и другие задачи обработки данных, например, задачу обработки изображений.
Представленное в данной работе описание стандартов XML и COM и их применение для построения системы индексации аудиопоследовательностей демонстрирует возможность использования данных технологий. Язык XML был использован в качестве основы для языка описания сценариев, а также для описания данных внутри системы. Технология COM использовалась для того, чтобы сделать возможным подключение дополнительных модулей обработки данных в процессе использования системы конечным пользователем. Проведенные на основе системы эксперименты продемонстрировали возможности системы и подтвердили ее полезность.
1. Xuedong Huang, Alex Acero, Hsiao-Wuen Hon. Spoken Language Processing, a guide to theory, algorithm and system development. //Prentice-Hall, 2001.
2. Л.Р. Рабинер. Скрытые Марковские Модели и их применение в избранных приложениях при распознавании речи: Обзор. //ТИИЭР т. 77, №2, февраль 1989.
3. Yi-Lin Lin, Gang Wei. Speech Emotion Recognition on HMM and SVM. Proceedings of the Fourth International Conference on Machine Learning and Cybernetics,// Guangzhou, 18-21 August 2005.
4. Ч. Кирк. XML в подлиннике.// BHV, 2003
5. Д.Роджерсон. Основы СОМ.
6. Э. Трельсен. Модель COM и применение ATL 3.0.//BHV, 2005
1. A - Трус А.А., Сорока А.М., Янь Цзиньбинь, У Ши, Егоров В.Н.Использование синтезатора речи по тексту в задачах образования // Тезисы международной научно-технической конференции, посвященной 45-летию МРТИ-БГУИР 19 марта 2009, Минск. - С. 291
2. A - Трус А.А., Сорока А.М., Алиев Р.М. Многокомпонентная система на платформе .NET для настройки и оптимизации алгоритмов анализа аудиосигналов // Труды VI Всероссийской научной конференции студентов, аспирантов и молодых ученых «Технологии Microsoft в теории и практике программирования» 1-2 апреля 2009, Москва. - С. 53 - 54
3. A - Трус А.А., Янь Цзиньбинь, У Ши,. Сорока А.М. Классификация аудиосигналов с использованием одноклассового метода опорных векторов для опорных векторов для систем поиска информации в мультимелиа-архивах // «Речевые технологии» №4 2009, Москва. – С. 15 - 24
4. A - Трус А.А., Янь Цзинбинь, Сорока А.М., Хейдоров И.Э., Верификация ключевых слов на основе мер доверительности и метода опорных векторов // «Электроника инфо» №5 2009, Минск. – С. 44 - 49
5. A - Трус А.А., Сорока А.М. Алгоритм построения векторов признаков на основе вейвлет-преобразования для классификации фонем русского языка // Труды 52-й научной конференции МФТИ «Современные проблемы фундаментальных и прикладных наук», Москва-Долгопрудный, 2009. - С. 103 - 106