LINUX.ORG.RU

EasyEffects не нужно, или PipeWire для продвинутых: часть 4

 , ,


3

1

Спатиалайзер для наушников

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

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

Но у нас же есть pipewire, поэтому не беда, сейчас мы это исправим! В этой и следующей статье, мы заставим звучать наушники как колонки, а колонки как наушники (ну почти)!

ТЕОРИЯ

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

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

Для того, чтобы имитировать звучание колонок на более серьезном уровне, давайте разберемся, а как вообще человек определяет, с какой стороны идет звук – слева, справа, спереди, сзади? Как работает локализация источника звука?

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

Второй фактор – задержки между звуком в правом и левом ухе. Если источник ближе к левому уху, оно будет получать звуковую волну раньше, и наоборот.

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

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

Такая функция называется HRTF – Head Related Transfer Function, или ее подвариант DTF – Directional Transfer Function (содержит только разницу между ушами, по сравнению с HRTF, это не сильно важные пока тонкости реализации). Откуда ее взять, как получить?

Берем вас. Вставляем вам в ушные каналы микрофоны. Теперь через ваши уши будете слышать не вы, а шайтан-машина! Сажаем вас в заглушенную лабораторию, где вокруг вас расставлено огромное количество колонок, по кругу. И начинаем воспроизводить тестовый сигнал с каждой колонки по очереди и записывать звук с микрофонов. Для каждой записи, помечаем под каким азимутом стояла колонка. Так мы получаем набор импульсных откликов уха-головы (HRIR, Head Related Impulse Response), для каждого направления на колонку, когда она перед вами, влево под 5 градусов, влево под 10 градусов и так далее. Это запись того, что слышат ваши уши.

Дальше эти HRIR записи обрабатываются, пересчитываются и получается HRTF или DTF. Это все сохраняется в файл по стандарту SOFA.

Теперь мы можем сделать обратный процесс, если у нас есть этот SOFA файл! Мы можем взять музыку, левый стерео канал, задать координаты виртуальной левой колонки, пропустить звук через HRTF, и получить измененный, окрашенный звук для левого и правого наушника, который обманывает уши, заставляет их думать, что источник звука - вот там вот! Имитируем правую колонку так же, можно задние для 5.1 системы, боковые для 7.1, что угодно! И вы услышите окружающий звук через простые наушники!

Фантастика! Но есть ложка дегтя. Стоить такой обмер вашей головы будет столько, что вы не захотите это делать)) Поэтому, максимум что мы можем иметь - чужая HRTF другого человека, или какая-то обобщенная HRTF «для всех». Которую заморочились и сняли. Вы будете слышать через чужие уши! А уши это такая зараза, что у каждого человека они разные. Поэтому, идеальной точной локализации вы не получите, но эффект все равно достаточно сильный и крутой.

ПРАКТИКА

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

Такой спатиалайзер уже есть во всех основных ОС, в андроид смартфонах это называется 3D Effects, в Windows не помню как, но начиная с Windows 10 это доступно в системном микшере просто. В Linux - хм хм, вы видели? Нет? Что-то не находите? Как всегда…

Хорошая новость - на самом деле теперь и в Linux есть все средства для того чтобы сделать спатиалайзер, ведь его встроили в pipewire! Плагин filter-chain, которому посвящены эти статьи, содержит эффект SOFA, который загружает SOFA файлы и делает нужную нам обработку. В параметрах эффекта, можно задать азимут направления на виртуальный источник, и расстояние до него.

Плохая новость - никто не включил в pipewire сами SOFA файлы! Их просто нет в комплекте, ищи где хочешь. Благо, найти их не сложно. Есть ресурс https://www.sofaconventions.org/ и там море ссылок на свободно доступные HRTF и DTF, снятые учеными в лабораториях для нас!

Я использую вот этот файл https://sofacoustics.org/data/database/ari/dtf%20b_nh2.sofa (прямая ссылка). Там рядом их еще море, отличаются тем, что их сняли с ушей разных людей. Выбор файла - поле для экспериментов.

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

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

