Разработка программы для редактирования аудио файлов

Автор работы: Пользователь скрыл имя, 11 Декабря 2013 в 23:28, курсовая работа

Описание работы

Целью данного курсового проекта является написание программы которая позволяла бы воспроизводить и обрезать MP3 и WAV файлы, а также изменять громкость и скорость воспроизведения дорожки, вырезанного фрагмента WAV файла.
Для реализации данного проекта был выбран язык C#, как один из лучших и простых объектно-ориентированных языков программирования на данный момент.

Содержание работы

ВВЕДЕНИЕ 3
1 ПОСТАНОВКА ЗАДАЧИ 4
1.1ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ 4
1.2 ПОСТАНОВКА ЗАДАЧИ 9
2 ПРОЕКТИРОВАНИЕ 10
2.1 ВЫБОР ОПЕРАЦИОННОЙ СИСТЕМЫ 10
2.2 ВЫБОР ЯЗЫКА ПРОГРАММИРОВАНИЯ 10
2.3 ВЫБОР ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПРОМЕЖУТОЧНОГО УРОВНЯ 10
2.4 ВЫБОР ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ 11
3 РАЗРАБОТКА 12
3.1 ВЫБОР АРХИТЕКТУРЫ СИСТЕМЫ 12
3.2 ПОСТРОЕНИЕ ДИАГРАММ ПРЕЦЕДЕНТОВ 12
3.3 РАЗРАБОТКА ВАРИАНТОВ ИСПОЛЬЗОВАНИЯ 14
3.4 РАЗРАБОТКА ГРАФИЧЕСКОГО ИНТЕРФЕЙСА 18
3.5 РАЗРАБОТКА АРХИТЕКТУРЫ ПРИЛОЖЕНИЯ 19
3.6 РАЗРАБОТКА АЛГОРИТМОВ РАБОТЫ ПРОГРАММЫ 25
3.6.1 Метод TrimWavFile класса AudioProcessing 26
3.6.2 Метод TrimMp3 класса AudioProcessing 27
3.6.3 Метод ChangeVolume класса AudioProcessing 28
3.6.4 Метод speedUpX1_2 класса AudioProcessing 29
3.6.5 Метод speedDownX1_2 класса AudioProcessing 29
4 ТЕСТИРОВАНИЕ ПРОГРАММЫ 31
4.1 ТЕСТИРУЕМЫЕ ФУНКЦИИ 31
4.2 ТЕСТИРОВАНИЕ 32
5 РУКОВОДСТВО ОПЕРАТОРА 34
5.1 НАЗНАЧЕНИЕ ПРОГРАММЫ 34
5.2 ТЕХНИЧЕСКИЕ СРЕДСТВА ДЛЯ ЗАПУСКА ПРОГРАММЫ 34
5.3 РАБОТА С ПРОГРАММОЙ 34
ВЫВОДЫ 37
ПЕРЕЧЕНЬ ССЫЛОК 38

Файлы: 1 файл

Пояснительная записка.docx

— 1.41 Мб (Скачать файл)

 

Номер

ВИ – 10

Название

Выход.

Участники

Пользователь.

Описание

При выполнении данного варианта использования  пользователь выходит из программы.

Предварительные условия

Нет.

Выходные  условия

Прекращение работы программы.

Порядок действий

Пользователь нажимает на крестик в правом верхнем углу программы.

Альтернативный  порядок действий

Нажать Alt+F4.

Приоритет

Высокий.


 

Номер

ВИ – 11

Название

Обработка WAV.

Участники

Пользователь.

Описание

При выполнении данного варианта использования  пользователь задает параметры для обработки WAV.

Предварительные условия

Открыт файл с расширением wav. Выделен вырезаемый фрагмент.

Выходные  условия

Вырезаемый фрагмент будет обработан  в соответствии с заданными параметрами.

Порядок действий

Пользователь изменяет скорость воспроизведения и амплитуду звучания.

Альтернативный  порядок действий

Нет

Приоритет

Высокий.


 

Номер

ВИ – 12

Название

Изменение скорости проигрывания.

Участники

Пользователь.

Описание

При выполнении данного варианта использования  пользователь изменяет скорость воспроизведения вырезанного фрагмента.

Предварительные условия

Открыт файл с расширением wav. Выделен вырезаемый фрагмент.

Выходные  условия

Изменена скорость проигрывания вырезанного  фрагмента.

Порядок действий

Пользователь нажимает на стрелочку возле Combo box и выбирает нужную скорость.

Альтернативный  порядок действий

Нет

Приоритет

Высокий.


 

Номер

ВИ – 13

Название

Изменение амплитуды звучания.

Участники

Пользователь.

Описание

При выполнении данного варианта использования  пользователь изменяет громкость воспроизведения вырезаемого фрагмента.

Предварительные условия

Открыт файл с расширением wav. Выделен вырезаемый фрагмент.

Выходные  условия

Изменена громкость проигрывания вырезанного фрагмента.

Порядок действий

Пользователь двигает бегунок  для регулирования громкости  вырезаемого фрагмента.

Альтернативный  порядок действий

Нет

Приоритет

Высокий.


 

3.4 Разработка графического интерфейса

 

Исходя  из анализа поставленной задачи, выяснилось, что графический интерфейс разрабатываемого программного продукта должен содержать:

– кнопки (элемент «button»);

– поля задания начального и конечного времени выделенного фрагмента (элемент «TimeEditor»);

– область для задания параметров обработки вырезанного фрагмента wav файла (элемент «GroupBox»);

– область для навигации по аудио файлу, а также выделения вырезаемого фрагмента (элемент «WaveformTimeline»);

– поле для отображения текущего времени воспроизведения (элемент «DigitalClock»);

– информационные метки (элемент «label»);

– бегунки для регулирования громкости (элемент «Slider»);

– выпадающий список, для задания скорости воспроизведения вырезаемого фрагмента wav файла (элемент «ComboBox»). 

Ввод  входных данных выполняется с  помощью дополнительных диалоговых окон.

Прототип  графического интерфейса пользователя разрабатываемого программного продукта изображен на рисунке 3.3.

 

 

Рисунок 3.3 – Прототип графического интерфейса пользователя

 

3.5 Разработка архитектуры приложения

 

Под архитектурой приложения понимают диаграмму  классов. Исходя из анализа поставленной задачи, а так же предметной области разрабатываемого проекта, были выделены такие основные сущности как MainWindow (интерфейс пользователя), NAudioEngine (класс плеера), UIHelper (класс для привязки элементов управления к свойствам класса), AudioProcessing (класс для вырезания и обработки фрагмента), SampleAggregator (класс для обработки сэмплов открытого файла).

Класс MainWindow отвечает за визуализацию работы программы и ввод входных данных, AudioProcessing – за вырезку фрагмента и обработку его, NAudioEngine – за проигрывание аудио файла и построение волны аудио, UIHelper – за привязку элементов управления к свойствам класса NAudioEngine, SampleAggregator – за обработку семплов открытого файла и построение по ним волны аудио.

Класс MainWindow имеет следующие обработчики событий:

1) soundEngine_PropertyChanged – обработчик события для перемотки аудио файла;

2) BrowseButton_Click – обработчик событий кнопки «Browse» для открытия аудио файла;

3) StopButton_Click – обработчик событий кнопки «Stop» для остановки проигрывания аудио файла;

4) PlayButton_Click – обработчик событий кнопки «Play» для проигрывания аудио файла;

5) PauseButton_Click – обработчик событий кнопки «Pause» для приостановки проигрывания аудио файла;

6) TrimButton_Click – обработчик событий кнопки «Trim» для вырезания выделенного фрагмента из аудио файла;

7) Window_Closing – обработчик событий для освобождения ресурсов программы.

Поля:

  1. openDialog – поле для открытия диалогового окна для открытия аудио файла;
  2. saveDialog – поле для открытия диалогового окна для сохранения аудио файла;
  3. soundEngine – экземпляр класса плеера, для проигрывания аудио файлов.

