Você está na página 1de 19

Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

3.

O Nível de Controle:
Operadores Relacionais, Lógicos e
Condicionais

Neste capítulo poderemos mergulhar um


pouco mais no Nível de Controle e entender a
lógica por trás dos objetos que modelam
verificações relacionais e lógicas para
compormos patches mais complexos que
operem fluxos condicionais.

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 1


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

No nosso cotidiano, é muito comum operarmos nossas ações no mundo de acordo com condições
preestabelecidas: se estiver chovendo, sairei com o guarda-chuvas, do contrário eu deixo-o em casa; Se estou com fome,
vou em busca de algo para comer; Uma pessoa só pode entrar numa casa de show se for maior de idade; etc... A cada
momento, sem darmos conta, estamos programando nosso dia, nossas vidas, baseando-se em tomadas de decisões sobre
como agir num próximo momento. E por falar em programação, no contexto computacional, a arte imita a vida: muitas
vezes é interessante que um determinado algoritmo execute um trecho de programação apenas se alguma condição seja
satisfeita, do contrário, o algoritmo segue outro rumo de programação.

No contexto do Pd, temos algumas estruturas que permitem que executemos determinado comportamento do
nosso patch baseando-se na verificação de uma relação entre um conjunto de valores ou alguma regra condicional
lógica. Afinal, seria interessante que nosso patch diminuísse automaticamente o volume caso o limite sonoro estivesse
extrapolado o máximo permitido pela potência das caixas sonoras, ou que imprimisse na tela do Console alguma
informação alertando ao usuário esse problema, por exemplo.

Neste capítulo, iremos observar alguns objetos do Pd que permitem ao programador criar patches que
possibilite a execução de fluxos condicionais em sua programação.

3.1. Operações de Testes Relacionais

No estudo da matemática é comum encontrarmos operadores que determinam a relação entre operandos
numéricos. Dessa forma, podemos tecer comparações quantitativas: um número pode ser menor, igual ou maior que
outro, por exemplo. No contexto de operações relacionais sobre tipos numéricos, em que o Pd opera, podemos
considerar as operações relacionais que verificam se um dado valor é menor que, menor ou igual, igual, diferente,
maior que ou maior ou igual a outro valor. O Pd engloba todas estas operações no contexto de testes relacionais
(Figura 3.1).

Daniel SoMar –FATEC Tatuí (www.fatectatui.edu.br) 2


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.1 – Caixas de objetos de operações de testes relacionais.

Na matemática usual, estes operadores são muito utilizados como verificadores de pertinência, onde podemos
certificar se um número em questão pertence a um intervalo numérico ou conjunto de valores informado, por exemplo.

Os objetos definidos na Figura 3.1 possuem dois inlets de entrada para conectarem operandos numéricos de
ponto flutuante e retornam em seus outlets o valor numérico 1 caso a operação relacional descrita entre dois operandos
seja verdadeira. Se a verificação relacional da operação for falsa, o valor retornado nos outlets será zero. Assim como
nas operações matemáticas estudadas no capítulo anterior, para operar estes objetos, basta conectarmos fios que
possuam valores numéricos oriundos de caixas de objetos, de caixas de mensagens ou de caixas numéricas. Mais uma
vez, lembremos que, por conta do paradigma do hot inlet, devemos inicialmente enviar o conteúdo do operando da
direita e depois o conteúdo do operando da esquerda para, finalmente, o objeto produzir o resultado correto no seu
outlet (Figura 3.2).

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 3


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.2 – Esquema de conexão entre os inlets dos objetos de operações relacionais para
geração correta do resultado no outlet.

Como um pequeno exemplo do uso das operações relacionais, vamos pensar no seguinte problema: Dados dois
valores numéricos aleatórios A e B, efetue uma programação que indique sonoramente a relação maior que entre A e B.
Apenas para o caso em que A seja maior que B, o sistema deverá enviar um alerta sonoro. Caso A não seja maior que B,
o sistema deverá permanecer em silêncio.

Vamos analisar o problema para podermos construir uma solução algorítmica. Primeiramente, dois números
ALEATÓRIOS serão indicados. Podemos utilizar dois objetos random para resolver esta questão, cada objeto gerará um
número aleatório, digamos, na faixa de zero a 100. De posse dos valores numéricos, podemos efetuar o teste relacional
entre os mesmos. O teste desejado é a relação maior que calculada através do uso do objeto “ > ”. Quando efetuarmos
este teste, teremos como resultado 1, caso A seja maior B, ou zero, caso contrário. Tudo certo? Aqui finalizamos a parte
de controle do teste, agora só resta o alarme sonoro.