{
  type = sofa
  label = spatializer
  name = spFL
  config = {
    filename = "/home/curufinwe/dtf_b_nh2.sofa"
  }
  control = {
    "Azimuth"    = 30.0
    "Elevation"  = 0.0
    "Radius"     = 1.0
  }
}

В filename указываем путь, где лежит sofa файл. Азимут – направление на виртуальный источник, прямо вперед это 0 градусов, влево это 90 градусов, сзади 180, справа 270. Elevation - угол подъема, не имеет значения, в нашем sofa файле нет информации о вертикальной плоскости. Radius - расстояние до источника, тоже не имеет значения, этот файл не содержит информации о расстоянии. Работает только азимут.

В начале цепочки нам понадобятся эффекты copy, потому что у нас будет по два sofa эффекта для каждого канала - для передних виртуальных колонок, и для задних. После sofa эффектов мы получаем по 4 сигнала на каждый канал наушников, смешиваем их при помощи mixer, задаем громкости для передних «колонок» 0.5, для задних «колонок» 0.3.

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

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

Полный конфиг-файл, содержимое этого листинга надо поместить в файл по адресу ~/.config/pipewire/pipewire.conf.d/spatializer.conf и перезапустить pipewire.

context.modules = [
    { name = libpipewire-module-filter-chain
        args = {
            node.description = "Spatializer"
            media.name       = "Spatializer"
            filter.graph = {
                nodes = [
                    {
                        type = builtin
                        label = copy
                        name = copyL
                    }
                    {
                        type = builtin
                        label = copy
                        name = copyR
                    }
                    {
                        type = sofa
                        label = spatializer
                        name = spFL
                        config = {
                            filename = "/home/curufinwe/dtf_b_nh2.sofa"
                        }
                        control = {
                            "Azimuth"    = 30.0
                            "Elevation"  = 0.0
                            "Radius"     = 1.0
                        }
                    }
                    {
                        type = sofa
                        label = spatializer
                        name = spFR
                        config = {
                            filename = "/home/curufinwe/dtf_b_nh2.sofa"
                        }
                        control = {
                            "Azimuth"    = 330.0
                            "Elevation"  = 0.0
                            "Radius"     = 1.0
                        }
                    }
                    {
                        type = sofa
                        label = spatializer
                        name = spRL
                        config = {
                            filename = "/home/curufinwe/dtf_b_nh2.sofa"
                        }
                        control = {
                            "Azimuth"    = 150.0
                            "Elevation"  = 0.0
                            "Radius"     = 1.0
                        }
                    }
                    {
                        type = sofa
                        label = spatializer
                        name = spRR
                        config = {
                            filename = "/home/curufinwe/dtf_b_nh2.sofa"
                        }
                        control = {
                            "Azimuth"    = 210.0
                            "Elevation"  = 0.0
                            "Radius"     = 1.0
                        }
                    }
                    {
                      type = builtin
                      label = mixer
                      name = mixL
                      control = {
                        "Gain 1" = 0.5
                        "Gain 2" = 0.5
                        "Gain 3" = 0.3
                        "Gain 4" = 0.3
                      }
                    }
                    {
                      type = builtin
                      label = mixer
                      name = mixR
                      control = {
                        "Gain 1" = 0.5
                        "Gain 2" = 0.5
                        "Gain 3" = 0.3
                        "Gain 4" = 0.3
                      }
                    }
                ]
                links = [
                    { output = "copyL:Out"  input="spFL:In" }
                    { output = "copyR:Out"  input="spFR:In" }
                    { output = "copyL:Out"  input="spRL:In" }
                    { output = "copyR:Out"  input="spRR:In" }
                    { output = "spFL:Out L"  input="mixL:In 1" }
                    { output = "spFL:Out R"  input="mixR:In 1" }
                    { output = "spFR:Out L"  input="mixL:In 2" }
                    { output = "spFR:Out R"  input="mixR:In 2" }
                    { output = "spRL:Out L"  input="mixL:In 3" }
                    { output = "spRL:Out R"  input="mixR:In 3" }
                    { output = "spRR:Out L"  input="mixL:In 4" }
                    { output = "spRR:Out R"  input="mixR:In 4" }
                ]
                inputs = [ "copyL:In" "copyR:In" ]
                outputs = [ "mixL:Out" "mixR:Out" ]
            }
            capture.props = {
                node.name   = "effect_input.spatializer"
                media.class = Audio/Sink
                audio.channels = 2
                audio.position=[FL FR]
            }
            playback.props = {
                node.name   = "effect_output.spatializer"
                node.passive = true
                audio.channels = 2
                audio.position=[FL FR]
            }
        }
    }
]

