Содержание

Как научиться чувствовать треки? Визуализация музыкальных частот в Моей волне / Хабр

Разработчики всего мира потратили миллионы часов на создание визуализаций музыки в приложениях и плеерах. Наверняка многие из вас помнят анимации в старом-добром Winamp. Или разные скины JetAudio. Олды вообще скажут: «Погоди-ка, ты забыл про Atari Video Music, всего-то 1976-й был!» — и будут правы.

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

Но хотелось добавить динамики, связи между звуком и визуальным рядом — чтобы анимация дополняла эмоции от музыки. Мы решили сделать так, чтобы Моя волна учитывала не просто темп, а саму музыку, то есть частоты. В конце концов, это главный экран приложения, и было бы странно показывать на нём какую-то простую давно знакомую визуализацию.

Меня зовут Андрей Бобков, я Android-разработчик, и в этом посте я расскажу, как при помощи высшей математики и цифрового анализа сигнала мы научили Мою волну чувствовать треки, которые вы слушаете, и визуализировать частоты.

Лично для меня в этом проекте звёзды сошлись — я в институте активно изучал цифровой анализ сигнала. Нам его объясняли как какого-то сферического коня в вакууме: вроде бы теоретические знания есть, понимание предмета есть, а вот как и где применять всё это в реальной жизни и задачах — вопрос.

Чего мы хотели достичь

Нашей главной задачей было красиво визуализировать музыкальный поток, причём сделать это максимально энергоэффективно для устройства пользователя. Поэтому мы решили, что в основу визуализации Моей волны ляжет преобразование Фурье: тогда выйдет, что бо́льшая часть энергии будет тратиться на чистую математику и перегон PCM-байтов. Обе этих операции не представляют для современных гаджетов какой-то серьёзной нагрузки.

Вдобавок к этому анализ потока и отрисовка Моей волны происходят, только когда приложение открыто. Если вы свернули его и слушаете музыку в фоне, анимация не отрисовывается, поток не анализируется — значит, аккумулятор на это не тратится.

Для подобных проектов в Android уже существует своя реализация анализа звука и преобразование Фурье, но библиотека Google требует разрешения на запись звука. Нам кажется, что запрашивать для такого разрешение — перебор. К тому же, этот способ зависит от громкости звука.

Нам это не подходило, поэтому мы решили написать своё решение, которому не нужен будет доступ к микрофону.

Как всё работает

В стандартном приложении музыки для Android есть плеер. В нём мы можем подключиться к аудиопотоку до его выхода в ЦАП и получить аудиоданные в виде PCM-байтов (формат определяет плановую характеристику звука, комплексное число). Так мы можем проанализировать эти байты ещё до выхода сигнала на воспроизведение.

За анализ отвечает быстрое преобразование Фурье, раскладывающее звуковую волну на нужные нам частоты, а также их амплитуды.

Итак, любой звук по сути — частоты и амплитуды. Это стандартная волновая функция, синусоида, не представляющая с точки зрения математики ничего сложного. Поэтому мы можем задать определенное временное окно и в его рамках накопить нужные нам для работы данные. Благодаря анализу синусоиды мы можем распознавать октавы и понимать, что в треке есть басы, ударные инструменты и прочее.

Итак, мы начинаем анализировать конкретную песню. Нам надо накопить 100 миллисекунд звука и запустить преобразование Фурье, после чего мы сможем точно сказать — да, на этом отрезке звучали ударные (скрипки, гитарный запил). Мы можем распознать конкретный инструмент, так как понимаем, какая частота звучит в выбранный нами момент.

К сожалению, метод не идеален, потому что существуют треки с очень большой скоростью. Например, творчество группы Dragonforce, где гитарный запил может попасть между окнами в 100 мс.

Волна может начаться на 90 мс и закончиться на 120 мс — так что мы ёё пропустим и не учтём. А в тяжёлом роке множество инструментов, вот и получается, что все частоты заполнены и перепадов почти нет.

class PCMAudioStreamAudioProcessor : BaseAudioProcessor() {
    // properties
    override fun onConfigure(inputAudioFormat: AudioProcessor.AudioFormat): AudioProcessor.AudioFormat {
        // check format, save channels count, smaple rate and other data
        return inputAudioFormat
    }
    override fun queueInput(inputBuffeer: ByteBuffer) {
        // sending pcm bytes to analyze
    }
}

Как я писал выше, мы получаем данные из AudioProcessor ExoPlayer. На самом деле, он может использоваться для изменения звука, но мы просто копируем PCM-байты и отдаём их дальше нетронутыми.

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

Также стоит помнить про работу с форматами, например, PCM_16_BIT линейный и с ним не требуется делать каких-то специфических манипуляций. Грубо говоря, каждый Short, который достали из буфера, — это дискретное значение амплитуды оцифрованного аналогового сигнала в данный момент времени (вот статья с подробным описанием, как работать с чистыми данными в SilenceSkippingAudioProcessor).

Остаётся вопрос — считать среднюю амплитуду по всем каналам или же по одному? Возможно, проще брать канал с максимальным значением и отдавать в функцию быстрого преобразования Фурье?

Про быстрое преобразование Фурье сложно сказать что-то новое, есть множество хороших статей на эту тему, кое-что мы уже описывали на Хабре. Нам не требовалось получить абсолютно точную частоту — 200 мгц, 1 кгц и так далее. Мы рисовали средние и низкие, то есть просто проверяли, входит ли частота в нужный нам диапазон или нет, а затем суммировали амплитуды.

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

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

Поэтому я просто нашёл нужные мне сэмплы, выбрал конкретный тон на 1 килогерц, после чего загрузил его в анализатор. На выходе показало, что это на самом деле 1 килогерц, и я понял — всё работает как надо.

Визуализация


(Глубина заполнения цветом — нижние частоты, изгибание волны — средние.)

На примере схемы ниже разберём вкратце, как это работает.

PcmAudioProcessor просто накапливает в течение 100 мс и отдаёт байты PCM-формата.

AudoVisualizationCenter, получая эти байты, преобразовывает их в правильный формат и проводит быстрое преобразование Фурье, а дальше мы в комплексном массиве ищем нужные нам диапазоны и получаем количество вхождений и амплитуды частот.

Затем мы отправляем данные в Flow и на каждый эмит в WaveAnimation посылаем новое значение.

VaweAnimationRenderer на каждый запрос фрейма анимации волны анимирует предыдущее значение AudioData к новому, исходя из прошедшего времени с учётом окна данных в 100 мс. Мы отказались от ValueAnimator’а и сами рассчитываем новые значения анимации на каждый фрейм, так оказалось гораздо эффективнее, потому что ValueAnimator приходится создавать на каждую новую анимированную величину. А так как величина обновляется каждые 100 мс, нам пришлось плодить аниматор каждые 100 мс, пока идут данные.

Хочу отдельно отметить, что визуальная заметность отрисовки и её, скажем, чистота сильно зависят от жанра музыки, которую вы слушаете. Это немного подпортило мне сбор обратной связи от коллег — я попросил их потестировать Мою волну и рассказать мне, что они думают. Вернулись с фидбеком, что в целом всем всё нравится, видно, что Моя волна на самом деле воспринимает частоты, но изюминки нет, не цепляет. Оказалось, что все опрошенные просто слушали тяжёлый рок. А в нём множество средних и высоких частот, поэтому анализатор забивается, и на выходе получается не самая отчётливая визуализация.

Зато отлично себя показали кантри и рэп. В кантри вообще всё прекрасно, чёткие отдельные ударные, яркие гитары, банджо — очень красиво раскладывается и, как следствие, так же красиво визуализируется. Рэп для меня в этом плане стал откровением — совсем не мой стиль музыки, но визуализируется он очень красиво, просвечивается некая ритмичная точность того, как речитатив на самом деле попадает в ритм и низкие частоты (сама речь человека идет на средних).

Классическая музыка, к сожалению, тоже пока не так заметна — мало привычных нам низких частот, много средних и высоких. Так как высокие мы пока не выводим в визуализацию (ещё не решили, как это сделать в плане дизайна), то остаются только средние. С современной классикой в плане визуализации дела обстоят гораздо лучше.

