Сегодня мы рассмотрим очень интересную и полезную пару блоков: XMLRPC Client и RPCXML Server. Данные блоки служат для организации удаленного управления и взаимодействия блоков через сеть.
Итак, что сейчас мы попытаемся сделать. Мы попытаемтся сделать два независимых графа, один из которых будет управлять поведением другого.
Создайте две новых схемы. Назовем их соответсвенно server и client. Клиент будет подключаться к серверу, и говорить что ему делать.
Начнем с сервера. Добавим на схему блок XMLRPC Server (он находится в разделе Misc -> XMLRPC Server), блок Variable, Signal Source и Audio Sink.
Назовем нашу переменную для хранения частоты сигнала remote_freq, и зададим ей значение 1000.
Далее в настройках Signal Source укажем использовать в качестве значения частоты нашу переменную, а затем подключим его выход на вход Audio Sink. Ну что, практически все готово! Запускаем для проверки наш граф. Фу! Как-то паршиво звучит… А почему? Да просто мы забыли убавить амплитуду сигнала. Меняем ее с 1 до 0.5. Запускаем граф, и слышим чистый сигнал частотой 1 Кгц.
В итоге у нас должна пролучится следующая схема:
Теперь перейдем к клиенту.
Добавьте на схему блок XMLRPC Client, и WX GUI Slider.
Настроим для начала наш слайдер. Он будет регулировать частоту сигнала от 1 КГц до 10 Кгц.
Теперь, самое интересное, блок XMLRPC Client. Настройте его так, как показано на рисунке.
Теперь следует дать пояснения. Связка Client — Server работает следующим образом: Как только на клиент замечает изменение значения переменной, указаной в поле Variable, это приводит к передаче значения изменившейся переменной серверу, который полученное значение попытается присвоить переменной с именем указанным в поле Callback клиента, но без префикса set_.
Объяснение получилось немного путаное, но смысл его в том, что если вы хотите, чтобы при изменении переменной var1 на стороне клиента, это значение передавалось серверу и оказывалось в переменной var2, то ваши шаги следующие:
1. Создать переменную с именем var1 на стороне клиента.
2. Создать переменную с именем var2 на стороне сервера.
3. В настройках XMLRPC Client в поле Variable указать var1, а в поле Callback указать set_var2
Итак, у нас готов клиент для управления. Выглядеть он должен так:
Ну что, настало время проверить как это все работает.
Запускаем сначала серверную часть, затем клиентскую. Подвигаем за полозунок, и убедимся что частота сигнала меняется.
А что если мы хотим менять несколько параметров? Допустим хотим управлять амплитудой сигнала? Нет ничего проще!
Добавляем на стороне сервера новую переменную для значения амплитуды, назовем ее remote_amp. На стророне клиента добавим еще один блок XMLRPC Client и полозунок для управления. Полозунку укажем двигаться в границах от 0.1 до 0.5, блоку XMLRPC Client произведем настройку как уже было разъясено выше.
Запускаем сервер и клиент. Двигаем полозунки, и радуемся контролю не только за частотой но и за амплитудой.
client.grc
server.grc