718.77K

Розробка програмного забезпечення для аналізу цифрового звуку

1.

ХЕРСОНСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ ТА ДИЗАЙНУ
КАФЕДРА ПРОГРАМНИХ ЗАСОБІВ І ТЕХНОЛОГІЙ
Випускна робота
бакалавра
на тему: «Розробка програмного забезпечення для аналізу цифрового звуку»
Виконав: студент 4 курсу, групи 3ПРс
спеціальності 121 - «Інженерія програмного забезпечення»
Ткаченко Кирило Володимирович
Керівник к.т.н., доцент Кирийчук Д. Л.
Херсон - 2022

2.

Метою випускної роботи є розробка програмного забезпечення для аналізу цифрового звуку.
Об'єкт проектування – файли з цифровими звукозаписами.
Предмет проектування – додаток для аналізу цифрового звуку.
Метод проектування – вільне крос-платформне середовище розробки Code::Blocks, мова програмування C++,
бібліотеки wxWidgets, WAVE PCM.
Розроблений програмний додаток має такі функціональні можливості:
1. Імпорт та експорт файлів у форматі WAVE PCM.
2. Базові операції редагування файлів (вирізання, копіювання, вставка та видалення).
3. Зміна висоти тону без зміни темпу та навпаки.
4. Видалення статичного шуму, гулу, шипіння та інших постійних шумових дефектів запису.
5. Детальний аналіз частотних характеристик.
6. Спектрографічний режим відображення доріжок.
Програмний додаток підтримує роботу з форматом даних WAVE PCM soundfile format.

3.

Архітекрура програмного додатку має модульну структуру.
Програмні бібліотеки
KISSFFT
Системні бібліотеки
Головний
модуль
програми
WAVE
gdi32
user32
comctl32
kernel32
Sources
Axis
AxisX
AxisY
Series
TextFormat
Line
Wave
Graph

4.

Головний модуль програмного продукту призначено для взаємодії з програмними модулями «Системні
бібліотеки», «Програмні бібліотеки» та модулем «Sources».
Програмний модуль «Системні бібліотеки» використовує бібліотечні функції та залежить від наступних
системних бібліотек: gdi32.dll, user32.dll, kernel32.dll, comctl32.dll, ole32.dll.
Програмний модуль «Програмні бібліотеки» використовує бібліотеки KISSFFT та WAVE.
KISSFFT – бібліотека, що має у складі методи, які реалізують швидке перетворення Фурье.
WAVE – бібліотека, що має у складі методи, для роботи із мультимедійними файлами у форматі WAVE PCM.
Програмний модуль «Sources» має у складі такі класи:
1. Клас Line (файл Line.h – опис модуля, реалізація класу в файлі Line.cpp).
2. Клас TextFormat (файл TextFormat.h – опис модуля, реалізація класу в файлі TextFormat.cpp).
3. Клас Axis (файл Axis.h – опис модуля, реалізація класу в файлі Axis.cpp).
4. Клас AxisX (файл AxisX.h – опис модуля, реалізація класу в файлі AxisX.cpp).
5. Клас AxisY (файл AxisY.h – опис модуля, реалізація класу в файлі AxisY.cpp).
6. Клас Graph (файл Graph.h – опис модуля, реалізація класу в файлі Graph.cpp).

5.

Модульна структура програмного додатку у середовищі
розробки Code::Blocks
Модуль dlgMain.cpp описує основі функції діалогового вікна,
реалізації цих функцій у файлі dlgMain.cpp відповідно.
resource.h
<vector>
Wave.h
<complex>
Windows.h
dlgMain
<windows.h>
emath.h
<commctrl.h>
kissfft.hh
<stdio.h>
Graph.h

6.

Line.cpp –модуль створено для зміни значення кольору
Бібліотеки модуля AxisX.cpp
та формату ліній поточного контексту пристрою.
<algorithm>
TextFormat.cpp – модуль створено для зміни значення
кольору,
вирівнювання
та
формату
рядка
поточного
AxisX
<cstdio>
контексту пристрою.
Axis.cpp
–модуль
створено
як
базовий
клас
координатна вісь.
AxisX.cpp
–модуль
<cmath>
Бібліотеки модуля AxisY.cpp
створено
на
базовому
класі
координатна вісь Axis, він описує вісь абсцис.
AxisY.cpp
–модуль
створено
на
базовому
координатна вісь Axis, він описує вісь ординат.
класі
<algorithm>
AxisY
<cstdio>
<cmath>

7.

Graph.cpp – модуль створено за допомогою агрегації
Бібліотеки модуля Graph.cpp
класів Series, AxisX і AxisY, він описує функціонал для
роботі із графіком.
<cmath>
Graph.h
Graph
<cstdio>
Main.cpp – головний модуль програмного додатку.
Бібліотеки модуля Main.cpp
<windows.h>
dlgMain.h
resource.h
<windowsx.h>
main
<commctrl.h>
<stdio.h>

8.

Діаграма варіантів використання
Імпорт та експорт
файлів у форматі
PCM, IEEE_FLOAT
<<включить>>
Зміна висоти тону
без зміни темпу та навпаки
Видалення статичного
шуму: гулу, шипіння та
інших дефектів
<<включить>>
<<включить>>
<<включить>>
Детальний аналіз частотних
характеристик
Спектрографічний режим
відображення доріжок
<<включить>>

