ослідовно викликаючи вищеописані методи, нічого не повертає.
Клас, який відповідає за відображення інтерфейсу користувача - CompareMIDI. Містить методи, в яких описана реакція програми на відповідні дії користувача, а так само метод SelectFile (), в якому визначається вибраний для порівняння файл і повертається потік у файлі, що підтримує синхронні і асинхронні операції читання і запису. p align="justify"> І основний клас додаток - керуючий клас Comparer, він відповідає за порівняння двох мелодій, які передані на вхід користувачем. У ньому реалізовані наступні методи:
В· Compare () - проводиться порівняння двох мелодій, визначається їх процентне відповідність враховуючи такт, нічого не повертає
В· CompareMelody (MIDI. CompareData data1, MIDI. CompareData data2) - повертає найменше відстань між двома творами (int)
В· InTaktCompare (IList note1, IList note2) - проводиться порівняння двох наборів нот всередині такту за допомогою метрики Левенштейна. (Double)
В· TaktCompare (MIDI. CompareData data1, MIDI. CompareData data2) - проводиться порівняння двох наборів нот, враховуючи розбиття по тактам. (Double)
В· GetValueOfStringTransform (String str1, String str2, List editorialRequirement) - обчислює відстань між вхідними рядками (int)
Розглянемо алгоритм роботи програми більш докладно.
При натисканні В«ОглядВ» з'являється діалогове вікно вибору файлів для порівняння. Основні дії виконуються після натискання кнопки "Виконати порівнянняВ». p align="justify"> Алгоритм зчитування реалізований у методі Read (). У ньому спочатку відбувається зчитування попередньою інформацією: у файлі знаходиться і читається необхідна інформація (заголовний блок, тип файлу, кількість треків, їх довжина, їх вміст, кількість тиків, що припадають на чверть). Проводиться читання так званої карти темпу. Потім здійснюється детальний аналіз блоків MTrk (блок треку): послідовно проходиться блок і зчитується цілком структура MIDI-повідомлення (дельта-час, статус байт, байти даних). На основі цих даних формується список зіграних нот і номер такту, в якому ця нота зіграна. p align="justify"> Алгоритм порівняння без урахування тактів.
Для порівняння мелодій без урахування тактів, необхідно мати список зіграних нот (в алгоритмі з урахуванням такту, ще й номер такту, в якому грає нота). Так як ноти унікальні, то їм відповідно ставиться унікальний номер (від 0 до 127), а кожного номеру можна поставити у відповідність символ з таблиці Unicode-8, тобто список зіграних нот - перетворити в якусь рядок символів. Тоді алгоритм порівняння без урахування тактів буде виглядати насту...