★★★★★

Проверено: maxcom ()
Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от James_Holden

Честно говоря, я так глубоко никогда в это не копал. Играет и играет. Дискретизацию выставил и всё. Потому что был один источник звука. Никаких постобработок не делал никогда

По твоему тексту согласен полностью. И всё же на базовом уровне алса + dmix работало и работало лучше, чем появившаяся пульса в то время. И всё же вопрос остается открытым, зачем надо раз в 10 лет менять звуковой сервер. Может стоило пульсу переписать, чтобы все аплеки это поддерживали и всё бесшовно протекало, а не как переход алса –> пульса, когда 10 лет пшшш было

serg002 ★★★★
()
Ответ на: комментарий от serg002

И всё же на базовом уровне алса + dmix работало и работало лучше, чем появившаяся пульса в то время.

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

dmix никогда нормально не работал. Но в то время были распространены карточки, в которые можно было выводить несколько потоков. После избавления от всяких arts и esd можно было получить систему, на которой таки при запуске приложения в четырех случаях из пяти звук выводился из коробки.

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

Для большинства же пользователей звук в линуксе из коробки просто не работал, причина по которой я знаю о монопольном доступе, частоте дискретизации, звуковых серверах, микшировании и т.д. и т.п. - необходимость во всём этом разбираться для базовой настройки звука в линуксе на разнообразном железе. И со всем этим багажом можно было собрать систему с возможностями по звуку уровня win98, без регулирования звука отдельных приложений, блютусов и динамического переключения звука на usb/блютус наушники или hdmi.

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

altwazar ★★★★★
()
Ответ на: комментарий от serg002

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

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от serg002

Хм, пока инфа неутешительная - даже в Ubuntu pipewire собран без sofa. С deb based постоянно какие-то загоны, ну штош такое

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от serg002

Короче! Насколько я вижу по списку файлов пакетов, в Debian Bookworm нету sofa в основной репе, но она есть в backports!

Пакет libpipewire-0.3-modules из bookworm-backports содержит sofa плагин.

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от serg002

И всё же на базовом уровне алса + dmix работало и работало лучше, чем появившаяся пульса в то время.

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

Может стоило пульсу переписать, чтобы все аплеки это поддерживали и всё бесшовно протекало

Поэтому - pulseaudio пытались лет 10 переписать после поттера, но там все равно куча проблем, потому что изначально неудачная архитектура.

И куда уж бесшовнее, сделали поддержку API pulseaudio и jack, все приложения даже не замечают что что-то изменилось. Какие швы то?

10 лет пшшш с пульсой было, потому что поттер не осилил шедулинг своей шайтан-машины сделать нормально. А pipewire даже с ранних версий работает лучше чем допиливавшийся 10 лет pulseaudio, с bluetooth - заметно лучше.

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от James_Holden

10 лет пшшш с пульсой было

У меня на сусекедах (там пульса почему-то дефолтом) она еще этим летом трещала при движении ползунка громкости. То есть, не десять лет, а двадцать. ДВАДЦАТЬ.

thesis ★★★★★
()
Ответ на: комментарий от thesis

Вот там ее реально, серьезно пытались чинить. Но этот треск, там by design какие-то проблемы, не смогли устранить.

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от James_Holden