Размышления о будущем

Я и сам раньше постоянно ходил в любимые треки, но теперь слушаю музыку именно через Мою волну. Сейчас её хотя бы раз в неделю включают 70% всех слушателей Музыки. Живая анимация в тандеме с алгоритмами Моей волны даёт занятный пользовательский опыт: ты не только слушаешь то, что тебе нравится, но и можешь увидеть это. Хотя бы в разрезе частот.

Лично у меня есть пара хотелок, которые я надеюсь реализовать.

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

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

Если у вас тоже есть хотелки и пожелания к работе Моей волны в частности и Музыки в целом — пишите мне в комментарии или и личку, буду рад ответить.

Визуализация звука (галерея индикаторов аудио) — Кабели, питание, стойки.

..

Yan (Ян)

#1

Меня сводят с ума красивые индикаторы, применяемые в аудио аппаратуре!

Хочу создать отдельную тему и собирать здесь дерзкие, стильные, необычные исполнения различных индикаторов, применяемых в аудио аппаратуре.
Это могут быть индикаторы громкости, выходной мощности, напряжения питания или чего-то еще, главное, чтобы это решение было оригинальным и “цепляющим глаз” как элемент стиля, реализованного для аудио аппаратуры!

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

Сегодня я доделал прототип индикатора уровня аудио сигнала.
Подробный обзор будет позже, пока лишь небольшое превью и короткое видео, демонстрирующее принцип его работы.

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

Для этого было задействовано 190 светодиодов (чуть не помер, пока паял их). Цвет индикаторов может быть любым (белый, синий, красный, зеленый, оранжевый, желтый, розовый или их произвольная комбинация). Возможно отображение как стрелки, так и шкалы, толщиной от 1 до 10 сегментов (с некоторыми ограничениями, но об этом потом).

В завершение своего короткого поста хочу отметить, что этот индикатор – это не просто «дергающаяся стрелка в такт с музыкой». Это весьма профессиональный индикатор, показания которого соответствуют действительности. Шкала, которая нанесена на индикаторе, соответствует реальным уровням ослабления аудио сигнала. Для анализа аудио сигнала используется прецизионный полноволновой пиковый детектор, а динамика (время атаки и спада) отображения сигнала соответствует спецификации DIN PPM (отклик в 1 дБ в течение 10 мс, затухание 20 дБ за 1. 5 секунды).

18 симпатий

earn (Максим)

#2

Кайфовая штука!

1 симпатия

Roman_Robertovich (Roman Robertovich)

#3

Жму руку! Очень занятно получилось.

1 симпатия

Mitko (Mitko)

#4

3 симпатии

Yan (Ян)

#5

Благодарю!

Yan (Ян)

#6

Спасибо!

Mitko (Mitko)

#7

cделать индикатор из диодов это конечно очень много усилий и времени нужно затратить…

а ведь давно существуют инструменты с широкими возможностями

Yan (Ян)

#8

Mitko:

а ведь давно существуют инструменты с широкими возможностями

За ссылку спасибо, но не совсем понятно, что с этим всем делать. Речь же шла об аппаратной реализации индикатора с целью его последующего размещения в усилителе, предусилителе и так далее. Аппаратно-программные возможности же я не прикручу непосредственно к железке.

Mitko (Mitko)

#9

Yan:

Речь же шла об аппаратной реализации индикатора с целью его последующего размещения в усилителе, предусилителе и так далее

чтобы индикация внутри устройства меньше “гадила” в звук,их зачастую делают отключаемыми … по хорошему к ним нужны отдельные блоки питания

очевидно поэтому в хайэнде в основном и нет индикаторов…не думаю что у того же CH preсision обеспечение работы индикатора абы как сделано

очевидно поэтому ,если нужно контролировать(измерять) сигнал и используются внешние измерители\индикаторы

Yan (Ян)

#10

Mitko:

чтобы индикация внутри устройства меньше “гадила” в звук,их зачастую делают отключаемыми … по хорошему к ним нужны отдельные блоки питания