Quanto ao alarme sonoro, podemos definir um objeto oscilador executando uma frequência específica,
digamos 432 Hz. Entretanto, o som do alarme só será audível quando tivermos a confirmação de que A seja maior que

Daniel SoMar –FATEC Tatuí (www.fatectatui.edu.br) 4


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

B. Neste sentido, podemos utilizar o resultado do teste relacional como controle do volume do som: sendo A maior que
B, o teste relacional retornará o valor 1 e este valor será multiplicado à amplitude da onda sonora, amplificando-a ao
máximo; caso contrário, o teste relacional retornará o valor zero e este valor será multiplicado à amplitude de onda,
anulando o som audível.

Com a análise efetuada, podemos agora estruturar uma possível narração algorítmica da programação que a
máquina deverá efetuar:

1 – Ler dois números aleatórios (A e B);

2 – Efetuar o teste relacional: A > B;

2.1 – Caso A > B, então aumente o volume da fonte sonora: Efetuar a multiplicação do valor 1,
resultante do teste relacional entre os dois números, à amplitude da onda gerada (oscilador
em 432 Hz);

2.2 – Senão, então abaixe o volume da fonte sonora: Efetuar a multiplicação do valor 0, resultante do
teste relacional, à amplitude da onda gerada (oscilador em 432 Hz);

A Figura 3.3 exibe uma possível implementação do nosso sistema num patch do Pd.

Figura 3.3 – Exemplo de uso dos testes relacionais para controlar o fluxo sonoro de um
patch.

3.2. Operações de Testes Lógicos

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 5


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Algumas vezes pode nos ser interessante agrupar operandos em objetos para compormos uma expressão que
possua operadores que atuam de acordo com algumas regras da lógica. E o que vem a ser tais operadores lógicos?!
Bem, vamos descrevê-los através de exemplos práticos.

Vamos pensar no seguinte contexto: Daniel, como todo paraibano que se preze, adora comer uma boa tapioca
no café da manhã.
Para fazer a massa da tapioca, Daniel precisa de dois ingredientes imprescindíveis: polvilho doce e sal. Então,
de forma lógica, Daniel poderá ter uma tapioca caso exista em sua cozinha uma mistura de polvilho doce E água.
Deixando claro: TAPIOCA ← POLVILHO E ÁGUA. Se há só polvilho, não há tapioca pois a massa estará seca,
impossível de existir o ponto de liga na massa para criar a tapioca. E só com água é impossível fazer alguma coisa,
certo?! Pensando assim, a tapioca só acontece se tivermos o polvilho E a água simultaneamente. Fazendo um quadro
resumo da situação do café da manhã, temos a Tabela 3.1:

Há Água? Há Polvilho Doce? Há Tapioca?


NÃO NÃO NÃO
NÃO SIM NÃO
SIM NÃO NÃO
SIM SIM SIM

Tabela 3.1 – Quadro resumo do teste lógico da massa de tapioca.

Pois bem, acabamos de descrever o teste lógico E, onde só será considerado VERDADEIRO se seus
operandos (no exemplo acima, a disponibilidade de água e de polvilho doce) forem VERDADEIROS
simultaneamente. Atuando sobre dois operandos, A e B quaisquer, definimos a tabela verdade da regra lógica E
(Tabela 3.2):

A B AeB
FALSO FALSO FALSO
FALSO VERDADEIRO FALSO
VERDADEIRO FALSO FALSO
VERDADEIRO VERDADEIRO VERDADEIRO

Tabela 3.2 – Tabela Verdade da regra lógica E.

Seguindo esta ideia, vamos ver o próximo teste lógico: o OU Lógico. Continuando no contexto culinário, para
incrementar o café da manhã de Daniel, podemos utilizar como recheios da tapioca guacamole OU salada. Sendo
assim, se tiver só guacamole, já teremos tapioca recheada. Se tiver só salada, sem problemas, também teremos tapioca
recheada. E se tiver os dois? Daniel mistura tudo e cria um recheio misto de salada e guacamole.
Pois bem, neste cenário, basta que haja apenas um dos ingredientes, guacamole OU salada, para haver o
recheio da tapioca no café da manhã de Daniel. Sendo assim, RECHEIO ← GUACAMOLE OU SALADA.