С JACK таки не бесшовно, регулярно читал ченджлоги и там чинили и джек и альсу и до сих пор JUCE приложения не очень дружат с PW. Юзаю ALSA, JACK и PA по отдельности на десктопе, на ноуте юзаю PW так как там блютус работает как надо.

kott ★★★★★
()
Ответ на: комментарий от kott

У меня на сюзекедах PA не трещит, да и не трещала в общем-то.

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

altwazar ★★★★★
()
Ответ на: комментарий от altwazar

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

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

kott ★★★★★
()
Ответ на: комментарий от James_Holden

т.е. с алсой криво работало? я получал треск только когда пытался выводить напрямую в устройство (не через API) при запущенной PA

kott ★★★★★
()
Ответ на: комментарий от kott

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

У меня трещало само PA, при этом вывод в ALSA не трещал тут же.

James_Holden ★★★★★
() автор топика
Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от James_Holden

я имел в виду, что PA криво работало с алсой, раз железо влияло каким-то образом

kott ★★★★★
()
Ответ на: комментарий от James_Holden

Нет, именно pulseaudio криво работает, но это каким-то образом зависит от конкретного железа

Вот тут (0pointer.de) Лёня пишет о своей glitch-free модели в PA. Как я понял от знающих людей (возможно я понял неправильно), что практически все major complications, которые он там написал, оказались трудно или практически не решаемыми в рамках PA. Т.е. алгоритм компенсации отклонений в таймерах 100% гарантию не даёт (и как я понял, легендарное пшшш в большей степени отсюда), как и «угадать» необходимый правильный размер буфера - тоже задача далеко нетривиальная.

SkyMaverick ★★★★★
()
Ответ на: комментарий от kott

Ну я думаю, если бы она трещала прям с порога абсолютно у всех, ее бы дефолтом и не пихали. Хотя кто его знает, линукс этот.

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

thesis ★★★★★
()
Ответ на: комментарий от James_Holden

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

Попробовал поюзать pipewire сутки. После standby в телеге отваливается звук. Это нужно смотреть, чинить. Пока что переключусь на пульсу, а в новом релизе debian попробую покрутить. Функционально для меня что пульса, что сабж - одинаковы. Смысла менять то, что работает - в текущий момент времени нет

serg002 ★★★★
()
Ответ на: комментарий от James_Holden

Хм, пока инфа неутешительная - даже в Ubuntu pipewire собран без sofa. С deb based постоянно какие-то загоны, ну штош такое

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

serg002 ★★★★
()
Ответ на: комментарий от serg002

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

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Да, конечно! На днях. Следующая статья про расширение стерео для колонок ноутбука.

Медленно идёт потому что я загружен по работе до выгорания и попутно решаю проблемы, скажем так, своего психологического состояния)))

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от James_Holden

Олежка! Держись! Держись, Олежка!!! Не знаю твоей ситуации, но желаю всего самого лучшего. В омуте выгоревшего отчаяния нет ничего хорошего. Пишу из «горящего танка» :)

R_He_Po6oT ★★★★★
()
Ответ на: комментарий от James_Holden

Ох. Вспомнил svn с его trunkами и всплакнул. Третьекеды, двухтысячные, svn, молодость ещё не увядшая...

Погоди... Или это был ещё vcs? Даже мемуары уже истлели.

R_He_Po6oT ★★★★★
()
Последнее исправление: R_He_Po6oT (всего исправлений: 1)
Ответ на: комментарий от James_Holden

ALSA это дрова звуковухи

не только. OSS это только дрова, ну а вот АЛСА покруче штука. «ALSA — программный микшер (аппаратное микширование нескольких каналов), который эмулирует совместимость для других слоёв. Также предоставляет API для программистов и работает с низкой и стабильной задержкой, сравнимой с звуковыми подсистемами ASIO из Windows и CoreAudioиз macOS. ALSA также полностью поддерживает OSS и может одновременно управлять восемью аудиоустройствами. Также ALSA реализует функциональность MIDI (аппаратный синтез MIDI)»

