Real-time sonification/pt: Difference between revisions
David Sousa (talk | contribs) (Created page with "O vídeo a seguir explica em detalhe como ligar o micro:bit à sua DAW (Estação de Trabalho de Áudio Digital) ou sintetizador digital através de MIDI no Windows:") |
David Sousa (talk | contribs) (Created page with "<html> <center> <br> <iframe width="560" height="315" src="https://www.youtube.com/embed/Gfp9Ve_YUhg?si=jllM2VKnhaePNBS2&start=24" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> </center> </html>") |
||
| Line 215: | Line 215: | ||
O vídeo a seguir explica em detalhe como ligar o micro:bit à sua DAW (Estação de Trabalho de Áudio Digital) ou sintetizador digital através de MIDI no Windows: | O vídeo a seguir explica em detalhe como ligar o micro:bit à sua DAW (Estação de Trabalho de Áudio Digital) ou sintetizador digital através de MIDI no Windows: | ||
<html> | <html> | ||
<center> | <center> | ||
| Line 222: | Line 221: | ||
</center> | </center> | ||
</html> | </html> | ||
<div lang="en" dir="ltr" class="mw-content-ltr"> | <div lang="en" dir="ltr" class="mw-content-ltr"> | ||
Revision as of 13:07, 6 April 2026
A sonificação em tempo real é uma técnica fascinante que pode promover significativamente o envolvimento dos alunos nas áreas STEAM. A sonificação em tempo real significa que não conseguimos perceber o intervalo de tempo entre a aquisição dos dados e o som correspondente produzido pelo nosso dispositivo de sonificação, devido à rapidez do processo. Além disso, os métodos para criar representações sonoras dos dados são definidos simultaneamente com a recolha de dados (em «tempo real»).
Antes de começarmos, queremos salientar que a qualidade do som, que é subjetiva e, por isso, depende do gosto do utilizador, deve ser tal que, no mínimo, não o incomode. Pelo contrário, se fosse suficientemente apelativo para atrair a sua atenção, seria melhor. Por outro lado, ao tentar criar algo «agradável», corre-se o risco de gerar resultados sonoros que não cumprem o objetivo de descrever bem o comportamento dos dados de entrada. É, portanto, necessário encontrar um equilíbrio: o som deve ser suficientemente agradável e, ao mesmo tempo, exaustivamente informativo.
Dispositivos de sonificação em tempo real

Para criar um dispositivo de sonificação em tempo real, é útil recorrer a um microcontrolador. Estes são como «computadores pequenos e simples» com uma única unidade de processamento. No entanto, não são computadores. A sua arquitetura é muito mais simples e não conseguem executar um sistema operativo. Ainda assim, podem ser programados para executar um único programa de cada vez, o qual pode realizar várias tarefas, mas de forma sequencial, de acordo com a ordem das instruções listadas no programa. Existem vários tipos de microcontroladores, sendo o Arduino (arduino.cc) o mais popular.
Para começar, o projeto SoundScapes sugere a utilização do microcontrolador BBC micro:bit. Esta ferramenta é muito simples de utilizar, versátil e inclui vários sensores incorporados prontos a usar, eliminando a necessidade de construir um circuito elétrico específico para o seu funcionamento. O micro:bit pode ser programado online com o Makecode (utilizando o navegador Chrome para uma melhor compatibilidade) em Python, JavaScript ou blocos.
Sonificação com o micro:bit
Antes de se iniciar na sonificação com o micro:bit, deve primeiro familiarizar-se com o ambiente de programação Makecode. Na página principal, existem vários tutoriais, como o «Flashing Heart», o «Name Tag», etc., entre os quais pode escolher para começar. Se se registar na plataforma, os seus projetos serão guardados na sua conta e poderá aceder-lhes a partir de qualquer dispositivo, desde que inicie sessão. Caso contrário, eles são guardados como cookies; no entanto, poderá perdê-los se limpar a cache do navegador.
Noções básicas sobre som no micro:bit
No editor Makecode, existe uma biblioteca útil e apelativa dedicada à música, especialmente para jovens estudantes. Esta biblioteca musical oferece vários comandos/blocos que facilitam a geração de sons e a criação de melodias. Existem muitos blocos e combinações de blocos que pode utilizar para gerar diferentes tipos de sons. Aqui apresentamos-lhe os blocos mais básicos e avançamos para exemplos mais complexos. É um bom exercício brincar com os diferentes blocos e ouvir o que acontece para se familiarizar com eles.

Gerar um único tom
O código seguinte gera um único tom com uma frequência pré-definida (Dó central) e uma duração de 1 batida quando o botão A é pressionado, ou um som contínuo de Mi central quando o botão B é pressionado. É possível alterar a frequência dos tons clicando nos campos de entrada brancos com os valores «Dó central» e «Mi central». A partir das setas do menu suspenso, também é possível alterar a duração do tom «Dó central» e definir se o som é reproduzido sequencialmente com outros blocos de comando, em segundo plano ou em loop [Note 1].
Tocar uma melodia
Para tocar uma melodia, utilize o bloco seguinte e clique nele para criar a melodia:

O código de exemplo a seguir reproduz duas melodias com valores de bpm diferentes para os botões A e B e interrompe todos os sons quando A e B são pressionados simultaneamente. É possível alterar as melodias clicando nos campos de entrada brancos com as notas musicais coloridas. Tal como no exemplo anterior, também é possível alterar a duração da batida e definir se o som é reproduzido sequencialmente com outros blocos de comando, em segundo plano ou em loop [Note 1].
Controlar a alteração da frequência, a forma de onda, o volume e a duração
Também é possível gerar sons mais complexos manipulando a variação de frequência, a forma de onda, o volume e a duração com o seguinte bloco:

O exemplo seguinte reproduz dois sons complexos sequencialmente de forma contínua [Note 1]:
Sonificação de um valor booleano
Na ciência da computação, um tipo de dados booleano, ou lógico, é uma primitiva fundamental que pode assumir um de dois valores possíveis: verdadeiro ou falso, frequentemente representados por 1 ou 0. Para ilustrar este conceito, vamos sonificar o tipo de dados mais simples: o booleano. Exemplos comuns de sensores que produzem dados booleanos incluem sensores de presença, sensores de contacto, interruptores e botões.
O código a seguir implementa a sonificação de um sensor booleano utilizando o micro:Bit, com foco específico no botão A. Quando o botão é pressionado, ouvimos a nota C e, quando é solto, a nota muda para F. Este feedback auditivo fornece uma representação clara do estado do botão, melhorando a nossa compreensão dos dados booleanos num contexto prático [Note 1].
Explicação detalhada do código:
Os blocos são avaliados sequencialmente, de cima para baixo, dentro do bloco de loop forever, que repete a seguinte sequência de avaliação até que algo interrompa o programa:
- Define a variável X com o estado do botão (true ou false, dependendo se o botão está pressionado no momento da avaliação do bloco rosa botão A é pressionado)
- Se a variável/condição X for true (o botão foi pressionado), tom de toque (Hz) Dó central, caso contrário, tom de toque (Hz) Mi central
Sonificação de um intervalo de valores (utilizando sensores de entrada)
A maioria dos sensores fornece um intervalo de valores, e não apenas 0 ou 1; nesse caso, devemos primeiro determinar quais são os valores mínimo e máximo possíveis antes de definir o mapeamento para a sonificação. Esta entrada variável do sensor pode provir do sensor de luminosidade, do acelerómetro, do magnetómetro, da intensidade do som captado pelo microfone ou de outros sensores ligados ao micro:bit através dos pinos. Estes dados podem ser facilmente recolhidos pelo microcontrolador.
Alterar a frequência com ritmo fixo
Neste exemplo, mostramos como mapear o nível de luminosidade para um intervalo de frequências. O sensor de luz interno do micro:bit fornece um valor entre 0 (escuro) e 255 (muito claro). Chamamos a esta variável de valor de entrada x. Também definimos as variáveis x-Min e x-Max com os valores mínimo e máximo do nosso sensor. Com o objetivo de sonificar o nível de luz medido, iremos mapear o valor do nível de luz para uma altura entre 200 Hz (valor mínimo) e 2000 Hz (valor máximo), reproduzida a um ritmo fixo [Note 1].
Explicação detalhada do código:
Os blocos dentro do bloco on start são executados sequencialmente, antes de qualquer outra coisa no programa, quando o micro:bit é ligado.
- Defina a variável x-Min para o valor mais baixo possível medido para o nível de luminosidade, 0.
- Defina a variável x-Max para o valor mais alto possível medido para o nível de luminosidade, 255.
Os blocos dentro do bloco forever são avaliados sequencialmente num ciclo, de cima para baixo, após a sequência on start:
- Set the x variable to the measured light level
- Play a one 1 beat tone with a frequency resulting from mapping the x value (in the x-Min to x-Max range) to the chosen frequency range in the map block.
Change rhythm with fixed pitch
Another option is to maintain a fixed pitch while varying the rhythm based on the light level. We can achieve this by playing a short-duration note and introducing pauses that vary in length, ranging from 1000 ms (for dark conditions) to 20 ms (for very bright conditions). This approach allows for a dynamic auditory representation of the changing light levels [Note 1].
Explicação detalhada do código:
Os blocos dentro do bloco on start são executados sequencialmente, antes de qualquer outra coisa no programa, quando o micro:bit é ligado.
- Defina a variável x-Min para o valor mais baixo possível medido para o nível de luminosidade, 0.
- Defina a variável x-Max para o valor mais alto possível medido para o nível de luminosidade, 255.
Os blocos dentro do bloco forever são avaliados sequencialmente num ciclo, de cima para baixo, após a sequência on start:
- Define a variável x com o nível de luz medido
- Reproduz um tom D agudo durante 1 batida.
- Faz uma pausa cuja duração é calculada a partir da correspondência entre o valor de x (no intervalo entre x-Min e x-Max) e o intervalo de tempo selecionado no bloco map.
Lembrete: Pode substituir o bloco de entrada nível de luz por qualquer outro bloco de entrada do micro:bit (ou por quaisquer outros sensores ligados ao micro:bit através dos pinos) que forneçam um intervalo de valores. Certifique-se apenas de redefinir os valores x-Min e x-Max em conformidade, uma vez que o acelerómetro e a direção da bússola, por exemplo, funcionam num intervalo diferente.
Utilização de sensores de entrada externos
Para utilizar um sensor digital/analógico externo num micro-pino ou, por exemplo, através do protocolo I2C (todos estes blocos podem ser encontrados nas categorias avançadas), pode utilizar os mesmos programas, bastando substituir o bloco de entrada «nível de luz» pelo bloco correspondente, da seguinte forma:



Preste atenção ao número do pino ou ao endereço I²C!
Várias entradas mapeadas para um único som
Os sistemas de sonificação servem frequentemente para fornecer mais do que uma informação. Podemos mapear tantas variáveis quantos os parâmetros sonoros que conseguimos controlar, desde que o som não se torne confuso devido às múltiplas camadas sonoras reproduzidas simultaneamente. Se considerarmos que uma orquestra filarmónica pode ter mais de cem elementos, temos alguma margem para sobrepor vários sons. Ao contrário dos estímulos visuais, onde não podemos exceder um determinado número, geralmente inferior ao dos estímulos áudio. Por fim, tal como na orquestra, os sons têm de ser cuidadosamente organizados em conjunto, no caso de um grande número.
O seguinte transforma em som o nível de luz mapeado para o tom central, com uma pausa definida pela rumo da bússola mapeada para milésimos de segundo [Note 1]
A extensão de sonificação SoundScapes para micro:bit
Em todos os exemplos anteriores, os números foram mapeados para um intervalo contínuo de frequências, o que é ótimo! Mas será que soa bem? Para melhorar a experiência auditiva, pode mapear os números para uma escala musical. A extensão de sonificação SoundScapes para MakeCode micro:bit torna este tipo de mapeamento fácil e acessível.
A seguir, explicamos como instalar a extensão:

Mapear e tocar diretamente a partir de um sensor micro:bit
Para mapear e reproduzir dados diretamente a partir de um sensor do micro:bit, pode utilizar o bloco seguinte, que inclui um menu suspenso para selecionar o sensor. O intervalo de entrada é selecionado automaticamente de forma a corresponder aos valores mínimo e máximo que podem ser obtidos dos sensores do micro:bit.
Embora o trabalho árduo se passe nos bastidores, isso torna mais desafiante para si inovar na sonificação :)
Este exemplo é equivalente ao exemplo de sonificação em tempo real que utiliza a função de sonificação map para um único valor, conforme se segue.
Mapeie e reproduza um único valor na escala musical
A função map devolve um número inteiro ao mapear um valor num determinado intervalo [low, high] para uma escala musical especificada num número especificado de oitavas. Por exemplo, o exemplo seguinte mapeia o valor do nível de luz no intervalo [0,255] para o Dó central maior numa oitava e reproduz-o durante 500 ms indefinidamente:
Também é possível utilizar outros sensores (incluindo sensores externos ligados ao micro:bit através de pinos) e diferentes intervalos de entrada. Isto é útil para a sonificação em tempo real, quando se sonifica os dados ao mesmo tempo que se recolhem.
Por exemplo, o exemplo seguinte mapeia o valor do nível de luz no intervalo [0,255] para o Dó central em tom maior, numa oitava, e reproduz-o durante 500 ms indefinidamente:
Também é possível utilizar outros sensores (incluindo sensores externos ligados ao micro:bit através de pinos) e diferentes intervalos de entrada. Isto é útil para a sonificação em tempo real, quando se sonifica os dados ao mesmo tempo que se recolhem.
Mapear e reproduzir numa escala personalizada
Pode criar facilmente as suas próprias escalas musicais com matrizes e utilizá-las como entrada para as funções de mapeamento, de modo a mapear e reproduzir qualquer valor numérico na sua escala personalizada. A matriz de entrada deve conter as relações de frequência em relação à frequência fundamental.
Por exemplo, o código seguinte mapeia o valor do «nível de luz» no intervalo [0,255] para a nota C central com uma oitava acima e reproduz-a durante 500 ms:
onde «harmonic» é uma matriz de números que contém as relações de frequência da escala harmónica. Uma vez que cada tom da escala harmónica está exatamente a uma oitava de distância do tom anterior, alterar o número da oitava, neste caso específico, apenas irá ampliar o intervalo da série harmónica.
Sonificação via MIDI (O micro:bit como instrumento MIDI)
O som produzido pelo altifalante (buzzer) do micro:bit tem pouca potência e não reproduz frequências baixas. O micro:bit também é muito limitado na sua capacidade de gerar vários sons simultaneamente e sons com timbres mais complexos. No último exemplo, utilizámos um «truque» para sonificar valores de várias entradas. Utilizámos a pausa (duração do silêncio entre sons consecutivos) como saída de sonificação. Inteligente, mas o que realmente gostaríamos seria de vários sons a tocar simultaneamente e a expressar várias camadas de dados. Podemos obter melhor qualidade de som e tocar mais instrumentos ao mesmo tempo utilizando o protocolo MIDI.
O MIDI é um protocolo que facilita a comunicação em tempo real entre instrumentos musicais eletrónicos. MIDI significa Musical Instrument Digital Interface e foi desenvolvido no início dos anos 80 para armazenar, editar, processar e reproduzir sequências de eventos digitais associados a instrumentos eletrónicos de produção sonora, especialmente aqueles que utilizam a escala cromática de 88 notas de um teclado de piano. Podemos, de forma aproximada mas simples, entender o MIDI como o sucessor avançado dos «piano rolls», que, há mais de um século, eram papéis perfurados ou cilindros com pinos, nos quais as execuções musicais eram gravadas (em tempo real) ou anotadas (em tempo de passo). Esses rolos de papel eram então reproduzidos automaticamente por instrumentos mecânicos especialmente concebidos, os pianos mecânicos (pianolas) ou máquinas de música, utilizando-os como o seu «programa».
Configurar o MIDI
O vídeo a seguir explica em detalhe como ligar o micro:bit à sua DAW (Estação de Trabalho de Áudio Digital) ou sintetizador digital através de MIDI no Windows:
Step-by-step instructions (see the video):
- Install the MIDI Extension for Makecode.
- Create a very basic program using the MIDI extension to test your setup.
- Install Hairless MIDI, open it, and from serial port drop-down menu select the com port (USB port) to which the micro:bit is connected to.
- Install loopMIDI, open it, and click the + button at the bottom-left corner to create a new virtual port.
- Go back to the HairlessMIDI window and on the MIDI out drop-down menu select loopMIDI port
- You might need to unplug and plug in the micro:bit again for it to work.
- You are ready to play!
How it works: The micro:bit sends MIDI messages through serial communication. These messages are then received by Hairless MIDI, which forwards them to LoopMIDI. Acting as a virtual MIDI port, LoopMIDI makes the MIDI messages accessible to computer software/web apps (like DAWs or digital synthesizers) that receive these messages and generate the corresponding sounds, completing the connection.
There are plenty of free (and some open-source, cross-platform) DAW stations like LMMS that you can download and configure to play MIDI input. The easiest method is to play directly from the browser through a web app such as midi.city, the Online Sequencer and many others to discover online. In principle, web apps such as midi.city will readily detect your midi instrument (the micro:bit in this case) and you are ready to play after giving the browser permissions to access your device (which you will be asked to do).
MIDI is a powerful tool for sonification because it allows you to control a wide range of sound parameters, such as pitch, volume, and timbre. This setup allows for multiple Microbits to send MIDI data to a single synthesizer, enabling synchronized sonification of multiple data streams. It also allows a single micro:bit to send MIDI data over multiple MIDI chanels.
Note: On Linux install ttymidi instead of hairlesMIDI and loopMIDI.
Sensor data over MIDI
Previous examples using sensor data can be adapted to send data over MIDI with the Makecode MIDI extension, meaning that the sounds will play not on the micro:bit but through a properly configured computer software/web application. The following example maps the light level to MIDI notes and sends them through MIDI channel 1 [Note 1].
Detailed explanation of the code:
The blocks inside the on start block are evaluated sequentially before anything else in the program when the micro:bit is turned on.
- Show a fancy musical note icon on the LED screen just to make it nicer.
- Set the Instrument_1 variable to midi channel 1. Thus any changes to the variable Instrument_1 are actions on the MIDI channel 1.
- midi use raw serial is what will get the micro:bit to "talk" to the MIDI output device.
The blocks within the block forever are evaluated sequentially in a loop from top to bottom after the on start sequence:
- Set the Note variable to a MIDI note by mapping the light level range of possible values to the chosen MIDI range 40 to 85 (within 0 and 128) using the map block.
- Set the sound volume of Instrument_1 (on MIDI channel 1) to 100.
- Play MIDI note Note (measured light level mapped to MIDI) with Instrument_1 (on MIDI channel 1).
- Pause for 250 ms.
- Stop playing the MIDI note Note.
- Pause for 100 ms.
Using multiple MIDI channels
This example maps the light level to MIDI and uses multiple MIDI channels allowing one to choose to play the notes either with a button or by shaking the micro:bit [Note 1].
Detailed explanation of the code:
The logic behind this example is very similar to the previous one. However, an extra MIDI channel 10 (it could have been any other number between 1 and 16) is set on start as variable Instrument_2. Thus, any changes on this variable are actions on the MIDI channel 10. The mapping of the light level to MIDI is still set within the loop, but the Instrument_1 related blocks and pauses were moved to the input block on button B pressed. The input block on shake just repeats the same code for Instrument_2. Note, that when you play a note, irrespectively of the instrument chosen, a musical note appears and disappears from the LED screen.
Notes
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 Clique no botão «Simulador» na barra superior para interagir com um micro:bit virtual e testar o código. Pode editar o código clicando em «Editar» no canto superior direito. Cite error: Invalid
<ref>tag; name "code" defined multiple times with different content