Pergunta

Estou considerando a aplicação de áudio e midi no Max (ou Max para o Live, realmente), mas estou totalmente confortável em Java, então Algo assim também parece atraente. Alguém tem alguma experiência com Max? É realmente voltado para as pessoas que não codificam, ou a interface do usuário de aparência pateta/amigável é muito mais eficiente do que escrever código reto, digamos, Java? Além disso, alguém escreveu um plugin VST em Java e pode compartilhar alguma experiência lá?

Foi útil?

Solução

Max é uma linguagem de fluxo de dados. Estou mais familiarizado com a DP, que é do mesmo autor.

A vantagem do fluxo de dados como estilo de programação é que a maioria das dependências de dados é explícita - você pode literalmente seguir as conexões entre as sub -rotinas visualmente e elas geralmente são exibidas como uma linha na tela entre elas. A dificuldade é que a ordem das operações é menos explícita, porque é bidimensional no layout, em vez de uma dimensão como o código textual seria.

Atualmente, faço a maioria das minhas coisas de áudio no SuperCollider, mas para um esboço rápido de uma idéia de áudio e construindo um modelo difícil, o PD funciona muito bem.

A principal dificuldade de programação em uma linguagem visual de fluxo de dados é compreender a ordem das operações. É possível criar várias conexões a partir de uma tomada, mas é possível criar um objeto [Trigger] explícito para controlar qual dessas conexões é executado primeiro (uma linha proveniente de uma saída é conceitualmente a mesma que uma chamada de sub -rotina). Também há uma dificuldade com programadores experientes em se acostumar com parâmetros anônimos - as linhas de patching não têm nomes, eles apenas têm a saída de onde vêm e a entrada a que estão conectados para identificá -los.

Outra dica é usar o encapsulamento - em um idioma textual, você teria uma biblioteca ou um arquivo de classe, no máximo ou no PD, você pode carregar um arquivo de patch externo pelo nome - para criar um pequeno patch com algumas saídas e entradas e usar isso Do seu outro patch em vários lugares, em vez de copiar e colar (assim como você chamaria funções em vez de copiar e colar blocos de código).

Send] e [Receber] são para definir / obter dados globalmente, e têm os mesmos problemas que acompanham os globais - uma solução alternativa comum quando são necessários é para prender um identificador exclusivo específico ao subpatch atual, o token de $ 0 avalia para O ID exclusivo do subpatch atual em nomes / parâmetros de objetos e é usado para esse fim. Isso simula uma variável escopo.

A depuração no DataFlow é excelente, porque é muito fácil separar um conjunto de itens do patch circundante e executá -los de forma independente, e ativar o rastreamento para uma parte do fluxo é tão fácil quanto conectar uma caixa numérica a uma saída.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top