Здесь Вы правы! Отключение индикатора не проблема. Отдельный линейный БП — тоже. Отбор аудио сигнала через качественный высокоимпедансный буфер, чтобы не навредить источнику сигнала, — тоже можно.

Mitko:

очевидно поэтому в хайэнде в основном и нет индикаторов…

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

Mitko:

очевидно поэтому ,если нужно контролировать(измерять) сигнал и используются внешние измерители\индикаторы

Не всегда это решает поставленную задачу.
Поясню на примере, с которым столкнулся сравнительно недавно. Допустим, у меня есть некий усилитель. В моем случае это был AV-ресивер Marantz SR-4003. Я использовал ресивер в качестве “мощника”, а сигнал подавал через промежуточный предварительный усилитель. Так как у предусилителя выход был весьма мощным, я впервые в жизни увидел на экране индикатора Marantz слово PEAK!
Т.е. производитель позаботился о том, чтобы показать мне, как пользователю, что входной сигнал с преда уже избыточен для “мощника” и дальше он не будет нормально усиливаться, а пойдет клиппирование. Причем ушами я еще не услышал каких-либо искажений. Соответственно, я убавил выход предусилителя и оставил его на уровне наилучшего соотношения сигнал/шум.
Я в большей степени занимаюсь и интересуюсь ламповой техникой и ограничение (клиппирование) у ламповых аппаратов весьма мягкое и загнать аппарат в насыщение весьма сложно. Поэтому, я считаю, что усилитель, особенно ламповый, должен иметь индикатор входного сигнала, настроенный по осциллографу, который будет отслеживает уровень входного сигнала. В этом случае пользователю будет понятно, сколько еще он может “поддать” от предварительного усилителя, чтобы оставаться в допустимых условиях работы оконечного усилителя. Надеюсь, понятно описал суть проблемы.
Из этого следует, что внешними индикаторами/измерителями мы не обойдемся и необходимо, чтобы о своем комфортном режиме работы беспокоилось само устройство.

Mitko (Mitko)

#11

Yan:

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

уж в ламповике сам бог велел ламповый индикатор ставить

или

Airstone (Алексей)

#12

Эх… Комета-201. Был такой глазище.

Yan (Ян)

#13

Mitko:

уж в ламповике сам бог велел ламповый индикатор ставить

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

Yan (Ян)

#14


Очень вдохновляют крупные индикаторы у моноблоков “мощников”.

Mitko (Mitko)

#15

такие голубые индикаторы как “глаза” BMW на другие марки авто ставить…некошерно…

Yan (Ян)

#16

Я же не говорю о 100% копировании. Вовсе нет. Мне понравился размер индикатора и то, как он определяет стиль устройства. Свой индикатор я сделал, вот думаю о его внешнем оформлении и возможностях интеграции в различные устройства.

wehr-wolf (DEVID)

#17

Mitko (Mitko)

#18

по моему стиль больших индикаторов пошедших условно с техниксов\МАКов настолько дезавуирован “китайцами”,что допустим только у тех ,кто и начал их использовать…наверное поэтому другие серьезные производители и не используют такой дизайн сейчас

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

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

или придется делать (светлую) фальш-панель с прорезями под каждый светодиод…

Yan (Ян)

#19

Mitko:

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

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

RomanSt (Роман)

#20

AKAI GXC 735-D. Одни из самых красивых “стрелочек” , что я видел.

1 симпатия

следующая страница →

новый поворот в развитии исторического познания

Please use this identifier to cite or link to this item: http://hdl.handle.net/10995/36585

