Консультация № 170086
01.07.2009, 22:46
0.00 руб.
0 2 0
Стоит задача организовать аналог Radioboss (ведение радиоэфира)
Функционал простой... Основной музыкальный фон играет постоянно.
В необходимое время запускается трек объявления по второму каналу первый приглушается на это время по окончании объявления основной фон опять увеличивает звук.

поскольку про такие пакеты не слышал
решил реализовывать в PERL
время запуска объявлений, плейлист основного фона, время приглушки знаю как реализовать

как проигрыватель решил использовать стандартный mplayer. Вот тут и столкнулся с проблемами.

1. два трека одновременно запускаются спокойно. но управление пакетом одно, то-есть например для эксперимента запускаем два трека, в ручную на одном уменьшаем звук второй уменьшается тоже
Вопрос ... каким макаром создать два абсолютно автономных процесса. с разным управлением
2.Как эмулировать из основной программы сигналы на увеличение и уменьшение звука, в оригинале кнопки "/" и "*" на нумпаде.

опять же слышал про родные модули или библиотеки для роботы со звуком
но пока нашол только пакет perl-MPlaer

perldoc -t MPlayer не спасает а больше ничего нет..
Мне хотябы кусок кода чтоб было видно запуск трека и управление звуком .

опять же слышал про pulseaudio но тут ещё темнее...

Заранее спасибо.

Обсуждение

Неизвестный
01.07.2009, 23:02
общий
то есть необходимо
1 организовать запуск двух отдельных треков
2 организовать управление звуком из под скрипта (отдельно первый трек, отдельно второй)
Неизвестный
24.09.2009, 15:36
общий
defender79:
Нужно использовать open3 для управления стандартными дескрипторами ввода-вывода порожденного процесса.
Код:

#! /usr/bin/perl
use IPC::Open3;
#запускаем mplayer дочерним процессом, перехватываем стандартный ввод
$pid=open3(*F_IN,null,null,"mplayer 'TEST.mp3' >/dev/null 2>/dev/null");
#Первая композиция играет 5 секунд на полной громкости
sleep(5);
#сначала уменьшаем громкость 5 раз по 3 нажатия клавиши "9"
$lv=5;
for($k=0;$k<$lv;$k++)
{
syswrite(F_IN,"999",3);
sleep(1);
}

#запускаем второй mplayer дочерним процессом, перехватываем стандартный ввод
$pid=open3(*F_IN1,null,null,"mplayer 'TEST1.mp3' >/dev/null 2>/dev/null");
#ждем 20 секунд, пока играет вторая композиция
sleep(20);
#завершаем работу второго mplayer нажатием клавиши "q"
syswrite(F_IN1,"q",1);

#затем увеличиваем громкость 5 раз по 3 нажатия клавиши "0"
for($k=0;$k<$lv;$k++)
{
syswrite(F_IN,"000",3);
sleep(1);
}
#десять секунд первой композиции на полной громкости
sleep(10);
#завершаем работу mplayer нажатием клавиши "q"
syswrite(F_IN,"q",1);
# можно подождать пока потомки завершатся
sleep(2);
Форма ответа