Declarando várias funções em Ofelia

Declarando várias funções em Ofelia

por Ricardo Mikio Morita -
Número de respostas: 2

Boa tarde, professor.

 

Ao tentar fazer o item 8 do trabalho, optei por declarar funções locais correspondentes às equações pedidas, e depois as chamei na hora de dar o setAt no sinal 2, como da forma abaixo; para cada função que eu quero colocar em s2 eu mudo o valor para as outras funções locais. Mas gostaria de saber se existe uma maneira melhor de fazer esta troca? Pensei em usar mensagens mas não sei por onde começar.

-- Declarando função
local g1 = function(x) return x^15 end;

...

-- Entrando no loop
for n = 0, 88199 do;
s1:setAt(n, ...); --função qq de senóide
x = s1:getAt( n); --meu deus pq o paca não deixa eu juntar o n com os parênteses
s2:setAt(n, (g1(x));



Em resposta à Ricardo Mikio Morita

Re: Declarando várias funções em Ofelia

por Ricardo Mikio Morita -
Também gostaria de saber se existem boas maneiras de rotear diversos sinais para o dac~, já que no exercício 10-15 estamos adicionando diversos tipos de sinais e fica difícil comparar eles modificando as entradas e saídas entre os diversos tabplays disponíveis!

Tentei ligar os tabplays a um route que liga a um signal saindo do bloco do ofelia mas não consigo fazer ele mudar para outras rotas além da 0 e 1.
Em resposta à Ricardo Mikio Morita

Re: Declarando várias funções em Ofelia

por Marcelo Queiroz -
Primeiro, deixa eu esclarecer que o roteiro da aula prática não requer nenhuma solução sofisticada, a ideia era ter várias cópias das caixinhas com as diversas funções de teste. Assim, quem não quiser gastar tempo deixando a solução mais enxuta, não precisa.

Em relação à sua primeira dúvida, sim, é possível usar mensagens para alterar o comportamento da função. Ao invés de declarar múltiplas funções, o jeito mais fácil seria uma função g que depende de um segundo parâmetro:
function g(x,y);
if y==0 then return x*x;
elseif y==1 then return x^3;
else return x^4;
end;
end;
 
E passando no lugar do y aquele nome especial 'a' que representa o valor da mensagem enviada para o script, analogamente ao que fizemos para controlar a frequência. Declarando a função assim (global) você pode inclusive ter essa definição num script diferente, desde que seja executada antes daquela que vai processar as tabelas.

Quanto à segunda dúvida, existe um objeto em Pd que faz exatamente o que você quer: o [multiplex~] ou [mux~] da biblioteca zexy. Para usá-los, instale o zexy (via deken), inclua essa biblioteca na inicialização (Arquivo->Preferências->Inicialização) e reinicialize o Pd. Também dá para fazer um script em Lua com o mesmo comportamento, mas não quero atropelar a sequência de tópicos que estamos seguindo.