On Sat, Nov 12, 2005 at 06:57:39PM +0200, Artem wrote: > Продолжая терзать slmodemd , стал добавлять в него софтовый вывод звука > (тот, который должен выводиться через отсутствующий у меня, и наверное, > у многих владельцев ноутбуков модемный динамик). Вот уже и модем начал > голос подавать (в виде прерывистого и более высокчастотного писка пока, > но это уже вопросы конверсии различных частот оцифровки и синхронизация > размеров буферов - решаются с помощью того же alsa api). > Т.к. slmodemd работает из-под root (под обычным user вроде тоже > работает, но выдает ошибки при старте - жалуется на memory allocation и > еще на что-то), то после старта из-под рута, он открывает звуковое > устройство alsa default - и после этого все программы (хmms, aplay) > из-под простых пользователей начинают ругаться на то, что нет доступа к > звуковому устройству (хотя у меня настроен dmix). Стартую slmodemd > из-под простого пользователя и в под тем же пользователем пробую xmms - > звуки от модема и от xmms нормально микшируются. > > Подозревая, что это какие-то особенности sisyphus, отсылаю письмо сюда. Нет, всё хуже - это особенности dmix. Нужно задавать ему параметры: ipc_key INT # Unique ipc key ipc_perm INT # ipc permissions (default 0600) ipc_gid INT # ipc gid (default -1 = disable) ipc_key_add_uid BOOL # Add current uid to ipc_key dmix использует SysV IPC (разделяемую память и семафоры, причём ему нужно два сегмента разделяемой памяти - в одном управляющая информация, в другом буфер для звуковых данных). Первый процесс, использующий dmix, выполняет fork(), и получившийся новый процесс становится сервером; остальные процессы получают от сервера дескриптор реального звукового устройства (для этого используется unix socket в /tmp, имя сокета передаётся через сегмент разделяемой памяти). Кстати, параметр ipc_gid, необходимый для раздачи доступа к dmix, появился совсем недавно - в libalsa-1.0.9 его нет, нужна ещё официально не вышедшая 1.0.10. > P.P.S. Это только у меня в XMMS при выводе через dmix не работает > "пауза"? Воспроизведение останавливается, но продолжить потом нельзя - > нужно сначала композицию включать кнопкой play. При указании вывода > напрямую в hw:0.0 - все работает. Что-то там сломано - возможно, что и в самом dmix.