Класс AudioProcessing имеет следующие вложенные типы:

  1. ChangeSpeed – делегат для выбора метода ускорения проигрывания вырезанного фрагмента;
  2. WavHeader – структура для разбора RIFF заголовка wav файла;

Методы:

  1. TrimWavFile – метод для вырезания фрагмента из wav файла;
  2. TrimMp3 – метод для вырезания фрагмента из mp3 файла;
  3. ChangeVolume – метод для изменения амплитуды звука в вырезанном фрагменте;
  4. WriteToBuffSample – метод для записи в буфер сэмпла, в виде байт;
  5. SampleToByte – метод для преобразования сэмплов из челочисленных значений в байтовые;
  6. speedUpX1_2 – метод для увеличения скорости в 2 раза;
  7. speedUpX1_3 – метод для увеличения скорости в 1.5 раза;
  8. speedUpX1_5 – метод для увеличения скорости в 1.25 раза;
  9. speedUpX1_7 – метод для увеличения скорости в 1.16 раза;
  10. speedUpX1_9 – метод для увеличения скорости в 1.125 раза;
  11. speedDownX1_2 – метод для уменьшения скорости в 2 раза.
  12. speedDownX1_3 – метод для уменьшения скорости в 1.5 раза;
  13. speedDownX1_5 – метод для уменьшения скорости в 1.25 раза;
  14. speedDownX1_7 – метод для уменьшения скорости в 1.16 раза;
  15. Optimal2x6p4o – метод для расчета значения семпла находящегося между 3 и 4 сэмплами из кусочка в 6 сэмплов;
  16. InterpolateHermite4pt3oX – метод для расчета значения семпла находящегося между 2 и 3 сэмплами из кусочка в 4 сэмпла;
  17. Optimal16x2p3o – метод для расчета значения семпла находящегося между 1 и 2 сэмплами из кусочка в 2 сэмпла.

Класс UIHelper имеет следующие методы:

  1. Bind – метод для связывания элемента управления и свойства обьекта;
  2. FindParent – метод для определения родителя объекта участвующего в системе свойств зависимостей.

Класс SampleAggregator имеет следующие методы:

  1. Add – добавляет усредненные значения сэмплов в массив для визуализации аудио волны;
  2. Clear – устанавливает некоторые поля в значения по умолчанию;
  3. GetFFTResults – выполняет расчет быстрого преобразования Фурье на канал передачи данных по запросу;

Поля:

  1. volumeLeftMaxValue, volumeLeftMinValue, volumeRightMaxValue, volumeRightMinValue – эти поля нужны для указания текущего максимального и минимального левого и правого канала;
  2. channelData – массив для хранения значений сэмплов;
  3. bufferSize – поле хранит размер буфера;
  4. channelDataPosition – поле хранит указатель на текущую позицию в аудио файле;
  5. binaryExponentitation – поле для расчета быстрого преобразования Фурье.

Класс NAudioEngine реализует следующие интерфейсы:

– InotifyPropertyChanged

– IwaveformPlayer

– Idisposable 

А также имеет следующие поля:

  1. instance – поле для определения новых экземпляров данного класса;
  2. positionTimer – таймер для отслеживания текущей позиции воспроизведения;
  3. waveformGenerateWorker – экземпляр класса BackgroundWorker для запуска отдельного потока, который будет рассчитывать, и рисовать волну аудио файла;
  4. fftDataSize – константное значение для расчета быстрого преобразования Фурье;
  5. disposed – булева переменная для индикации освобождены ли ресурсы;
  6. canPlay - булева переменная для индикации возможно ли в данный момент проигрывание аудио файла;
  7. canPause - булева переменная для индикации возможно ли в данный момент приостановка проигрывания аудио файла;
  8. canStop - булева переменная для индикации возможно ли в данный момент остановка проигрывания аудио файла;
  9. isPlaying - булева переменная для индикации проигрывается ли сейчас аудио файл;
  10. inChannelTimerUpdate – переменная показывающая изменение значения таймера;
  11. channelLength – длина открытого файла в секундах;
  12. channelPosition – текущая позиция проигрывания;
  13. inChannelSet – переменная для индикации о том что выделен фрагмент;
  14. waveOutDevice – экземпляр класса для проигрывания аудио потока;
  15. activeStream – текущий активный аудио поток, который проигрывается;
  16. inputStream – аудио поток для построения волны аудио;
  17. sampleAggregator, waveformAggregator – экземпляры класса SampleAggregator для обработки семплов аудио файла;
  18. pendingWaveformPath – путь к открытому аудио файлу;
  19. fullLevelData – массив с конечными значениями сэмплов;
  20. waveformData – массив с промежуточными данными сэмплов;
  21. repeatStart – начальное время для рекурсии воспроизведения;
  22. repeatStop – конечное время для рекурсии воспроизведения;
  23. inRepeatSet – переменная для индикации рекурсии проигрывания;
  24. mp3_or_wav – переменная, которая показывает, какой открыт файл mp3 или wav.

