BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Вт 24 сен, 2019 4:59 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт 24 сен, 2019 4:40 pm
Сообщения: 6
Добрый день форумчане.
Стоит задача переключения между устройствами вывода звука в реальном времени (on the fly).
Использовать можно только sndio и oss.
Alsa и pulseaudio в пролете (запретили пользоваться), с пульсом такое делал и получалось.

В /boot/loader.conf уже добавлено:
Код:
snd_driver_load="YES"
sound_load="YES"
cuse_load="YES"

Переключение с помощью sysctl hw.snd.default_unit работает только при следующем воспроизведении звука(получается не на лету).

# cat /dev/sndstat
Код:
pcm0: <ATI R6xx (HDMI)> (play)
pcm1: <Analog Devices AD1882 (Analog)> (play/rec) default
pcm2: <Analog Devices AD1882 (Front Analog Headphones)> (play)
pcm3: <USB audio> (play/rec)


# uname -a
Код:
FreeBSD testInstall 12.0-RELEASE-p10 FreeBSD 12.0-RELEASE-p10 GENERIC  amd64


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт 24 сен, 2019 5:28 pm 
Не в сети

Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2413
jsInspector писал(а):
Добрый день форумчане.
Стоит задача переключения между устройствами вывода звука в реальном времени (on the fly).
Использовать можно только sndio и oss.
Alsa и pulseaudio в пролете (запретили пользоваться), с пульсом такое делал и получалось.

В /boot/loader.conf уже добавлено:
Код:
snd_driver_load="YES"
sound_load="YES"
cuse_load="YES"

Переключение с помощью sysctl hw.snd.default_unit работает только при следующем воспроизведении звука(получается не на лету).

# cat /dev/sndstat
Код:
pcm0: <ATI R6xx (HDMI)> (play)
pcm1: <Analog Devices AD1882 (Analog)> (play/rec) default
pcm2: <Analog Devices AD1882 (Front Analog Headphones)> (play)
pcm3: <USB audio> (play/rec)


# uname -a
Код:
FreeBSD testInstall 12.0-RELEASE-p10 FreeBSD 12.0-RELEASE-p10 GENERIC  amd64


на лету, значит возможность в приложении изменить устройство вывода, как пример:
по идее, для pcm0 - можно использовать /dev/dsp0.0, для pcm1 - /dev/dsp1.0 и тд и тп
Как пример:

# mpg123 -a /dev/dsp0.0 /path/filename.mp3
# mpg123 -a /dev/dsp1.0 /path/filename.mp3
# mpg123 -a /dev/dsp2.0 /path/filename.mp3
# mpg123 -a /dev/dsp3.0 /path/filename.mp3

на вскидку, другого не придумал, вдруг поможет?

прим: устройства в /dev/ появляются только при работе audio приложения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт 24 сен, 2019 5:42 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт 24 сен, 2019 4:40 pm
Сообщения: 6
lavr писал(а):
на вскидку, другого не придумал, вдруг поможет?

прим: устройства в /dev/ появляются только при работе audio приложения.


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


Последний раз редактировалось jsInspector Вт 24 сен, 2019 6:16 pm, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт 24 сен, 2019 6:05 pm 
Не в сети

Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2413
jsInspector писал(а):
Цитата:
на вскидку, другого не придумал, вдруг поможет?

прим: устройства в /dev/ появляются только при работе audio приложения.


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


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт 24 сен, 2019 6:15 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт 24 сен, 2019 4:40 pm
Сообщения: 6
lavr писал(а):
если в приложении нет возможности выбора или переключения устройства вывода,
то все законно: до следующего воспроизведения.
В ином случае, только аудио сервер, на котором можно настраивать и изменять уст-ва вывода.


Согласен. Но на сайте sndio http://www.sndio.org/ написано, что это и есть сервер (я принял схожесть с pulseaudio), но вот самому не получается настроить переключение, собственно сюда я и обратился.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт 01 окт, 2019 11:41 am 
Не в сети
Аватара пользователя

Зарегистрирован: Вт 24 сен, 2019 4:40 pm
Сообщения: 6
Разработчик sndio Alexandre Ratchov alex@caoua.org

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

Цитата:
Hi,

There's no utility to switch between devices, sorry.

However recent sndiod versions allow "alternate devices" to be
specified with a new -F options. If the alternate device is present,
it's used. If it's disconnected, sndiod switches to the other one. In
your example, if sndiod is started with:

sndiod -f rsnd/1 -F rsnd/3

then, when the the USB device is present, it will be used; if it's
disconnected sndiod switches to the on-board one. SIGHUP makes sndiod
switch back to the alternate device, if present.

I haven't tested this on FreeBSD yet.


Вопрос закрыт, привет pulseaudio.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт 18 окт, 2019 1:57 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт 24 сен, 2019 4:40 pm
Сообщения: 6
Нашел вариант решения переключения между устройствами с помощью virtual_oss
Сначала я создаю первое виртуальное устройство которое, которое в будущем будет роутером.
virtual_oss -T /dev/sndstat -b 16 -c 2 -r 48000 -s 1024 -d dsp.first -O /dev/dsp2.0 -R /dev/null -t dsp.first.ctl &
Далее создаю второе виртуальное устройство которое должно быть по умолчанию для программ и подключено к первому.
virtual_oss -T /dev/sndstat -b 16 -c 2 -r 48000 -s 1024 -d dsp.second -O /dev/dsp.first -R /dev/null -t dsp.second.ctl &
К примеру воспроизвожу mp3 файл mpg123 -a /dev/dsp.second some.mp3
Следующий шаг перезапуск первой команды с подстановкой другого устройства в опцию -O /dev/dsp*, но при этом существует пауза в 2 секунды пока звук появиться в другом устройстве.
А также не получается сделать виртуально устройство, устройством по умолчанию c помощью sysctl hw.snd.default_unit, есть у кого какие идеи?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика