Processamento polifônico

Re: Processamento polifônico

por Marcelo Queiroz -
Número de respostas: 0

Bom dia!

1) Para colocar tabelas dentro de tabelas, você pode fazer coisas do tipo t[i] = ofTable() e depois acessar os elementos de t[i] com a sintaxe t[i][j]. Além disso, tabelas em Lua também podem ser usadas com a sintaxe de structs em C: ao invés de criar elementos indexados numericamente, você poderia guardar valores em variáveis com nomes t[i].F, t[i].L, etc. Como exemplo de sintaxe, o objeto [ofelia] abaixo cria uma tabela t cheia de dados heterogêneos, matrizes e estruturas, e depois varre todos os seus elementos:

ofelia f;
-- cria tabela t;
t=ofTable();
t[1]=1;
t[2]="dois";
-- cria tabela s e vincula a t[2] (empurrando o elemento t[2] para a frente);
s=ofTable();
table.insert(t, 2, s);
-- insere na tabela s que também é t[2];
s[1]=3.5;
-- cria tabela/struct;
t[4] = ofTable();
t[4].x = 5;
t[4].y = "seis";
-- varre tabela t;
for i=1, #t do;
  -- se t[i] é uma tabela, varre os elementos de t[i];
  if type(t[i])=="table" then;
    print("t["..i.."] é uma tabela:");
    -- se t[i] é uma tabela indexada, percorre os índices;
    if #t[i]>0 then;
      for j=1, #t[i] do;
        print("t["..i.."]["..j.."]="..t[i][j]);
      end;
    else;
      -- se t[i] é do tipo struct, percorre seus campos;
      for k, v in pairs(t[i]) do;
        print("t["..i.."]."..k.."="..v);
      end;
    end;
    -- se t[i] não é uma tabela, simplesmente imprime seu valor;
  else print("t["..i.."]="..t[i]);
  end;
end;

a saída desse objeto (quando recebe um bang) é:

t[1]=1
t[2] é uma tabela:
t[2][1]=3.5
t[3]=dois
t[4] é uma tabela:
t[4].y=seis
t[4].x=5

2) a função perform é chamada a cada ciclo DSP e deve produzir uma tabela de tamanho 64 com a soma de todos os eventos que estão ativos naquele instante. Para isso, seu código deve ter a estrutura:

para cada amostra n=1...64 faça
  saida[n] = 0
  para cada evento e=1...K ativo no instante n faça
    x = amostra n do evento e
    saida[n] = saida[n]+x

O resto naturalmente é ajustar a sintaxe para percorrer as suas estruturas de dados do jeito que você as definiu. Pode ser conveniente escrever funções auxiliares para deixar o código mais fácil de depurar.