sprutos ★★★
()
Ответ на: комментарий от sprutos

Спасибо за перечисление функций дров звуковухи)))

О чем и речь.

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

James_Holden ★★★★★
() автор топика
14 апреля 2026 г.

Наконец-то бобрался до твоей статьи. Настроил. Включаю в настройках deadbeef’a профиль Spatializer и…аж голова закружилась. Переключил на обычный профиль и опять на Spatializer. Решил посмотреть логи - а там на отсутствие /home/curufinwe/dtf_b_nh2.sofa ругается

Включаю в настройках deadbeef’a профиль Spatializer и…аж голова закружилась

Ахахахахахахах, какой хитрый Бог Аудиофилии :)

Есть вопросы:

  1. почему брал dtf, а не hrtf?
  2. я так понимаю, что в имени b - это binaural. А что означают у файлов c и d?
  3. dtf_b_nh2.sofa - почему взял именно nh2? Вроде слышал, что есть какие-то обобщенные варианты(типа обобщенная голова и уши). Есть такие? Может взять именно обобщенные, а не nh2?

PS: бинауральные ощущения у меня полностью отсутствуют. Да, звук вышел из головы, но расстояние от головы небольшое(ощущение маленького объема). Звучание похоже на то, как играют мониторная акустика. Наушники IEM уровня moondrop chu2

UPD1: объема может мало по причине подготовленного помещения, в котором все переотражения убраны

А так есть море софа файлов, даже хз какие из них выбирать https://www.sofaconventions.org/mediawiki/index.php/Files#HRTFs_of_artificial_heads

bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 2)
Ответ на: комментарий от bryak

Я так понял, что hrtf файл - это недостаточно обработанный, и для этого плагина надо именно dtf.

почему взял именно nh2

В этом весь вопрос, они сняты на разных головах, а надо - на своей голове. Я просто их перебирал, и использовал тот, который понравился.

Вроде слышал, что есть какие-то обобщенные варианты(типа обобщенная голова и уши)

Они там тоже есть, на сайте про который я писал.

Да, звук вышел из головы, но расстояние от головы небольшое(ощущение маленького объема)

Я ощущаю то же самое. Я пробовал ряд проприетарных аналогов, от Huawei и Microsoft, и с ними то же самое.

Может, ты встречал технологию, которая даёт более четкое ощущение?

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от James_Holden

Может, ты встречал технологию, которая даёт более четкое ощущение?

Нет, все плагины и всё остальное - полная ерунда. Я как про бинауральный звук услышал - накачал себе бинауральной музыки. И могу сказать, что бинауральный эффект(локализация источника звука) очень падает. Если спичками вокруг головы трясти - то очень легко локализовать источник, но по мере отдаления - эффект пропадает. Бинауральная музыка звучит в 99.9% как обычное стерео, за исключением каких-то определенных треков, где с какими-то инструментами подходят максимально близко к манекену

Почему я заговорил про бинауральный звук? Потому что в снятых данных эффект локализации тоже должен быть, а я его не слышу. Т.е front должен чётко локализоваться, что звук идет спереди. А rear - сзади. Но этого почему-то нет. Значит что-то не правильно. Надо как-то добиться локализации звука

А по текущему конфигу - попробовал добавить convolver –> https://www.voxengo.com/impulses/ Найти бы какую-то студию с небольшими искажениями или обычную подготовленную комнату. С небольшими искажениями было бы очень комфортно слушать музыку(без утомления в фоне)

bryak ★★★★
()
Ответ на: комментарий от bryak

Нет, все плагины и всё остальное - полная ерунда

Значит что-то не правильно. Надо как-то добиться локализации звука

Насколько я вообще понял эту тему: у нас мозг тонко тюнится под АЧХ нашей головы. Эффект очень тонкий и очень индивидуальный, и на чужой голове мозг уже не может нормально локализовать. Поэтому, если каким-то образом снять hrtf с самого себя, закладывая в уши датчики - то должно получаться. Но технически это крайне сложно. Обобщенная hrtf - это, как ты говоришь, ерунда.

