Автор Тема: [РЕШЕНО] "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)  (Прочитано 5198 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн vladimir_ar

Собственно, сабж. Более подробно:
Есть звуковая (не суть важно - их две на компе - встроенная Intel-HDA и PCI ASUS-Xonar-DS)  с оптическим выходом. Есть внешний ЦАП с оптическим входом. Собирался он с целью отвязаться от шумов компьютера (при сборке акустики с высокой чувствительностью это стало актуально). Все через цифровой выход работает отлично, за исключением одного но - на линейный вход карты подключен спутниковый ресивер и звук по аналогу транслируется на акустику, делать loopback с аналогового входа в цифровой выход карта не умеет.

Задача - как софтварно (другого решения я не вижу) взять звук со входа и перенаправить его в цифровой выход (многопоточность по приложениям работает)? Звуковая система - alsa (пробовал pulseaudio, но он этого тоже не умеет, плюс все его недостатки).
Варианты решения, те, что я вижу:
1. Какой либо плеер, умеющий взять сигнал со входа и сразу проиграть его на выход.
2. Или одна программа читает вход и пишет значения в файл/буфер, вторая берет этот буфер и проигрывает через выход.

Может есть более красивые варианты? Пока ничего внятного в поиске не нашел.
« Последнее редактирование: 17 Апреля 2014, 15:31:09 от vladimir_ar »
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
 

yura_n

  • Гость
Re: "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)
« Ответ #1 : 14 Апреля 2014, 16:20:52 »
звук по аналогу транслируется на акустику, делать loopback с аналогового входа в цифровой выход карта не умеет.
А акустика к чему подключена? К усилителю за внешним ЦАП или к линейному выходу звуковой карты?
 

Оффлайн vladimir_ar

Re: "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)
« Ответ #2 : 14 Апреля 2014, 16:39:36 »
Пока по аналогу - пока не решен вопрос с входом. А так, собственно, и ЦАП подключен.
К усилителю. Усилок пока по аналогу с карты, но перекинуть шнурки на цап не составит трудностей  ;)
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
 

yura_n

  • Гость
Re: "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)
« Ответ #3 : 14 Апреля 2014, 16:45:40 »
Пока по аналогу - пока не решен вопрос с входом.
Может быть я ошибаюсь, но цифровой выход - это тот-же линейный, но без использования встроенного ЦАП (и последующего усилителя). Может быть имеет смысл ресивер подключить к другой звуковой карте?
« Последнее редактирование: 14 Апреля 2014, 16:47:21 от yura_n »
 

Оффлайн vladimir_ar

Re: "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)
« Ответ #4 : 14 Апреля 2014, 16:56:22 »
Пока по аналогу - пока не решен вопрос с входом.
Может быть я ошибаюсь, но цифровой выход - это тот-же линейный, но без использования встроенного ЦАП (и последующего усилителя). Может быть имеет смысл ресивер подключить к другой звуковой карте?
Имеется ввиду вопрос с трансляцией линейного входа в цифровой выход карты.
Усилитель не имеет смысла подключать к другой карте. Цель - весь звук должен идти через комп на акустику. Сейчас так и есть - но по аналогу.

Пока получается так
ffmpeg -f alsa -ac 2 -i hw:0,0 -acodec pcm_s16le output.wav | mpv output.wav
Но не нравится, что файл будет до бесконечности расти. И через время mpv вылетает с
Exiting... (End of file)Т.е. такое решение - костыль, еще и неустойчивый.
А можно ли ffmpeg -ом сырой поток на выход передавать? Или организовать буфер и заставить mpv или аналогичный проигрыватель читать из него?
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
 

yura_n

  • Гость
Re: "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)
« Ответ #5 : 14 Апреля 2014, 17:07:50 »
А если Audacity натравить на вход, запись, затем пауза. Это конечно тоже на ахти решение, но все-же.
 

Оффлайн vladimir_ar

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

Сообщение объединено: 14 Апреля 2014, 17:15:25
Это звук со спутникового ресивера.
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
 

yura_n

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

Сообщение объединено: 14 Апреля 2014, 18:24:00
Кстати, возможно такое решение менее костыльным будет:
ffmpeg -f alsa -ac 2 -i hw:0,0 -acodec pcm_s16le -f alsa default
« Последнее редактирование: 14 Апреля 2014, 18:24:00 от yura_n »
 

Онлайн qupl

Re: "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)
« Ответ #8 : 14 Апреля 2014, 20:04:23 »
vladimir_ar, посмотри в настройках vlc (режим "все"). Там можно указать устройство аудиоввода ALSA и устройство аудиовывода.

Оффлайн vladimir_ar

Re: "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)
« Ответ #9 : 15 Апреля 2014, 14:13:17 »
vladimir_ar, посмотри в настройках vlc (режим "все"). Там можно указать устройство аудиоввода ALSA и устройство аудиовывода.
qupl, спасибо за наводку. С vlc все получилось. В режиме потока. Только с alsa он дружить не захотел, на прописывание устройств ввода и вывода ругался на отсутствие pulseaudio server. Пришлось установить pulseaudio и сразу же в настройках vlc на вкладке Устройства - Запись звука появился выбор из доступных устройств ввода, а далее уже просто - выбираем нужное -> Поток -> и далее проходим простой диалог настройки потока. Все работает. Задержка по звуку есть, но минимальная, дискомфорта при просмотре не вызывает. Осталось разобраться с запуском из консоли с нужными параметрами (чтоб каждую перезагрузку не настраивать руками).

Всем спасибо!
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
 

Онлайн qupl

Re: "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)
« Ответ #10 : 15 Апреля 2014, 14:32:10 »
Должен и с ALSA, по идее. Конечно гуевину держать ради такой задачи постоянно запущенной плохо, но других вариантов не знаю, не было нужды.

Оффлайн vladimir_ar

Re: "Завернуть" Line-IN на цифровой выход IEC958 (S/P Dif)
« Ответ #11 : 17 Апреля 2014, 15:29:34 »
Все оказалось намного проще - эти функции умеет pulseaudio, только не через GUI, а через терминал.
Подмешать аудио поток в сигнал микрофона. Как?
Только задача отличается от рассмотренной на форуме linux.org.ru.

Проверял решение на работе, поэтому просто перенаправлял звук с линейного входа одной карты (Asus Xonar D3 (USB)) на другую (Intel HDA).
Направляем звук с линейного входа одной карты на выход второй:
pactl load-module module-loopback source=alsa_input.usb-C-Media_Electronics_Inc._USB_Advanced_Audio_Device-00-Device.analog-stereo sink=alsa_output.pci-0000_00_1b.0.analog-stereoСписок  устройств входа смотрим так
pactl list sourcesУ меня это alsa_input.usb-C-Media_Electronics_Inc._USB_Advanced_Audio_Device-00-Device.analog-stereo
Список выходных устройств смотрим
pactl list sinksУ меня alsa_output.pci-0000_00_1b.0.analog-stereo.

Собственно, все. Звук транслируется без задержек, присущих программному способу.
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
 

Онлайн qupl

Цитировать
Звук транслируется без задержек, присущих программному способу.
Это тоже программный способ только с меньшим количеством костылей.  :D

Оффлайн vladimir_ar

По крайней мере этот вариант более естественен  ;)
А вообще я эпично протупил - у меня, оказывается, на ресивере есть S/Pdif выход, а на карте Asus Xonar DS недокументированный S/Pdif вход, но под линуксом он доступен. Осталось преобразователь наколхозить из оптики в электрический формат (но приемник запасной от постройки ЦАПа остался  :) ).

Сообщение объединено: 17 Апреля 2014, 23:58:02
Зато наконец-то разобрался с pulseaudio  :)
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
 

Оффлайн vladimir_ar

Последний штрих к решению.
Сделал преобразователь TOSLINK -> S/Pdif и подключил спутниковый ресивер к IEC958 входу. Конструкция трансляции каналов та же
pactl load-module module-loopback source=<имя источника> sink=<имя выхода>Сразу первые грабли - при включении в первый момент звук идет синхронно, но постепенно отстает от изображения - "уходит назад" все больше и больше. Причина - разные частоты дисретизации карты (48000) и выхода ресивера (44100). Лечится установкой в
/etc/pulse/daemon.conf
default-sample-rate=48000Получаем  синхронный звук (ну почти - что по аналогу, что по цифре есть легкое стабильное отставание звука ~100ms).

Отставание лечится применением параметра latency_msec=1
pactl load-module module-loopback latency_msec=1 source=<имя источника> sink=<имя выхода>
Последние грабли - при переключении каналов ресивера пропадает кратковременно цифровой поток на входе, pulseaudio заикается, проигрывает последний кусок буфера (~0.5s) и затем, при восстановлении цифрового потока на входе звук идет с задержкой в эти же 0,5с. При следующем переключении каналов ресивера задержка увеличивается еще на пол-секунды и т.д.

Лечится прописыванием в /etc/pulse/default.pa
load-module module-udev-detect tsched=0
После всех этих действий звук синхронный - при одновременном звучании телевизора и компьютера разбежности в звуке не слышно.
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M
 

Теги:
     

    [решено] Lirc в Debian 6.0.6

    Автор TarikS

    Ответов: 9
    Просмотров: 4028
    Последний ответ 15 Октября 2012, 10:31:05
    от TarikS
    [РЕШЕНО] Драйвер для Mobility Radeon HD 3470

    Автор Aleksey

    Ответов: 12
    Просмотров: 7004
    Последний ответ 02 Ноября 2016, 20:30:15
    от Aalexeey
    [Решено] Почему тихо играют колонки?

    Автор AlekseyDebian

    Ответов: 9
    Просмотров: 9258
    Последний ответ 19 Декабря 2013, 01:33:45
    от vladimir_ar
    Нет звука в видеофайле .mkv в SMPlayer [Решено]

    Автор Leo

    Ответов: 1
    Просмотров: 5090
    Последний ответ 20 Января 2013, 22:24:42
    от calambus
    [Решено] Отвалилась запись с микрофона

    Автор sidbar

    Ответов: 2
    Просмотров: 1309
    Последний ответ 03 Февраля 2017, 12:43:24
    от sidbar