Title: Визуализация истории: новый поворот в развитии исторического познания
Other Titles: The visualization of history: a new turn in the development of historical cognition
Authors: Мазур, Л. Н.
Mazur, L. N.
Issue Date: 2015
Publisher: Издательство Уральского университета
Citation: Мазур Л. Н. Визуализация истории: новый поворот в развитии исторического познания / Л. Н. Мазур // Quaestio Rossica. — 2015. — № 3. — С. 161-178.
Abstract: The author analyzes the transformational processes of historical research in the advent of a society of visual culture. The development of visual anthropology became the most obvious factor of the visual turn in historical research, and it studies different manifestations of visuality, using new tools for collecting and registering data (such as a video camera). The increasing popularity of historical films and documentaries, museum installations and historic reconstructions testify to the intensification of the processes of visualization in historical research. The article gives a brief overview of the main stages of the transformation of historical research, including changes in style of language, the expansion of subject matter of research, the update of the resource base and analysis methods in relation to visual sources. The author emphasizes that there is a tendency among historians to use a wide variety of terms that are related to the visual approach (image, appearance, portrait, landscape, etc.). The author focuses on the methodological and methodical aspects of historical-visual studies and considers the methodological approaches towards image reconstruction, mechanisms of image formation, the display of images and the influence of social consciousness and behavior on images. The increase in the amount of modern historical sources is caused by the increasing use of audio-visual sources. Special attention is paid to fictional films as a subtype of audio-visual documents; the author describes their potential and peculiarities of representation. It is noted that when analyzing video documents, it is necessary that the researcher take into account the character of information (images of the present and past). Films based on topics belonging to the same epoch as the researchers are the most attractive ones for analyzing as they contain a considerable amount of information reflecting the peculiarities of material culture, behavioral models and relationships as well as social types. The author demonstrates that to study audio-visual sources it is necessary to use special methods, namely, the method of observation. The article studies its essence, and the methods of its adaptation to the analysis of audio-visual documents. Additionally, the article characterizes the main stages in the employment of the method when analyzing video documents. The study of visual sources forms special skills needed to work with information.
Анализируются процессы трансформации исторической науки в условиях формирования общества визуальной культуры. Наиболее очевидным показателем визуального поворота в исторической науке стало стремительное развитие визуальной антропологии, в рамках которой изучаются различные проявления визуальности и используется новый инструментарий сбора и фиксации информации (кинокамера). Об усилении процессов визуализации исторической науки свидетельствует растущая популярность историко-документального кино, музейных инсталляций, исторических реконструкций. Кратко охарактеризованы основные направления трансформации исторической науки, в том числе изменение стиля языка, расширение тематики исследований, обновление источниковой базы и методов анализа визуальных источников. Отмечено широкое использование в словаре историка понятий, связанных с визуальным подходом (образ, облик, портрет, ландшафт и пр.). Основное внимание уделяется методологическим и методическим аспектам историко-визуальных исследований, рассматриваются методологические подходы к реконструкции и механизмам формирования образа; его трансляции; влиянию на общественное сознание и поведение. Расширение современной источниковой базы исторических исследований связано со все более широким использованием аудиовизуальных источников. Особое внимание уделено такой разновидности аудиовизуальных документов, как художественные фильмы, раскрываются их потенциал и особенности репрезентации информации. Отмечено, что при анализе кинодокументов необходимо учитывать прежде всего характер отражения информации (образы «настоящего» или «прошлого»). Наиболее интересными для исторического исследования являются фильмы на современную авторам тему, поскольку они содержат значительный пласт информации, отражающей особенности материальной культуры, поведенческих моделей и отношений, социальных типажей. Показано, что для изучения аудиовизуальных источников необходимо использование особых методов, в частности метода наблюдения. В статье рассмотрены его содержание, проблемы адаптации его к изучению аудио-визуальных документов. Приводится характеристика основных этапов реализации метода наблюдения при изучении кинодокументов. Изучение визуальных источников формирует особые навыки работы с информацией.
Keywords: VISUAL ANTHROPOLOGY
VISUAL HISTORY
IMAGE
METHOD OF OBSERVATION IN HISTORY
MODERN HISTORIOGRAPHY
ВИЗУАЛЬНАЯ АНТРОПОЛОГИЯ
ВИЗУАЛЬНАЯ ИСТОРИЯ
ОБРАЗ
МЕТОД НАБЛЮДЕНИЯ В ИСТОРИИ
СОВРЕМЕННАЯ ИСТОРИОГРАФИЯ
URI: http://hdl.handle.net/10995/36585
RSCI ID: https://elibrary.ru/item.asp?id=25413006
SCOPUS ID: 84992092772
WOS ID: WOS:000367473100009
ISSN: 2313-6871
2311-911X
DOI: 10. 15826/qr.2015.3.117
metadata.dc.description.sponsorship: Тема поддержана грантом РГНФ № 14-01-00352 «Визуальные репрезентации советской деревни в художественном кинематографе 1920-1980-х гг.: источниковедческое исследование».
Origin: Quaestio Rossica. 2015. № 3
Appears in Collections:Quaestio Rossica