Если придумать, как это обойти, тогда возможен результат. Например, можно сделать некую программу-калибратор, которая будет видоизменять АЧХ, а пользователь будет нажимать кнопки, где он ощущает звук.

Т.е front должен чётко локализоваться, что звук идет спереди. А rear - сзади

Я слышу спереди/сзади, и даже на обычных стерео записях, без какой-либо обработки, тоже слышу звуки вне головы, спереди и сзади. Если запись так сведена, и если используется не встроенная realtek карта. Но! «выход» звуков из головы небольшой, они все равно совсем рядом, не дальше 5 см от поверхности головы.

А по текущему конфигу - попробовал добавить convolver

convolver самый универсальный плагин. Помимо основного назначения, я использую его как эквалайзер, и вместо sofa. Плагин sofa не на всех дистрибутивах собран, кстати. В винде, я просто использую импульсы, снятые с pipewire с sofa и эквалайзером, загружая их в конвольвер от foobar2000. Чтобы через динамики ноутбука нормально играло.

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от James_Holden

Насколько я вообще понял эту тему: у нас мозг тонко тюнится под АЧХ нашей головы

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

Подозреваю, что алгоритмы определения источника вблизи и вдалеке - разные. Вблизи используется более точное позиционирование, дальше некоторого расстояния - сильно упрощенное. Типа выше/ниже и впереди/сзади /слева/справа. И скорей всего алгоритм заточен на фаза/противофаза + отражения + задержка лево/право. А вблизи в принципе то же самое, только минус отражения. Так вот, я еще раз повторяю, что я не могу локализовать впереди играющие колонки через dtf b_nh2.sofa. И думаю, что тут не причём разные конфигурации ушных раковин людей. Почему я так думаю?

Потому что вполне нормально можно деформировать ушные раковины, закрыть глаза, покрутиться вокруг своей оси и с закрытыми глазами легко и непринужденно локализовать направление, с которого звучит источник. Ушные раковины могут усиливать эффект(повышать точность), но и без них локализация произойдет. А в dtf b_nh2.sofa. Нет их и в https://sofacoustics.org/data/database/

Я перепробовал и манекены и штук 50 разных sofa снятых с людей - эффекта я не слышу. А значит есть какая-то некорректность. И я думаю, что некорректность - безэховая камера, в которой снимают сигнал. Отражений нет. Поэтому и объема нет. Это звук стерилизованный. А если нет отражений - значит мозг не может локализовать источник и он играет около головы. Вроде и не слева и права(как в наушниках), но и не как в мониторных динамиках

Если добавить IMreverbs/Chateau de Logne, Outside.wav, то объем появляется и даже кажется, что появляется локализация. Но я не уверен :). Не могу найти нормальный пресет reverb, в котором не будет очень большого объема(т.е реверб обычной комнаты, чтобы там были естественные отражения), т.к при очень большом объеме там уже не совсем ясно, это мозг придумывает или нет

PS: я отключил rear и подмешивание в каналы - мне так почему-то больше нравится

bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 2)
Ответ на: комментарий от James_Holden

Я слышу спереди/сзади, и даже на обычных стерео записях, без какой-либо обработки, тоже слышу звуки вне головы, спереди и сзади. Если запись так сведена, и если используется не встроенная realtek карта. Но! «выход» звуков из головы небольшой, они все равно совсем рядом, не дальше 5 см от поверхности головы.

Хорошо, давай список песен, где чётко слышно, где локализация звуков сзади/спереди выше/ниже

И главное, чтобы это не мозг выдумывал. Т.е надо, чтобы еще три подельника смогли подтвердить(тебе), что они так же слышат :)

convolver самый универсальный плагин. Помимо основного назначения, я использую его как эквалайзер, и вместо sofa. Плагин sofa не на всех дистрибутивах собран, кстати. В винде, я просто использую импульсы, снятые с pipewire с sofa и эквалайзером, загружая их в конвольвер от foobar2000. Чтобы через динамики ноутбука нормально играло.

