Русский
Русский
English
Статистика
Реклама

Аудио

Физика звука? Что такое громкость? Разбор

19.02.2021 16:11:01 | Автор: admin
Если вы когда-нибудь подбирали себе музыкальную колонку, то сталкивались с тем, что сделать это не так-то просто, особенно если вы не специалист в звуковой аппаратуре. И еще ладно, если вы можете послушать акустику в магазине, но если такой возможности нет, то как понять?

Чем больше Ватт, тем громче, так? Но ведь громкость в децибелах


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

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

Что такое звук?


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



Давление меняется, наши барабанные перепонки улавливают эти изменения и мы слышим звук!

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

Восприятие громкости




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

Например, утверждение громкость звука составляет 30 дБ означает, что интенсивность звука в 1000 раз превышает порог слышимости звука человеком.Но и в данном случае не все так просто. Изменения давления в воздухе измеряется в децибелах, но вот наше восприятие громкости в другой величине фонах!

Начнем с того, что все частоты мы слышим по-разному.Дело в том, чувствительность нашего уха к разным частотам сильно разная. Поэтому, громкость, это скорее про наши ощущения, чем про давление.

Что это такое?

Фон (др.-греч. звук)

Фоны это такие кривые громкости которые были построены по усредненным ощущениям людей с нормальным слухом в возрасте от 18 до 25 лет включительно. На этот счет даже есть ГОСТ, стандарт ISO 226. Поэтому не переживайте все официально. Люди были проверены с вымытыми ушами.



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

Например, тон с частотой 1000 Гц мы начинаем слышать при значении 0 децибел, то есть прямо на пороге слышимости. А тон с частотой 20 Гц мы начнем слышать только в районе 80 децибел.

Поэтому в басовитых колонках нужны большие и мощные динамики для низких частот. В JBL Partybox 310 таких динамиков целых два, по 176 мм каждый.Но и за высокие частоты тут отвечают два динамика, естественно, диаметром поменьше 65 мм.

Кстати, с этими кривыми есть интересный момент. Если нанести на график звуки разных языков, то окажется, что наша речь попадает как раз в провал на графике примерно от 250 до 5000 герц. То есть у нас от природы есть своеобразный аппаратный усилитель речи.А свистящие призвуки мы слышим громче всего. Именно поэтому они нас так бесят.



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



Именно поэтому и шкала громкости в фонах, которые мы привыкли называть децибелами тоже не линейная, а логарифмическая. Это значит, что при увеличении громкости в 10 раз мы получим +10 дБ, а в 100 раз +20 дБ.Это объясняет, почему разница между громкой музыкой 110 децибел и шумовым оружием (200 Дб) не выглядит такой уж большой в децибелах. Хотя мы же знаем, что и при 100 децибелах можно стать шумным оружием, всё зависит от выбора композиции.

Ватты


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

Этот вопрос не менее каверзный. Громкость в децибелах на колонках никогда не указывается. Зато указывается мощность в Ваттах.Например, в характеристиках JBL Partybox 310 можно найти значение полной выходной мощности 240 Вт RMS.

Что это значит? Оказывается, мощность тоже бывает разная.



Тут важно обратить на буковки RMS это значит предельная синусоидальная мощность или Rated Maximum Sinusoidal. Если по-простому, колонка может работать в течение одного часа с реальным музыкальным сигналом без физического повреждения. То есть реально на пределе сил. В основном именно такой показатель указывают все приличные производители.

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

Итого получается, что наш монстр может выдавать примерно 180 Вт!Кстати, важный момент, часто на дешевых колонках указывают всякие запредельные мощности типа 1000 Вт, но не RMS а PMPO не путать с PIMP.

PMPO Peak Music Power Output. Это еще один способ указания мощности. Но проблема в том, что это такая мощность, которую динамик сможет выдержать в течение 1-2 секунд. Поэтому внимательно изучайте какого типа Ватты вам продают.

В JBL Partybox 310 240 RMS или примерно 180 Вт чистой мощности. Но много это или мало?

Смотрите, например, у маленькой, но громкой JBL Charge мощность: 30 Вт RMS. Такой колонки хватит, чтобы раскачать небольшое помещение до 20 квадратных метров.



240 Вт RMS хватит на целый спорт зал, а с учетом что тут Тут Bluetooth 5.1 и можно подрубить вторую вторую колонку, чтобы они работали в паре, то можно и концерт устроить.

Вообще эта колонка много чего умеет. Звук можно передать не только по Bluetooth, но и через AUX-вход, а также можно воткнуть USB-флешку и переключать треки прямо с колонки или через специальное приложение Partybox App.



Через это же приложение, можно стримить музыку и управлять светом: тут куча вариантов подсветки. Или даже можно настроить караоке для этого есть микрофонные входы. Микрофон у JBL тоже есть PBM100. Он довольно простой, зато его специально создавали под линейку Partybox.У него кардиоидная диаграмма направленности, поэтому слышно только голос, никаких посторонних шумов.



Также прямо в колонке есть целая панель звуковых эффектов.Получается настоящий передвижной караоке. Колонка тяжелая, конечно, но тут есть ручка, как в чемодане, и колесики очень удобно придумали. Что важно, есть защита от брызг IPX4. А значит и на природе можно устроить движ.

Кстати, ёмкость аккумулятора 72 Вт*ч. Его хватит на 5 часа работы, если врубать музыку на полную, в экстренных условиях, например, на улице с низкой температурой можно рассчитывать на 2-3 часа работы. А в негромком чилл-режиме колонка может проработать до 18 часов.

АЧХ


Ладно, с громкостью и мощностью понятно, а как же с качеством звука?

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



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

В идеальном случае АЧХ должна быть почти П-образной с резким возрастанием на самых низких частотах, горизонтальной линией к высоким частотам и падением где-нибудь в районе 20 килогерц. В реальности даже очень дорогие студийные или сценические акустические системы дают не идеальную АЧХ, а в доступных обычному покупателю устройствах она будет сильно отличаться от идеала. Здесь нужно смотреть на то, чтобы на графике не было сильных проседаний, чаще всего это заметно в басах, то есть самых низких частотах, которые расположены слева на графике.

Чтоб вы понимали масштаб явления. Если сравнить АЧХ этой колонки и iPhone 12 Pro, то будет наглядно видно, почему смартфоном комнату не раскачать и он будет звучать пискляво, хоть и громко.Но точных студийных замеров АЧХ для нашей колонки в интернетах, к сожалению, нет.

Соотношение сигнал/шум




Наконец, качество звука показывает соотношение сигнала к шуму. Это говорит нам о том, насколько полезный сигнал, то есть звуки песни или кино, превосходит шум, который неминуемо есть в любой акустике. Его можно заметить самому, если не подавать на колонку или усилитель никакой звук и выкрутить громкость на максимум. Соотношение сигнала к шуму измеряют в децибелах и чем оно больше, тем лучше. Условно можно сказать, что 80 децибел хороший уровень, 100 High End. В этой колонке соотношение 90 децибел, что очень даже хорошо.

Итоги




Сегодня мы узнали гораздо больше о звуке и о том, на что стоит обратить внимание при выборе музыкальных колонок в комнату, на дачу или для выездов на природу. В то же время мы узнали о JBL Partybox 310, которая является представителем мощных и универсальных колонок, которые подойдут для тусовки дома или на природе. Это своеобразный чемоданчик звука с подсветкой, встроенным аккумулятором, высокой громкостью и неплохим качеством. В общем, и для дома, и для пикника.
Подробнее..

Холодный, не ламповый обзор Audio-Technica AT-LPW40WN

15.06.2020 22:10:10 | Автор: admin
Этот пост начнёт новый цикл, в котором будут обзоры электроники без субъективной оценки автора и громких заявлений производителей, мнения и выводы будут строиться исключительно на технических данных об устройствах и фактах об их функциональности и потребительских свойствах.



Во многих обзорах, затрагивающих виниловую тему, очень много эмоциональной составляющей, субъективизма и вкусовщины. Именно по этой причине я решил начать цикл с пилотного обзора винилового проигрывателя. Если удастся сделать такой обзор не предвзятым, полезным и при этом не слишком скучным, значит формат цикла имеет право на жизнь. Под катом сугубо технический обзор Audio-Technica AT-LPW40WN. Холодным и не ламповым он назван от того, что сознательно избавлен от тёплого лампового маркетинга.

Мой подход к винилу в наше время


(если вам знакома или не интересна моя позиция можете сразу переходить к следующему заголовку)

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

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

Общие сведения


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



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

Двигатель


AT-LPW40WN оснащен двигателем постоянного тока с системой автоматической стабилизации. Двигатель поддерживает две скорости воспроизведения пластинок, 33 и 45 оборотов в минуту. Сегодня достаточно тяжело найти людей, которые слушают шеллаковые пластинки, требующие воспроизведения на скорости 78 об. Таким образом, лишив проигрыватель малоиспользуемой функции, инженерам удалось упростить конструкцию и удешевить устройство.

Шасси и диск


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



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

Тонарм


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



Картридж


По дефолту с проигрывателем на тонарм установлен универсальный полудюймовый шелл AT-HS4, к которому крепится головка AT-VM95E. От винилофилов доводилось слышать о том, что девяносто пятая, мол, легенда среди бюджетных головок. Это косвенно подтверждает более чем сорокалетняя история её производства. За это время их воспроизвели аж пять миллионов штук.



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

Применение MM-картриджа позволяет получать сравнительно высокую громкость без необходимости использовать мощное фонокоррекционное предусиление. Для бюджетных (до 1000 долларов) решений этот тип картриджа также полезен тем, что в случае повреждения иглы потребуется замена только иглы, без необходимости менять весь картридж (что почти неизбежно при использовании MC звукоснимателя, так как МС-картридж крайне редко оснащают сменными иглами).

Фонокорректор


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

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

Спецификации


Ещё раз сухо о характеристиках:

Характеристики проигрывателя

  • Тип ременной передачи с ручным поворотным столом
  • Мотор AT-LPW40WN: двигатель постоянного тока с активной стабилизацией скорости вращения
  • Скорости 33-1 / 3 об / мин, 45 об / мин
  • Детонация < 0.15% WRMS (33 об / мин) при 3 кГц
  • Соотношение сигнал/шум > 60 дБ