Daniel SoMar –FATEC Tatuí (www.fatectatui.edu.br) 6


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Fazendo um novo quadro resumo, agora com a situação do recheio da tapioca do café da manhã, temos a
Tabela 3.3:

Há Guacamole? Há Salada? Há Recheio?


NÃO NÃO NÃO
NÃO SIM SIM
SIM NÃO SIM
SIM SIM SIM

Tabela 3.3 – Quadro resumo do teste lógico do recheio da tapioca.

Neste ponto, acabamos de descrever a regra do teste lógico OU, onde só será considerado FALSO se seus
operandos (no exemplo acima, a disponibilidade de guacamole ou da salada) forem FALSOS. Definimos através deste
exemplo a operação OU Lógico, que atuando sobre dois operandos, A e B quaisquer, descrevemos a tabela verdade da
regra lógica OU (Tabela 3.4):

A B A ou B
FALSO FALSO FALSO
FALSO VERDADEIRO VERDADEIRO
VERDADEIRO FALSO VERDADEIRO
VERDADEIRO VERDADEIRO VERDADEIRO

Tabela 3.4 – Tabela Verdade da regra lógica OU.

No Pd, poderemos fazer o uso de testes lógicos através dos objetos definidos na Figura 3.4:

Figura 3.4 – Caixas de objetos de operações de testes lógicos.

Como já percebido no uso dos testes relacionais e devido à lógica herdada da linguagem C, o valor lógico
FALSO é codificado como zero e o valor lógico VERDADEIRO é codificado como 1 para os resultados possíveis de

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 7


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

testes relacionais e lógicos (Figura 3.5).

Figura 3.5 – Exemplo de patch gerando resultados VERDADEIRO (1) e FALSO


(zero) através de testes relacionais e lógicos.

Observe Devido ao Pd herdar o tratamento de testes relacionais e lógicos da linguagem C, devemos


:
atentar não só para o formato dos resultados gerados por tais objetos, mas também para o formato dos valores
dos operandos de entrada dos testes. Por exemplo, se estamos tratando de um teste lógico (objetos “&&” ou
“||”), o mesmo considerará valor lógico FALSO entrado o valor zero. Entretanto, se um dos operandos de
entrada possuir qualquer valor diferente de zero, o teste lógico assumirá tal valor como valor lógico
VERDADEIRO (Figura 3.6).

Daniel SoMar –FATEC Tatuí (www.fatectatui.edu.br) 8


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.6 – Valores numéricos zerados são logicamente considerados FALSOS.


Valores numéricos diferentes de zero são logicamente considerados
VERDADEIROS.

Vamos praticar mais um pouco? Agora, imaginemos o contexto: Carlinhos está verificando valores de
frequências aleatórias para saber a influência sonora no crescimento de sua planta favorita, a Arruda. Anteriormente,
Carlinhos efetuara testes no espectro sonoro dentro do intervalo de 440 Hz até 880 Hz. Agora ele procura obter
resultados fora dessa faixa de frequência, ou seja, valores menores que 440 Hz ou valores maiores que 880 Hz estão
aptos para o teste. Contudo, o sistema deverá enviar frequências aleatórias para o alto-falante da caixa de som. Como
garantir que a caixa de som só reproduza os valores desejados?

Inicialmente, vamos seguir com a análise do problema. Primeiramente, teremos uma série de números
ALEATÓRIOS que serão gerados como valores de frequências neste problema. Como vimos no exemplo descrito na
Figura 3.3, podemos utilizar um objeto random na faixa de zero a 2000, por exemplo. De posse do valor gerado pelo
objeto random efetuamos o teste relacional para saber se a frequência gerada é menor que 440 Hz OU maior que 880
Hz. Efetuado este teste, teremos como resultado 1, caso a condição seja verdadeira ou zero, caso contrário. Do mesmo
modo efetuado no exemplo da Figura 3.3, utilizaremos os resultados do teste para controlar o alarme sonoro da
frequência desejada.

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 9


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Com a análise efetuada, podemos agora estruturar uma possível narração algorítmica da programação que a
máquina deverá efetuar:

1 – Ler um número aleatório;

2 – Verificar se o número indicado é menor que 440 Hz OU maior que 880 Hz;

2.1 – Caso a verificação seja verdadeira, então aumente o volume da fonte sonora: Efetuar a
multiplicação do valor 1, resultante do teste lógico, à amplitude da onda gerada;

2.2 – Senão, então abaixe o volume da fonte sonora: Efetuar a multiplicação do valor 0, resultante do
teste lógico, à amplitude da onda gerada;