Show full item record   Google Scholar


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

Easy Audio Visualization (Python) | Жан Менье-Пион

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

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

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

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

Цель

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

Ожидаемый результат

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

Шаг 1: Импорт пакетов

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

Для быстрого обзора мы используем:

  • звуковой файл для чтения аудиоданных.
  • numpy для обработки аудиоданных, содержащихся в массивах.
  • matplotlib.pyplot для отображения звуковой дорожки.
  • pydub для воспроизведения аудиофайла.
  • время , чтобы оптимизировать отображение звуковой дорожки.
  • многопроцессорность для одновременной работы двух процессов. Здесь мы хотим воспроизвести аудиофайл при отображении звуковой дорожки.

Шаг 2: Подготовка аудиоданных

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

Также важно получить частоту дискретизации ( Fs ) аудиоданных, что соответствует количеству выборок в секунду.

Шаг 3: Воспроизведение аудиофайла

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

Зачем определять для этого функцию? Что ж, это удобный способ разделить разные процессы при использовании многопроцессорной обработки. Это может стать яснее, когда вы посмотрите на Шаг 5 .

Шаг 4: Отображение звуковой дорожки

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

Итак, задача:

  1. Постоянно обновлять сюжет.
  2. Для обновления сюжета с хорошим временем.

Код для отображения звуковой дорожки приведен ниже:

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

Шаг 5: Многопроцессорная обработка (последний шаг)

Чтобы визуализировать ваши аудиоданные во время воспроизведения аудио, вам нужно попросить Python выполнить две задачи одновременно. Следовательно, мы собираемся использовать многопроцессорную обработку для одновременного запуска двух процессов.

Вот реализация для этого:

Строка «if __name__==»__main__»: «требуется в скрипте Python, чтобы убедиться, что многопроцессорность работает правильно, поэтому ее нельзя опускать.

Примечания

Обратите внимание, что представленная здесь реализация очень проста и ее определенно можно улучшить. Особенно:

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

Заключение

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

Надеюсь, это дало вам несколько идей для других проектов! 🙂

Ниже вы можете найти доступ к личному репозиторию GitHub , содержащему код и аудиофайл, относящийся к этой статье:

GitHub — jmpion/easy-audio-visualization

Вы не можете выполнить это действие в настоящее время. . Вы вошли в другую вкладку или окно. Вы вышли из системы на другой вкладке или…

github.com

Пошаговое руководство по аудиовизуализации в Python

Машинное обучение нашло свое применение в ряде областей, связанных с имитацией сложностей и чувств человека. Компьютерное зрение и синтез речи существуют с конца 19 века.60-х годов и со временем значительно улучшились, особенно в последние несколько лет.

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

Синтез речи как технология уже вошла в обыденные домохозяйства как центральная станция для многих устройств с голосовым управлением, включая виртуальных помощников, таких как Alexa, Google Assistant, Cortana и Siri.

Голосовые помощники сегодня больше, чем просто аудиоэнциклопедии — они также могут лаять, мяукать и скулить, как милые животные. Но как работает эта технология? Каким бы сложным это ни казалось, синтез речи поддерживается множеством сложных алгоритмов, которые делают больше, чем просто синтез, но анализируют звук и дают представление. Одним из хороших приложений является классификация звуков. Современные машины способны классифицировать разные звуки.

Визуализация звуков

«Звук — это вибрация, которая распространяется в виде слышимой волны давления через передающую среду, такую ​​как газ, жидкость или твердое тело» люди и большинство жителей Земли воспринимают звук. Но как это делает машина? Машины хороши со зрением, поэтому мы преобразуем звуки в числа и образы. Этим мы и займемся на этом практическом занятии.

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

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

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

