Научная статья на тему 'Разработка функционала для работы с некодированными звуковыми файлами'

Разработка функционала для работы с некодированными звуковыми файлами Текст научной статьи по специальности «Математика»

CC BY
122
16
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
РЕДАКТИРОВАНИЕ ЗВУКА / ПРОГРАММИРОВАНИЕ / РАЗРАБОТКА ФУНКЦИЙ / АУДИОФОРМАТ / ЗВУКОВОЙ РЕДАКТОР / EDIT THE SOUND / PROGRAMMING / DEVELOPMENT FUNCTIONS / AUDIO FORMAT / SOUND EDITOR

Аннотация научной статьи по математике, автор научной работы — Кейп А.В.

В данной статье рассматриваются возможные сценарии работы с некодированным звуковым файлом в формате wav PCM (Pulse-code modulation). В работе рассматриваются методы считывания данных из файла, построения частотно-волнового спектра, изменения амплитуды волны аудиофайла и сохранения результата. В качестве результата исследования был создан простейший аудиоредактор, который может являться базой для разработки программного решения в области работы со звуком.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

DEVELOPMENT OF FUNCTIONALITY TO WORK WITH UNENCODED AUDIO FILES

This article discusses possible scenarios with uncoded audio file in wav format, PCM (Pulse-code modulation). The paper deals with the methods of reading data from a file, methods of building a frequency-wave spectrum, methods of changing the amplitude of the wave audio file and methods of saving the result. A simple audio editor was created as a result of this research. It can be useful as a base for the development of software solutions in the field of working with sound.

Текст научной работы на тему «Разработка функционала для работы с некодированными звуковыми файлами»

РАЗРАБОТКА ФУНКЦИОНАЛА ДЛЯ РАБОТЫ С НЕКОДИРОВАННЫМИ ЗВУКОВЫМИ ФАЙЛАМИ

А.В. Кейп, студент

Научный руководитель: Е.А. Слива, старший преподаватель Нижневартовский государственный университет (Россия, г. Нижневартовск)

Аннотация. В данной статье рассматриваются возможные сценарии работы с неко-дированным звуковым файлом в формате wav PCM (Pulse-code modulation). В работе рассматриваются методы считывания данных из файла, построения частотно-волнового спектра, изменения амплитуды волны аудиофайла и сохранения результата. В качестве результата исследования был создан простейший аудиоредактор, который может являться базой для разработки программного решения в области работы со звуком.

Ключевые слова: редактирование звука, программирование, разработка функций, ау-диоформат, звуковой редактор.

Мы живём в такое время, когда хранение и обработка мультимедийной информации в цифровом формате является привычным делом. Люди всё чаще делают аудиозаписи с целью сохранить или передать ту или иную информацию в звуковом формате. Это может быть аудиокнига, песня или просто запись звукоряда, которая является памятью о каком-то событии. Зачастую такие файлы нуждаются в редактировании, целью которого может быть: устранение артефактов при записи, обрезка записи или придание коммерческого звучания.

В основе кодирования звука с использованием ПК лежит процесс преобразования колебаний воздуха в колебания электрического тока и последующая дискретизация аналогового электрического сигнала. Кодирование и воспроизведение звуковой информации осуществляется с помощью специальных программ (редактор звукозаписи) [1]. В данной работе был разработан собственный вариант редактора звукозаписи. В качестве инструментария разработки были выбраны: язык программирования С++, средой для разработки - Qt.

Считывание данных wav файла

Для начала работы с файлом необходимо открыть его в программе. Для связи файла с программой был выбран стандартный класс Qt QFile. Для воспроизведения и чтения метаданных (длительность, исполнитель, заголовок) аудиофайла был использован класс QMediaPlayer. С помощью созданных объектов классов была написана функция открытия файла и подключения его к QMediaPlayer.

Анализ wav PCM файла

Спектрально-волновая диаграмма представляет собой подряд записанные значения амплитуды, которые воспроизводятся в конкретные временные отрезки. Значения положения и длительности этих отрезков определяются исходя из частоты дискретизации файла. Например, если частота дискретизации 44100 Гц, это означает, что за 1 секунду значение амплитуды может измениться 44100 раз. От значений амплитуды зависит громкость воспроизводимого звука, а от скорости изменения звука - высота тона (рис. 1).

Громкость

Низкий Высокий

звук звук

Рис. 1. Спектрально-волновая диаграмма

Для начального анализа был выбран несжатый формат .wav PCM. PCM (Pulsecode modulation) расшифровывается как импульсно-кодовая модуляция. При им-пульсно-кодовой модуляции аналоговый передаваемый сигнал преобразуется в цифровую форму посредством трёх опера-

ций: дискретизации по времени, квантования по амплитуде и кодирования [2]. Это значит, что в файле будут последовательно записаны данные амплитуды волны для каждой единицы времени. Формат .wav был выбран, т.к. он имеет простую структуру (таблица) [3]:

Таблица. Структура wav PC M файла

Местоположение Содержание Описание

0..43 (44 байта) metadata Данные о типе файла, такие как: частота дискретизации, глубина кодирования, количество каналов и т.д.

44.. data Непосредственно WAV-данные, содержащие значения амплитуды волны.

