Рубрики
Без рубрики

Python Audio Обработка в Lightspeed ⚡ Часть 1: Zignal

Я действительно, действительно хочу выяснить, что эти аудиосигналы сделаны из. Причина, по которой мне нравится Audio P … Tagged Python, Audio.

Я действительно, действительно хочу выяснить, что эти аудиосигналы сделаны из. Причина, по которой мне нравится обработка аудио, сочетает в себе прикладную математику и сигналы с крутой музыкальными тонами. Эта посту серии служит для нуля моего разработчика зуда. Столько, сколько я хотел бы захватить все аудио библиотеки Python, понять их и поместить их здесь, я просто не могу смотреть на все эти библиотеки, поэтому я буду покрывать столько, сколько смогу. По пути вы узнаете совсем немного о теории звука! Похоже, я буду покрывать одну библиотеку или большую часть одной библиотеки на пост.

Я начну с охвата функций простого модуля обработки сигналов, который предназначен для чтения исходного кода, Zignal . Затем мы будем работать наш путь до более продвинутых звуковых библиотек и, надеюсь, вы закончите прочитать эту серию блога, зная больше о различных аудиомодулях Python Audio, чем раньше.

КОРОТКОЕ БУДУЩЕСТВО НА ПОИГАНИЧНОЙ ЦИНЕЛ

Этот пост был первоначально будет о Audioop Модуль Python, но я был разочарован своим отсутствием функций выравнивания и почти все остальное, связанное с аудио. Поэтому я искал библиотеки Python, которые могли бы сделать это, и Zignal появился на первой странице результатов (тренировка спойлера: Но это все еще интересно). Я до сих пор могу прикрыть Audioop в каком-то другом посте, но только потому, что мне любопытно.

Кстати, Scipy.signal Имеет много, многие другие функции аудио манипулятора, чем аудиоопию, но он тоже не будет покрываться в этом посте.

Различные аудио волны

Имеет смысл начать с объяснения состава простейших видов волновых форм. Я знаю, что вы можете думать, что сделаны песни альбома волн, но это сложная территория, поскольку есть много инструментов и эффектов после обработки в Play. На данный момент я покажу вам следующее:

Синусоидальная волна

Эта волна основана на синевой функции. Я не буду подробно рассказать о математических свойствах функции синуса, но его два наиболее важных параметра являются Частота , что короче каждая волна (низкие частоты длиннее), а амплитуда , что такое рост. Каждый образец в звуке является одной амплитудой.

В Zignal:

>>> import zignal
>>>
>>> x = zignal.Sinetone(fs=44100, f0=997, duration=0.1, gaindb=-20)
>>> print(x)
=======================================
classname        : Sinetone
sample rate      : 44100.0 [Hz]
channels         : 1
duration         : 0.100 [s]
datatype         : float64
samples per ch   : 4410
data size        : 0.034 [Mb]
has comment      : no
peak             : [0.1]
RMS              : [0.0707]
crestfactor      : [1.4147]
-----------------:---------------------
frequency        : 997.0 [Hz]
phase            : 0.0 [deg]
-----------------:---------------------

Давайте просмотрим ключевые аргументы, используемые здесь:

  • ФС : Частота отбора проб, частота образца AKA, которая является количеством образцов (точек данных) в форме волны в секунду. Нарисовать сравнение, CD Audio имеет частоту дискретизации 44100 Гц, а DVD Audio имеет образец или 96000 Гц или 192000 Гц.
  • F0 Частота, в Гц.
  • Продолжительность : Длина звука в секундах. Поскольку это синусоида, она будет колебаться синусоидальной волной для этого.
  • Gaindb : Приручение в децибелах (дБ). Прибыль – это то, насколько громко (насколько большая амплитуда) образцы будут до Производятся любые звуковые эффекты после обработки (в отличие от объема, который является БД последнего звука).

Не беспокойтесь о выходных свойствах еще. Я покрою это в свое время. Также децибелс не просто мера амплитуды; Позже будет описание децибелов ниже.

Квадратная волна

Эта форма волны является квадратной формы, и она идет вниз и вверх при фиксированных интервалах. Он узнавается по его постоянным частотам, горизонтальным линиям.

>>> import zignal
>>> x = zignal.SquareWave(fs=44100, f0=997, duration=0.1, gaindb=-20)
>>> print(x)
=======================================
classname        : SquareWave
sample rate      : 44100.0 [Hz]
channels         : 1
duration         : 0.100 [s]
datatype         : float64
samples per ch   : 4410
data size        : 0.034 [Mb]
has comment      : no
peak             : [0.1]
RMS              : [0.1]
crestfactor      : [1.]
----------------------:---------------------
frequency        : 997.0 [Hz]
phase            : 0.0 [deg]
duty cycle       : 0.500 (50.0%)
----------------------:---------------------

