Распознавание мелодии с помощью нечеткого поиска

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

ков программирования

Богатая библиотека готовых компонентов

Поддержка различных платформ (Compact Framework, Micro Framework)

Из самых очевидных плюсов C# можно выделить:

Высокая скорость разработки (благодаря Фреймворку)

Неплохое быстродействие, для подобных языков (например, в отличие от той же Java он предкомпилируемый, а не полностью интерпретируемый)

Одно из основных применений - приложения не критичные к производительности.# больше подходит для прикладного программирования под платформу Windows. Он унаследовал много полезных возможностей от других языков программирования и напрямую связан с двумя наиболее широко применяемыми в мире компьютерными языками - С и С++. C# разработан для создания переносимого кода. В среде Visual Studio и в языке C# реализованы:

Динамическая поддержка

Поддержка эквивалентности типов

Ковариация (позволяет использовать более производный тип, чем это указано в универсальном параметре)

Контрвариация (позволяет использовать менее производный тип)

Благодаря ковариации и контрвариации можно осуществлять неявное преобразование классов, реализующих вариантные интерфейсы и обеспечивать большую гибкость при сопоставлении сигнатур методов с типами вариантных делегатов.

Как модель программирования С#/.NET предусматривает универсальный средний уровень, который уже потом переводит прямо по ходу дела в микрокод конкретного железа с нужными оптимизациями. В самом языке реализовано все лучшее, что есть в императивных языках.

 

4. Интерфейс пользователя

 

Рассмотрим диаграмму вариантов использования (рис. 6), для того чтобы понять основные функциональные особенности разрабатываемого приложения. На основании доступных пользователю функций необходимо реализовать дружественный интерфейс.

Мы получаем, что пользователь должен иметь возможность выбора мелодий для сравнения (кнопки Обзор), вызова сравнения мелодий (кнопка Выполнить сравнение), а так же возможность просмотра информации о программе (кнопка О программе).

Рис. 6. Диаграмма вариантов использования (UseCaseDiagram)

 

Выбор мелодий для сравнения происходит на главном окне приложения, которое выглядит следующим образом:

 

Рис. 7. Главное окно приложения

 

Выбор мелодий для сравнения производится с помощью диалогового окна, которое вызывается по нажатию кнопки Обзор. При выборе файла для сравнения происходит отображение только папок для открытия и файлов, имеющих расширение *.mid. Данное ограничение введено для контроля данных, вводимых пользователем. Оно достигается фильтрацией отображаемых файлов по расширению.

Так же пользователю не может самостоятельно ввести полный путь к файлу, это позволяет не делать проверки типа выбранного файла, то есть гарантированно приложению будет передан звуковой файл с расширением.mid.

 

Рис. 8. Выбор файла для сравнения

 

Для выполнения сравнения мелодий необходимо выбрать соответствующее действие с помощью нажатия на кнопку Выполнить сравнение. При нажатии на кнопку происходит проверка на ввод всех необходимых данных. Если хотя бы одна мелодия не была выбрана, то будет выдано соответствующее сообщение пользователю.

 

Рис. 9. Некорректный ввод данных

В случае корректного ввода выполняется сравнение входных файлов. Результат сравнения отображается пользователю в окне сообщения.

 

Рис. 10. Результат работы программы

 

Информацию о приложении пользователь может узнать из соответствующего сообщения, вызвав его нажатием кнопки О программе.

 

Рис. 11. Отображение информации о приложении

 

5. Реализация

 

Приложение написано на объектно-ориентированном языке C#, что предполагает реализацию через классы. В приложение описано три класса, далее мы рассмотрим их подробнее.

 

Рис. 12. Классы приложения и их взаимосвязь

 

Класс-сущность, который реализует хранение считанных данных, - это класс MIDI, так же он выполняет считывание необходимых данных из указанного файла мелодии. В данном классе есть две структуры:

EventMidi - структура события миди. Содержит данные дельта-времени, статус-байта, байты данных

CompareData - структура, в которой хранится нота - соответствующий номер такта

Класс так же содержит поля и свойства, хранящие менее глобальные данные о мелодии:

CompData - список нот с соответствующим номером такта (List)

_offsetMTrk - список номеров позиций, с которых начинаются блоки MTrks (List)

_mTrks - список блоков MTrks, содержимое этих блоков в виде массива байтов (List)

Ppqn - количество тиков, приходящихся на четверть - PPQN (Pulse Per Quarter Note) (int)

MidiFormat - формат записи файла миди (возможные значения 0, 1, 2) (int)

TrackCount - количество блоков MTrk в файле (int)

Nn - числитель размера (значение по умолчанию 4)

Dd - знаменатель размера (значение по умолчанию 4)

Tempo - темп мелодии (значение по умолчанию 120ВРМ (beats per minute)) (int)

TickinShare - число тиков, приходящихся на одну долю (int)

TickinTakt - число тиков, приходящихся на один такт (int)

Для считывания данных из миди-файла в данном классе реализованы следующие методы:

ReadMThd() - осуществляет чтение блока MThd в миди файле, вычисляет значение Ppqn, TrackCount, MidiFormat, ничего не возвращает.

FindOffsetMTrk() - вычисляет позицию в миди-файле, с которой начинается очередной блок MTrk