Методы:

  1. GenerateWaveformData – метод для генерации массива с данными для аудио волны;
  2. StopAndCloseStream – метод для остановки проигрывания и освобождения ресурсов;
  3. Stop – метод для остановки проигрывания;
  4. Pause – метод для приостановки проигрывания;
  5. Play – метод для начала проигрывания аудио файла;
  6. OpenFile – метод для открытия аудио файла;

Обработчики событий:

  1. waveformGenerateWorker_RunWorkerCompleted – обработчик события, сигнализирующий о том, что поток обрабатывающий данные сэмплов завершил работу;
  2. waveformGenerateWorker_DoWork – обработчик события, который показывает, что нужно сделать потоку;
  3. waveStream_Sample – обработчик события, для занесения сэмплов в массив;
  4. positionTimer_Tick – обработчик события, для изменения времени воспроизведения;
  5. inputStream_Sample – обработчик события, для реализации рекурсии;
  6. PropertyChanged – обработчик события, который показывает, что какое либо свойство в данном классе изменилось.

 

 

 

 

 

 

Рисунок 3.4 – Диаграмма классов разрабатываемой программы

 

В результате создания программного продукта могут быть добавлены поля и методы для более корректной визуализации и обработки исключений.

 

3.6 Разработка алгоритмов работы программы

 

Исходя  из анализа поставленной задачи, а  также разработанной диаграммы классов, был разработан обобщенный алгоритм работы разрабатываемой программы, который представленный в виде диаграммы активности (рисунок 3.5)

 

 

Рисунок 3.5 – Обобщенный алгоритм работы разрабатываемой программы

 

Исходя  из анализа поставленной задачи, а также разработанной диаграммы классов, была выделена группа методов, работа которых является особо важной: метод TrimWavFile, TrimMp3, ChangeVolume, speedUpX1_2, speedDownX1_2 класса AudioProcessing. Для этих методов были разработаны обобщенные алгоритмы работы.

 

3.6.1 Метод TrimWavFile класса AudioProcessing

 

Метод TrimWavFile класса AudioProcessing, вырезает фрагмент из wav файла и принимает параметры такие как: путь к исходному файлу, путь для сохранения нового файла, время с которого нужно вырезать, время по которое нужно вырезать, коэффициент для амплитуды звука, индекс для выбора метода увеличения или уменьшения скорости проигрывания. Алгоритм работы описанного метода изображен на рисунке 3.10.

 

 

Рисунок 3.6 – Алгоритм вырезания фрагмента из wav

 

 

3.6.2 Метод TrimMp3 класса AudioProcessing

 

Метод TrimMp3 класса AudioProcessing, вырезает фрагмент из mp3 файла и принимает параметры такие как: путь к исходному файлу, путь для сохранения нового файла, время с которого нужно вырезать,  время по которое нужно вырезать. Алгоритм работы описанного метода изображен на рисунке 3.7.

 

 

Рисунок 3.7 – Алгоритм вырезания фрагмента из mp3

 

3.6.3 Метод ChangeVolume класса AudioProcessing

Информация о работе Разработка программы для редактирования аудио файлов