Для построения спектрально-волновой диаграммы необходимо было считать данные из секции data. Для этого следует использовать побайтовое чтение из файла, что было реализовано с помощью класса Qt QByteArray. В качестве файла для анализа был выбран файл с глубиной кодирования звука 16 бит, значит одно значение амплитуды будет кодироваться 2-мя байтами.

Нужно было определить в каком порядке располагаются байты (старший-младший). Поскольку формат WAV-файла разрабатывался как формат для приложений операционной системы Windows, в которой традиционно использовались процессоры Intel, все значения данных формата хранятся как Little-Endian, т. е. самый младший значащий байт идет первым [4].

Так как одно значение амплитуды кодируется 2 байтами, то нужно использовать побитовое смещение старшего байта и дизъюнкцию его с младшим байтом, а далее преобразовывать это значение к какому-то диапазону (был выбран диапазон [-1..1]). Для чтения массива значений амплитуд была разработана функция getSpectrumArray. Данная функция считывает данные из файла и преобразует их в массив амплитуд для удобной работы со значениями в дальнейшем.

Отображение графика в программе

Для отображения графика на форме был создан объект QGraphicsView. На этом объекте поочередно строятся линии, которые отображают зависимость амплитуды от времени. Для построения графика был выбран аудиофайл длительностью 10 секунд (небольшой размер для быстрой от-

рисовки). Так как рисовать линии абсолютно для всех изменений значений (а это 44100Гц * 10 сек = 441000 изменений) было бы слишком затратно по времени и ресурсам вычислительной машины, а такое точное отображение графика, как правило, не будет востребовано, то было принято решение считывать изменения волны через определенные промежутки. После ряда тестов, по которым оценивались скорость отрисовки и точность измерения амплитуды волны, было выявлено, что оптимальным промежутком для считывания является 100 единиц. Но так как волна отображалась только через каждые 100 измерений, то между этими изменениями оставались пустые промежутки. Чтобы решить эту проблему, было принято решение увеличить «плотность» волны на графике,

Untitledl 234woS1 OSec

а). Полученный рисунок волны

Рис. 2 Отображение графика

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

Как пример самого простого инструмента редактирования был выбран инструмент изменения громкости. Т.к. данные в нашем файле определяются всего 2 параметрами (значение времени, в котором воспроизводится звук определенной амплитуды, и само значение амплитуды), то ставится задача только увеличить значение амплитуды в определенный момент времени. Областью увеличения амплитуды будут служить параметры, передаваемые в

уменьшив изменяемое значение отображения времени в 10 раз. Так как значения амплитуды волны находились в промежутке [-1;1], то необходимо было увеличить диапазон её отображения. Для этого каждое значение амплитуды было умножено на 200. Для отображения графика была разработана функция show Spectrum Array. Эта функция создана для отображения ранее полученного массива значений амплитуд.

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

б). Действительный спектр волны

амплитуды звуковой волны

функцию изменения амплитуды (значения времени, умноженные на частоту дискретизации, в секундах). Для реализации данной функции необходимо все байты, которые были считаны в массив QByteArray, в заданной области увеличить на заданное значение изменение громкости (в %). Т.к. для обработки был выбран файл с глубиной 16 бит, то каждое значение амплитуды должно кодироваться значением от -32768 до 32767. При выходе за границы данного диапазона было принято решение сжимать значение амплитуды до максимально до-

пустимого. Для изменения громкости была разработана функция changeVolume. Данная функция редактировала содержимое ранее полученного массива значений амплитуд по заданному пользователем сценарию. Далее был открыт файл длиной в 11 секунд и обработан данной функцией следующим образом: первые 3 секунды

были понижены в громкости на 80%, 3-5 секунды были увеличены на 70%, 5-7 секунды уменьшены в громкости на 100% и с 7 секунды громкость была увеличена на 30%. Исходная волна (рисунок 3а) и результат продемонстрированы ниже (рисунок 3б).

а). Исходная волна б). Отредактированная волна

Рис. 3. Редактирование амплитуды волны

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

Заключение. В ходе написания статьи был разработан аудиоредактор, с возможностью построения волнового спектра и изменения громкости несжатого .wav PCM файла. Данный проект показывает сцена-

Библиографический список

1. Кодирование звука в компьютере [Электронный http://informatika.sch880.ru/p23aa1.html

2. Панфилов И.П., Дырда В.Е. Теория электрической связи. - М.: Радио и связь, 1991. -344 с.

3. Структура wav PCM файла [Электронный http://audiocoding.ru/article/2008/05/22/wav-file-structure.html

4. Порядок байт в wav файле [Электронный http://microsin.net/programming/pc/wav-format.html

ресурс]

ресурс]. ресурс].

url:

url:

url:

- HntyopMamuKa -

DEVELOPMENT OF FUNCTIONALITY TO WORK WITH UNENCODED AUDIO FILES

A.V. Keyp, student Supervisor: E.A. Sliva, senior lecturer Nizhnevartovsk state university (Russia, Nizhnevartovsk)

Abstract. This article discusses possible scenarios with uncoded audio file in wav format, PCM (Pulse-code modulation). The paper deals with the methods of reading data from a file, methods of building a frequency-wave spectrum, methods of changing the amplitude of the wave audio file and methods of saving the result. A simple audio editor was created as a result of this research. It can be useful as a base for the development of software solutions in the field of working with sound.

Keywords: edit the sound, programming, development functions, audio format, sound editor.

i Надоели баннеры? Вы всегда можете отключить рекламу.