Ready Set Код

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

Следующий пример был выполнен в Google Colab, и ниже приведены сведения о среде:

  • Python 3.6.9
  • Librosa 0.6.3
Установка Librosa

Пакет, который помогает нам анализировать LibROSA аудиофайлы и предоставляет строительные блоки, необходимые для создания систем поиска аудиоинформации. Мы установим библиотеку librosa с помощью следующей команды:

!pip install librosa

Предполагая, что на вашем диске Google есть несколько аудиофайлов, мы приступим к загрузке файла. Но перед этим смонтируем гугл диск на Colab.

Подключение Google Диска

Выполните и выполните аутентификацию, используя следующий блок кода, чтобы получить доступ к вашему Google Диску в colab.

из google.colab import drive

drive.mount('/GD')

Импорт библиотек

Import Ipython.display As IPD

Импорт Librosa

Импорт librosa. display

Import Matplotlib.pyplot As PLT

LOADIONGINGIOR WELIORIPY WILERIORIPY WILERIORIPIOR WELIORIPY WILERIORIPY WELIORIORIORIPIO всего в один лайнер. Введите и выполните следующий код.

ipd.Audio('/GD/.../audio/numb.m4a')

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

Спектрограммы

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

Сначала мы инициализируем график размером фигуры.

plt.figure(figsize=(15,4))

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

filename = '/GD/My Drive/.../audio/numb.m4a'

data,sample_rate1 = librosa.load(filename, sr=22050, mono=True, offset=0.0, duration= 50, res_type='kaiser_best')

Сэмплирование

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

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

Частота выборки

Частота выборки — это количество выборок в секунду. Гц или Герц — это единица измерения частоты дискретизации. 20 кГц — это слышимый диапазон для человека.

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

Fun Time: Linkin Park Vs Micheal Jackson Vs Blue

Давайте сравним спектрограммы трех очень популярных песен:

Complete Code

What’s Ahead

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

Звуковая визуализация: стоит ли изображение тысячи слов в аудио?

Говорят, что «картинка стоит тысячи слов», и нигде это так не применимо, как при обучении сложным понятиям.

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

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

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

Давайте начнем с рассмотрения простого способа представления частотного содержания одного звука, такого как звук бочки, показанного здесь относительно вертикальной оси, обозначающей частоту ( Рисунок 1 ). Слева изображение бочки со стандартным микрофоном, с одним микрофоном, торчащим из отверстия в передней обшивке.

Здесь мы видим немного больше энергии в нижней и верхней части звука (т. е. удар и щелчок), чем в середине — довольно часто при близком расположении микрофона бочки. Правая сторона изображения представляет тот же сигнал после применения небольшого эквалайзера, в данном случае нижняя часть была усилена, а нижняя и верхняя средние частоты были немного уменьшены, чтобы получить классический звук бочки.

Эквалайзер — не единственный способ воздействия на частотный состав звуков, поэтому давайте рассмотрим некоторые другие методы ( Рисунок 2 ).


Слева изображение малого барабана со стандартным микрофоном – один микрофон над верхней обшивкой. В середине тот же малый барабан с примененным фильтром высоких частот, на что указывает затухание (которое обозначает постепенное уменьшение содержания низких частот). Справа тот же малый барабан после компрессии. В этом случае компрессор ограничивает не только динамический диапазон малого барабана (который трудно изобразить на статичном изображении), но и его частотный состав, что приводит к более плотному и пробивному звуку, возможно, за счет некоторых более мелких деталей.

Теперь, когда мы установили простой способ визуального представления различных звуков и способы воздействия на них, давайте взглянем на полную ударную установку. У установки в целом широчайший частотный диапазон практически любого инструмента (за исключением, возможно, органа), от низкого стука бочки до шипящего блеска тарелок.