A Figura 3.7 exibe uma possível solução para o problema dos testes de botânica de Carlinhos.

Figura 3.7 – Possível solução para o problema de escolha de uma frequência sonora fora de um
intervalo estabelecido.

3.3. Objeto expr: Abordagem Condicional

É muito comum encontrarmos algoritmos computacionais que se comportem de maneiras diversas dependendo
exclusivamente da verificação de testes relacionais e lógicos entre valores, onde determinadas ações só ocorrem caso
algumas condições sejam satisfeitas. Anteriormente, efetuamos alguns destes exemplos. O teste de Carlinhos, por
exemplo, só funcionará caso a frequência aleatória esteja dentro dos limites desejados.

Daniel SoMar –FATEC Tatuí (www.fatectatui.edu.br) 10


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Tais verificações condicionais servem para tomarmos decisões sobre o rumo de cálculos e processamentos da
programação. Assim, caso uma expressão condicional seja satisfeita, temos um determinado fluxo de execução do nosso
algoritmo; do contrário, teremos um outro fluxo a ser executado. Essa ideia constitui o princípio das estruturas de
desvio de fluxo condicional da lógica de programação: o caminho a ser tomado pelo algoritmo depende do resultado da
verificação de uma determinada expressão.

Neste contexto, observemos mais uma vez o objeto expr descrito no capítulo anterior. Utilizando o expr
podemos criar expressões condicionais, onde o resultado de determinados cálculos dependerá da análise de tais
expressões. Para tanto, utilizamos o operador if no texto, indicando que uma expressão condicional precisa ser
verdadeira para que um determinado valor seja entregue no outlet. Do contrário, um segundo valor será indicado no
outlet (Figura 3.8).

Figura 3.8 – Exemplo de expressão condicional criada mediante o expr.

Esse método é ideal se desejarmos criar expressões condicionais complexas, como ocorreu, por exemplo, no
problema de botânica de Carlinhos, onde a expressão condicional poderia ficar reduzida a uma única linha de código
(Figura 3.9).

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 11


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.9 – Exemplo de construção de expressões condicionais complexas utilizando o expr.

Lembremos também que podemos criar expressões diversas com o expr, cada uma com seu outlet próprio,
através do uso do símbolo de ponto e vírgula ( ; ) . Com isso, há a possibilidade de criarmos uma série de expressões
condicionais em um único objeto expr. Ou ainda, podemos mesclar expressões matemáticas à expressões condicionais
(Figura 3.10). Para tanto, é preciso bastante atenção do programador para que o objeto não fique tão complexo ao
ponto de comprometer a legibilidade do patch.

Daniel SoMar –FATEC Tatuí (www.fatectatui.edu.br) 12


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.10 – Expressões matemáticas e condicionais diversas em um único objeto expr.

3.4. moses, spigot e select: Controlando o Fluxo de Execução

3.4.1. Objeto moses

O objeto moses atua como um desvio de execução do fluxograma do patch do Pd. Para tanto, o moses efetua a
verificação de um valor de teste de desvio que é indicado em seu argumento ou entrado em seu inlet direito. Quando
inserimos um valor em seu hot inlet, haverá então a comparação entre tal número e o valor de desvio indicado
anteriormente. Caso o valor definido em seu hot inlet seja menor que o valor de teste, a informação do inlet esquerdo
será enviada para o outlet esquerdo. Do contrário, o valor do inlet esquerdo será desviada para o outlet direito (Figura
3.11).

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 13


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.11 – Exemplo do uso do objeto moses.

Para fixar o entendimento, vamos fazer mais um exemplo prático. Dados alguns valores numéricos entrados
pelo usuário, vamos fazer um sistema que soe um acorde de três notas (100 Hz, 200 Hz e 300 Hz respectivamente) caso
o usuário indique valores menores que 100, ou que soe um outro acorde de três notas (400 Hz, 800 Hz e 1200 Hz
respectivamente) caso o usuário indique valores maiores ou iguais a 100.

Analisando o problema, percebemos que o usuário efetuará o envio do número através de uma caixa numérica.
Tal valor será testado com o valor de desvio 100: caso o número passado pelo usuário seja menor que 100, o patch
executará o som de um acorde, do contrário o som de outro acorde é que será audível. Para construir a estrutura de teste
vamos utilizar o objeto moses.