9.

Ієрархія класів програмного додатку
AxisX
~AxisX() override;
AxisX(const char *, COLORREF );
AxisX(const AxisX& other) = delete;
AxisX& operator=(const AxisX& ) =
delete;
void init( HDC , HFONT, const RECT&,
RECT& ) override;
void paint( HDC, HFONT, const RECT&,
const RECT&, bool ) override;
AxisY
~AxisY() override;
AxisY(const char *, COLORREF );
AxisY(const AxisY& other) = delete;
AxisY& operator=(const AxisY& ) = delete;
void init( HDC , HFONT, const RECT&,
RECT& ) override;
void paint( HDC, HFONT, const RECT&,
const RECT&, bool ) override;
Axis
virtual ~Axis();
Axis(const char*, COLORREF, COLORREF);
Axis(const Axis &) = delete;
operator =(const Axis &) = delete;
virtual void init( HDC, HFONT, const RECT&,
RECT&) = 0;
virtual void paint( HDC, HFONT, const RECT&,
const RECT&, bool ) = 0;
const char *getName() const;
TextFormat text_fmt;
long double min_value;
long double max_value;
unsigned short showAxis:1;
unsigned short showNoich:1;
unsigned short showGrid:1;
protected: HBRUSH background;
protected: char *name;
protected: Line axis, noich, grid;
protected: SIZE size;
Graph
Series
~Graph();
Graph(const char*, const char*, int,
COLORREF );
Graph(const Graph &) = delete;
operator =(const Graph &) = delete;
int LMouseDown(LONG x, LONG y);
void LMouseUp();
void MouseMove(LONG, LONG, UINT );
void resize(const RECT& );
void repaint(HDC );
void addXY(double x, double y);
void fullUpdate();
protected: void updateSeries();
void CreateDoubleBuffer( HDC );
int setValue( LONG&, const LONG& );
TextFormat text_fmt;
AxisX ox;
AxisY oy;
HBRUSH background;
protected: std::vector<POINT> ptn;
Line brush;
HFONT hFont;
HBITMAP memBMP;
RECT board, canvas;
POINT mouse;
~Series();
Series();
void push_back(double );
double operator[](size_t ) const;
double& operator[](size_t );
double min() const;
double max() const;
size_t size() const;
void clear();
protected: double gmin;
protected: double gmax;
protected: std::vector<double> data;
TextFormat
TextFormat(COLORREF );
TextFormat(const TextFormat& ) = delete;
TextFormat& operator=(const TextFormat& )
= delete;
void setDC(HDC );
void set( int, UINT, HDC);
void back();
COLORREF color;
protected: HDC hDC;
protected: COLORREF oldColor;
protected: int mode;
protected: UINT align;
Line
~Line();
Line(COLORREF, int, int );
Line(const Line& ) = delete;
Line& operator=(const Line& ) = delete;
void setTo(HDC hDC);
void paint(int x, int y, int toX, int toY);
void back();
protected: HPEN pen;
protected: HPEN old;
protected: HDC hDC;
Для розробки програмного додатку було обрано кросплатформне середовище розробки Code::Blocks
програмування С.
та мову

10.

Головне вікно програми (після запуску).
Головне меню програми містить наступні елементи:
File, Setting, Analyze, Help відповідно кожне меню має своє
підменю. Меню файл має пункти відкрити файл та закрити
програму.
Аналіз файлу 1k4416.wav

11.

Додаткова інформація на графіку
У стандартному інтерфейсі програми є підказка у
нижньому лівому куті графіка, яка відображає координати
вказівника миші на зображені в координатах графіка x та y і
в віртуальних координатах на графіку.
Підказка у лівому нижньому куті змінюється, коли
змінюються координати вказівника миші. Для зображення
на рис. 5 по логічних координатах x:444 y:441 (відмічена
червоним хрестиком) відображено значення 12013,7 Hz та 170,3 dB.
Також є додаткова інформація у лівому верхньому
куті – це час за який оновлюється зображення після
натисканняі кнопки миші.

12.

ВИСНОВКИ
1. Розглянуто поняття цифрового звуку та види сигналів.
2. Розглянуто поняття звукових хвиль та швидкості звуку.
3. Здійснено огляд програмного забезпечення для аналізу цифрового звуку.
4. Розглянуто основні вимоги до програмного продукту.
5. Наведено опис канонічного формату WAVE.
6. Наведено опис параметрів WAVE.
7. Наведено приклад файлу WAVE з байтами, показаними як шістнадцяткові числа.
8. Наведено опис правил роботи з форматом WAVE.
9. Побудовано діаграми варіантів використання.
10. Наведено проектування архітектури програмного додатку.
11. Розроблено модульну структуру програмного додатку у середовищі розробки Code::Blocks
12. Обґрунтувано вибор інструментальних засобів розробки. Для розробки програмного додатку було обрано
крос-платформне середовище розробки Code::Blocks та мову програмування С.
13. Розроблено модулі, класи та методи програмного додатку. Програмний модуль використовує бібліотечні
функції та залежить від наступних системних бібліотек: gdi32.dll, user32.dll, kernel32.dll, comctl32.dll, ole32.dll. В
додатку win32 використані бібліотечні модулі: windows.h, windowsx.h та commctrl.h.
14. Розроблено інтерфейс користувача
15. Наведено приклад використання програмного додатку.
English     Русский Правила