Если можно как-то снять пресет с Spatializer + конвольвер и экспортировать это всё и потом загружать в конвольвер - это круто. Надо прогуглить, как это делается. Тогда можно не привязываться именно к pipewire

bryak ★★★★
()
Ответ на: комментарий от James_Holden

И еще: там у Сталкера в последнем видео была тема, что локализация звука - в большей степени психологическая штука. Я с этим не совсем согласен. Но интересный момент у всех представителей нашей рассы: чтобы более точно локализовать источник - все как один крутят головой(одним и другим ухом к предпологаемому источнику). Это видео смотрел?

bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от James_Holden

И еще: а не существует sofa снятые с двух каналов одновременно? Чтобы можно было на каждый канал L.sofa R.sofa применять, чтобы не угадывать со смешением каналов

bryak ★★★★
()
Ответ на: комментарий от bryak

Хорошо, давай список песен

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

И главное, чтобы это не мозг выдумывал. Т.е надо, чтобы еще три подельника смогли подтвердить(тебе), что они так же слышат :)

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

Если можно как-то снять пресет с Spatializer + конвольвер и экспортировать это всё и потом загружать в конвольвер - это круто

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

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

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

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

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

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

James_Holden ★★★★★
() автор топика
Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от bryak

Чтобы можно было на каждый канал L.sofa R.sofa применять

Так не выйдет, надо 4 штуки, еще две которые взаимное проникновение каналов делают.

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от bryak

Если добавить IMreverbs/Chateau de Logne, Outside.wav, то объем появляется и даже кажется, что появляется локализация

У меня аналогичные выводы и ощущения, значит, все-таки, что-то объективное тут есть. Да, голые dtf не дают прямо четкого ощущения прямо колонок. Даже близко. А ревер помогает. Но! При этом ревера надо, намного больше чем в реальной комнате с колонками. Я лично не хочу настолько портить запись.

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от James_Holden

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

Или у тебя очень сильная «чуйка» звуковая или ты понапридумывал это. Далеко не в каждой даже студийной записи выстраивается сцена

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

В том-то и дело, что может и выдумывать. Но когда тебе откуда-то кричат твоё имя и этот источник 2+ метров, то это не выдумки мозга, а звук оттуда и идет. В музыке так же. Если есть противофаза - ты будешь слышать квадро-эффект и уж точно локализовать фронт

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

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

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

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

bryak ★★★★
()
Ответ на: комментарий от James_Holden

Так не выйдет, надо 4 штуки, еще две которые взаимное проникновение каналов делают.

Так есть такое где-то? Хотел бы сравнить с тем способом, который ты в этой статье реализовал

bryak ★★★★
()
Ответ на: комментарий от James_Holden

У меня аналогичные выводы и ощущения, значит, все-таки, что-то объективное тут есть. Да, голые dtf не дают прямо четкого ощущения прямо колонок. Даже близко. А ревер помогает. Но! При этом ревера надо, намного больше чем в реальной комнате с колонками. Я лично не хочу настолько портить запись.

Какой ревер тебе больше всего понравился?

Я лично не хочу настолько портить запись.

Как минимум можно побывать на опенэир))

bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от bryak

Так есть такое где-то?

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

James_Holden ★★★★★
() автор топика
Ответ на: комментарий от bryak

Какой ревер тебе больше всего понравился?

Это вообще тяжелый вопрос. Я использовал плагин Dragonfly Reverb, вроде что-то приемлемое. По звучанию мне нравится алгоритм Freeverb, если реализовать точно как в статье авторов алгоритма. Я сделал свои реализации на DSP и микроконтроллере (для гитары), как гитарный моно ревербератор мне нравится больше всего.

Реверами на основе импульсов я как-то не увлекаюсь, тем более для прослушивания музыки.

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

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

James_Holden ★★★★★
() автор топика
Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Вообще с этой темой, улучшения стерео для наушников, я сильно охладел

Отступник :)

bryak ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.