Уровни выхода

  • PHONO номинал 4,0 мВ при 1 кГц, 5 см / с
  • LINE номинальная 200 мВ при 1 кГц, 5 см / с
  • Усиление фонокорректора 35 дБ номинал, RIAA выровнено

Характеристики тонарма

  • Тип AT-LPW40WN: статический сбалансированный прямой углеродный тонарм
  • Эффективная длина 223,6 мм
  • Максимальный угол ошибки отслеживания менее 2,0
  • Регулировка давления стилуса от 0 до 3,0 г
  • Применимый вес картриджа (включая шелл) от 12 до 17 г

Характеристики картриджа и иглы

  • Модель картриджа: AT-VM95E
  • Тип картриджа MM
  • Рекомендуемое сопротивление нагрузки 47000 Ом
  • Выходное напряжение 4,0 мВ (мВ при 1 кГц, 5 см / с)
  • Игла AT-LPW40WN: эллиптическая заточка 0,3 0,7 мил
  • Алюминиевый кантеливер
  • Диапазон усилия отслеживания от 1,8 до 2,2 г (стандартная 2,0 г)
  • Вес картриджа 6,1 г (0,22 унции)

Шелл

  • модель шелла AT-HS4
  • Вес шелла 8,5 г (без учета свинцовой проволоки)
  • Регулировка шелла 5 мм

Сухие остатки


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

Достоинства:

  • Тяжелые шасси
  • Картридж с эллиптической иглой в комплекте
  • Фонокорректор
  • Легкий углепластиковый тонарм
  • Небольшая детонация и неплохое соотношение сигнал/шум
  • Активная стабилизация

Недостатки:

  • Нельзя слушать шеллак, нет скорости 78 об.
  • Масса шасси могла бы быть ещё больше.
  • Фонокорректора не достаточно для полноценного MC-картриджа.

О ценах ничего писать не буду, так как у всех разные возможности, а критерии ценообразования в аудиотехнике мне ясны не всегда. В нашем каталоге сабж стоит 33 000. При характеристиках и возможностях, не слишком отличающихся от устройств, которые в 5-10 раз дороже, вероятно, она справедлива. Сухой вывод вполне годная вертушка, рассчитанная на относительно массового пользователя. Заранее благодарен читателям на мнения в комментариях.
Подробнее..

Из песочницы Развитие цифровой аудиозаписи или как музыка перешла с кассет и дисков в интернет

19.08.2020 12:13:25 | Автор: admin
image

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

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

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

Часть первая. С 60-х годов 20 века до 2000-х
Начало цифровой звукозаписи. Первые разработки и новейшие для той эпохи устройства


В 1963 году компания Philips представила компакт кассету которая использовала для записи магнитную ленту, в последствии данный носитель аудио стал невероятно популярным из-за своей простоты и дешевизны, однако в последствии его вытеснили примерно в начале 2000-х годов.

В 1967 году (в этом же году кстати вышел дебютный альбом группы Pink Floyd) техническим институтом исследований NHK представлен первый цифровой катушечный стереорекордер на дюймовой видеоленте.

Разработанное тогда устройство дало старт развитию устройств для записи цифрового звука.
Позднее в 1969 году компания Sony представила миру 13-битный цифровой стереорекордер, запись в данном устройстве велась уже на 2-х дюймовую дискету, что позволило увеличить длительность и качество записи.

image
Стереорекордер Sony образца 1970 года. Такие использовали для студийной записи звука следующие лет 20-25.

Спустя восемь лет на аудиовыставке Mitsubishi, компании Sony и Hitachi представляют прототип цифровых аудиодисков, а также грампластинок.

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

Также в ходе данных событий формат диска был увеличен на 5 мм.

На данный диск можно было записать 74 минуты аудиозаписи.

Существует мнение, что компакт диск был изобретен физиком Джеймсом Расселом, работавшим в тот момент в компании Optical Recording, который создавал устройство число для себя чтобы предотвратить царапание грампластинок. Устройство было презентовано еще в 1971 году,
спустя восемь лет компания Philips презентовало похожее устройство.

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

В 1982 году в Японии и Европе был принят стандарт на систему компакт-дисков.

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

image
Проигрыватель компании Philips. Дизайн устройства тоже был впечатляющим.

Кстати дизайны современных виниловых проигрывателей частично схожи с дизайном этого проигрывателя.

image
Современный виниловый проигрыватель компании Yamaha.

image
Первым альбомом записанным на диск, стал последний альбом группы ABBA The Visitors.

image
Торжественная презентация первого серийно-выпущенного диска.


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

В 1984 году компания Sony выпускает первый портативный проигрыватель CD-дисков. Его стоимость составляла 350 долларов.

image
Первый портативный проигрыватель.

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

image
DAT-кассеты.

Также в 1987 популярности дискам прибавил CEO компании Apple (на тот момент носившей название Apple Computers Inc.) Джон Скалли (на тот момент Стив Джобс уже покинул компанию) сказал, что компакт-диски произведут революцию в мире персональных компьютеров.

Однако в ближайшие 10-15 лет диски только набирали популярность, но компакт кассеты все еще удерживали лидерство за счет популярности и дешевизны.

До СССР же компакт диски добрались только в 1989 году.

В 1992 году были представлены кассеты с форматом записи Digital Compact Cassette. Они предлагались как домашняя альтернатива кассетам DAT, однако эти кассеты также потерпели неудачу в данном предприятии по противодействию компакт кассетам, которые
на тот момент все еще занимали большую часть рынка по продажам музыки.

В 1995 году был разработан такой формат сжатия аудиоданных как MPEG 1 Audio Layer 3 или попросту MP3.

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

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

В 1998 году мир увидел первый полноценный MP3 плеер MPMan, ценник стартовал с 400 долларов минимальный объем памяти составлял примерно 32 мегабайта.

image
Один из образцов плеера с минимальный объемом памяти.

Часть вторая. Начало 2000-х
Музыка покоряет интернет пространство


