Приложение для маскировки нежелательных звуковых эффектов
На рис. 3.18 приведен вид главной формы приложения. В верхней части отображается уровнеграмма открытого звукового файла. В левом углу расположена область для отображения основных характеристик файла (частота дискретизации, моно или стерео, длительность файла). По центру находится область, в которой можно задать границы фрагмента файла в миллисекундах и проиграть данный участок. В правом нижнем… Читать ещё >
Приложение для маскировки нежелательных звуковых эффектов (реферат, курсовая, диплом, контрольная)
Министерство образования и науки, молодежи и спорта Украины Донецкий национальный университет Кафедра компьютерных технологий Курсовая работа Тема: «Приложение маскировки нежелательных звуковых эффектов»
Исполнитель:
студент 3 курса кафедры КТ Руководитель:
доц., к.т.н.
Шарий Т.В.
Донецк, 2012
Министерство образования и науки, молодежи и спорта Украины
Донецкий национальный университет
Кафедра компьютерных технологий
Утверждаю
Зав.Кафедрой
Задание На курсовую работу студента__3__курса
_____________________________________________________________
(фамилия, имя, отчество) Специализация________________________________________________
Тема курсовой работы «Приложение маскировки нежелательных звуковых эффектов»
Вид работы (исследовательская, прикладная)__ _____прикладная____
Краткая постановка задачи: изучить литературу, разработать структуру базы данных, алгоритм и программу маскировки нежелательных звуковых фрагментов Исходные данные Литературные источники Ожидаемые результаты___БД, работоспособный программный продукт
Календарный план работы
Дата проведения консультации | Этап выполнения работы | Отметка о выполнении | |
Анализ источников | 02.02.2012 | Выполнено | |
Проектирование БД | 23.03.2012 | Выполнено | |
Написание SQL-запросов | 13.04.2012 | Выполнено | |
Тестирование программы | 11.04.2012 | Выполнено | |
Оценка курсовой работы (выставляется руководителем до защиты)____
Дата выдачи задания____________________
Руководитель (Ф.И.О., подпись)_________________________________
Студент (подпись)____________________________________________
РЕФЕРАТ
Отчет о курсовой работе: 38 с., 11 рис., 2 приложения, 7 источников.
Объект исследования — маскировка фрагментов звуковых файлов.
Цель работы — разработка базы данных приложения, позволяющего в удобном режиме проигрывать и редактировать фрагменты звуковых файлов, а также выбирать способ маскировки нежелательных фрагментов и эффектов и сохранять произведенные изменения в новом файле.
Метод исследования — изучение технологий компьютерной обработки звука и форматов звуковых файлов, методы проектирования БД и программирования.
Результат работы — база данных, созданная в среде MS Access, а также программа, написанная на языке Visual Basic и предоставляющая удобный интерфейс для загрузки звуковых файлов и фрагментов. Разработаны также дополнительные возможности, а именно: визуализация звукового сигнала с возможностью масштабирования, просмотр дополнительных сведений о звуковом файле, выбор границ участков звука для анализа и проигрывания с точностью до миллисекунды. Объем всех данных, используемых программой, ограничен только объемом доступной оперативной памяти.
Программный продукт может быть использован для решения определенного класса звукорежиссурных задач.
Дальнейшее развитие программы связано с расширением ее возможностей, включая автоматизированный поиск нежелательных фрагментов, а также созданием клиент-серверной версии приложения.
ЗВУКОВОЙ ФАЙЛ, MCI, WAVE, RIFF, МАСКИРОВКА, VISUAL BASIC, ЗВУКОВОЙ ФРАГМЕНТ.
СОДЕРЖАНИЕ Введение
1. Постановка задачи
2. Описание программных средств работы
2.1 Выбор СУБД
2.2 Интерфейс MCI
3. БД приложения маскировки нежелательных звуковых эффектов
3.1 Описание предметной области
3.2 ER-модель предметной области (сущности и связи)
3.3 Выбор и реализация модели данных
3.4 Концепуальная модель базы данных
3.5 Описание логической модели базы данных
3.6 Структура таблиц
3.7 Физическая модель БД
3.8 Описание SQL-запросов к базе данных
3.9 Описание приложения маскировки эффектов
3.10 Описание контрольного примера
3.11 Инструкция по эксплуатации программы Выводы Список ссылок Приложение А. Таблицы Приложение Б. Фрагменты листинга
ВВЕДЕНИЕ
В настоящее время популярны информационные технологии, связанные с обработкой различной мультимедийной аудиои видеоинформации. С ростом вычислительной мощности компьютеров у пользователей уже появляется возможность организации на своем ПК «министудии» с необходимой функциональностью для работы с личными коллекциями звуковых и видеофайлов.
Особой популярностью пользуются звуковые редакторы. Звуковой редактор (аудиоредактор) — это программа, включающая в себя набор инструментов, которые позволяют редактировать звуковые файлы на компьютере. Редактор позволяет работать со звуком в зависимости от набора инструментов и его возможностей. Наиболее известные аудиоредакторы Adobe Audition (в прошлом Cool Edit Pro), Sound Forge, WaveLab, Audacity, Wavosaur, GoldWave, MhWaveEdit и др.
Функции аудиоредакторов могут отличаться в зависимости от их предназначения. Самые простые из них, зачастую свободно распространяемые, имеют ограниченные возможности по редактированию звука и минимальное количество поддерживаемых аудиоформатов. Профессиональные пакеты могут включать многодорожечную запись, поддержку профессиональных звуковых плат, синхронизацию с видео, расширенный набор кодеков, огромное количество эффектов как внутренних, так и подключаемых — плагинов.
Среди полезных функций таких программ важное место занимает несомненно актуальная задача устранения (маскировки) нежелательных звуковых фрагментов, таких, как: нецензурные выражения, рекламные фразы, защищенные правом интеллектуальной собственности, шумовые эффекты и т. д. Наличие программы, облегчающей процесс поиска и маскировки таких фрагментов, важно как для звукорежиссеров, так и для рядовых пользователей.
В связи с этим, в курсовой работе поставлена цель: разработать алгоритм и программу редактирования звуковых файлов путем замены нежелательных фрагментов сигнала участками тишины либо произвольными короткими звуками, в зависимости от выбора пользователя. Программа должна предоставлять возможности визуализации звука и прослушивания произвольных участков звукового сигнала.
Для достижения поставленной цели необходимо проанализировать возможности и технологии компьютерной обработки звука; сформировать представление о форматах и разработать алгоритмы простейшей обработки звуковых файлов; разработать функции наглядного отображения звуковых файлов; разработать алгоритм удаления нежелательных звуковых фрагментов.
Наличие приложения с перечисленным функционалом позволит пользователю значительно облегчить процесс редактирования звуковых файлов.
1. ПОСТАНОВКА ЗАДАЧИ Целью работы является создание базы данных приложения, позволяющего пользователю в удобном автоматизированном режиме проигрывать и редактировать фрагменты звуковых файлов, а также выбирать способ маскировки нежелательных фрагментов и эффектов и сохранять произведенные изменения в новом файле.
Программа должна обладать следующим функционалом:
1. Авторизация пользователей. Разграничение доступа для разных категорий пользователей. Рядовые пользователи могут только просматривать и прослушивать результаты редакторской работы пользователей, входящих в группы, наделенные правами администраторов.
2. Организация хранения, редактирования и просмотра данных о звуковых фрагментах и файлах, с которыми производилась работа.
3. Ведение журнала событий: кто в каком файле и в каком месте произвел изменения.
4. Предоставление возможности выполнения различных запросов: количество звуковых фрагментов интересующей категории, минимальная, максимальная и средняя длительность файлов и фрагментов, с которыми работал конкретный пользователь, список наиболее активных пользователей и т. д.
5. Возможность выбора типа маскирующего фрагмента: тишина или фрагмент, хранящийся в базе данных; возможность добавить новый звуковой файл в качестве фрагмента в БД.
6. Наличие удобного пользовательского интерфейса.
Для достижения поставленной цели необходимо:
1. Изучить литературу по теме: компьютерная обработка звука, интерфейсы управления мультимедийными устройствами, проектирование и программирование в среде VisualBasic 6.0.
2. Разработать структуры для хранения и обработки необходимых данных в приложении.
3. Разработать структуру базы данных, ее концептуальную и логическую модель, а также структуру SQL-запросов для получения и изменения необходимой информации по предметной области
4. Программно реализовать функции загрузки и проигрывания звуковых файлов.
5. Программно реализовать алгоритм маскировки нежелательных звуковых фрагментов. Разработать интерфейс приложения.
6. Выполнить тестирование программы на тестовых примерах.
7. Написать инструкцию по эксплуатации программы.
2. ОПИСАНИЕ ПРОГРАММНЫХ СРЕДСТВ РАБОТЫ В этом разделе приводится рассмотрение использованных в курсовой работе программных средств для создания и управления базой данных (СУБД), а также для организации программной обработки звука средствами Visual Basic (интерфейс управления мультимедиа MCI).
2.1 Выбор СУБД Для приложения маскировки нежелательных звуковых эффектов, создаваемого в курсовой работе, характерно смещение в сторону программной обработки звуковых данных, относительно вопроса собственно хранения и доступа к внешним данным. Поэтому в качестве СУБД была выбрана относительно легковесная Microsoft Access. Microsoft Access — это функционально полная реляционная СУБД. В ней предусмотрены все необходимые средства для определения и обработки данных, а также для управления ими при работе с большими объемами информации.
СУБД Access предназначена для разработки баз данных реляционного типа для локального их использования на персональных компьютерах и для работы с этими базами.
При проектировании базы данных, в первую очередь, необходимо определить, что именно нужно хранить.
Данная СУБД была выбрана по следующим причинам:
§ простота средств реализации,
§ легкость освоения инструментарием разработчика (VBA),
§ наглядность визуализации информации.
Также «Microsoft Access» предоставляет большое количество внутренних средств по оптимизации работы проектируемого приложения. К ним относятся:
§ загрузка модулей по требованию;
§ оптимизация дерева вызовов;
§ использование файлов MDE;
§ автоматическая поддержка компилированного состояния;
§ использование библиотек Windows API;
§ индивидуальная настройка системы;
§ эффективное использование индексов;
§ встроенный оптимизатор запросов.
Система управления базами данных (СУБД) обычно поддерживает 4 основных типа отношений между таблицами:
— один-к-одному (одной записи в первой таблице соответствует одна запись во второй);
— один-ко-многим (одной записи в первой таблице соответствует много записей во второй);
— многие-к-одному (многим записям в первой таблице соответствует одна запись во второй);
— многие-ко-многим (одной записи в первой таблице соответствует много запией во второй и одной записи во второй таблице соответствует много записей в первой).
Связь любого из этих типов может быть обязательной, если в данной связи должен участвовать каждый экземпляр сущности, необязательной — если не каждый экземпляр сущности должен участвовать в данной связи. При этом связь может быть обязательной с одной стороны и необязательной с другой стороны.
В СУБД Access процесс создания реляционной базы данных включает создание схемы данных. Схема данных наглядно отображает таблицы и связи между ними, а также обеспечивает использование связей при обработке данных. В схеме данных устанавливаются параметры обеспечения целостности связей в базе данных.
2.2 Интерфейс MCI
база данные маскировка эффект В ОС Windows, начиная с версии 3.1, определён некоторый промежуточный уровень управления мультимедийными данными и устройствами — MCI (Media Control Interface — интерфейс управления мультимедиа). Он включает набор команд, посылаемых драйверам устройств [см. MCI Command Strings]. В MCI под устройством понимается драйвер, физическое мультимедиа-устройство и/или файл, которыми управляет этот драйвер. MCI-устройства, не использующие мультимедиа-файлов, называются простыми, а остальные — сложными.
Тип и драйвер устройства. Если драйвер поддерживает стандарт MCI, то при его установке Windows делает соответствующую запись в разделе [mci] файла system. ini (папка Windows), связывая драйвер с типом устройства. Этот тип впоследствии должен указываться в некоторых командах MCI (сам драйвер не указывается ни в одной команде). Часть драйверов устанавливается при установке Windows, часть — при последующей установке устройств и программ. В некоторых случаях нужную запись приходится делать вручную. Пример раздела [mci]:
[mci]
cdaudio=mcicda.drv
sequencer=mciseq.drv
waveaudio=mciwave.drv
avivideo=miroavi.drv
videodisc=mcipionr.drv
vcr=mcivisca.drv
MPEGVideo=mciqtz.drv
avivideo1=mciavi.drv
Animation1=mciaap.drv
QTWVideo=C:WINDOWSSYSTEMmciqtw.drv.
С одним и тем же типом устройства может быть связано несколько разных устройств (драйверов). В этом случае для идентификации драйвера по типу устройства к последнему добавляется номер устройства. Так, в предыдущем примере раздела [mci]используются устройства одного типа: avivideo и avivideo1. С первым связан AVI-драйвер miroavi. drv, использующий кодек видеоплаты MiroVideo, а со вторым — обычный AVI-драйвер Windows mciavi. drv, не использующий этого кодека.
Использование MCI-команд в программах. Программы, использующие MCI, посылают драйверам команды с помощью функций mciSendString и mciSendCommand из стандартной библиотеки Mmsystem. dll (папка WindowsSystem). Первая из них посылает команду в виде текстовой строки, а вторая — в виде стандартных констант и структур данных, которые предварительно нужно заполнить. Ввиду большей простоты рассмотрим только первый способ.
Прототип функции mciSendString на языке С имеет вид:
DWORD mciSendString (LPSTR lpstrComand,
LPSTR lpstrReturnString,
UINT wReturnLength,
HWND hwndCallback)
Первый параметр обязателен — это сама командная строка. Остальные необязательны. Они определяют буфер, куда посылается ответ, его длину и окно для посылки сообщения (notify) программе от устройства. Сама функция при успешном выполнении команды возвращает 0, а в случае ошибки — отрицательное значение. Это значение можно передать в качестве первого параметра функции mciGetErrorString (из той же библиотеки Mmsystem. dll) — функция возвратит текстовое описание ошибки:
UINT mciGetErrorString (DWORD dwError,
LPSTR lpstrBuffer,
UINT wLength)
Но не только в языке С можно использовать команды MCI. Ниже мы будем рассматривать авторские системы, в которых также используются эти команды. Они позволяют очень гибко управлять воспроизведением и записью мультимедийных данных. Например, в системе Toolbook для этого используется функция callMCI.
Работа программы с устройством начинается с его открытия командой open и заканчивается закрытием командой close. Незакрытое устройство не может быть открыто ещё раз, если оно не было объявлено обоими командами open как разделяемое (shareable). Приведем примеры последовательностей MCI-команд в основном командном потоке.
Синтаксис командной строки MCI. Командная строка имеет вид:
команда указатель_устройства параметры где команда — это название команды, например open, play, close;
указатель_устройства — это:
· тип устройства — для любой команды простого устройства, например cdaudio
· путь и имя файла в команде для сложного устройства, например c: windowsmediaTada. wav; в любой команде, кроме open может быть заменен псевдонимом (это, как правило, и происходит)
· псевдоним, установленный параметром alias предшествующей команды open, например s
· слово new в команде open при открытии устройства на запись (звука или видео)
· слово all — для посылки команды всем открытым в данной программе устройствам (можно применять только к командам, не возвращающим информацию), например, close all.
параметры — это (возможно пустая) последовательность параметров, разделённых пробелом, в которой каждый параметр — это непустая последовательность ключевых слов и значений, разделённых пробелами, например, time format tmsf, или type waveaudio, или from 0, или c: windowstemphaha. wav в команде save.
Параметры записываются в произвольном порядке, могут быть обязательными и необязательными. Их набор определяется командой, но два параметра являются общими для всех команд (и необязательными) — это wait и notify.
Использование параметра wait. Большинство MCI-команд запускает новый процесс, в котором участвует MCI-устройство, например, процесс проигрывания дорожки аудиодиска. Если в команде используется параметр wait, то команда ждёт окончания этого процесса, а затем передаёт управление дальше по программе. Досрочно продолжить выполнение программы (без прекращения MCI-процесса, т. е. параллельно с ним) в этом случае можно только нажатием клавиши прерывания CTRL+BREAK. С помощью MCI-команды break можно изменить эту клавишу или даже вовсе отменить возможность продолжения программы до окончания MCI-процесса.
Если же в MCI-команде отсутствует параметр wait, то она не ждёт окончания созданного ею MCI-процесса, а сразу передаёт управление дальше по программе, т. е. новый MCI-процесс выполняется параллельно с основной программой. Так легко можно озвучить любой программный фрагмент. В этом случае, как правило, в программе предусматривается досрочное прекращение MCI-процесса с помощью другой MCI-команды (например, close, pause или даже снова play), вызываемой каким-нибудь событием, например, щелчком мыши. Иногда программе необходимо ловить момент завершения параллельного MCI-процесса. Для этого в запускающей процесс MCI-команде используется параметр notify.
Использование параметра notify. Как уже говорилось выше, MCI-команда, запустив соответствующий MCI-процесс, может передать управление основной программе, после чего программа и этот процесс будут выполняться параллельно. Чтобы программа могла узнать о завершении параллельного MCI-процесса, не проверяя этого самостоятельно (что весьма затруднительно), можно в MCI-команде, запускающей процесс, использовать параметр notify. Это заставляет MCI-устройство в случае завершения процесса послать сообщение MM_MCINOTIFY, информирующее о характере завершения и устройстве. Сообщение автоматически направляется окну, указанному четвёртым параметром функции mciSendString, пославшей команду с параметром notify, и может быть обработано процедурой этого окна.
Язык, на котором пишется эта процедура, должна получать это сообщение своими средствами, т.к. MCI такой возможности не предоставляет. Процедура, отреагировав на сообщение MM_MCINOTIFY, может снова послать ту или иную MCI-команду, например, закрыть устройство, закончившее проигрывание.
Детали использования сообщения MM_MCINOTIFY рассматриваются в [Windows 3.1 Multimedia Reference/ Function Overview / Media Control Interface Services / Media Control Interface Messages / Window Notification Message / MM_MCINOTIFY]
В авторской системе Toolbook использование этого механизма значительно упрощено по сравнению с языками Visual С++ и Delphі.
Команды MCI делятся на:
· системные, выполняемые не MCI-устройствами, а самой системой (break, sysinfo);
· обязательные для всех MCI-устройств (capability, close, open, info, status);
· основные, представляющие общий набор параметров для тех MCI-устройств, на которых они выполняются (load, pause, record, resume, stop, play, save, seek, set);
· расширенные, набор и параметры которых определяются устройством.
Более подробная информация о них, а также о расширенных командах по каждому из основных типов устройств приведена в справочнике MCI Command Strings.
3. БД ПРИЛОЖЕНИЯ МАСКИРОВКИ НЕЖЕЛАТЕЛЬНЫХ ЗВУКОВЫХ ЭФФЕКТОВ
3.1 Описание предметной области Первым этапом проектирования базы данных и архитектуры приложения маскировки нежелательных звуковых эффектов является анализ предметной области и основных ее аспектов, а также требований, выдвигаемых к программе и БД.
К предметной области приложения относятся данные о редактируемых файлах, накладываемых звуковых фрагментах (если пользователь не выбирает накладывать фрагмент тишины), категориях фрагментов и событиях редактирования файлов. Также программа разделяет пользователей на группы по возможностям доступа и работы с приложением и БД. Рядовые пользователи могут только просматривать информацию, прослушивать файлы. Пользователи из администраторских групп могут редактировать файлы и редактировать информацию в БД.
Пользователю базы данных приложения может понадобиться информация о количестве звуковых фрагментов интересующей категории, минимальной, максимальной и средней длительности файлов и фрагментов, с которыми работал конкретный пользователь, списках наиболее активных пользователей и т. д.
Работа с приложением включает набор взаимосвязанных функций, действий и шагов (Рис. 3.1).
Авторизация пользователя — вход пользователя в систему с конкретными правами доступа и работы.
Открытие звукового файла — выбор и считывание файла для редактирования или прослушивания. Можно выбрать как файл, уже содержащийся в базе, так и новый файл в файловой системе.
Наложение фрагмента — пользователь указывает позицию в редактирумеом файле, начиная с которой фрагмент файла необходимо заменить выбранным пользователем фрагментом. Событие редактирования файла сохраняется в журнале.
Редактирование фрагментов — пользователь может добавить или удалить из БД тот или иной звуковой фрагмент.
Фиксация в журнале событий — сохранение информации по каждому изменению, проведенному каждым пользователем, в журнале.
Сохранение нового файла — файл с наложенными фрагментами сохраняется на диске, а также создается запись в базе данных, связанная с ним.
Рисунок 3.1 — Схема функционирования приложения маскировки звуков
Каждая стадия требует определенной информации. Кратко укажем соответствие требуемой информации для каждого из этапов:
Анализ требуемых услуг — сведения о владельце, автомобиле, описания услуг.
Прием заказа — описания услуг, сведения о работниках.
Выполнение заказа — описания услуг, сведения об автомобиле.
Реализация заказа — сведения о владельце, автомобиле, описания услуг.
Таким образом, на основе анализа предметной области приложения можно сказать, что программа должна давать возможность ведения базы данных по пользователям, файлам, фрагментам и событиям редактирования.
Входные данные приложения:
— по пользователям — логин, пароль и группа пользователя;
— по файлам — путь к файлу, частота дискретизации звукового сигнала, число бит на отсчет сигнала, длительность сигнала;
— по фрагментам — путь к файлу, частота дискретизации звукового сигнала, число бит на отсчет сигнала, длительность сигнала;
— по событиям — имя файла, имя фрагмента, имя пользователя и отсчет файла, на котором было произведено редактирование.
Выходные данные приложения:
— отредактированные файлы и фрагменты;
— журнал событий по файлам, пользователям и фрагментам;
— результаты запросов информации по определенным ключам и фильтрам.
3.2 ER-модель предметной области (сущности и связи) При построении концептуальной модели воспользуемся ER-моделью. Основными понятиями ER-модели являются сущность, связь и атрибут.
Сущность — это реальный или представляемый объект, информация о котором должна сохраняться и быть доступна. В диаграммах ER-модели сущность представляется в виде прямоугольника, содержащего имя сущности. При этом имя сущности — это имя типа, а не некоторого конкретного экземпляра этого типа. Имя сущности может сопровождаться примерами конкретных объектов этого типа.
Каждый экземпляр сущности должен быть отличим от любого другого экземпляра той же сущности.
Связь — это графически изображаемая ассоциация, устанавливаемая между двумя сущностями. Эта ассоциация всегда является бинарной и может существовать между двумя разными сущностями или между сущностью и ей же самой (рекурсивная связь). В любой связи выделяются два конца, на каждом из которых указывается имя конца связи, степень конца связи (сколько экземпляров данной сущности связывается), обязательность связи.
На основе анализа предметной области приложения маскировки нежелательных звуковых эффектов, проведенного выше, можно выделить следующие объекты-сущности: пользователь, файл, фрагмент, событие (из журнала событий). Эти объекты характеризуются уникальным собственным перечнем свойств.
Сущность «Пользователь» — содержит данные о пользователях.
Сущность «Файл» — содержит данные о редактируемых файлах.
Сущность «Фрагмент» — содержит данные о накладываемых звуковых фрагментах.
Сущность «Категория фрагмента» — содержит данные о категориях, к которым относится тот или иной фрагмент.
Сущность «Журнал событий» — содержит данные о событиях редактирования файлов (наложения звуковых фрагментов).
Между объектами предметной области существуют связи, которые должны быть отражены в виде связей между объектами инфологической модели. Различают идентифицирующую связь и не идентифицирующую связь. При установлении не идентифицирующей связи дочерняя сущность остается независимой. Экземпляр сущности родителя может существовать независимо от экземпляров дочерней сущности.
В разработанной схеме все объекты связаны идентифицирующей связью.
Выделим необходимые отношения между объектами исходя из схемы сущность — связь, представленной на рисунке 3.2:
1) Пользователь редактирует файл;
2) Действие пользователя фиксируется в журнале событий;
3) Фрагмент фиксируется в журнале событий;
4) Редактируемый файл фиксируется в журнале событий;
5) Фрагмент относится к конкретным категориям.
Рисунок 3.2 — Схема ER (сущность-связь)
3.3 Выбор и реализация модели данных
база данные маскировка эффект Из приведенного описания схемы (Рис. 3.2) видно, что для проектирования БД можно воспользоваться реляционной моделью данных (об этом свидетельствует наличие связей «один-ко-многим»).
Реляционная модель данных некоторой предметной области представляет собой набор отношений (двумерных таблиц), изменяющихся во времени.
В общем случае можно считать, что реляционная БД включает одну или несколько таблиц, объединенных смысловым содержанием, а также процедурами контроля целостности и обработки информации в интересах решения некоторой прикладной задачи. Например, при использовании СУБД Microsoft Access в файле БД наряду с таблицами хранятся и другие объекты базы: запросы, отчеты, формы, макросы и модули.
Достоинство реляционной модели заключается в простоте, понятности и удобстве физической реализации. С помощью одной таблицы удобно описывать простейший вид связей между данными, а именно деление одного объекта, информация о котором хранится в таблице, на множество подобъектов, каждому из которых соответствует строка или запись таблицы. Физическое размещение данных в реляционных базах на внешних носителях легко осуществляется с помощью обычных файлов.
Основными недостатками реляционной модели являются отсутствие стандартных средств идентификации отдельных записей и сложность описания иерархических и сетевых связей.
Для обеспечения информационной деятельности организации автосервиса логично использовать информацию указанную в описании предметной области. Хранение данной информации создании базы данных «Автосервис» полагает использование некоторого набора основных атрибутов предметной области. Приведем список основных атрибутов предметной области:
1. Логин пользователя.
2. Пароль пользователя.
3. Роль (группа) пользователя.
4. Имя редактируемого файла.
5. Имя файла, содержащего звуковой фрагмент.
6. Категория фрагмента.
7. Описание области использования фрагментов.
8. Частота дискретизации звукового сигнала.
9. Количество бит на отсчет звукового сигнала.
10. Длительность сигнала в секундах.
11. Частота дискретизации звукового фрагмента.
12. Количество бит на отсчет звукового фрагмента.
13. Длительность фрагмента в секундах.
14. Номер отсчета отредактированного сигнала, начиная с которого пользователь осуществил наложение фрагмента.
3.4 Концептуальная модель базы данных За основу при построении концептуальной модели взяты результаты ER-диаграммы, приведенной на рис. 3.2.
На рис. 3.3 приведен вид концептуальной модели приложения маскировки нежелательных звуковых эффектов на основе реляционного подхода:
Рисунок 3.3 — Концептуальная модель данных приложения Сущность «Файл» связана с сущностью «Фрагмент» отношением «один-ко-многим», хотя в большинстве случаев в предметной области приложения маскировки звуковых эффектов фрагмент однозначно идентифицируется с файлом, его содержащим. Однако в дальнейшей перспективе развития программы вполне вероятно, что из одного файла будут извлекаться несколько фрагментов, в связи с чем отношение «один-ко-многим» является уместным, и в данном случае облегчит изменение кода.
3.5 Описание логической модели базы данных Логическое проектирование БД включает следующие этапы:
1. Определение таблиц.
2. Определение полей таблиц.
3. Определение типов данных в соответствии с выбранной СУБД.
4. Определение длины каждого поля таблиц.
5. Определение обязательности каждого поля.
6. Определение индексации каждого поля.
Основной структурой хранения при реляционном подходе является отношение (таблица) со следующими свойствами:
— Каждый столбец содержит информацию одного типа.
— Ячейки — поля — таблицы не содержат структур или массивов данных.
— Таблицы не содержат одинаковых строк.
— Порядок строк и столбцов не имеет значения. Все операции используют содержательную сторону данных, а не их расположение внутри таблицы.
Для описания связей вводятся первичные ключи, позволяющие указывать ровно одну строку (кортеж) таблицы. Значение ключа используется для ссылки в других таблицах, что и является отображением связей данных. Поскольку первичный ключ играет ведущую роль в описании связей и поиске данных, размер ключа стараются сделать минимальным для оптимизации поиска. Это приводит к использованию номеров или кодов в качестве первичных ключей.
Запишем полный кортеж (начальное отношение) для предметной области приложения маскировки звуковых эффектов:
Таблица 3.1. Нормализованное универсальное отношение в 1 НФ
Наименование атрибута | Тип атрибута | ||
1. | Логин | Символьный | |
2. | Пароль | Символьный | |
3. | Роль (группа) | Символьный | |
4. | Имя редактируемого файла | Символьный | |
5. | Имя файла, содержащего фрагмент | Символьный | |
6. | Категория фрагмента | Символьный | |
7. | Область использования фрагмента | МЕМО | |
8. | Частота дискретизации сигнала | Целый | |
9. | Кол-во бит на отсчет сигнала | Целый | |
10. | Длительность сигнала | Длинный целый | |
11. | Частота дискретизации фрагмента | Целый | |
12. | Кол-во бит на отсчет фрагмента | Целый | |
13. | Длительность фрагмента | Длинный целый | |
14. | Номер отсчета отредактированного сигнала, начиная с которого пользователь осуществил наложение фрагмента. | Длинный целый | |
Процесс проектирования с использованием декомпозиции представляет собой процесс последовательной нормализации схем отношений, при этом каждая последующая итерация соответствует нормальной форме более высокого уровня и обладает лучшими свойствами по сравнению с предыдущей.
Каждой нормальной форме соответствует некоторый определенный набор ограничений, и отношение находится в некоторой нормальной форме, если удовлетворяет свойственному ей набору ограничений.
В теории реляционных БД обычно выделяется следующая последовательность нормальных форм:
— первая нормальная форма (1НФ);
— вторая нормальная форма (2НФ);
— третья нормальная форма (3НФ);
— нормальная форма Бойса — Кодда (НФБК);
— четвертая нормальная форма (4НФ);
— пятая нормальная форма (5НФ).
В курсовой работе была проведена нормализация базы данных до 3НФ.
Для функциональных зависимостей как фундаментальной основы проекта БД были проведены исследования, позволяющие избежать избыточного их представления.
Отношение находится в первой нормальной форме тогда и только тогда, когда на пересечении каждого столбца и каждой строки находятся только элементарные значения атрибутов.
Отношение находится во второй нормальной форме тогда и только тогда, когда оно находится в первой нормальной форме и не содержит неполных функциональных зависимостей не первичных атрибутов от атрибутов первичного ключа.
Отношение находится в третьей нормальной форме тогда и только тогда, когда оно находится во второй нормальной форме и не содержит транзитивных зависимостей.
Представим функциональные зависимости для таблицы в 3НФ:
Таблица 3.2. Таблицы данных в 3НФ
ID_Пользователя | Логин пользователя | Пароль пользователя | Группа пользователя | |
ID_Файла | Имя файла | Длительность сигнала | Частота дискретизации сигнала | Число бит на отсчет сигнала | |
ID_Категории фрагмента | Название категории цены | Область применения категории | |
ID_Фрагмента | ID_Категории | ID_Файла | Примечание | |
ID_События | Отсчет события | ID_Пользователя | ID_Файла | ID_Фрагмента | |
3.6 Структура таблиц По результатам логического моделирования в среде Access были созданы следующие таблицы, реализующие сущности и связи между ними, описанные выше.
Сущность «Категория фрагмента» представлена в виде следующей таблицы:
Рисунок 3.4 — Таблица Categories
Сущность «Пользователь приложения» представлена в виде следующей таблицы:
Рисунок 3.5 — Таблица Users
Сущность «Файл» представлена в виде следующей таблицы:
Рисунок 3.6 — Таблица Files
Сущность «Фрагмент» представлена в виде следующей таблицы:
Рисунок 3.7 — Таблица Fragments
Сущность «События» представлена в виде следующей таблицы:
Рисунок 3.8 — Таблица Logs
Общая схема данных БД приведена на рис. 3.9.
Рисунок 3.9 — Схема данных БД
3.7 Физическая модель БД В курсовой работе используется локальная база данных, размещенная на одной рабочей станции и представленная одним файлом masking_db.MDB.
Можно произвести оценочные расчеты занимаемого базой объема внешней памяти. Подсчитаем, сколько байт занимает каждый кортеж из спроектированных таблиц (в наихудшем случае).
Таблица Users:
UserID — 4 байта; login — 15 символов (30 байт для кодировки юникод); password — 20 символов (40 байт); role — 15 символов (30 байт).
Итого, объем занимаемой памяти равен 104Х байт, где Х — число кортежей таблицы.
Таблица Files:
FileID — 4 байта; Filename — 100 символов (200 байт для кодировки юникод); length — 4 байта; freq — 2 байта; bits — 2 байта.
Итого, объем занимаемой памяти равен 212Х байт, где Х — число кортежей таблицы.
Таблица Fragments:
FragmentID — 4 байта; FileID — 4 байта; CatID — 4 байта.
Итого, объем занимаемой памяти равен 12Х байт, где Х — число кортежей таблицы.
Таблица Categories:
CategoryID — 4 байта; catname — 25 символов (50 байт для кодировки юникод); area — 100 символов (200 байт).
Итого, объем занимаемой памяти равен 254Х байт, где Х — число кортежей таблицы (но поле area обычно не превышает по размеру 40 байт).
Таблица Logs:
LogID — 4 байта; UserID — 4 байта; FileID — 4 байта; FragmID — 4 байта; time — 4 байта.
Итого, объем занимаемой памяти равен 20Х байт, где Х — число кортежей таблицы.
3.8 Описание SQL-запросов к базе данных В этом подпункте приведем примеры основных запросов, выполняемых приложением в БД. Запрос «Выдать среднюю длительность звуковых фрагментов, относящихся к категории ANIMALS»:
Рисунок 3.10 — Запрос выдачи средней длительности фрагментов
SQL-код запроса:
SELECT Avg (Files.length) AS [Avg-length]
FROM Files INNER JOIN (Categories INNER JOIN Fragments ON Categories. CategoryID = Fragments. CatID) ON Files. FileID = Fragments. FileID
WHERE (((Categories.area)="animals"));
Запрос «Выдать всех пользователей системы в порядке убвания их активности (числа записей, связанных с ними, в журнале событий)»:
Рисунок 3.11 — Запрос выдачи пользователей в порядке убывания их активности
SQL-код запроса:
SELECT Users. login, Logs. UserID, Count (Logs.UserID) AS [Count-UserID]
FROM Users INNER JOIN Logs ON Users. UserID = Logs. UserID
GROUP BY Users. login, Logs. UserID
ORDER BY Count (Logs.UserID) DESC;
Запрос «Выдать звуковой фрагмент системы, имеющий наименьшую длительность»:
SQL-код запроса:
SELECT Files. filename, Files. length
FROM Files INNER JOIN Fragments ON Files. FileID=Fragments.FileID
WHERE Files. length=(SELECT MIN (Files.length)
FROM Files INNER JOIN Fragments ON Files. FileID=Fragments.FileID);
Рисунок 3.12 — Запрос выдачи фрагментов с минимальной длительностью
Соответственно, запрос на выдачу фрагмента максимальной длительности:
SELECT Files. filename, Files. length
FROM Files INNER JOIN Fragments ON Files. FileID=Fragments.FileID
WHERE Files. length=(SELECT MAX (Files.length)
FROM Files INNER JOIN Fragments ON Files. FileID=Fragments.FileID);
Запрос на выдачу информации обо всех звуковых фрагментах:
SELECT Files. filename, Files. length, Files. freq, Categories. Catname
FROM Files INNER JOIN (Fragments INNER JOIN Categories ON Fragments. CatID = Categories. CategoryID)
ON Fragments. FileID = Files. FileID;
Запрос на получение данных о логине пользователя, отредактированном файле и начальном отсчете редактирования (для отображения в журнале) выглядит так:
SELECT Users. login, Files. filename, Logs. time
FROM Users INNER JOIN (Logs INNER JOIN Files ON Logs. FileID = Files. FileID)
ON Logs. UserID = Users. UserID;
Приведем также пример запроса на добавление записи. Нового пользователя можно добавить с использованием следующего запроса:
INSERT INTO [Users] ([login], [password], [role]) VALUES
(`newUser', '555', `user');
3.9 Описание приложения маскировки эффектов
Основной объект, с которым работает приложение маскировки нежелательных звуковых фрагментов, это объект «Аудиосигнал». Как исходный рекдактируемый звуковой файл, так и файл накладываемого фрагмента, являются разновидностями данного объекта.
Аудиосигнал представлен классом AudioSignal (рис. 3.12), в котором определены свойства: полное имя файла — строковая переменная; массив сэмплов амплитудно-временного представления звукового файла — целочисленного типа. Остальная информация о файле содержится в структурах: RIFF — в которой содержится заголовок RIFF и число байт в файле; WAVE — в которой содержатся параметры аудиосигнала; DATA — в которой содержится данные секции DATA.
На рисунке Б.1 приведен код описания аудиосигнала на языке VisualBasic.
В соответствии с проработанным материалом и изученными возможностями компьютерной обработки звука разработан следующий алгоритм маскировки нежелательных звуковых фрагментов:
1. Загрузка в программу звукового файла, который необходимо отредактировать путем замены нежелательного звука другим звуковым фрагментом.
2. Указание позиций редактируемого участка сигнала в миллисекундах с возможностью его прослушивания.
3. Выбор звукового файла, который содержит звук, которым маскируется нежелательный фрагмент (либо выбор «тишины»).
4. Обработка файла (Processing): непосредственное редактирование массива семплов звукового сигнала.
5. Шаги 2−4 можно повторять произвольное число раз. В конечном итоге, сохранить отредактированный файл.
Разработка программы.
Платформа разработки — Windows 9X / NT / 2000 / XP / Vista.
Инструментальные средства — среда разработчика VisualBasic 6.0.
Язык программирования — Visual Basic.
Рисунок 3.12 — Схема объекта «Аудиосигнал»
Физическая организация программы. При разработке физической архитектуры были выделены следующие модули (для каждого объекта был создан отдельный модуль):
· AudioSignal. cls — в этом файле описан класс AudioSignal.
· MaskerForm. frm — в этом файле содержится код главной формы приложения.
· SoundsForm. frm — в этом файле содержится код формы выбора и загрузки в программу звуковых фрагментов.
· OpenFileDialog. frm — в этом файле содержится код формы выбора и загрузки в программу редактируемого звукового файла.
· SaveFileDialog. frm — в этом файле содержится код формы сохранения отредактированного звукового файла.
· About. frm — в этом файле содержится код формы отображения справочной информации о программе.
На рисунке 3.13 графически показана архитектура программы.
Рисунок 3.13 — Схема физической организации программы
Логическая структура программы в виде иерархии ключевых функций программы и функций-членов классов представлена на рисунке 3.14.
Краткое описание приведенных функций:
Public Sub ReadFile (Path As String) — функция считывания звукового файла как двоичного по его полному имени (строка) и заполнения всех необходимых структур и массива сэмплов звукового сигнала.
Public Sub SaveFile (FileName As String) — функция сохранения / создания звукового файла.
MaskerForm_Load ()
OpenMenuItem_Click () OpenFileDialog ()
ReadFile ()
FillFileInfo ()
SaveMenuItem_Click () SaveFileDialog ()
SaveFile
FillFileInfo ()
ProcessMenuItem_Click () ProcessSignal ()
DrawWave ()
DrawFragmentWave ()
PlayButton_Click () PlayFragment ()
MciSendString ()
ZoomIn_Click () ZoomIn ()
ZoomOut_Click () ZoomOut ()
FillFileInfo () GetChannels ()
GetSamplesPerSec ()
GetBitsPerSample ()
GetLength ()
MaskerForm_Paint () DrawWave ()
DrawFragmentWave ()
MciSendString ()
SetStartingPos ()
SetEndingPos ()
CheckPositionsValidity ()
Рисунок 3.14 — Иерархия функций программы
Public Sub ProcessSignalWithSilence (StartPos As Long, EndPos As Long) — функция маскировки исходного звукового сигнала участком аболютной тишины (значения сэмплов равны 0).
Public Sub ProcessSignalWithSound (StartPos As Long, EndPos As Long, Fragment As AudioSignal) — функция маскировки исходного звукового сигнала участком другого звукового сигнала (маскирующего фрагмента).
Public Sub PlayFragment (StartPos As Long, EndPos As Long) — функция проигрывания участка звукового файла (границы задаются в миллисекундах).
Public Function GetLength () As String — возвращает длительность файла в миллисекундах.
Public Sub FillFileInfo () — функция заполнения текстовых полей главной формы, отоьражающих основные характеристики звукового файла.
Public Sub DrawWave () — функция отображения уровнеграммы звукового файла с возможностью масштабирования и подсветки маскируемого фрагмента сигнала.
Public Sub DrawFragmentWave () — функция отображения уровнеграммы звукового файла маскирующего фрагмента.
Private Declare Function mciSendString Lib «winmm.dll» _
Alias «mciSendStringA» _
(ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long — импортируемая из стандартной библиотеки Windows функция для работы с MCI.
Public Function GetBitsPerSample () As Integer — возвращает число бит на отсчет звукового сигнала.
Public Function GetSamplesPerSecond () As Long — возвращает число отсчетов в секунду сигнала (частоту дискретизации).
Public Function GetSample (pos As Long) As Integer — возвращает значение конкретного сэмпла (отсчета).
Public Function GetSamplesNumber () As Long — возвращает число сэмплов (размерность массива отсчетов).
Public Function GetChannels () As Integer — возвращает число каналов (моно или стерео).
Код указанных функций приведен в приложении.
Перейдем к рассмотрению интерфейса программы.
В меню главного окна содержатся пункты:
· «File» — работа со звуковыми редактирумеыми файлами (открытие / сохранение) и выход из программы.
· «Process» — пункт меню для начала обработки звукового файла (маскировки указанного пользователем фрагмента).
· «Sounds» — пункт меню для вызова формы выбора звукового файла с необходимым маскирующим звуком.
· «View» — позволяет масштабировать амплитудно-временное представление звукового файла в верхнем окне главной формы приложения. Содержит подпункты Zoom In (увеличить масштаб) и Zoom Out (уменьшить масштаб).
· «Help» — информация о функциях программного продукта и об его авторе.
Организация диалога с пользователем осуществляется посредством диалоговых окон.
На рисунке 3.15 приведена иерархия всех окон программы.
Дадим описание окнам, предоставляемым программой.
Рисунок 3.15 — Иерархия окон
Окно открытия файла — его вид показан на рис. 3.16. В верхнем выпадающем списке выбирается диск, в списке ниже — путь директории. Справа, в списке отображаются файлы, находящиеся в указанной директории. Кнопка ОК — для подтверждения выбора файла.
Окно сохранения в файле — имеет похожий вид (рис. 3.17), только в нижнем текстовом поле имеется возможность ввода нового имени файла для сохранения.
Окно справки — в нем выводится краткая информация о названии, версии программного продукта и об авторских правах.
Рисунок 3.16 — Окно открытия файла
Рисунок 3.17 — Окно сохранения файла
Рисунок 3.18 — Главная форма приложения
На рис. 3.18 приведен вид главной формы приложения. В верхней части отображается уровнеграмма открытого звукового файла. В левом углу расположена область для отображения основных характеристик файла (частота дискретизации, моно или стерео, длительность файла). По центру находится область, в которой можно задать границы фрагмента файла в миллисекундах и проиграть данный участок. В правом нижнем углу отображается уровнеграмма того звукового файла, которым будет маскироваться нежелательный участок исходного файла. Если выбрать кнопку-переключатель «Silence Fragment», то участок будет при обработке заменяться нулевыми сэмплами (отсутствием звука вообще).
На рис. 3.19 приведен вид формы выбора звуковых фрагментов. В верхнем выпадающем списке выбирается диск, в списке ниже — путь директории. Справа, в списке отображаются файлы, находящиеся в указанной директории. Кнопка ОК — для подтверждения выбора файла. При переборе файлов в нижней области окна автоматически обновляется область с амплитудно-временным представлением выбранного звукового файла.
Рисунок 3.19 — Форма выбора звуковых фрагментов
3.10 Описание контрольного примера
Рассмотрим механизм маскировки нежелательных звуковых фрагментов на примере. Загрузим в систему звуковой файл test. wav с записанной речью. Файл загрузился нормально: программа отобразила его характеристики и уровнеграмму. Укажем в главной форме границы маскируемого участка: от 200 мс до 480 мс. Прослушаем его. Проигрывание произошло успешно. Выберем кнопку-переключатель «Silence Fragment». После чего выберем пункт меню «Process». Файл обработан успешно (рис. 3.20). После чего сохраним отредактированный файл под именем Test_edited.wav с помощью меню File/Save.
Рисунок 3.20 — Вид главной формы после заполнения участка файла тишиной
В качестве второго примера рассмотрим механизм маскировки нежелательных звуковых фрагментов конкретным звуком из другого файла. Загрузим в систему звуковой файл test. wav с записанной речью. Файл загрузился нормально: программа отобразила его характеристики и уровнеграмму. Укажем в главной форме границы маскируемого участка: от 200 мс до 480 мс. Прослушаем его. Проигрывание произошло успешно. Выберем кнопку-переключатель «Sound Fragment». Далее с помощью меню Sounds выберем файл, звук из которого будет вставляться вместо нежелательного фрагмента исходного файла. После подтверждения выбора файла в правом нижнем углу отобразится его уровнеграмма. После чего выберем пункт меню «Process». Файл обработан успешно (рис. 3.21). После чего сохраним отредактированный файл под именем Test_edited_cuckoo.wav с помощью меню File/Save.
Рисунок 3.21 — Вид главной формы после заполнения участка файла фрагментом звукового файла
3.11 Инструкция по эксплуатации программы Для установки программы не требуется дополнительных библиотек — необходимо просто скопировать в необходимую директорию исполняемый файл программы masking. exe и файл БД masking_db.mdb.
Типовая последовательность действий при работе с приложением такова:
1) Загрузка файла («Open» пункта меню «File»). С помощью пункта меню View можно масштабировать изображение уровнеграммы загруженного сигнала.
2) Выбор типа маскирующего участка (Sound Fragment Silence или Fragment).
3) При выборе опции «Sound Fragment» загрузить с помощью окна Sounds (пукнт меню Sounds) конкретный файл с необходимым маскирующим звуком.
4) Указать границы нежелательного фрагмента в миллисекундах. Имеется возможность также прослушать его.
5) Выбрать пукнт меню «Process» для автоматической обработки файла. При необходимости можно указывать границы фрагментов произвольное число раз и обрабатывать файл.
6) Сохранить полученный файл с помощью пункта меню File / Save.
Пример журнала событий приведен на рис. 3.22
Рисунок 3.22 — Журнал событий
ВЫВОДЫ
В результате проделанной работы была создана БД приложения, позволяющего пользователю в удобном автоматизированном режиме проигрывать и редактировать фрагменты звуковых файлов, а также выбирать способ маскировки нежелательных фрагментов и эффектов и сохранять произведенные изменения в новом файле. В ходе решения данной задачи были решены следующие подзадачи.
На основе анализа литературных источников по теме компьютерной обработки звука и интерфейсов управления мультимедийными устройствами, проектирования и программирования в среде VisualBasic 6.0 были программно реализованы функции загрузки и проигрывания звуковых файлов.
На основе анализа предметной области, была разработана структура базы данных для хранения и обработки необходимых данных в приложении, а именно: таблица «Файлы» для представления исходных звуковых файлов; таблица «Фрагменты» — для представления маскирующих фрагментов; таблица «Пользователи» — для хранения данных о пользователях системы; таблица «Категории» — для хранения категорий звуковых фрагментов; таблица «Журнал» — для ведения журнала событий, в качестве которых выступает редактирование конкретными пользователями конкретных файлов (наложение звуковых фрагментов). Программно реализован алгоритм маскировки нежелательных звуковых фрагментов. Разработан интерфейс приложения. Пользователю предоставляется возможность выбрать тип маскирующего фрагмента: заполнять нежелательный участок тишиной либо звуком из другого файла.
Многократное тестирование программы на контрольных примерах продемонстрировало отсутствие сбоев и адекватность результатов. К программе прилагается написанная инструкция по эксплуатации.
СПИСОК ССЫЛОК
1. Аудиоредактор [Электронный ресурс] / URL: http://ru.wikipedia.org/wiki/ Аудиоредактор / 20.05.2011.
2. Петелин Р. Ю., Петелин Ю. В. Звуковая студия в PC. — СПб.: BHV-Санкт-Петербург. — 1998. — 256с.:ил.
3. Секунов, Н. Ю. Обработка звука на РС. — СПб.: БХВ-Петербург, 2001. — 1248с.
4. Wave File Format — The Sonic Spot [Электронный ресурс] / URL: http://www.sonicspot.com/guide/wavefiles.html / 01.01.2008.
5. Описание интерфейса MCI в MSDN [Электронный ресурс] / URL: http://msdn.microsoft.com/en-us/library/ms709461.aspx / 20.05.2011.
6. Сергеев В. А. Наиболее полное руководство для профессиональной работы в среде Visual Basic 6.0. — СПб.: БХВ-Петербург, 2004. — 992с.
7. Дейт К., Дж.
Введение
в системы баз данных, 6-е издание — К.; М.; СПб.: Издательский дом «Вильямс», 2000.
8. Карпова Т. С. Базы данных: модели, разработка, реализация. — СПб.: Питер, 2002. — 304 с.
9. Гетц К., Гилберт М. Программирование на Visual Basic 6 и VBA. Руководство разработчика. — СПб.: БХВ-Петербург, 2001. — 912с.
ПРИЛОЖЕНИЕ А
Примеры таблиц
Рис. А.1
Рис. А.2
Рис. А.3
Приложение Б
Фрагменты листинга
Private Type RIFF_HEAD
riffFmt As String * 4
lenOfFileData As Long
End Type
Private Type WAVE_HEAD
waveFmt As String * 8
lenOfChunk As Long
format As Integer
channels As Integer
samplesPerSecond As Long
avgBytesPerSecond As Long
blockAlign As Integer
bitsPerSample As Integer
End Type
Private Type DATA_HEAD
datastr As String * 4
lenOfChunk As Long
End Type
Private Riff As RIFF_HEAD
Private Wave As WAVE_HEAD
Private Data As DATA_HEAD
Private samples () As Integer
Private FileName As String
Public StartFragment As Long
Public EndFragment As Long