Чистые данные: динамическая маршрутизация аудиосигнала по разным каналам

Я использую Pure Data для проекта, в котором я буду воспроизводить несколько аудиофайлов одновременно на разных динамиках.

Допустим, у меня есть два файла, и я хочу, чтобы один воспроизводился на левом канале звуковой карты, а второй — на правом канале, так что это первый и второй вход объекта dac~ 1 2.

Как я могу направить аудиосигнал в зависимости от другого значения?

В основном я ищу что-то вроде объекта route, но с дополнительным параметром или каким-то способом упаковать аудиосигнал с номером канала (1, 2) и использовать этот номер для маршрутизации сигнала.

Я только что узнал, что в «неавторизованной» библиотеке Ива Дегойона есть объект spigot~, который делает то, что я хочу, но только с двумя каналами. В конце концов, я хотел бы иметь возможность выводить разные звуки на восемь или девять каналов.


person Niavlys    schedule 22.05.2016    source источник


Ответы (3)


Вы можете использовать [demultiplex~] из библиотеки Zexy, чтобы направить один входящий сигнал на один из нескольких выходов. Например, [демультиплекс ~ 1 2 3 4] будет иметь один вход и четыре выхода. Один вход принимает как входящий сигнал (который будет направляться), так и один поплавок, который выбирает выход, на который будет направляться сигнал. Для противоположного поведения (несколько входящих сигналов на несколько входов и только один из них выводится на один выход) попробуйте [multiplex~].

Также обратите внимание, что вы можете использовать [mux~] и [demux~], поскольку они являются псевдонимами для одних и тех же объектов.

person gilbertohasnofb    schedule 25.05.2016
comment
кстати, [demux~] является частью zexy, а не Pd-extended; Pd-extended поставляется с предустановленным zexy, но есть много разных способов его установки... - person umläute; 08.06.2016
comment
@umläute я отредактировал ответ и удалил ссылку на Pd-extended - person Max N; 13.06.2016

Pd-extended больше не поддерживается. Вы можете установить Zexy для Vanilla Pd через пакет Debian или плагин Deken. Тогда у вас будет доступен объект demultiplex~. Однако могут быть веские причины, по которым вы вообще не хотите использовать внешний. Вот один из способов пропатчить своего рода коммутатор. Дополнительное преимущество: вы можете указать свое любимое время и тип затухания.

Коммутатор

person Max N    schedule 28.05.2016
comment
Я не знал, что вы можете устанавливать внешние пакеты на vanilla PD. Это проблема, что Pd-extended больше не поддерживается? Я думаю, что предпочитаю некоторые аспекты пользовательского интерфейса… Что касается решения, которое вы предлагаете, я думал о чем-то похожем, но не нашел чего-то чистого и функционального. Спасибо! - person Niavlys; 30.05.2016
comment
Однако могут быть веские причины, по которым вы вообще не хотите использовать внешний. Можете ли вы назвать некоторые из этих причин? Я никогда не слышал, чтобы кто-то выступал за то, чтобы избегать внешних факторов в Pd. Кроме того, одним явным преимуществом использования [demux~] является то, что он динамически создает столько входов, сколько вы ввели в качестве аргументов. - person gilbertohasnofb; 30.05.2016
comment
@Niavlys Проблема в том, что Pd-extended больше не поддерживается? Это не проблема, за исключением того, что вы никогда не исправите ошибки (а некоторые из них есть) и не получите новые объекты, поставляемые с более новой ванилью. Если вы работаете в Linux, я рекомендую взглянуть на третий дистрибутив Pd под названием Pd-l2Ork (который вскоре может быть выпущен для OSX и, возможно, для Windows). Его графический интерфейс фантастический, и он очень хорошо поддерживается. - person gilbertohasnofb; 30.05.2016
comment
@ gilberto.agostinho.f Конечно, вот три: 1. вы хотите создать патч, который не имеет или минимизирует зависимости, чтобы его было легче открыть другим. 2. вы хотите запустить свой патч на другом устройстве, возможно, с libpd, и вы не хотите отправлять с ним другую библиотеку. 3. вы хотите развернуть свой проект с лицензией, с которой конфликтует внешняя (например, коммерческий проект, где вы не хотите публиковать весь исходный код). - person Max N; 30.05.2016
comment
Конечно, это разумные аргументы. Я думал, вы имели в виду что-то, связанное с самим программированием, в том смысле, как работают внешние объекты, а не как работают абстракции. Так что да, если то, что вы перечислили, кого-то беспокоит, то вы правы на 100%. - person gilbertohasnofb; 30.05.2016
comment
@ gilberto.agostinho.f Я думаю, что возможно даже исправить [демультиплексор ~] с динамически созданным количеством входов и выходов. У текущей ванили есть [клон], который может вам помочь. - person Max N; 30.05.2016
comment
@MaxN [клон] вам здесь не поможет; с Pd-0.47-0 у нас наконец есть [initbang], который позволяет вам создавать [demux~] как абстракцию, но [initbang] доступен только как внешний :-( - person umläute; 08.06.2016

Основываясь на ответе Max N, вы также можете использовать переключатель, чтобы изменить громкость сигнала и узнать, куда он перенаправляется:

пример

В этом случае, если тумблер активен, сигнал будет подаваться на левую розетку. Если он неактивен, сигнал будет принимать правая розетка.

person Vrogar    schedule 25.03.2018
comment
Вместо [expr 1 - $f1] вы также можете просто использовать [== 0]. Имейте в виду, что это решение будет жестко переключать звук без времени затухания. Это может вызвать хлопки. - person Max N; 31.12.2019