В 1999 году 18-летним Шоном Фэннингом и его друзьями Шоном Паркером(который после провала Napster'a примкнул к компании Facebook), а также Джордоном Риддером был запущен Napster. Он использовал протокол peer-to-peer(который в последствии стал основой для протокола bit-торрент) для обмена файлами.

Сервис оказал огромное влияние на людей которые использовали Интернет и действительно увлекались музыкой.

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

Сервис просуществовал относительно спокойно чуть больше года. В 2000 году причиной для иска стало появление на сервисе демоверсии песни " I Disappear " группы Metallica.

Был подан иск, итогом которого в 2001 году стало покупка контрольного пакета акций компанией Private Media Group (компанией по производству контента для взрослых)
сервис был закрыт и позже перерос в легальный онлайн-магазин музыки(произошло это примерно в сентябре 2008 года).

В этом же году компанией Apple Computer Inc. был представлен Ipod устройство позволяющее записывать музыку в внутреннюю память устройства через компьютер, минимальный объем памяти составлял целых 5 гигабайт.

image
Первый Ipod, потрясающее устройство, которое можно относительно удобно использовать даже сейчас.

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

В 2003 году компания Apple представила миру легальный способ прослушивать музыку через интернет в виде сервиса iTunes Store, база композиций в онлайн-магазине на момент презентации составляла свыше 200 000 треков.

Следующим сервисом который позволял легально и в то же время бесплатно прослушивать музыку, аудиокниги и подкасты стал шведский сервис Spotify который был запущен в 2006 году. Одной из ключевых фигур компании также был Шон Паркер, который в то время искал стартап
который продолжал бы идеи Napster'a, но уже легальным путем, в последствии он вложил в Spotify примерно 15 млн. долларов и стал членом совета директоров Spotify.

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

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

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

В 2010 году компания Яндекс представила свой стриминговый сервис Яндекс.Музыка. Сервис является платным, без подписки доступен только в странах СНГ(за исключением Украины),
с платной подпиской доступен во всех странах мира.

В 2015 году, в ходе конференции WWDC компанией Apple был представлен сервис Apple Music.

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

Аудиобубен Лейтенанта Шмидта рейтинг аудиомагии ТОП- 5 устройств волшебной аудиофилии

26.08.2020 16:11:24 | Автор: admin
По многочисленным просьбам трудящихся читателей, возрождаем цикл с обзорами мошеннических устройств и их чудесных свойств. На этот раз хочу представить рейтинг наиболее экзотических и при этом откровенно мошеннических способов продавать воздух людям, не обладающим критическим мышлением. В него войдут как уже знакомые нам устройства, так не попавшие в поле зрение нашего блога улучшайзеры, метафизические генераторы воздуха и прозрачности. Чтобы не было скучно, я исключил из списка поднадоевшие всем серебряно-платино-родиево-золотые бескислородные кабели в изоляции из шерсти голубого единорога, а также головки звукоснимателей виниловых проигрывателей в корпусе из слоновой кости, инкрустированные кристаллами сваровски. Никакой банальщины, только треш, угар, немного постиронического сарказма и лютая аудиофилия, местами разбавленная изрядным количеством эзотерической псевдонауки.




5. Shakti Audio Hallograph
Деревянные оптимизаторы звукового поля, которые, по заверению производителей, выполняют функцию элементов акустической обработки помещения. Устройства, якобы, способны вызвать радикальные изменения в звучании акустических систем. Принцип действия производитель, как водится, не описывает, рассказывая лишь о чудесных свойствах по поглощению первых отражений, которые, судя по честным отзывам пользователей, проявляются во всём диапазоне. Пользователь, к сожалению, забыл уточнить, какой диапазон имеется ввиду: частотный, динамический или диапазон диаметра макаронных изделий, висящих на ушах у покупателей чудо-устройства. Стоимость устройств, со столь существенными влиянием на звук, немногим менее $ 1500.



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

4. Vortex HiFi Ronde 30 Diamond


Почетное четвертое место в нашем рейтинге уникальных и бесполезных. Производители устройства обещают подавление вредных помех, которые устраняются благодаря пятидесяти типам позитивных вибраций. По сути, это небольшой кусок стекла оригинальной формы, т.е. в данном случае речь идёт о некой совсем копеечной бижутерии по цене 69 евро за штуку. Волшебная стекляшка способна побороть паразитное излучение в CD-проигрывателях, АС и ЦАПах, Wi-Fi роутеров и мобильных телефонов.



Надо сказать, что производители поскромничали. За столь наукоемкий воздух не стыдно попросить значительно больше. Дело в том, что люди, которые заплатят за чудесное устройство 69 евро, вполне могут оценить его уникальные свойства и в 100, и, пожалуй, даже в 1000 евро. Полагаю, не имеет смысла опровергать заявления производителя, достаточно лишь отметить, что в данном случае они даже не потрудились придумать сколько-нибудь правдоподобного паранаучного обоснования.

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

3. SteinMusic Q1 Quantum Organizer


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



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

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

2. Vortex HiFi Nano Diamond


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


1. Фрактальный диффузор Cold Ray Fractal 7


Наш рейтинг аудиоабсурда был бы неполон без фрактальных диффузоров, которые так полюбились нашим читателям по одной из статей этого цикла.
habr.com/ru/company/pult/blog/407145. Именно это устройство занимает почетное первое место в списке аудиоразводов.



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

Очевидно, что аналогичным эффектом обладают Phonosophy Activator Cubes и Phonosophy Activator Pyramid, с той лишь разницей, что пирамидки и кубы стоят 800 евро, тогда как фрактальные диффузоры всего 7 300 рублей. Иными словами, в случае с фрактальными диффузорами, воздух стоит дешевле.

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

Аудиобубен Лейтенанта Шмидта рейтинг аудиомагии ТОП- 5 устройств волшебной филофонистики

26.08.2020 18:04:13 | Автор: admin
По многочисленным просьбам трудящихся читателей, возрождаем цикл с обзорами мошеннических устройств и их чудесных свойств. На этот раз хочу представить рейтинг наиболее экзотических и при этом откровенно мошеннических способов продавать воздух людям, не обладающим критическим мышлением. В него войдут как уже знакомые нам устройства, так не попавшие в поле зрение нашего блога улучшайзеры, метафизические генераторы воздуха и прозрачности. Чтобы не было скучно, я исключил из списка поднадоевшие всем серебряно-платино-родиево-золотые бескислородные кабели в изоляции из шерсти голубого единорога, а также головки звукоснимателей виниловых проигрывателей в корпусе из слоновой кости, инкрустированные кристаллами сваровски. Никакой банальщины, только треш, угар, немного постиронического сарказма и лютая аудиофилия, местами разбавленная изрядным количеством эзотерической псевдонауки.




5. Shakti Audio Hallograph


Деревянные оптимизаторы звукового поля, которые, по заверению производителей, выполняют функцию элементов акустической обработки помещения. Устройства, якобы, способны вызвать радикальные изменения в звучании акустических систем. Принцип действия производитель, как водится, не описывает, рассказывая лишь о чудесных свойствах по поглощению первых отражений, которые, судя по честным отзывам пользователей, проявляются во всём диапазоне. Пользователь, к сожалению, забыл уточнить, какой диапазон имеется ввиду: частотный, динамический или диапазон диаметра макаронных изделий, висящих на ушах у покупателей чудо-устройства. Стоимость устройств, со столь существенными влиянием на звук, немногим менее $ 1500.



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

4. Vortex HiFi Ronde 30 Diamond


Почетное четвертое место в нашем рейтинге уникальных и бесполезных. Производители устройства обещают подавление вредных помех, которые устраняются благодаря пятидесяти типам позитивных вибраций. По сути, это небольшой кусок стекла оригинальной формы, т.е. в данном случае речь идёт о некой совсем копеечной бижутерии по цене 69 евро за штуку. Волшебная стекляшка способна побороть паразитное излучение в CD-проигрывателях, АС и ЦАПах, Wi-Fi роутеров и мобильных телефонов.



Надо сказать, что производители поскромничали. За столь наукоемкий воздух не стыдно попросить значительно больше. Дело в том, что люди, которые заплатят за чудесное устройство 69 евро, вполне могут оценить его уникальные свойства и в 100, и, пожалуй, даже в 1000 евро. Полагаю, не имеет смысла опровергать заявления производителя, достаточно лишь отметить, что в данном случае они даже не потрудились придумать сколько-нибудь правдоподобного паранаучного обоснования.

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

3. SteinMusic Q1 Quantum Organizer


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



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

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

2. Vortex HiFi Nano Diamond


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


1. Фрактальный диффузор Cold Ray Fractal 7


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



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

Очевидно, что аналогичным эффектом обладают Phonosophy Activator Cubes и Phonosophy Activator Pyramid, с той лишь разницей, что пирамидки и кубы стоят 800 евро, тогда как фрактальные диффузоры всего 7 300 рублей. Иными словами, в случае с фрактальными диффузорами, воздух стоит дешевле.

Итог


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

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

Перевод RED Улучшение качества звука с помощью резервирования

04.09.2020 14:06:16 | Автор: admin

Еще в апреле 2020 года Citizenlab сообщил о довольно слабом шифровании Zoom и заявил, что Zoom использует аудиокодек SILK. К сожалению, статья не содержала исходных данных, чтобы это подтвердить и дать мне возможность обращаться к ней в дальнейшем. Однако благодаря Натали Сильванович из Google Project Zero и инструменту трассировки Frida я смог получить дамп некоторых необработанных кадров SILK. Их анализ вдохновил меня взглянуть на то, как WebRTC обрабатывает звук. Что касается восприятия качества вызова в целом, больше всего на него влияет качество звука, поскольку мы склонны замечать даже небольшие сбои. Всего десяти секунд анализа было достаточно, чтобы отправиться в настоящее приключение на поиски возможных улучшений качества звука, обеспечиваемых WebRTC.

Я имел дело с нативным клиентом Zoom еще в 2017 году (до поста DataChannel) и обратил внимание, что его аудиопакеты иногда были очень большими в сравнении с пакетами решений на базе WebRTC:

На приведенном выше графике показано количество пакетов с определенной длиной полезной нагрузки UDP. Пакеты длиной от 150 до 300 байт необычное явление, если сравнивать с типичным вызовом WebRTC. Они намного длиннее, чем пакеты, которые мы обычно получаем от Opus. Мы заподозрили наличие упреждающего контроля ошибок (FEC) или резервирования, но без доступа к незашифрованным кадрам было трудно сделать еще какие-то выводы или что-то предпринять.

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

packet 7:e9e4ab17ad8b9b5176b1659995972ac9b63737f8aa4d83ffc3073d3037b452fe6e1ee5e6e68e6bcd73adbd59d3d31ea5fdda955cbb7fpacket 8: e790ba4908639115e02b457676ea75bfe50727bb1c44144d37f74756f90e1ab926ef930a3ffc36c6a8e773a780202af790acfbd6a4dff79698ea2d96365271c3dff86ce6396203453951f00065ec7d26a03420496fpacket 9:e93997d503c0601e918d1445e5e985d2f57736614e7f1201711760e4772b020212dc854000ac6a80fb9a5538741ddd2b5159070ebbf79d5d83363be59f10efe790ba4908639115e02b457676ea75bfe50727bb1c44144d37f74756f90e1ab926ef930a3ffc36c6a8e773a780202af790acfbd6a4dff79698ea2d96365271c3dff86ce6396203453951f00065ec7d26a03420496fe9e4ab17ad8b9b5176b1659995972ac9b63737f8aa4d83ffc3073d3037b452fe6e1ee5e6e68e6bcd73adbd59d3d31ea5fdda955cbaef

Пакет 9 содержит два предыдущих пакета, пакет 8 1 предыдущий пакет. Такая избыточность вызвана использованием формата LBRR Low Bit-Rate Redundancy, как показало глубокое изучение декодера SILK (который можно найти в интернет-проекте, представленном командой Skype или в репозитории GitHub):


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

Opus FEC


Как добиться того же с помощью WebRTC? Следующим очевидным шагом было рассмотрение Opus FEC.

LBRR, низкоскоростное резервирование, от SILK, также есть и в Opus (помните, что Opus это гибридный кодек, который использует SILK для нижнего конца диапазона битрейта). Тем не менее Opus SILK сильно отличается от оригинального SILK, исходный код которого когда-то открыл Skype, как и часть LBRR, которая используется в режиме контроля ошибок.

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


Хотя усилия и не увенчались успехом, они позволили собрать некоторые статистические данные о влиянии LBRR, которые продемонстрированы на рисунке выше. LBRR использует битрейт до 10 кбит/с (или две трети скорости передачи данных) при больших потерях пакетов. Репозиторий доступен по ссылке. Данная статистика не отображается при вызове WebRTC getStats() API, поэтому результаты оказались весьма занимательными.

Помимо проблемы с необходимостью перекодировки, Opus FEC в WebRTC, как выяснилось, настроен несколько бесполезно:

  • Он активируется только при потере пакетов, а мы хотели бы, чтобы резервная информация хранилась и до возникновения каких-либо проблем. Ребята из Slack писали об этом еще в 2016 году. Это означает, что мы не можем включить его по умолчанию и защитить себя от случайных нерегулярных потерь.
  • Объем прямого исправления ошибок ограничен 25%. Выше этого значения оно неэффективно.
  • Битрейт для FEC вычитается из целевого максимального битрейта (см. здесь).

Вычитание битрейта FEC из целевого максимального битрейта совершенно не имеет смысла FEC активно снижает битрейт основного потока. Поток с более низким битрейтом обычно приводит к снижению качества. Если нет потери пакетов, которую можно исправить с помощью FEC, то FEC только ухудшит качество, а не улучшит его. Почему так происходит? Основная теория состоит в том, что одной из причин потери пакетов является перегрузка. Если вы столкнулись с перегрузкой, вы не захотите отправлять больше данных, потому что это только усугубит проблему. Однако, как описывает Эмиль Ивов в своем замечательном выступлении на KrankyGeek от 2017 года, перегрузка не всегда является причиной потери пакетов. Кроме того, этот подход также игнорирует любые сопутствующие видеопотоки. Стратегия FEC на основе перегрузок для аудио Opus не имеет особого смысла, когда вы отправляете сотни килобит видео вместе с относительно небольшим потоком Opus со скоростью 50 кбит/с. Возможно, в будущем мы увидим какие-то изменения в libopus, а пока хотелось бы попробовать отключить его, ведь в настоящее время он включен в WebRTC по умолчанию.

Делаем вывод, что это не работает

RED


Если нам нужно реальное резервирование, у RTP есть решение под названием RTP Payload for Redundant Audio Data, или RED. Оно довольно старое, RFC 2198 был написан в 1997 году. Решение позволяет помещать несколько полезных нагрузок RTP с различными временными метками в один и тот же RTP пакет при относительно небольших затратах.

Использование RED для помещения одного или двух резервных аудиокадров в каждый пакет дало бы гораздо большую устойчивость к потере пакетов, чем Opus FEC. Но это возможно лишь путем удвоения или утроения битрейта аудио с 30 кбит/с до 60 или 90 кбит/с (с дополнительными 10 кбит/с для заголовка). Хотя по сравнению с более чем 1 мегабитом видеоданных в секунду это не так уж плохо.

Библиотека WebRTC включала в себя второй кодер и декодер для RED, что теперь стало излишним! Несмотря на попытки удалить неиспользуемый audio-RED-code, мне удалось применить этот кодер, прилагая относительно небольшие усилия. Полная история решения есть в системе отслеживания багов WebRTC.

И оно доступно в виде пробной версии, включаемой при запуске Chrome со следующими флагами:
--force-fieldtrials=WebRTC-Audio-Red-For-Opus/Enabled/

Затем RED может быть включен через SDP согласование; он отобразится следующим образом:
a=rtpmap:someid red/48000/2

По умолчанию он не включен, поскольку есть среды, где использование дополнительной пропускной способности не очень хорошая идея. Чтобы использовать RED, измените порядок следования кодеков так, чтобы он был перед кодеком Opus. Это можно сделать, используя API RTCRtpTransceiver.setCodecPreferences, как показано здесь. Очевидно, что другой альтернативой является изменение SDP вручную. Формат SDP также мог бы обеспечить способ настройки максимального уровня резервирования, но семантика предложение-ответ в RFC 2198 была не до конца ясна, поэтому я решил отложить это на время.

Продемонстрировать, как это все работает можно с помощью запуска в аудиопримере. Так выглядит ранняя версия с одним пакетом резервирования:


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



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

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

Добавление поддержки обнаружения голосовой активности (VAD)


Opus FEC отправляет резервные данные только в том случае, если в пакете присутствует голосовая активность. То же самое должно быть применено и к реализации RED. Для этого кодировщик Opus должен быть изменён для отображения корректной информации о VAD, которая определяется на уровне SILK. При такой настройке битрейт достигает 60 кбит/с только при наличии речи (в сравнении с постоянными 60+ кбит/с):


и спектр становится больше похож на то, что мы видели у Zoom:


Изменение, позволяющее этого достичь, еще не появилось.

Поиск правильного расстояния


Расстояние это количество резервных пакетов, то есть количество предыдущих пакетов в текущем. В процессе работы над поиском правильного расстояния мы обнаружили, что если RED с расстоянием 1 это круто, то RED с расстоянием 2 еще круче. Наша лабораторная оценка моделировала случайную потерю пакетов = 60%. В этой среде Opus + RED воспроизводил отличный звук, в то время как Opus без RED показывал себя сильно хуже. WebRTC getStats() API дает очень полезную возможность измерить это, сравнивая процент скрытых сэмплов, получаемый путем деления concealedSamples на totalSamplesReceived.

На странице аудиосэмплов эти данные легко получить с помощью данного фрагмента кода JavaScript, вставленного в консоль:
(await pc2.getReceivers()[0].getStats()).forEach(report => {  if(report.type === "track") console.log(report.concealmentEvents, report.concealedSamples, report.totalSamplesReceived, report.concealedSamples / report.totalSamplesReceived)})

Я провел пару тестов с потерей пакетов, используя не очень известный, но очень полезный флаг WebRTCFakeNetworkReceiveLossPercent:
--force-fieldtrials=WebRTC-Audio-Red-For-Opus/Enabled/WebRTCFakeNetworkReceiveLossPercent/20/

При 20% потерях пакетов и включенном по умолчанию FEC не было большой разницы в качестве звука, но была небольшая разница в метрике:
сценарий процент потерь
без red 18%
без red, FEC отключен 20%
red с расстоянием 1 4%
red с расстоянием 2 0.7%

Без RED или FEC метрика почти совпадает с запрошенной потерей пакетов. Есть эффект от FEC, но он невелик.

Без RED при потере 60% качество звука стало довольно плохим, немного металлическим, а слова трудными для понимания:
сценарий процент потерь
без red 60%
red с расстоянием 1 32%
red с расстоянием 2 18%

Были некоторые слышимые артефакты при RED с расстоянием = 1, но почти идеальный звук с расстоянием 2 (что является количеством избыточности, которое используется в настоящее время).
Есть ощущение, что человеческий мозг может выдержать какой-то определенный уровень тишины, возникающей нерегулярно. (А Google Duo, судя по всему, использует алгоритм машинного обучения, чтобы чем-то тишину заполнить).

Измерение производительности в реальном мире


Мы надеемся, что включение RED в Opus улучшит качество звука, хотя в отдельных случаях может сделать и хуже. Эмиль Ивов вызвался провести пару тестов прослушивания по методу POLQA-MOS. Это было сделано в прошлом для Opus, так что у нас есть исходные данные для сравнения.
Если первоначальные тесты покажут многообещающий результат, то мы проведем масштабный эксперимент на основной развертке Jitsi Meet, применяя процентные метрики потерь, которые мы использовали выше.

Обратите внимание, что для медиасерверов и SFU включение RED происходит немного сложнее, поскольку серверу может потребоваться управлять RED ретрансляцией для выбора клиентов, как в случае, если не у всех клиентов поддерживаются конференции RED. Также некоторые клиенты могут находиться на канале с ограниченной пропускной способностью, где RED не требуется. Если конечная точка не поддерживает RED, SFU может удалить ненужное кодирование и отправить Opus без обертки. Аналогичным образом он может реализовать сам RED и использовать его при повторной отправке пакетов от конечной точки, передающей Opus, на конечную точку, поддерживающую RED.

Большое спасибо Jitsi/88 Inc за спонсирование этого приключения и ребятам из Google, которые рассмотрели/предоставили фидбек о необходимых изменениях.

А без Натали Сильванович я бы так и застрял, глядя на зашифрованные байты!
Подробнее..

Звук. От механических колебаний до ALSA SoC Layer

22.09.2020 10:23:41 | Автор: admin


Мы в SberDevices делаем устройства, на которых можно послушать музыку, посмотреть кино и ещё много всего. Как вы понимаете, без звука это всё не представляет интереса. Давайте посмотрим, что происходит со звуком в устройстве, начиная со школьной физики и заканчивая ALSA-подсистемой в Linux.

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

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

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


Фонограф и его изобретатель Томас Эдисон
Источник фото

Тут всё просто. Брали какой-нибудь цилиндр, обматывали фольгой. Потом брали что-нибудь конусообразное (чтобы было погромче) с мембраной на конце. К мембране присоединена маленькая иголка. Иголку прислоняли к фольге. Потом специально обученный человек крутил цилиндр и что-нибудь говорил в резонатор. Иголка, приводимая в движение мембраной, делала в фольге углубления. Если достаточно равномерно крутить цилиндр, то получится намотанная на цилиндр зависимость амплитуды колебаний мембраны от времени.



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

Переход к электричеству


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



Чтобы можно было хранить такое представление колебаний в памяти компьютера, их надо дискретизировать. Этим занимается специальная железка аналогово-цифровой преобразователь (АЦП). АЦП умеет много раз за одну секунду запоминать значение напряжения (с точностью до разрешения целочисленной арифметики АЦП) на входе и записывать его в память. Количество таких отсчётов за секунду называется sample rate. Типичные значения 8000 Hz 96000 Hz.

Не будем вдаваться в подробности работы АЦП, потому что это заслуживает отдельной серии статей. Перейдём к главному весь звук, с которым работают Linux-драйверы и всякие устройства, представляется именно в виде зависимости амплитуды от времени. Такой формат записи называется PCM (Pulse-code modulation). Для каждого кванта времени длительностью 1/sample_rate указано значение амплитуды звука. Именно из PCM состоят .wav-файлы.

Пример визуализации PCM для .wav-файла с музыкой, где по горизонтальной оси отложено время, а по вертикальной амплитуда сигнала:



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



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

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

  1. Bit Clock(BCLK) тактирующий сигнал (или клок), по которому аппаратура определяет, когда надо отправить следующий бит.
  2. Frame Clock (FCLK или его ещё называют LRCLK) тактирующий сигнал, по которому аппаратура понимает, когда надо начать передавать другой канал.
  3. Data сами данные.



Например, у нас есть файл со следующими характеристиками:
  • sample width = 16 bits;
  • sampling rate = 48000 Hz;
  • channels = 2.

Тогда нам надо выставить следующие значения частот:
  • FCLK = 48000 Hz;
  • BCLK = 48000 * 16 * 2 Hz.

Чтобы передавать ещё больше каналов, используется протокол TDM, который отличается от I2S тем, что FCLK теперь не обязан иметь скважность 50%, и восходящий фронт лишь задаёт начало пакета сэмплов, принадлежащих разным каналам.

Общая схема


Под рукой как раз оказалась плата amlogic s400, к которой можно подключить динамик. На неё установлено ядро Linux из upstream. На этом примере и будем работать.

Наша плата состоит из SoC (amlogic A113x), к которому подключен ЦАП TAS5707PHPR. И общая схема выглядит следующим образом:

Что умеет SoC:
  • SoC имеет 3 пина: BCLK, LRCLK, DATA;
  • можно сконфигурировать CLK-пины через специальные регистры SoC, чтобы на них были правильные частоты;
  • ещё этому SoC можно сказать: Вот тебе адрес в памяти. Там лежат PCM-данные. Передавай эти данные бит за битом через DATA-линию. Такую область памяти будем называть hwbuf.

Чтобы воспроизвести звук, Linux-драйвер говорит SoC, какие нужно выставить частоты на линиях BCLK и LRCLK. К тому же Linux-драйвер подсказывает, где находится hwbuf. После этого ЦАП (TAS5707) получает данные по DATA-линии и преобразует их в два аналоговых электрических сигнала. Эти сигналы потом передаются по паре проводов {analog+; analog-} в два динамика.

Переходим к Linux


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

Пользовательская ALSA-библиотека взаимодействует с ядерной частью с помощью интерфейса ioctl. При этом используются созданные в директории /dev/snd/ устройства pcmC{x}D{y}{c,p}. Эти устройства создаёт драйвер, который должен быть написан вендором SoC. Вот, например, содержимое этой папки на amlogic s400:

# ls /dev/snd/controlC0    pcmC0D0p   pcmC0D0с   pcmC0D1c   pcmC0D1p   pcmC0D2c

В названии pcmC{x}D{y}{c,p}:
X номер звуковой карты (их может быть несколько);
Y номер интерфейса на карте (например, pcmC0D0p может отвечать за воспроизведение в динамики по tdm интерфейсу, а pcmC0D1c за запись звука с микрофонов уже по другому аппаратному интерфейсу);
p говорит, что устройство для воспроизведения звука (playback);
c говорит, что устройство для записи звука (capture).

В нашем случае устройство pcmC0D0p как раз соответствует playback I2S-интерфейсу. D1 это spdif, а D2 pdm-микрофоны, но о них мы говорить не будем.

Device tree


Описание звуковой карты начинается с device_tree [arch/arm64/boot/dts/amlogic/meson-axg-s400.dts]:
sound {    compatible = "amlogic,axg-sound-card";    model = "AXG-S400";    audio-aux-devs = <&tdmin_a>, <&tdmin_b>,  <&tdmin_c>,             <&tdmin_lb>, <&tdmout_c>;                      dai-link-6 {        sound-dai = <&tdmif_c>;        dai-format = "i2s";        dai-tdm-slot-tx-mask-2 = <1 1>;        dai-tdm-slot-rx-mask-1 = <1 1>;        mclk-fs = <256>;        codec-1 {            sound-dai = <&speaker_amp1>;        };    };               dai-link-7 {        sound-dai = <&spdifout>;        codec {            sound-dai = <&spdif_dit>;        };    };    dai-link-8 {        sound-dai = <&spdifin>;        codec {            sound-dai = <&spdif_dir>;        };    };    dai-link-9 {        sound-dai = <&pdm>;        codec {            sound-dai = <&dmics>;        };    };};&i2c1 {    speaker_amp1: audio-codec@1b {        compatible = "ti,tas5707";        reg = <0x1b>;        reset-gpios = <&gpio_ao GPIOAO_4 GPIO_ACTIVE_LOW>;        #sound-dai-cells = <0>;                   };};&tdmif_c {    pinctrl-0 = <&tdmc_sclk_pins>, <&tdmc_fs_pins>,            <&tdmc_din1_pins>, <&tdmc_dout2_pins>,            <&mclk_c_pins>;    pinctrl-names = "default";    status = "okay";};

Тут мы видим те 3 устройства, которые потом окажутся в /dev/snd: tdmif_c, spdif, pdm.

Устройство, по которому пойдёт звук, называется dai-link-6. Работать оно будет под управлением TDM-драйвера. Возникает вопрос: вроде мы говорили про то, как передавать звук по I2S, а тут, вдруг, TDM. Это легко объяснить: как я уже писал выше, I2S это всё тот же TDM, но с чёткими требованиями по скважности LRCLK и количеству каналов их должно быть два. TDM-драйвер потом прочитает поле dai-format = i2s; и поймёт, что ему надо работать именно в I2S-режиме.

Далее указано, какой ЦАП (внутри Linux они входят в понятие кодек) установлен на плате с помощью структуры speaker_amp1. Заметим, что тут же указано, к какой I2C-линии (не путать с I2S!) подключен наш ЦАП TAS5707. Именно по этой линии будет потом производиться включение и настройка усилителя из драйвера.

Структура tdmif_c описывает, какие пины SoC будут выполнять роли I2S-интерфейса.

ALSA SoC Layer


Для SoC, внутри которых есть поддержка аудио, в Linux есть ALSA SoC layer. Он позволяет описывать кодеки (напомню, что именно так называется любой ЦАП в терминах ALSA), позволяет указывать, как эти кодеки соединены.

Кодеки в терминах Linux kernel называются DAI (Digital Audio Interface). Сам TDM/I2S интерфейс, который есть в SoC, тоже называется DAI, и работа с ним проходит схожим образом.

Драйвер описывает кодек с помощью struct snd_soc_dai. Самая интересная часть в описании кодека операции по выставлению параметров передачи TDM. Находятся они тут: struct snd_soc_dai -> struct snd_soc_dai_driver -> struct snd_soc_dai_ops. Рассмотрим самые важные для понимания поля (sound/soc/soc-dai.h):

struct snd_soc_dai_ops {    /*     * DAI clocking configuration.     * Called by soc_card drivers, normally in their hw_params.     */    int (*set_sysclk)(struct snd_soc_dai *dai,        int clk_id, unsigned int freq, int dir);    int (*set_pll)(struct snd_soc_dai *dai, int pll_id, int source,        unsigned int freq_in, unsigned int freq_out);    int (*set_clkdiv)(struct snd_soc_dai *dai, int div_id, int div);    int (*set_bclk_ratio)(struct snd_soc_dai *dai, unsigned int ratio);    ...
Те самые функции, с помощью которых выставляются TDM-клоки. Эти функции обычно имплементированы вендором SoC.

...int (*hw_params)(struct snd_pcm_substream *,    struct snd_pcm_hw_params *, struct snd_soc_dai *);...
Самая интересная функция hw_params().
Она нужна для того, чтобы настроить всё оборудование SoC согласно параметрам PCM-файла, который мы пытаемся проиграть. Именно она в дальнейшем вызовет функции из группы выше, чтобы установить TDM-клоки.

...int (*trigger)(struct snd_pcm_substream *, int,    struct snd_soc_dai *);...
А эта функция делает самый последний шаг после настройки кодека переводит кодек в активный режим.

ЦАП, который будет выдавать аналоговый звук на динамик, описывается ровно такой же структурой. snd_soc_dai_ops в этом случае будут настраивать ЦАП на прием данных в правильном формате. Такая настройка ЦАП как правило осуществляется через I2C-интерфейс.

Все кодеки, которые указаны в device tree в структуре,
dai-link-6 {    ...    codec-1 {        sound-dai = <&speaker_amp1>;    };};

а их может быть много, добавляются в один список и прикрепляются к /dev/snd/pcm* устройству. Это нужно для того, чтобы при воспроизведении звука ядро могло обойти все необходимые драйверы кодеков и настроить/включить их.

Каждый кодек должен сказать какие PCM-параметры он поддерживает. Это он делает с помощью структуры:
struct snd_soc_pcm_stream {    const char *stream_name;    u64 formats;            /* SNDRV_PCM_FMTBIT_* */    unsigned int rates;     /* SNDRV_PCM_RATE_* */    unsigned int rate_min;      /* min rate */    unsigned int rate_max;      /* max rate */    unsigned int channels_min;  /* min channels */    unsigned int channels_max;  /* max channels */    unsigned int sig_bits;      /* number of bits of content */};

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

Соответствующую реализацию TDM-драйвера для amlogic s400 можно посмотреть в sound/soc/meson/axg-tdm-interface.c. А реализацию драйвера кодека TAS5707 в sound/soc/codecs/tas571x.c

Пользовательская часть


Теперь посмотрим что происходит, когда пользователь хочет проиграть звук. Удобный для изучения пример реализации пользовательской ALSA это tinyalsa. Исходный код, относящийся ко всему нижесказанному, можно посмотреть там.
В комплект входит утилита tinyplay. Чтобы проиграть звук надо запустить:

bash$ tinyplay ./music.wav -D 0 -d 0
(-D и -d параметры говорят, что звук надо проигрывать через /dev/snd/pcmC0D0p).

Что происходит?
Вот краткая блок-схема, а потом будут пояснения:



  1. [userspace] Парсим .wav header, чтобы узнать PCM-параметры (sample rate, bit width, channels) воспроизводимого файла. Складываем все параметры в struct snd_pcm_hw_params.
  2. [userspace] Открываем устройство /dev/snd/pcmC0D0p.
  3. [userspace] Обращаемся к ядру с помощью ioctl(, SNDRV_PCM_IOCTL_HW_PARAMS ,), чтобы узнать поддерживаются такие PCM-параметры или нет.
  4. [kernel] Проверяем PCM-параметры, которые пытается использовать пользователь. Тут есть два типа проверок:
    • на общую корректность и согласованность параметров;
    • поддерживает ли каждый задействованный кодек такие параметры.
  5. настраиваем под них все кодеки, которые прикреплены к /dev/snd/pcmC0D0p интерфейсу (но пока не включаем), возвращаем успех.
  6. [userspace] выделяем временный буфер, куда будем класть PCM-данные.
  7. [userspace] отдаем заполненный временный буфер ядру с помощью ioctl(, SNDRV_PCM_IOCTL_WRITEI_FRAMES, ). Буква I в конце слова WRITEI указывает, что PCM-данные хранятся в interleaved-формате.
  8. [kernelspace] включаем кодеки, которые прикреплены к /dev/snd/pcmC0D0p интерфейсу, если они еще не включены.
  9. [kernelspace] копируем пользовательский буфер buf в hwbuf (см. пункт Общая схема) с помощью copy_from_user().
  10. [userspace] goto 6.

Реализацию ядерной части ioctl можно посмотреть, поискав по слову SNDRV_PCM_IOCTL_*

Заключение


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

Аудиобубен лейтенанта Шмидта три совета о том, как потратить время и деньги, не улучшив звук наушников

03.10.2020 00:12:20 | Автор: admin
Итак, традиционный ежемесячный пост выходит с небольшим опозданием, за что я прошу прощения у тех, кто его ждал. На этот раз объектом публицистического препарирования станут некоторые мифы о наушниках. Если точнее, речь об аудиофильских рекомендациях для тех, кто хочет улучшить звук в своих наушниках. Советы, о которых пойдет речь, позволят людям убить время и потратить деньги. Все рекомендации взяты в сети, и внутри аудиофильского сообщества считаются крайне действенными и эффективными. Некоторые из способов улучшения мы уже разбирали, о других пишем впервые.


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

Провести священный прогрев


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

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

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

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

Использовать божественный кабель


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

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

Применить непогрешимый коннектор


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

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

Дорогие коннекторы часто покрывают родием, дело в том, что благодаря высокой стойкости к электроэрозии родий и некоторые его сплавы применяются в качестве материала для контактов. Однако такой подход, во первых, избыточен и не имеет смысла, т.к. электроэрозия на контактах наушниках это казуистика, а во вторых, не так дорог, несмотря на сравнительную редкость и высокую стоимость металлов платиновой группы, к которым относится родий. Аналогичная история с позолоченными (а в некоторых случаях, в прямом смысле, золотыми контактами).

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

Неутешительный итог


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

Перевод Как преобразовать аудиоданные в изображения

14.01.2021 14:20:31 | Автор: admin

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


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

Сегодня, специально к старту нового потока курса по машинному обучению делюсь с вами статьей, в которой авторы, в качестве примера определяют вид птиц по их пению. Они находят в записях, сделанных в естественных условиях, фрагменты с пением птиц, и классифицируют виды. Преобразовав аудиоданные в данные изображений и применив модели компьютерного зрения, авторы этой статьи получили серебряную медаль (как лучшие 2 %) на соревновании Kaggle Cornell Birdcall Identification.




Обработка аудио как изображений


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

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

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

Понимание спектрограммы


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


Объяснение параметров звуковых волн

На спектрограмме аудиоклипа горизонтальное направление представляет время, а вертикальное направление представляет частоты. Наконец, амплитуда звуков определённой частоты, существующих в определённый момент, представлена цветом точки, который обозначается соответствующими координатами x-y.


Объяснение спектрограммы

Чтобы понять, как частоты отражаются в спектрограммах, посмотрите на трёхмерную визуализацию, которая демонстрирует амплитуду с помощью дополнительного измерения. По оси X отложено время, а по оси Y значения частот. Ось z это амплитуда звуков частоты координаты y в момент координаты x. По мере увеличения значения z цвет меняется с синего на красный, получается цвет, который мы видели в предыдущем примере 2D-спектрограммы.


Визуализация трёхмерной спектрограммы

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

Шкала мел и её спектрограмма


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

Однако человеческий слух не воспринимает различия во всех частотных диапазонах одинаково. По мере увеличения частот нам становится всё труднее различать их. Чтобы лучше имитировать поведение человеческого уха с помощью моделей глубокого обучения, мы измеряем частоты по шкале мел. В шкале мел любое равное расстояние между частотами звучит для человеческого уха одинаково. Единица мел (m) связана с герцами (f) таким уравнением:

$m = 2595 * log(1+f/700).$


Спектрограмма на мел-шкале это просто спектрограмма с частотами, измеренными в мел.

Как мы используем спектрограмму?


Для создания мел-спектрограммы из звуковых волн мы воспользуемся библиотекой librosa.

import librosay, sr = librosa.load('img-tony/amered.wav', sr=32000, mono=True)melspec = librosa.feature.melspectrogram(y, sr=sr, n_mels = 128)melspec = librosa.power_to_db(melspec).astype(np.float32)

Где y обозначает необработанные данные волны, sr обозначает частоту дискретизации аудио-сэмпла, а n_mels определяет количество полос мел в сгенерированной спектрограмме. При использовании метода melspectrogram вы также можете установить параметры метода f_min и f_max. Можно установить Then и преобразовать спектрограмму в спектрограмму мел, выражающую амплитуду на прямоугольной шкале, к децибелам с помощью метода power_to_db.

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

import librosa.displaylibrosa.display.specshow(melspec, x_axis='time',  y_axis='mel', sr=sr, fmax=16000)

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

from torchlibrosa.stft import Spectrogram, LogmelFilterBankspectrogram_extractor = Spectrogram()logmel_extractor = LogmelFilterBank()y = spectrogram_extractor(y)y = self.logmel_extractor(y)

Резюме


В заключение скажу, что мы можем воспользоваться преимуществами последних достижений компьютерного зрения в задачах, связанных со звуком, путём преобразования данных аудиоклипов в данные изображения. Мы достигаем этого с помощью спектрограмм, показывающих сведения о частоте, амплитуде и времени аудиоданных в изображении. Использование шкалы мел и спектрограммы шкалы мел помогает компьютерам имитировать человеческий слух, чтобы различать звуки разных частот. Для генерации спектрограмм мы могли бы воспользоваться библиотекой librosa или torchlibrosa для ускорения GPU на Python. Рассматривая таким образом задачи, связанные со звуком, мы можем создавать эффективные модели глубокого обучения для выявления и классификации звуков, так же, как, например, врачи диагностируют сердечные заболевания с помощью ЭКГ.




Подробнее..

Противостояние беспроводных и проводных наушников

19.02.2021 12:19:30 | Автор: admin
image

Сегодня мы затронем популярную тему, в которой, итак, много очевидного, но не для всех. Речь пойдёт о современных беспроводных (TWS) и проводных наушниках. Поскольку полноразмерные наушники вообще разорвут в пух и прах TWSки, будем сравнивать с проводными внутриканальными наушниками.
В теме будет гореть у всех: любителей комфорта, аудиофилов, эплофанов и просто у Игоря, которому норм потреблять контент через стриминговые аудиосервисы типа Spotify. Let's go!

Разделение на классы потребителей


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

Итак, мы имеем условного Петю, который вырос на виниле и ламповых проигрывателях. Перейдя в мир электронного прогресса, он и дальше продолжает слушать такой контент, только уже в оцифрованном виде, с тех же пластинок. У него имеется hi-res плеерок, эдак от 150$ и до бесконечности, арматурные/гибридные проводные наушники с одним или более драйвером. Весь контент у него в lossless формате и с битрейтом 900 kbps 5000 kbps. Ещё у него дома акустика по цене почки и сопутствующие медно-позолоченные извращения перед вами аудиофил. Он слушает технику, а не музыку.

Ко второй категории относиться друг Пети, только без последнего пункта с дорогой акустикой. Вот в эту категорию попадаю я.
Третья ниша это ребята, которые с превеликим удовольствием слушают Spotify, Deezer, YouTube Music, свои плейлисты, накиданные вручную на проводных наушниках с мобилки или какой-то сансы.
Кстати, у меня лежит как память Sansa Clip Zip. Чумовой малыш, весом в 16 грамм, под модифицированной прошивкой (Рокбокс) способен выдавать максимально крутой звук для не hi-res портатива в своё время.

Ну и четвёртая категория. Люди слушают с TWSок (порой, неприлично дорогих) всё то же самое, что и ребята из третей ниши.
Ах, да, ещё есть каста apple + airpods. Это вообще умора и почему, расскажу ниже.

TWS наушники: плюсы и минусы


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

Что же может современный bluetooth 5.2? Аж 2 мбит/с это раз. Какие же кодеки поддерживает bluetooth?

image

Что мы видим, господа? Правильно, на 2021 год полное отсутствие прогресса по скорости передачи информации посредством bluetooth.

Подавляющее большинство TWSок поддерживают SBC Моделей с поддержкой aptx меньше. AptxHD уже по пальцам, а вот с кодеком LDAC аж 1 модель и то, убогое коромысло в виде Sony WI-1000XM2. Не забываем, мы говорим про TWS наушники.
Теперь минуточка сарказма для пользователей техники apple, которая дружит только с кодеком AAC. Ребята, с чего бы вы не слушали по воздуху, выше 250kbps вы не прыгните. Ну не умора? Покупая фирменные airpods за немалые деньги Да, на софтовом уровне маркетологи вам расскажут, что там всё супер-пупер и компенсируется, но вы же не маленькие и понимаете, что все эти бустеры-шмустеры не обгонят железку. Да, приукрасят, но узкое горлышко это узкое горлышко.

Итак, теперь коротко о плюсах и минусах беспроводных наушников.

Плюсы:
  • спорное удобство беспроводной конструкции (спорное потому, что если не пенки, то теряются и выпадают на раз-два.

Минусы:

  • качество звучания часто не совпадает с ценой/качеством;
  • потеря или выпадение наушников;
  • нужно заряжать (да-да, сколько бы не держали заряд, но в самый неподходящий момент бац и разрядились).

Для меня, как и знакомых, которые более 10 лет работают в сфере портативной аудиотехники, остаётся загадкой: почему к 2021 году по bluetooth нельзя пустить более широкий поток данных. Маркетинг? Невостребованность?

Подводя итог с TWS наушниками, могу сказать следующее: слушал я и дорогие экземпляры, по 300-400$ и более дешёвые. Всё это баловство. По цене таких себе, но дорогих TWSок можно купить 2 пары отличных проводных внутриканалов.

Чтобы не быть голословным и хоть чем-то помочь армии TWSников, зацените Anker SoundCore Liberty Air 2 За свои 100$ дают сносный звук. Больше я бы не отдал за TWS

Проводные внутриканальные наушники


Даже и не знаю, что тут писать. Вернувшиеся с перекура аудиофилы и так всё понимают. Этот пункт, скорее для контрастного сравнения с TWS.

Провод это провод. Начну сразу с плюсов/минусов.

Плюсы:

  • качество звука;
  • отсутствие заморочек с зарядкой;
  • в силу наличия провода не потеряешь;
  • цена, практически, всегда соответствует качеству, нет переплат, как в варианте с TWS

Минусы:

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

Все вышеперечисленные минусы, перечёркивает качество звука по проводу.
От себя порекомендую обратить внимание на Queen of Audio Vesper Jade Green и фирму 1More. Отличные варианты для любителей тёмного и сбалансированного звучания за цену до 100$ Варианты дороже советовать не могу ибо там уже надо более детальный подход и прослушивание под себя.

За многие годы переслушал много наушников, но сейчас китайцы берут рынок в свои руки. Shure, Etymotic уходят в тень.

А в коня ли корм?


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

Есть кадры, которые покупают наушники за 300 400$ и слушают на смартфонах. Да, есть пяток смартфонов со встроенным ЦАПом (у меня LG G7), это ещё вариант, но надо тоже понимать, что ЦАП в смартфоне будет всё равно обрезанной версией.

Выводы


Для многих статья была очевидным фактом, но я уверен некоторые открыли для себя что-то новое.

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

Всем добра и слушайте качественную музыку.

На правах рекламы


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

Подробнее..

Перевод А вы когда-нибудь причиняли себе физическую боль собственным кодом?

04.06.2021 10:04:57 | Автор: admin
Приходилось ли вам когда-нибудь ненароком причинить себе или другим физический вред из-за ошибок в коде? Мне да.

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

Я уже потратил сколько-то времени на поиск решений для удаления тишины из файлов, когда меня вдруг осенило: это ведь WAV! Данные в файлах формата WAV обычно представляют собой PCM-аудио, то есть каждое значение в файле задает амплитуду звука в некоторый момент времени. Соответственно, если у нас там действительно полная тишина, а не белый шум, то в файле этой тишине должны соответствовать сплошные нули, так ведь?

$ xxd testfile1.wav | head -n 10000000000: 5249 4646 64b9 0e00 5741 5645 666d 7420  RIFFd...WAVEfmt 00000010: 1000 0000 0100 0200 44ac 0000 10b1 0200  ........D.......00000020: 0400 1000 6461 7461 40b9 0e00 0000 0000  ....data@.......00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................00000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................00000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................# ... and a lot more zeros below

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

Как читаются файлы WAV


Сначала мне нужно было поближе познакомиться с форматом WAV, чтобы понять, как работать с такими файлами и управлять данными внутри них. Я подобрал несколько источников; одним из самых полезных оказалась старая страница со stanford.edu (сайт сейчас уже недоступен, но, к счастью, сохранился на Wayback Machine). Там была очень доходчивая диаграмма:


Итак, структура файла WAV представляется довольно простой: сначала заголовок объемом в 44 байта, а дальше уже собственно данные. С этой информацией уже можно было приступать к коду. Требовалось только пропустить первые 44 байта, убрать последовательность из нулей в начале секции с данными, а всё остальное отправить на воспроизведение в исходном виде. Хотя не могу не добавить, что в другом источнике мне попались такие сведения:

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

Ну, я решил, что ничего страшного: программу я писал на C, так что за безопасность можно было особенно не переживать.

Код


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

Целиком код приводить незачем, но вот та часть, которая будет нас интересовать:

// index was calculated above to be the index of// the last consecutive zero byteFILE *f = fopen(argv[1], "rb");int ind = 0;int current_byte;while ((current_byte = fgetc(f)) != EOF) {    if (ind < 44 || ind >= index) {        fputc(current_byte, stdout);    }    ind += 1;}fclose(f);

Всё круто, всё просто. Пора тестировать. Я запустил программу на одном из файлов с особенно продолжительной паузой.

./strip_audio testfile1.wav > testfile1.nosilence.wav

Проверил, что выдаёт xxd для testfile1.nosilence.wav. Отлично, никаких нулей в начале. Значит, сработало. Чтобы окончательно убедиться, открою-ка я по-быстрому файл в аудиопроигрывателе.



Источник

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

Где я ошибся?


В ушах всё еще звенело, а я сидел и пытался осмыслить свои опрометчивые решения.

  • Ошибка 1: надо было убавить звук.
  • Ошибка 2: не надо было сидеть в наушниках.
  • Ошибка 3: неучтённая единица.

А вы заметили третью ошибку в коде, который я приводил выше? Подсказка: смотрите на комментарий. Я рассчитал переменную index как индекс последнего байта, представляющего собой нули. А значит, за вычетом 44 байтов заголовка, теперь мы воспроизводим только то, что следует за индексом или накладывается на него. index у нас стоит на последнем нуле в серии, то есть мы включаем один лишний нулевой байт в секцию с данными.

Это можно исправить следующим образом:

//     replaced >= with just >if (ind < 44 || ind > index) {    fputc(current_byte, stdout);}

Теперь в выдаче нет лишних нулей, и если воспроизвести файл, ничего страшного не случится. Я всё починил Но стоп.

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

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


Угадали, где монстр? Да, это тот самый, у которого амплитуда стабильно вывернута чуть ли не максимум. Почему так?

Как читаются аудиосэмплы


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

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

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

Взгляните на график, который я сделал, чтобы показать, что привело к возникновению такого сильного сигнала:


В верхней части показан мой файл-монстр, в котором я случайно оставил лишний байт с нулями. В каждом из трёх сэмплов s1, s2 и s3 по два байта, причем второй более значимый. Следовательно, при переводе этих пар байтов в десятичную форму мы получаем очень высокую амплитуду.

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

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

Выводы


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

Неявные нейронные представления с периодическими функциями активации

13.04.2021 10:07:06 | Автор: admin
Знакомые с нейронными сетями читатели скорее всего слышали про термин функция активации. Такие варианты функции активации, как сигмоида, гиперболический тангенс (TanH) и ReLU (линейный выпрямитель), активно применяются в нейронных сетях и широко известны энтузиастам, занимающимся экспериментами с нейронными архитектурами. Исследователи нейронных сетей не останавливаются на достигнутом и подбирают альтернативы, позволяющие расширить границы возможностей. Один из вариантов подхода, предложенного в 2020 году, показывает выдающиеся результаты по сравнению с классическими функциями активации. Про впечатляющие отличия и пойдет речь в этой статье: на основе материала Vincent Sitzmann, Julien N. P. Martel, Alexander Bergman, David B. Lindell, Gordon Wetzstein и кода на нескольких наглядных примерах будет продемонстрировано превосходство нового метода.


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

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

Для использования синусоидальной функции активации получаем следующую формулу:


Здесь i: RMi RNi обозначает i-ый слой сети, Wi R NiMi представляет собой матрицу весов, ответственную за аффинные преобразования сигнала, а bi RNi представляет собой байесову добавку к вектору xi RMi

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

Таким образом, синусоидальная функция активации обладает рядом полезных свойств, таких, как нелинейность, непрерывная дифференцируемость и возможность аппроксимации тождественной функции около начала координат. Теперь давайте перейдем к теме статьи Vincent Sitzmann, Julien N. P. Martel, Alexander Bergman, David B. Lindell, Gordon Wetzstein.


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

Форма представления сигнала, параметризованная с помощью нейронной сети, и обладающая свойствами неявного определения, непрерывности и дифференцируемости, представляет собой отдельное направление в развитии нейронных архитектур. Такой подход способен предложить ряд преимуществ по сравнению с традиционными представлениями и поэтому может быть выделен в отдельную парадигму. Авторы статьи, в рамках новой парадигмы, предлагают использовать функции периодической активации для неявных нейронных представлений. Новый подход, под названием Сети Синусоидального Представления (sinusoidal representation networks) или SIREN, в работе авторов демонстрирует впечатляющие результаты в приложении к сложным сигналам физической природы и их производным.

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

Baselines


Следующие результаты сравнивают SIREN с различными сетевыми архитектурами. TanH, ReLU, Softplus и т. д. означает Multi Layer Perceptron одинакового размера с соответствующей функцией нелинейности. Авторы также сравнивают недавно предложенное позиционное кодирование (Partial Encoding) в сочетании с нелинейной функцией активации ReLU, обозначенной, как ReLU P.E. SIREN существенно превосходит все baseline результаты, сходится значительно быстрее и является единственной архитектурой, точно отражающей градиенты сигнала, позволяя тем самым использование в решении краевых задач.

Представление изображений


SIREN, отображающая координаты 2D-пикселей в цвета, может быть использована для параметризации изображений. В данном случае авторы напрямую активируют SIREN, используя истинные значения пикселей. В данных примерах SIREN удается успешно аппроксимировать изображение, получая на 10 дБ более высокое значение PSNR в условиях меньшего количества итераций по сравнению с конкурентами. Кроме того, SIREN является единственным представителем Multi Layer Perceptron, которому удается точно отразить производные первого и второго порядка.



Краткое демо


(код взят из https://colab.research.google.com/github/vsitzmann/siren/blob/master/explore_siren.ipynb)

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

import torchfrom torch import nnimport torch.nn.functional as Ffrom torch.utils.data import DataLoader, Datasetimport osfrom PIL import Imagefrom torchvision.transforms import Resize, Compose, ToTensor, Normalizeimport numpy as npimport skimageimport matplotlib.pyplot as pltimport timedef get_mgrid(sidelen, dim=2):'''Generates a flattened grid of (x,y,...) coordinates in a range of -1 to 1.sidelen: intdim: int'''tensors = tuple(dim * [torch.linspace(-1, 1, steps=sidelen)])mgrid = torch.stack(torch.meshgrid(*tensors), dim=-1)mgrid = mgrid.reshape(-1, dim)return mgrid

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

class SineLayer(nn.Module):# See paper sec. 3.2, final paragraph, and supplement Sec. 1.5 for discussion of omega_0.# If is_first=True, omega_0 is a frequency factor which simply multiplies the activations before the# nonlinearity. Different signals may require different omega_0 in the first layer - this is a# hyperparameter.# If is_first=False, then the weights will be divided by omega_0 so as to keep the magnitude of# activations constant, but boost gradients to the weight matrix (see supplement Sec. 1.5)def __init__(self, in_features, out_features, bias=True,is_first=False, omega_0=30):super().__init__()self.omega_0 = omega_0self.is_first = is_firstself.in_features = in_featuresself.linear = nn.Linear(in_features, out_features, bias=bias)self.init_weights()def init_weights(self):with torch.no_grad():if self.is_first:self.linear.weight.uniform_(-1 / self.in_features,1 / self.in_features)else:self.linear.weight.uniform_(-np.sqrt(6 / self.in_features) / self.omega_0,np.sqrt(6 / self.in_features) / self.omega_0)def forward(self, input):return torch.sin(self.omega_0 * self.linear(input))def forward_with_intermediate(self, input):# For visualization of activation distributionsintermediate = self.omega_0 * self.linear(input)return torch.sin(intermediate), intermediateclass Siren(nn.Module):def __init__(self, in_features, hidden_features, hidden_layers, out_features, outermost_linear=False,first_omega_0=30, hidden_omega_0=30.):super().__init__()self.net = []self.net.append(SineLayer(in_features, hidden_features,is_first=True, omega_0=first_omega_0))for i in range(hidden_layers):self.net.append(SineLayer(hidden_features, hidden_features,is_first=False, omega_0=hidden_omega_0))if outermost_linear:final_linear = nn.Linear(hidden_features, out_features)with torch.no_grad():final_linear.weight.uniform_(-np.sqrt(6 / hidden_features) / hidden_omega_0,np.sqrt(6 / hidden_features) / hidden_omega_0)self.net.append(final_linear)else:self.net.append(SineLayer(hidden_features, out_features,is_first=False, omega_0=hidden_omega_0))self.net = nn.Sequential(*self.net)def forward(self, coords):coords = coords.clone().detach().requires_grad_(True) # allows to take derivative w.r.t. inputoutput = self.net(coords)return output, coordsdef forward_with_activations(self, coords, retain_grad=False):'''Returns not only model output, but also intermediate activations.Only used for visualizing activations later!'''activations = OrderedDict()activation_count = 0x = coords.clone().detach().requires_grad_(True)activations['input'] = xfor i, layer in enumerate(self.net):if isinstance(layer, SineLayer):x, intermed = layer.forward_with_intermediate(x)if retain_grad:x.retain_grad()intermed.retain_grad()activations['_'.join((str(layer.__class__), "%d" % activation_count))] = intermedactivation_count += 1else:x = layer(x)if retain_grad:x.retain_grad()activations['_'.join((str(layer.__class__), "%d" % activation_count))] = xactivation_count += 1return activations

И, наконец, дифференциальные операторы, которые позволяют использовать torch.autograd для вычисления градиентов и лапласианов.

def laplace(y, x):grad = gradient(y, x)return divergence(grad, x)def divergence(y, x):div = 0.for i in range(y.shape[-1]):div += torch.autograd.grad(y[..., i], x, torch.ones_like(y[..., i]), create_graph=True)[0][..., i:i+1]return divdef gradient(y, x, grad_outputs=None):if grad_outputs is None:grad_outputs = torch.ones_like(y)grad = torch.autograd.grad(y, [x], grad_outputs=grad_outputs, create_graph=True)[0]return grad

Для экспериментов используется классическое изображение оператора.

def get_cameraman_tensor(sidelength):img = Image.fromarray(skimage.data.camera())transform = Compose([Resize(sidelength),ToTensor(),Normalize(torch.Tensor([0.5]), torch.Tensor([0.5]))])img = transform(img)return img

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

class ImageFitting(Dataset):def __init__(self, sidelength):super().__init__()img = get_cameraman_tensor(sidelength)self.pixels = img.permute(1, 2, 0).view(-1, 1)self.coords = get_mgrid(sidelength, 2)def __len__(self):return 1def __getitem__(self, idx):if idx > 0: raise IndexErrorreturn self.coords, self.pixels

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

cameraman = ImageFitting(256)dataloader = DataLoader(cameraman, batch_size=1, pin_memory=True, num_workers=0)img_siren = Siren(in_features=2, out_features=1, hidden_features=256,hidden_layers=3, outermost_linear=True)img_siren.cuda()

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

total_steps = 500 # Since the whole image is our dataset, this just means 500 gradient descent steps.steps_til_summary = 10optim = torch.optim.Adam(lr=1e-4, params=img_siren.parameters())model_input, ground_truth = next(iter(dataloader))model_input, ground_truth = model_input.cuda(), ground_truth.cuda()for step in range(total_steps):model_output, coords = img_siren(model_input)loss = ((model_output - ground_truth)**2).mean()if not step % steps_til_summary:print("Step %d, Total loss %0.6f" % (step, loss))img_grad = gradient(model_output, coords)img_laplacian = laplace(model_output, coords)fig, axes = plt.subplots(1,3, figsize=(18,6))axes[0].imshow(model_output.cpu().view(256,256).detach().numpy())axes[1].imshow(img_grad.norm(dim=-1).cpu().view(256,256).detach().numpy())axes[2].imshow(img_laplacian.cpu().view(256,256).detach().numpy())plt.show()optim.zero_grad()loss.backward()optim.step()






Представление аудио


Начнем с небольшого эксперимента.

Будем использовать SIREN для параметризации аудиосигнала, то есть стремимся параметризовать звуковую волну f(t) в моменты времени t с помощью функции . Для этого ищем функцию такую, что: функция потерь L = (t) f(t)dt минимизируется, где является звуковой волной. Для эксперимента будем использовать сонату Баха:

import scipy.io.wavfile as wavfileimport iofrom IPython.display import Audioif not os.path.exists('gt_bach.wav'):!wget https://vsitzmann.github.io/siren/img/audio/gt_bach.wav

Создадим небольшой датасет, который позволяет перевести аудиофайл в более удобный для работы формат:

class AudioFile(torch.utils.data.Dataset):def __init__(self, filename):self.rate, self.data = wavfile.read(filename)self.data = self.data.astype(np.float32)self.timepoints = get_mgrid(len(self.data), 1)def get_num_samples(self):return self.timepoints.shape[0]def __len__(self):return 1def __getitem__(self, idx):amplitude = self.datascale = np.max(np.abs(amplitude))amplitude = (amplitude / scale)amplitude = torch.Tensor(amplitude).view(-1, 1)return self.timepoints, amplitude

Далее создадим экземпляр SIREN. Поскольку звуковой сигнал имеет гораздо более высокую пространственную частоту в диапазоне от -1 до 1, поэтому увеличиваем 0 в первом слое SIREN.

bach_audio = AudioFile('gt_bach.wav')dataloader = DataLoader(bach_audio, shuffle=True, batch_size=1, pin_memory=True, num_workers=0)# Note that we increase the frequency of the first layer to match the higher frequencies of the# audio signal. Equivalently, we could also increase the range of the input coordinates.audio_siren = Siren(in_features=1, out_features=1, hidden_features=256,hidden_layers=3, first_omega_0=3000, outermost_linear=True)audio_siren.cuda()

Давайте прослушаем исходные данные:

rate, _ = wavfile.read('gt_bach.wav')model_input, ground_truth = next(iter(dataloader))Audio(ground_truth.squeeze().numpy(),rate=rate)

Далее начнем обучение нейронной сети:

total_steps = 1000steps_til_summary = 100optim = torch.optim.Adam(lr=1e-4, params=audio_siren.parameters())model_input, ground_truth = next(iter(dataloader))model_input, ground_truth = model_input.cuda(), ground_truth.cuda()for step in range(total_steps):model_output, coords = audio_siren(model_input)loss = F.mse_loss(model_output, ground_truth)if not step % steps_til_summary:print("Step %d, Total loss %0.6f" % (step, loss))fig, axes = plt.subplots(1,2)axes[0].plot(coords.squeeze().detach().cpu().numpy(),model_output.squeeze().detach().cpu().numpy())axes[1].plot(coords.squeeze().detach().cpu().numpy(),ground_truth.squeeze().detach().cpu().numpy())plt.show()optim.zero_grad()loss.backward()optim.step()





Послушаем, что получается в итоге:

final_model_output, coords = audio_siren(model_input)Audio(final_model_output.cpu().detach().squeeze().numpy(),rate=rate)

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


Представление видео


Использование SIREN совместно на координатах пикселей и времени позволяет параметризовать видео. В данном случае SIREN непосредственно активируется на истинных значениях пикселей и позволяет параметризовать видео существенно лучше, чем ReLU Multi Layer Perceptron.


Решение уравнения Пуассона


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



Представление фигур путем решения уравнения Эйконала Interactive 3D SDF Viewer используйте мышь для навигации по сценам


Решая краевую задачу в форме уравнений Эйконала, мы можем восстановить SDF из облака точек и нормалей поверхности. Подход SIREN позволяет восстановить сцену масштаба комнаты на основе только облака точек и нормалей поверхности, при этом удается точно воспроизвести мелкие детали, а для обучения требуется менее одного часа. В отличие от недавних работ по объединению воксельных сеток с нейронными неявными представлениями, в предлагаемом подходе полное представление хранится в весах одной пятислойной нейронной сети, без 2D или 3D-сверток, и поэтому требует гораздо меньшего количества параметров. Важно обратить внимание на то, что полученные SDF не обучаются на исходных значениях SDF, а скорее являются результатом решения вышеупомянутой эйкональной краевой задачи. Такая постановка задачи является существенно более сложной и требует обучения с учителем по градиентам (детали в статье). В результате архитектуры сетей, градиенты которых хуже контролируются, показывают качество ниже, чем в подходе SIREN.



Решение уравнения Гельмгольца


В данном случае авторы используют подход SIREN для решения неоднородного уравнения Гельмгольца. Архитектуры на основе ReLU и Tanh не позволяют полностью решить эту задачу.


Решение волнового уравнения


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


* * *


Предлагаемое авторами представление SIREN для глубокого обучения помогает в работе с такими данными, как изображения, аудио- и видеосигналы. Новый подход может быть полезным в таких областях, как классификация изображений или speech-to-text в рамках работы со звуком. За счет больших возможностей SIREN по точному воспроизведению сигнала, а также градиентов и лапласианов можно ожидать, что генеративные модели с использованием SIREN смогут совершить качественный скачок в своих возможностях.

В данный момент мы рассматриваем возможности проверить SIREN на наших задачах в Центре компетенции больших данных и искусственного интеллекта ЛАНИТ. Хочется надеяться, что предлагаемый подход покажет свою продуктивность не только на простых примерах, но и на нетривиальных прикладных задачах.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru