Кейп А.В. Разработка функционала для работы с не кодированными звуковыми файлами // Международный журнал социальных и гуманитарных наук. – 2016. – Т. 5. №1. – С. 233-237.

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

 

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

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

Нижневартовский государственный университет

(Россия, г. Нижневартовск)

 

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

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

 

 

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

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

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

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

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

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

 

 

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

 

 

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

 

 

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

Местоположение

Содержание

Описание

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

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

 

 

 

  

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

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

 

 

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

Как пример самого простого инструмента редактирования был выбран инструмент изменения громкости. Т.к. данные в нашем файле определяются всего 2 параметрами (значение времени, в котором воспроизводится звук определенной амплитуды, и само значение амплитуды), то ставится задача только увеличить значение амплитуды в определенный момент времени. Областью увеличения амплитуды будут служить параметры, передаваемые в функцию изменения амплитуды (значения времени, умноженные на частоту дискретизации, в секундах). Для реализации данной функции необходимо все байты, которые были считаны в массив QByteArray, в заданной области увеличить на заданное значение изменение громкости (в %). Т.к. для обработки был выбран файл с глубиной 16 бит, то каждое значение амплитуды должно кодироваться значением от -32768 до 32767. При выходе за границы данного диапазона было принято решение сжимать значение амплитуды до максимально допустимого. Для изменения громкости была разработана функция changeVolume. Данная функция редактировала содержимое ранее полученного массива значений амплитуд по заданному пользователем сценарию. Далее был открыт файл длиной в 11 секунд и обработан данной функцией следующим образом: первые 3 секунды были понижены в громкости на 80%, 3-5 секунды были увеличены на 70%, 5-7 секунды уменьшены в громкости на 100% и с 7 секунды громкость была увеличена на 30%. Исходная волна (рисунок 3а) и результат продемонстрированы ниже (рисунок ).

 

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

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

 

 

Заключение

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

 

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

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

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

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

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

 

 

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.