Он состоит из нескольких элементов, каждый из которых должен быть микширован таким образом, чтобы мы могли обрабатывать каждый отдельный звук относительно изолированно, чтобы при объединении они дополняли друг друга и работали вместе как единое целое. Если мы возьмем стандартную барабанную установку из четырех частей, микрофоны которой установлены стандартным образом (т. е. один микрофон на каждом барабане с парой подслушиваемых микрофонов), и просто поднимем все фейдеры, это может «выглядеть» примерно так:0279 Рисунок 3 .

Теперь я добавил информацию о панорамировании по горизонтальной оси, чтобы обозначить положение звуков в стереополе (на данный момент все панорамируется по центру). Единственная вещь, которую это изображение делает очевидным, — это помехи, возникающие там, где звуки накладываются друг на друга, особенно в среднем диапазоне, где бочка, малый барабан и томы производят звуковую энергию.

Это частая причина «мутности» в миксе ударных, которую можно легко устранить с помощью небольшого эквалайзера и панорамирования ( Рисунок 4 ). Здесь мы можем видеть, что немного эквалайзера было использовано, чтобы выделить нижнюю часть бочки, бочка также была сжата, и был применен фильтр низких частот. Малый барабан также был сжат, и был использован фильтр высоких частот, чтобы укротить энергию нижней середины. Томы были эквализованы и панорамированы, чтобы создать пространство для малого барабана и имитировать их физическое расположение в установке. Тарелки (или оверхеды) прошли через высокие частоты и были широко панорамированы, чтобы придать верхней части установки приятное ощущение ширины.


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

Говоря об этом, давайте взглянем на другие распространенные элементы микса в виде простой расстановки из трех гитар, т. е. бас, ритм-гитара и соло-гитара ( Рисунок 5 ).


На этом изображении показан потенциал грязного звука в нижнем среднем диапазоне, где все три инструмента производят энергию. Мы также можем ясно видеть маскировку, которая обычно возникает, когда основные частоты гитары перекрываются и затемняют гармоники баса.

Гитары также обычно имеют ярко выраженные низкие частоты из-за использования направленных микрофонов в непосредственной близости от корпусов динамиков, что усугубляет эффект близости. К счастью, все это можно легко исправить с помощью фильтров верхних частот и небольшого панорамирования ( Рисунок 6 ).


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

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

Любое музыкальное исполнение, содержащее более одного мелодического или ритмического элемента, живое или записанное, требует сведения этих элементов. Традиционно музыка исполнялась вживую, а микс создавался за счет разумного позиционирования отдельных элементов микса и добавления их там, где это необходимо. (Вы хотите, чтобы скрипки были громче? Получите больше скрипок!)

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

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

Так что же произойдет, если мы объединим нашу ударную установку с гитарами и добавим вокал? ( Рисунок 7 )


Теперь это начинает выглядеть немного запутанно, но микс представляет собой сложное взаимодействие нескольких элементов, так что это вполне нормально. Вокал был сжат, чтобы сузить его динамический диапазон и помочь ему занять верхнее место в миксе, но все еще существует риск того, что его заглушат другие инструменты, имеющие энергию в том же частотном диапазоне (например, гитары). Поскольку подавляющее большинство музыки, которую мы микшируем на концертах, основано на песнях, ключевой задачей является обеспечение того, чтобы вокал был услышан.

Итак, что мы можем сделать, чтобы они выделялись еще больше? Ответ, конечно, реверберация, изображенная здесь ( Рисунок 8 ) с использованием внешнего свечения. Ключевым моментом является использование реверберации, которая достаточно мала, чтобы вокал не звучал слишком далеко, при этом используя спектральное размытие и расширение стереобазы, которые могут помочь сделать звук вокала объемнее.


Пластина с временем реверберации от 1,0 до 1,6 секунды и предварительной задержкой менее 10 мс обычно справляется со своей задачей. Иногда я обнаруживаю, что свертывание верхних частот (или регулировка высокого коэффициента) реверберации помогает сделать ее звучание более тонким — меньше похожим на цифровую реверберацию и больше на естественное акустическое пространство вокруг вокала.

Но это не единственный способ выделить вокал в загруженном миксе ( Рисунок 9 ).

Автор записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *