LINUX.ORG.RU

Звук и linux. Типизирование общих понятий

 , , ,


2

5

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

с максимальной задержкой по реал-тайму

Может, с минимальной? )

Но щелчки (как я понял - известная тема) присутствуют

Тут надо конкретно оговорить софт.

В последнее время наблюдается мнение, что jack виноват. Тот же Ardour стабильнее работает на чистой alsa. Для решения проблем с ним часто рекомендуют отказаться от jack.

и его пересборка для решения проблем щелчков при записи

А тут надо оговорить дистрибутив. Возможно все нужное уже есть в нем.

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

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

При установке на Убунте автоматом создаётся правило про группу audio и найсы выставляются. И... Это не помогает. И тогда не помогало и теперь. А теперь ещё и шедулеры поменялись и подход к найсам и пр. Выкинь свои драгоценные закладки :)

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

Важный момент - какой джек у тебя поставлен? Их в репах два. И одним предпочтительнее первый, другим второй. Тебе, скорее всего второй. У него dbus есть и распараллеливание и пр. А Битвиг, скорее всего, всем этим пользуется.

Дальше вопрос - звуковуха встроенная, или лаптоповская? Если второе, то задержку надо ставить побольше, размер буффера. И ещё такой финт иногда помогает - поставить не 2, а 3 буффера. Иногда количество буфферов делают по количеству ядер, кто как выёживается, но щелчки это бич джека. Точнее связки джека и софта его использующего.

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

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

Это хардварные проблемы а не софтовые. У меня например при соединении стандартным AV кабелем усилителя и звуковой хрипы при движении мыши. Лечится или отключение PE на вилке усилителя или нормальным блочным AV кабелем(экран подключен только с одной стороны)

http://forum.vegalab.ru/showthread.php?t=79128

anonymous ()

Мой сетап:

  1. Core 2 Duo с 4GB RAM и Firewire-портом (сейчас уже думаю о переходе на USB-карту и более свежий ноут, т.к. firewire на ноутах мёртв)
  2. Focusrite Saffire Pro 40
  3. openSUSE Linux 42.2. Как говорится, «работает - не трошь».
  4. Ядро сам собирал с RT-патчем из исходников, конфиг брал с штатного ядра + выставлял необходимые для RT параметры перед компиляцией.
  5. Прописываем соответствующие настройки для работы с RT.
  6. Стартуем Jack. У меня 256 семплов на буфер, 3 буфера, 48 кГц дискретизация. Больше ноут, к сожалению, для риалтайма не тянет. Но для бэктрекинга вполне норм.
  7. Ardour как бек-трекинг: дорожка с метрономом, синты, ритм-гитара, ambient sound.

PROFIT: https://www.youtube.com/watch?v=08-SvjOuUDc

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

sadko4u ()
Последнее исправление: sadko4u (всего исправлений: 1)

Собираю маленький ноут для участия на концертах. На него же частично будет происходить запись.

Конкретика! Задачи? Требования?
Что должен делать ноут? Точно ли он нужен?

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

Слушай, вопрос тебе. Может и спрашивал, но забыл. Многие планины апскейлят частоту дискретизации унутре. А что происходит, если частота совпадает? Апскейлят в 1:1? Или ещё дробят в два раза? А можно сэкономить процессорное время пропуская апскейл, если у меня частота и так 192? Спрашиваю про твои плагины, потому что за все ты явно не знаешь.

ChekPuk ★★★ ()

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

Если совсем не разбираешься, то начни с Альсы, разберись с её устройствами и «плагинами». Плагин в Альсе можно рассматривать как некоторую надстройку над устройством, расширяющую его возможности. Прочитай про плагины plug, dmix, dsnoop, этого хватит. Попробуй что-то поделать через Альсу в приложениях. Пользовательский интерфейс Альсы — alsamixer, amixer (для скриптов) и конфиги.

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

Pulseaudio требуют браузеры, мессенджеры, игры и другие подобные программы широкого потребления. Демон пульсы может стартовать автоматически, если какому-то приложению понадобилось вывести звук. После некоторого таймаута демон может завершаться. А может быть запущен на постоянной основе. Конфигов у Пульсы три штуки: конфиг демона, пользовательский конфиг и основной — default.pa — настройка модулей, запускаемых при старте демона. Управлять Пульсой можно через pactl, pacmd (до сих пор не знаю в чём разница), pulsemixer и т.д. Пульсу можно подружить с Джеком, для этого у неё есть специальный модуль.

anonymous ()
Ответ на: комментарий от ChekPuk

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

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

Учитывая то, что при частотах дискретизации выше 48 кГц у нас и так есть запас по частотной полосе, острая необходимость в оверсемплинге отсутствует. После обработки сигнал достаточно прогнать через Low-Pass фильтр с крутым спадом (например, 72 дБ/октаву) в районе 22 кГц и получить ограниченный по спектру сигнал.

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

