LINUX.ORG.RU

Два микрофона в разных звуковухах. Стереозвук. Применение эффекта только к одному каналу в SoX.


0

1

Есть микрофон в звуковухе hw:0,0. Звуковуха двухканальная. Если туда воткнуть микрофон, она выдаст одно и то же в обоих каналах.

Есть микрофон в звуковухе hw:1,0 - это веб-камера. Выглядит как одноканальная звуковуха.

Надо взять один канал с первой звуковухи и единственный со второй и образовать один двухканальный поток. Ну и записать в mp3 файл, например.

Делается это так:
sox -t alsa hw:0,0 -t alsa hw:1,0 -M -p remix 1 3 | ffmpeg -f sox -i - -acodec libmp3lame -ab 128k output.mp3

SoX видит вообще 3 канала. Если не поставить в конце «remix 1 3» (это означает «взять канал 1, взять канал 3»), то ffmpeg получает 3-канальный аудио-поток, но вхрячить ЭТО в mp3 он не может. Поэтому на этапе SoX надо убить лишний канал. ОК.

Но прослушивая output.mp3 заметна рассинхронизация каналов - один из них задерживается относительно второго.

Как бы применить на уровне SoX эффект «delay» только к одному из каналов, идущих на выход?

А вот так можно записать с этой веб-камеры видеофайл со стереозвуком:

sox -t alsa hw:0,0 -t alsa hw:1,0 -M -p remix 1 3 | ffmpeg -f sox -i - -r 24 -s 846x480 -f video4linux2 -i /dev/video0 -acodec libmp3lame -ab 128k output.avi

Но тут вообще беда - картинка опережает оба канала, один из которых опережает второй.

Послушать: http://ymap.dyndns.org/output.mp3 (1.5 MB)

★☆

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

дядя.... не тра**й мозк. Просто поставь Jack :) А в нем полинкуй все так как тебе надо :) Это действительно просто :)

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

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

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

Что значит синхронны и так? У меня тут тоже как-бы всё «сведено» без премудростей, а звук почему-то не синхронный. Почему он в джеке должен стать синхронный?

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

Ну хотя бы потому что STDOUT->STDIN, он же конвейер в данном случае один из самых медленных способов передать поток.

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

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

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

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

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

Тролить не стоит :) Аналогия некорректна.
Каждой задаче свое решение. Для сведения звуковых потоков есть джек(гстример, пульс). ФФМпег умеет его нативно. Вопрос только в том что Вам нужно. Потр***ться или решить вопрос/проблему.
Путь Вам я подсказал. Не хотите его использовать, не используйте. Правда непонятно зачем тогда писать здесь...

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

Аналогия корректна - данные от двух каналов в этом пайпе идут частым чередованием «пакетов» от разных каналов, то есть практически вместе. Почему один задержан? Что в этой схеме должно поменять использование jack? Да, мне нужно решить проблему, но хочется сначала понять КАК. Я пока не понял КАК именно jack меня спасёт. Совет типа «попробуй jack» - ну не вижу смысла.

-Ну не видишь, делай тогда чё хочешь.
-Ну я и делаю.

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes
Description: JACK Audio Connection Kit (default server package)
 JACK is a low-latency sound server, allowing multiple applications to
 connect to one audio device, and to share audio between themselves.
Jetty ★★★★★
()
Ответ на: комментарий от kiverattes

Боюсь что Вы понятия не имеете о том как работает _на_самом_деле_ пайп :) А суммируя это с кодированием, может получаться совсем прикольно :)

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

Ну вы мне пожалуйста тогда объясните как именно работает pipe так, что у меня один канал отстаёт от второго.

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

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

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

Кажется проблема в том, что SoX открывает девайсы в разное время и фигачит потоки с них как получится. Задержек нет, просто открытие в разное время. Т.е. чтение звука с разной «позиции» во времени, но миксование их в один 2-канальный «сплав».

kiverattes ★☆
() автор топика

Есть ещё более простой вариант. Паяется предварительный усилитель для микрофонов (они простенькие для данного случая, кажется там всего один транзистор кп 303 и резистор на каждый канал, питать от usb) (либо найти готовый) и подключаются к Line In одной звуковой карты. Я бы предпочёл такой вариант.

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