Треугольник и пиловые волны

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

Зиньял не имеет классов для них. Они являются простыми сигналами, так что может быть полезным для того, чтобы кто-то реализовать.

Как волны пульсают

Периодические формы волны состоят из куча синусоидальных волн на разных частотах и длинах (как в, как долго это длится). Форма волны состоит из Гармоники Отказ Каждая гармоника – это число, которое умножает одну конкретную синусоидальную волну, которая называется фундаментальный потому что у него есть фундаментальная частота. Это создает шаг.

Другие формы волны, которые я говорил о выше, может быть описан в гармониках тоже. Квадратная волна и волна треугольника имеют только странные гармоники, но волна треугольника откатываться (становится менее слышно для аудиооборудования) быстрее, чем квадратная волна. Пиловые волны содержат все целочисленные гармоники.

Если этот раздел запутается, эта инфографика должна помочь вам понять это (частота горизонтальная, амплитуда вертикальная):

Что-то откажется, имеет свою частоту очень высокой или очень низкой.

Заговор

Да, вы можете построить звуки в Zignal! Это полезная функция для любой библиотеки обработки сигналов, поскольку только частотный график не раскрывает все свойства формы волны. Поскольку он использует MATPLOTLIB, вы также получите возможность сохранить график. Это земельный участок синусоида с длительностью 10 миллисекунд, частота 997 Гц и частота образца 44100 Гц:

>>> import zignal
>>> x = zignal.Sinetone(fs=44100, f0=997, duration=0.01, gaindb=-20)
>>> x.plot()

Это FFT (преобразование Fast Fourer, функция, которая преобразует звук между временем и частотой) графиком одинаковой формы волны:

>>> import zignal
>>> x = zignal.Sinetone(fs=44100, f0=997, duration=0.01, gaindb=-20)
>>> x.plot_fft()

Что такое децибелс

Как видите, второй график отображает частоту против величины. Эта величина почти амплитуда, но не совсем. Что мы измеряем как «децибелы», на самом деле является логарифмом соотношения амплитуд и то, что называется величиной на этом участке. Это 20 * LOG10 (AMP/AMP_REF) где Amp_ref это эталонная амплитуда, которая позволяет нам использовать децибелы в качестве единицы измерения в первую очередь. Его точное значение не важно.

Если мы только что использовали амплитуду как меру громкости, ну, он может иметь какое-либо значение, потому что оно не привязано к любому значению «базового» или «происхождения». Имея ссылочную амплитуду для разделения путем ресторанов этой проблемы, потому что результат имеет происхождение 1 (при амплитуде и амплитуда амплитуды одинаковы). Затем он должен быть масштабирован, поскольку в образце могут быть очень маленькие амплитуды, которые нельзя сравнивать с нормальными образцами линейно.

Частоты имеют аналогичное измерение, называемое A Десятилетие (дек).

Но что более важно, второй сюжет демонстрирует, что Оригазники имеют частоты разных громкости Отказ Decibels – это мера громкости, насколько громко будет каждая часть формы волны.

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

Но как насчет вывода дисплея?

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

Имя класса Python классное значение
Количество образцов в форме волны в секунду, измерено в Гц частота дискретизации
Количество каналов в звуке каналы
Как долго звук длится в секундах продолжительность
Numpy DataType, используемый для образцов тип данных
Сколько образцов на каждом канале. Каждый канал должен иметь одинаковое количество образцов. Образцы на ч
Насколько большой звук основан на продолжительности, частоте дискретизации и количеству каналов (мегабайт) Размер данных
Есть ли комментарий строки пользователя в звуковом объекте? имеет комментарий
Самый громкий образец в форме волны (на канал) вершина горы
Средний корневой квадрат формы волны (SQRT (сумма (каждая_ампля ^ 2))). Это значение имеет полезные физические свойства. RMS.
Как экстремальные пики в форме волны (ABS (пик) / RMS) Crestactactor
Частота формы волны. Zignal использует по умолчанию 997 Гц, но обычно вы хотите другой частоту. частота
Смещение формы волны. Можно «нажать» сигнал обратно и вперед во времени. фаза
Как «активная» форма волны. Это соотношение ширины импульса (как давно форма волны «включена» за один период) и длина периода. ⚑ Обычно это выражено в процентах. Звуки Zignal имеют рабочий цикл по умолчанию 0,5 (50%). рабочий цикл