O próximo passo é responder à pergunta: Como faremos para acionar o som de cada acorde? Bem, a saída do
moses também gera um bang em seus outlets. Podemos utilizar estes bangs para acionar as frequências das notas nos
osciladores. Desse modo, teremos 3 osciladores, cada um munido de duas frequências de entrada que revezarão o uso
do oscilador dependendo do teste do moses, que efetuará tal controle.

Neste sentido, uma possível solução do sistema está descrita na Figura 3.12.

Daniel SoMar –FATEC Tatuí (www.fatectatui.edu.br) 14


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.12 – Uso do objeto moses como seletor de acordes.

Observe Na Figura 3.12, observamos três osciladores sendo conectados simultaneamente a um objeto
:
multiplicador de onda (*~). Quando isto ocorre, antes de multiplicar os sinais que estão sendo gerados pelos
osciladores, o Pd efetua primeiramente a soma dos sinais que estão chegando no objeto *~ para depois
efetuar a normalização desejada na onda resultante.

3.4.2. Objeto select

Enquanto que o moses opera efetuando o desvio através da relação menor que (<) ou maior ou igual (>=), o
objeto select atua de forma bem semelhante através da verificação da relação de igualdade. No uso do objeto select, o
hot inlet é verificado com seus argumentos. Caso o valor entrado no inlet esquerdo seja igual a algum dos argumentos
do select, haverá a liberação de um bang no outlet relacionado ao argumento de valor idêntico ao hot inlet. Do
contrário, caso o inlet não seja igual a nenhum valor da lista de argumentos do select, o valor comparado será saído no
outlet mais à direita. O inlet direito do objeto redefine a lista de seus argumentos. Na Figura 3.13 temos um exemplo
prático de patch demonstrando o uso do objeto select.

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 15


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.12 – Uso do objeto select.

No estudo da lógica de programação, podemos comparar o comportamento do objeto select ao das estruturas
de desvio múltiplo, comumente chamadas de estruturas “Escolha-Caso” (switch-case na linguagem C). Já no estudo da
eletrônica, podemos comparar tal comportamento aos circuitos demultiplexadores, que recebem um sinal e replica-o em
uma de muitas saídas possíveis.

Como exemplo do uso do objeto select (também utilizado como sel), vamos considerar um patch que recebe
dois valores numéricos aleatórios entre 200 e 1000, e o usuário pode executar uma lista de opções sobre tais números,
sendo:

1 – Subtrai um número do outro;

2 – Adiciona um número ao outro;

3 – Multiplica um número pelo outro;

4 – Divide um número pelo outro.

Por fim, o resultado do cálculo desejado deve ser enviado como o valor de uma frequência sonora em um
oscilador para audição.

Analisando o problema, podemos utilizar dois objetos random para gerarem os dois valores aleatórios nos
limites estabelecidos. Em seguida, através do select, escolhemos a operação a ser efetuada sobre tais valores. Por fim,
com o resultado já definido, enviamos o valor como entrada de um oscilador para ouvirmos o seu som (Figura 3.13).

Daniel SoMar –FATEC Tatuí (www.fatectatui.edu.br) 16


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.13 – Possível solução do patch de seleção de operações matemáticas diversas.

3.4.3 Objeto spigot

Vamos tratar agora nosso último objeto deste capítulo, o spigot. Anteriormente, vimos que o Pd responde a
testes relacionais e lógicos seguindo uma codificação numérica onde o valor 1 representa valor lógico verdadeiro e o
zero representa valor lógico falso. O objeto spigot opera como uma porta que deixa passar a informação vinda no seu
hot inlet caso o seu inlet direito receba o valor lógico verdadeiro, do contrário o spigot fecha a passagem de qualquer
informação para o fluxo do patch abaixo dele (Figura 3.14). Agindo assim, geralmente o spigot é bastante utilizado
juntamente à objetos e expressões que operam testes lógicos (Figura 3.15).

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 17


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.14 – Esquema de utilização do objeto spigot.

Daniel SoMar –FATEC Tatuí (www.fatectatui.edu.br) 18


Introdução à Computação Musical com o Pure Data Capítulo 03 – Operadores Relacionais, Lógicos e Condicionais

Figura 3.15 – Controle de abertura do spigot efetuado através de teste relacional/lógico.

Chegamos ao fim do estudo das estruturas relacionais, lógicas e condicionais implementadas no Pd. Para a
fixação do conteúdo é fundamental a prática da programação de patches. Para qualquer dúvidas, lembremos do sistema
de help nativo da ferramenta.

Daniel SoMar – FATEC Tatuí (www.fatectatui.edu.br) 19

Você também pode gostar