Например, в плагинах guitarix оверсемплинг осуществляется только тогда, когда частота дискретизации меньше 88.2 кГц.

sadko4u ()
Ответ на: комментарий от anonymous

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

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

USB звук должен работать на любом линуксе. Для Firewire просто ставят дрова чтобы он вообще работал. У меня вот звуковуха с USB чипом на PCIE и работает нормально. Make menuconfig говорит все устройства соответствуют спецификации OHCI. А это USB по сути.

CONFIG_FIREWIRE:        
  │                                                                                    │  
  │ This is the new-generation IEEE 1394 (FireWire) driver stack                       │  
  │ a.k.a. Juju, a new implementation designed for robustness and                      │  
  │ simplicity.                                                                        │  
  │ See http://ieee1394.wiki.kernel.org/index.php/Juju_Migration                       │  
  │ for information about migration from the older Linux 1394 stack                    │  
  │ to the new driver stack.```

CONFIG_FIREWIRE_OHCI:                    
  │                                                                                    │  
  │ Enable this driver if you have a FireWire controller based                         │  
  │ on the OHCI specification.  For all practical purposes, this                       │  
  │ is the only chipset in use, so say Y here.
anonymous ()
Ответ на: комментарий от anonymous

Для Firewire просто ставят дрова чтобы он вообще работал.

Ну я когда ядро компилял, вкомпиливал драйвер прямо внутрь. Этого достаточно?

У меня вот звуковуха с USB чипом на PCIE и работает нормально.

А что за звуковуха? С FFADO моя звуковуха заведётся как прежде?

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

апскейл (оверсемплинг)

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

Теорию я примерно понимаю, но копался когда-то в caps ladspa плагинах и наткнулся, что какой-то из них всё ресэмплит в 44100 (видимо он был написан вообще давно :) ). Офигел. Зная опенсорц понимаю, что безоговорочных ресэмплов должно быть и больше. Особенно после статей рекомендующих поднимать частоту перед обработкой.

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

Значит ты не ресэмплишь, но на разной частоте получается тот же результат, да?

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

Это как при канпилянии, количество ядер+1 :)

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

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

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

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

Особенно после статей рекомендующих поднимать частоту перед обработкой.

Это каких таких статей? Интересно было бы почитать. Может, содержание неправильно было интерпретировано.

И ещё переживаю, что ресэмплинг может вносить свои искажения, особенно пропустив через несколько плагинов

Ресемплинг - линейная операция, сильных искажений быть не должно. Тем более, если используется фильтр Ланцоша:

https://en.wikipedia.org/wiki/Lanczos_resampling

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

Фильтры Ланцоша на AVX: https://github.com/sadko4u/lsp-dsp-lib/blob/master/include/private/dsp/arch/x86/avx/resampling.h

И нативная реализация: https://github.com/sadko4u/lsp-dsp-lib/blob/master/include/private/dsp/arch/generic/resampling.h

Подозревал, что в этом может крыться проблема с артефактами.

Какими именно артефактами?

Значит ты не ресэмплишь, но на разной частоте получается тот же результат, да?

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

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

Вообще, я один раз firewire-порт спалил на звуковухе. Пришлось заказывать с Aliexpress нужный чип от Texas Instruments и отдавать умеющим людям на перепайку. Так что тут максмимум чем рискуешь - это спалённым портом FireWire.

sadko4u ()
Ответ на: комментарий от ChekPuk

А что ты получишь с FireWire подключенного в usb? Не проще ли просто купить усбшную карту под новый комп?

Ну, наверное, то, что не нужно USB-шную карту покупать :). Потому что USB-шная карта денег тоже стоит, а Firewire-карт у меня аж две: Focusrite Saffire Pro 40 и Focusrite Liquid Saffire 56.

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

Там всего 4 выбора включая драйвера Firewire, так что наверное. У меня Asus Strix Soar. Вот она:

dmesg

hid-generic 0003:0B05:180D.0004: hidraw3: USB HID v1.00 Device [ASUSTeK STRIX SOUND CARD] on usb-0000:02:00.0-1/input4

lspci

USB controller: ASMedia Technology Inc. ASM1042A USB 3.0 Host Controller
anonymous ()
Ответ на: комментарий от adamsgreen

Думал про gentoo

Боже упаси. По мне так наиболее ходовыми являются Arch/Manjaro, Ubuntu/Debian+KXStudio. Я по старой привычке использую openSUSE.

Хотелось бы в общих чертах понять что есть что.

Может быть проблема в чём угодно. Первым делом выбрасываем PulseAudio в топку, т.к. это не про Low Latency. Во-вторых, надо посмотреть конфигурацию USB (если звуковая внешняя). Вполне возможно, что там порт через какой-нибудь хаб завёрнут и лучше воспользоваться другим USB-портом. В-третьих, ставим ядро с поддержкой Hard RT Preemptive и системным таймером в 1000 Гц, и настраиваем юзера так, чтобы он мог гонять RT-потоки (если не настроено ранее). Лучше, конечно, использовать JACK2. Но у него были определённые проблемы до недавних релизов. У меня был опыт, когда клиенты тупо отваливались от сервера, а если переподключались, то отваливались снова, и так до бесконечности. В новых версиях, вроде, пофиксили.

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

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

Я ещё хотел всё драйвер к Liquid Saffire 56 написать (FFADO пока не умеет её на все 24 канала использовать, но нужно просто правильные крутилки вытащить), но куда-то специальную Firewire-карту потерял, которая позволяла трафик посниффать. Вчера весь дом перерыл, так и не нашёл. Буду дальше искать.

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

Ага, они почти одно и то же. Оба - всего лишь последовательная шина. Дальше идет один на двоих стандарт OHCI. Мне правда все равно что там внутри. К тому же USB 3 и 4 обскакали IEEE1394 уже совсем.

USB (англ. Universal Serial Bus — «универсальная последовательная шина») — последовательный интерфейс для подключения периферийных устройств к вычислительной технике.
IEEE 1394 (FireWire[1], i-Link) — последовательная высокоскоростная шина, предназначенная для обмена цифровой информацией между компьютером и другими электронными устройствами. 
anonymous ()
Ответ на: комментарий от anonymous

Оба - всего лишь последовательная шина.

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

USB 3 и 4 обскакали IEEE1394 уже совсем

Ну есть ещё Thunderbolt, который как бы обратно совместим с FireWire. Однако USB да, сделала скачок мощный в последнее время.

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

Скачёк-то мощный, да, маркетологический. Потому что USB3.2.1 - это 3.0 А в разъёме TypeC может быть цифровой звук, может не быть, может быть аналоговый звук, а может не быть (хотя официально в стандарт, вроде, не включили, но мобилы используют), может быть видео, может не быть, может быть зарядка, может не быть, может быть большая скорость, а может только уровня 2.0. Вот такой прогресс. Покупая лаптоп - ты не знаешь что там напихано (скорее всего гавно).

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

Вот что говорит педивикия заодно заявляя об одном и том же порте для тандерболта и USB Type-C хоть 4-й версии.

USB 3.0 	USB 3.2 Gen 1 	USB 3.1 Gen 1 	SuperSpeed USB 5Gbps 	5 Gbit/s 	500 MB/s
USB 3.1 	USB 3.2 Gen 2 	USB 3.1 Gen 2 	SuperSpeed USB 10Gbps 	10 Gbit/s 	1.21 GB/s
USB 3.2 	USB 3.2 Gen 2 × 2 	N/A 	SuperSpeed USB 20Gbps 	20 Gbit/s 	2.42 GB/s 

Значит 4-я версия почти 5 гигабайт в секунду пуляет чего для SSD 4-го поколения хватит. А монитор можно и к USB 3.1 подключить и получить около 30 кадров в 4К. Но больше всего непонятно что вот это такое на русской педивикии

Протокол USB Mass Storage, представляющий собой метод передачи команд SCSI по шине USB, имеет бо́льшие накладные расходы, чем соответствующий ему протокол SBP-2 шины FireWire/1394. Поэтому при подключении внешнего диска или привода CD/DVD по FireWire удаётся достичь большей скорости передачи данных. Кроме того, USB Mass Storage не поддерживался в старых ОС (включая Windows 98) и требовал установки драйвера. SBP-2 же в них поддерживался изначально. Также в старых ОС (Windows 2000) протокол USB storage был реализован в урезанном виде, не позволяющем использовать функцию записи CD- и DVD-дисков на подключённом по USB дисководе; SBP-2 никогда не имел таких ограничений.

Шина USB строго ориентирована, поэтому соединение двух компьютеров требует дополнительного оборудования. Соединение оборудования без компьютера, например принтера и сканера или же фотоаппарата и принтера, было определено стандартом USB OTG; ранее же эти реализации были завязаны на конкретного производителя. Шина 1394/FireWire изначально не подвержена этому недостатку (например, можно соединить две видеокамеры). 

USB не требует дополнительного оборудования. Сам подключал Android смартфон по RNDIS через USB к интернету, чтобы вафлю зря не гонять и не греть, полюс пинг лучше. Так что о каком дополнительном оборудовании речь непонятно. Смартфон на x86 тот же компьютер если что. Также OpenWRT позволяет создать на любом роутере с USB портом RNDIS или любое другое соединение для эмуляции сети поверх USB протокола.

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

anonymous ()