A função perform não deve ser chamada pelo nosso código: ela é chamada automaticamente pelo kernel do Pd a cada ciclo DSP (64 amostras). Não é possível usar nenhum ofArray(), pois isso serve para o acesso a um vetor no patch Pd, algo que é na verdade uma interface gráfica e que não faz parte da nossa implementação. Temos que fazer toda a computação em tabelas internas ao código em Lua, ou seja, tanto a tabela KS de tamanho L quanto a tabela de tamanho 64 devolvida pela função perform têm que ser ofTable()'s. Lembrem-se sempre que a indexação dessas tabelas começa em 1.
Detalhando um pouco mais a dica do Nicolas, podemos pensar na tabela do KS como o nosso espaço de trabalho principal para a produção do sinal de saída, e só nos preocuparmos em copiar o conteúdo de lá para o outro vetor de tamanho 64 devolvido pela função perform. Existem muitas maneiras de coordenar esse processo: podemos ir atualizando as amostras da tabela KS uma a uma à medida que também copiamos os valores para o bloco de saída, mas também poderíamos atualizar a tabela inteira de uma vez a cada L amostras, ou seja, a cada vez que completarmos um ciclo do algoritmo KS.
Sobre a periodicidade da saída, como parte do processo de codificação/depuração vocês podem experimentar ouvir o que seria a saída do KS sem o filtro passa-baixa: seria um sinal harmônico com frequência R/L Hz que teria a mesma altura musical de um oscilador puro com essa mesma frequência, apenas teria um timbre diferente (pois possui a forma de onda dos valores aleatórios da inicialização). Com o filtro passa-baixa o loop do KS fica um pouquinho mais comprido (L+0.5 amostras), como explicado no enunciado, então o som resultante pode ser comparado com um oscilador de frequência R/(L+0.5) Hz. A discrepância entre essa frequência observada de fato e a frequência F especificada na mensagem pode ser percebida facilmente se usarmos valores altos de F (valores pequenos de L): por exemplo, para F=1000 Hz teremos L=44, sendo que a saída do KS da primeira fase terá como frequência fundamental 1000/44.5 = 991 Hz, uma diferença de quase 1%, perceptível principalmente pelos batimentos em relação a um oscilador afinado em 1000 Hz.
Também é possível depurar a duração da saída colocando um [delay] com o valor D*R para checar se ele é acionado quando o som termina.