LINUX.ORG.RU

Разделение аудио и микрофона в ALSA.

 ,


0

2

Суть проблемы: пытаюсь записать звук в OBS, добавляю «Устройство захвата аудио (ALSA)». Но при тестовой записи вместе с звуками услышал и шум микрофона. Так вот вопрос как разделить микрофон и аудио?

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

Если тебе надо отдельными потоками раскидать аудио от приложений, то лучший способ - использовать звуковой сервер jack. В qjackctl можешь и сам потоками рулить, и цепочки из потоков делать. Да и в OBS можно будет отдельные потоки подключать. ALSA с jack подружить легко - в стандартной поставке ALSA есть плагин, который обеспечивает представлением отдельных приложений портами jack, что для приложений прозрачно: http://jackaudio.org/faq/routing_alsa.html

Тебе оттуда нужен alsa jack pcm plugin. Первый же конфиг по той ссылке даст требуемый результат. Создавать следует в домашней директории пользователя с именем .asoundrc. Перезагружать компьютер не требуется - надо только после этого конфига сам jackd запустить (делается одной кнопкой в qjackctl).

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

Поставил, посмотрел. И пришёл к выводу что решение и правда хорошее. Правда столкнулся с проблемой, никак не могу подружить wine и jack. По стандарту решил через поставить звук через winetricks (как делал с ALSA). Набираю «winetricks list-all». Глазами ищю «sound=jack», так и не нашел. Решил по логике написать «winetricks sound=jack» (подумал что просто не заметил). На что получаю что такой опции и правда не существует.

Вспомнил про сыллку что вы кидали (http://jackaudio.org/faq/routing_alsa.html), поствил «sound=alsa» и запускаю. Всё запустилось без проблем. Правда в самой игре звука нету. Так вот, можно ли как нибудь jack подружить с wine?

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

Так вот, можно ли как нибудь jack подружить с wine?

Если система 64-битая (а сейчас это дефолт безальтернативный), а в wine запускаешь 32-битную программу, то 32-битный jack-плагин не умеет подключаться к 64-битному jack-серверу. Но это было давно и не правда (больше года назад). А поддержку jack из wine давно убрали (возможно столкнулись с теми же проблемами, что выше).

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

C помощью loopback и «программным кабелем» arecord -D <условный вход> | aplay -D <условный выход> можно соорудить несложную комутацию даже без jack. Только неизвестно какие будут запаздывания и как они наложатся.

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

В твоей статье все расписано. Только вместо jack используешь «программный кабель» arecord | aplay («|» - это pipe). Для того, чтобы как-то управлять задержкой, используй параметры --period-time/--period-size и --buffer-time/--buffer-size. И вообще, я давно этим не занимался, и вспоминать не хочется.

anonymous
()

Тебе просто нужно настроить отдельное лупбэк устройство в альсе. Могу скинуть конфиг для стерео.

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

ALSA-устройства в jack можно подключать через alsa_in и alsa_out. Например, в альсе (в ~/.asoundrc) делаешь дефолтный захват и вывод через «карту» Loopback (только используй разные подустройства для захвата и для вывода: вывод, например, в Loopback,0,0, а захват — из Loopback,1,7), чтобы все программы и игры работали через эту карту, а в jack добавляешь вторые концы этих лупбэков через программы alsa_in и alsa_out. Потом надо будет соединить микрофон, например, с Loopback,0,7, а Loopback,1,0 с выводом на колонки/наушники.

Ещё обрати внимание на программу jack_connect, её можно использовать в скриптах, для управления соединениями в jack.

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

Извеняюсь за столь позний ответ. Да, игрался с loopback’ом. Первая проблема с которой столкнулся это то, что когда дело доходило до прописывания alsa_out ... писалось что Device or resource busyalsa_in проблем небыло). Спустя день я смог это починить. Но тут возникла вторая проблема, после jack_connect, звук всё равно не появился. Все абсолютно все приложения выдавали Device or resource busy. Занятие всем этим заняло у меня несколько дней, поэтому на время отложил эту тему в сторонку. Но вот решил вернуться к этой теме. Поэтому если вам не сложно, не отказался бы глянуть на ваш конфиг.

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

Смог заставить работать loopback с ALS'ой (без JACK'а). Но пока появилось пару проблем. Первая, если звук работает например в браузере, то другие приложения будут выдавать `Device or resource busy`. Вторая, в OBS'е выставляю `Loopback PCM` но звука всё равно нету.

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

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

Возможно в альсе у тебя уже есть pcm.jack (можно проверить через aplay -L | grep jack, если выводит jack то значит есть). Альса-конфиг тогда будет такой:

pcm.!default {
    type plug
    slave.pcm "jack"
}

Если такого pcm у тебя нет, то почитай тут как сделать.

Для пульсаудио нужно поставить пакет pulseaudio-jack (Арч), содержащий нужные модули. В default.pa тогда можно будет записать только такие команды:

load-module module-native-protocol-unix
load-module module-suspend-on-idle
load-module module-jack-sink
load-module module-jack-source

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

Устанавливай какой-нибудь хост, например Carla и соединяй порты-плагины как тебе нужно.

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

Попробывал ваш способ, проверил pcm.jack командой aplay -L | grep jack, показало что такой pcm есть. Выставил в конфиге

pcm.!default {
    type plug
    slave.pcm "jack"
}

Запустил jack, соединил порты. Пошел проверять в браузер, видео откзываються запускаться и звука нету.

Так же, если можно конечно, хотелось бы провернуть всё это через ALSA без помощи jack’а и pulseaudio.

И так же хочу напомнить про первоначальную проблему, ко звуку в повседневном использование (просмотр видео через VLC или другие плееры, браузер, игры, wine, discord, teamspeak) у меня никаких притензий нету. Но как только дело доходит до записи того же звука через OBS то качество звука на записи заметно ухудшается и так же системные звуки идут в перемешку с шумом микрофона.

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

видео откзываються запускаться и звука нету

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

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

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

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

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

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

Вот .asoundrc с которым делалась запись (на случай если проблема в конфиге)

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

Пульсаудио не запущен и отсутствует в системе. Попробывал ваш конфиг, поменял hw:PCH,0 на своё устройство. Для теста решил запустить видео в VLC и браузере. VLC пишет

Audio output failed:
The audio device "default" could not be used:
No such device.

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

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

Попробуй в default заменить duplicate_stereo на duplicate. aplay -L на конфиг не ругается? Может там ошибка где?

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

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

Попробуй поотключать всё лишнее в alsamixer. Совсем всё, оставь только самый минимум. Если не сложно, запости куда-нибудь вывод amixer -c1 scontents (1 — это номер карты в системе, можно узнать из aplay -l, нужно чтобы это был номер твоей звуковой карты, а не какого-нибудь Loopback).

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

Поспешил с выводами, проблема была в файле /etc/modprobe.d/modprobe.conf у меня вместо options snd-aloop index=0 pcm_substreams=8 стояло options snd-aloop index=0 pcm_substreams=2. И да вы были правы этот конфиг как раз то что я искал! Спасибо!

SadJabka98
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.