Las abstracciones de datos puros parecen interferir entre sí (Sonido, Puredata)

interstar preguntó.

Estoy tratando de entender las abstracciones de Pure Data.

Tengo un programa de sintetizador simple y trato de sacar dos copias del mismo en un segundo programa de pd.

Sin embargo parece que aunque tengo el doble de sonido, no puedo ajustar los controles de las Abstracciones de forma independiente. Los controles de volumen parecen funcionar por separado, pero cuando se trata de controles de corte de filtro y resonancia, etc. ambos sintes parecen utilizar los mismos valores. Y sólo uno de los UIs (puesto en la pantalla principal con el gráfico sobre el padre) parece afectar a esto.

Como programador, entiendo las variables y el alcance, pero realmente no estoy haciendo mucho sentido de la documentación como http://en.flossmanuals.net/pure-data/dataflow-tutorials/dollar-signs/ que parece estar escrita para personas que no entienden esas cosas.

Asumo que las Abstracciones no son espacios de nombres completamente separados, sino que el comportamiento de los espacios de nombres se finge de alguna manera con estos números aleatorios en $0.

Actualmente no estoy usando ningún $0 en esta Abstracción y supongo que es por eso que estoy recibiendo la interferencia entre las dos instancias de la misma. Pero realmente no puedo ver cómo debo hacerlo.

Así que, ¿alguien puede recomendar un buen tutorial que explique cómo funcionan las reglas de scoping de las Abstracciones en PD? O que simplemente dé un tutorial claro de cómo se pueden usar múltiples copias de la misma Abstracción en el mismo programa.

Por si sirve de algo, aquí está el sintetizador del que estoy intentando usar dos copias :

#N canvas 100 100 500 500 10;
#X obj 150 30 hsl 120 20 0 127 0 0 empty empty pitch1 -2 -8 0 10 -262144 -1 -1 0 1;
#X obj 300 30 hsl 120 20 0 20 0 0 empty empty twin_pitch_diff_1 -2 -8 0 10 -262144 -1 -1 0 1;
#X obj 20 40 +~;
#X obj 20 80 phasor~ 0;
#X obj 20 120 +~ -0.5;
#X obj 20 160 phasor~ 0;
#X obj 20 200 +~ -0.5;
#X obj 20 240 +~;
#X obj 450 30 hsl 120 20 -10 10 0 0 empty empty filt_freq_phasor_speed_1 -2 -8 0 10 -262144 -1 -1 0 1;
#X obj 20 280 phasor~ 0;
#X obj 20 320 *~ 1000;
#X obj 90 70 hsl 120 20 0 10 0 0 empty empty filter_res_1 -2 -8 0 10 -262144 -1 -1 0 1;
#X floatatom 20 360 5 0 0 0 - - -;
#X obj 20 400 vcf~ 440 1;
#X obj 240 70 hsl 120 20 -15 15 0 0 empty empty lfo_1 -2 -8 0 10 -262144 -1 -1 0 1;
#X obj 20 440 loadbang;
#X msg 320 70 0.0001;
#X obj 20 480 phasor~ 0;
#X obj 20 520 *~;
#X obj 20 560 delwrite~ echo_1 1001;
#X obj 470 70 hsl 120 20 0 1000 0 0 empty empty echo_1_feedback_time -2 -8 0 10 -262144 -1 -1 0 1;
#X obj 20 600 vd~ echo_1;
#X obj 90 110 hsl 120 20 0 0.9 0 0 empty empty echo_1_feedback_gain -2 -8 0 10 -262144 -1 -1 0 1;
#X obj 20 640 *~;
#X obj 240 110 hsl 120 20 0 1 0 0 empty empty vol_1 -2 -8 0 10 -262144 -1 -1 0 1;
#X floatatom 20 680 5 0 0 0 - - -;
#X obj 20 720 *~;
#X obj 20 760 outlet~ ;
#X connect 0 0 2 0;
#X connect 1 0 2 1;
#X connect 0 0 3 0;
#X connect 3 0 4 0;
#X connect 2 0 5 0;
#X connect 5 0 6 0;
#X connect 4 0 7 0;
#X connect 6 0 7 1;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
#X connect 11 0 12 0;
#X connect 7 0 13 0;
#X connect 10 0 13 1;
#X connect 12 0 13 2;
#X connect 15 0 16 0;
#X connect 16 0 14 0;
#X connect 14 0 17 0;
#X connect 13 0 18 0;
#X connect 17 0 18 1;
#X connect 18 0 19 0;
#X connect 20 0 21 0;
#X connect 21 0 23 0;
#X connect 22 0 23 1;
#X connect 23 0 19 0;
#X connect 24 0 25 0;
#X connect 21 0 26 0;
#X connect 25 0 26 1;
#X connect 26 0 27 0;
#X coords 0 -1 1 1 540 140 1 70 10;

1 respuestas
Azz

No tengo tiempo de mirar tu parche ahora, pero creo firmemente que tu problema de cross-talk está relacionado con la falta de $0s en la abstracción.

Los $0s no son realmente variables de la misma manera que $1, $2, etc. que pueden ser asignados por el usuario. En su lugar, representan números de identificación únicos que se asignan automáticamente a una abstracción – y, críticamente, ¡son únicos para cada abstracción! Por lo tanto, si usted utiliza dos instancias de la misma abstracción en un parche, cada instancia de la abstracción se le asignará un número diferente.

Esto es útil si utilizas conexiones inalámbricas, como ‘send’, ‘receive’, ‘throw~’, ‘catch~’, o cualquier efecto de retardo, a cada uno de los cuales asignas un nombre de dirección (por ejemplo, [send output] y [receive output] ). Si tienes múltiples abstracciones ejecutándose al mismo tiempo, y cada una tiene una conexión inalámbrica, PD no sabrá a qué nombre de dirección enviar la señal, ya que habrá efectivamente múltiples instancias de la conexión de recepción.

Así que, para múltiples instancias de la misma abstracción, en lugar de que [enviar salida] sea recibida por [recibir salida], se necesita que [enviar $0-salida] sea recibida por [recibir $0-salida]. Al hacer esto, estás asignando a los objetos de cada instancia de una abstracción un nombre diferente.

¿Lo entiendes? No estoy seguro de los tutoriales, pero algunos de los foros de PD son muy buenos.

Comentarios

  • Sí, eso era. En realidad tenía una línea de retardo usando un delwrite~ y vd~ con un buffer con nombre que no tenía $0 agregado al nombre. –  > Por interstar.