Этот параметр тоже не был очень понятен для меня. Я надеюсь, что я заканчиваю эту серию блога, его значение и полезность станет более понятным, но если вы знаете, что это значит, пожалуйста, дайте мне знать в комментариях, потому что это будет очень полезно слышать.

Один важный параметр, который не указан здесь (но должен) это скорость бита . Это число различных амплитуд, которые могут взять образец. maximum_amplitude = 2 ^ (bit_rate) . Чем выше скорость бита, тем более мелкозернистые амплитуды образец может взять на себя. Образцы не могут просто иметь никакой амплитуды, потому что они хранятся в цифровом виде, а не аналоговые образцы. Вот почему все цифровые образцы имеют немного скорости.

Аудиоэффекты

Выбор Zignal фильтров и преобразований Zignal довольно скромный, но у вас, по крайней мере, у вас есть набор основных эффектов, таких как исчезновение и исчезновение и задержка. Давайте посмотрим, как эти эффекты работают.

Зиньял имеет fade_in (millisec) и fade_out (millisec) Методы, которые постепенно уменьшают громкость формы волны в начале и конец соответственно в миллисекундах. Эта исчезновение применяется ко всем каналам.

Внимание: Текущая версия Zignal, доступных на PYPI, кажется, не удается при вызове этих функций с ошибкой: TypeError: «Numpy.float64» объект не может быть интерпретирован как целое число . Это Известная проблема И патч не сошел вовремя, прежде чем публиковать эту статью. Пожалуйста, будьте терпеливы, пока я отправляю для этого bugfix. Bugfix был объединен, обновите Zignal 0.6.0.

Задержка (n, канал) сдвигает все образцы в канале справа n раз. Первый n Образцы затем заполняются нолью и точкой. Номера каналов начинаются с 1.

Zignal также может проверить, состоит ли форма волны из образцов, которые полностью ноль ( is_empty () ), и если пик формы волны меньше указанной громкости в децибелах ( iS_probless_empty (ограничение) ).

Также возможно преобразовать звук между плавающей точной битной скоростью между 0 и 1 ( Convert_to_float (TrapesBits) ) и целочисленные биты ( Convert_to_Integer (TRANCEBITS) ). Преобразование между различными целочисленными битовыми скоростями еще не поддерживается, и ни один не содержит целочисленных битов, которые также были бы хорошими Todo. Звуки также могут быть переведены ( Reshiple (Cardrate) ) и нормализован ( Normalize () ). Вы также можете ускорить и замедлить выборки аудио без повторной выборки ( Set_Sample_Rate () ).

Также возможно Снес звук. Деситель сжимает звук в меньшее количество битов. Это приводит к меньшему шуму, чем если пробоотрезанные биты были просто усечены или закруглены, и она удаляет что-то называемое «искажением гармонического квантования», которое является когда гармоники искажены и в результате увеличивают шум в образце.

В Zignal функция для дизерирования должна быть Doury (биты) Но эта функция еще не была реализована, как в, она повышает NotimplementedError Отказ

to_mono () Смешивает все каналы до одного канала «Mono», возвращающий новый звуковой объект. Наконец, вы можете экспортировать звук в WAV файл с write_wav_file (имя файла) Отказ

Под капотом

Zignal использует Scipy для создания фактических образцов и для экспорта файла WAV. Обработка сигнала в значительной степени числовой, поэтому Numpy используется для подавляющего большинства массивов и данных типов, а также многие другие разные числовые функции, используемые для изменения сигнала. Участки сделаны с MatPlotlib и на самом деле вы можете пройти все аргументы ключевых слов matplotlib.pyplot.plot () к Участок () Способ зиньяльных звуков.

Для преобразования частоты образца (части, которые были реализованы как минимум), Samplerate Пакет использовался для обеспечения преобразования.

Закрытие слов

Как вы видите, я не аудио эксперт 👓 Но я старался изо всех сил, чтобы понять, что я написал.

Zignal – это хорошая библиотека обработки сигналов … для изучения того, как работает обработка сигналов. Существует довольно много вещей, которые необходимо реализовать до того, как он может быть использован для производства. Надеюсь, я найду других продуктивных библиотек и напишу о них в более поздние сообщениях в блоге.

Есть какие-либо аудио библиотеки Python, о котором вы хотите, чтобы я поговорил? Дайте мне знать в комментариях, чтобы я тоже могу написать о них.

И он не говорит, если вы видите какие-либо ошибки в этом посте, дайте мне знать Так что я могу исправить их.

Иконки сделаны Freepik от www.flaticon.com.

Изображение PublementdomainPictures от Pixabay.

Оригинал: “https://dev.to/zenulabidin/python-audio-processing-at-lightspeed-part-1-zignal-5658”