1. Visão geral
O Earth Jukebox é a resposta do time ao Desafio 14 do NASA Space
Apps Challenge 2026. Ele pega onze eventos reais da Terra e toca
cada um como música, gerada no navegador a partir das medições.
Por baixo toca uma música gravada, feita no Suno e escolhida por
quem ouve (baião, bossa nova, brega-funk, carimbó, maracatu, samba
ou xote), e a locução usa uma voz sintetizada pela ElevenLabs. A pergunta que o projeto responde é: como
fazer alguém perceber uma mudança na Terra sem depender só da
visão?
| Fenômeno |
Período |
Fonte dos dados |
O que entra na música |
Sotaque |
| Furacão Helene |
24 a 28 set. 2024 |
EONET (trajetória e vento) · GIBS (NOAA-20, Aqua, Terra)
|
Vento sustentado, em nós |
Baião |
| Hunga Tonga |
15 jan. 2022 |
GIBS (GOES-West) · USGS (hora da explosão) |
Diâmetro da pluma e sua expansão |
Maracatu |
| Luzes da noite |
2012 a 2023 |
Earth Information Center da NASA (SVS 5313, Black Marble,
satélite Suomi NPP)
|
Área acesa do mapa e sua variação por ano |
Samba |
Quatro ideias sustentam o projeto inteiro:
-
Uma regra para todos os fenômenos. A intensidade escolhe
a nota e o acorde; a velocidade de mudança escolhe o andamento.
Quem aprende em um fenômeno ouve os outros.
-
Música, não efeito sonoro. O dado escolhe um grau de uma
escala, nunca uma frequência solta. Relâmpagos, rupturas e a
explosão entram como notas do acorde, no tempo da música.
-
O sotaque muda quem toca, não a regra. Baião, samba, maracatu e bossa nova tocam o mesmo acorde e o mesmo andamento; cada
instrumento entra quando o dado cruza um limiar científico.
-
Medido, calculado e ilustrativo nunca se confundem. Cada
linha da interface carrega a palavra que diz de onde vem o
valor.
2. Usamos sinestesia sensorial?
Resposta curta: a ideia nasceu com esse nome nas notas do time,
mas o que o projeto usa, tecnicamente, são
correspondências entre os sentidos (em inglês,
crossmodal correspondences), não sinestesia.
A primeira versão do mapeamento sonoro trazia este comentário no
código: as escalas seguiam as notas do time "Ideias e Conceitos /
Sinestesia", com 35 kt perto de 220 Hz, 155 kt perto de 880 Hz,
vento mais rápido igual a ritmo mais rápido e timbre mais áspero
igual a mais perigo. Essas notas não estão no repositório; o que
está aqui é o que o código e o histórico de versões registram.
Por que a distinção importa
|
Sinestesia |
Correspondência entre sentidos |
| O que é |
Condição neurológica em que um estímulo dispara, de forma
automática, uma percepção em outro sentido (ver cor ao
ouvir uma nota)
|
Tendência a associar dimensões de sentidos diferentes
(agudo com alto, pequeno, claro; rápido com veloz)
|
| Quem tem |
Uma pequena parcela das pessoas |
Quase todo mundo |
| É igual entre pessoas? |
Não. Cada sinesteta tem as suas associações |
Em boa parte, sim. Por isso serve para comunicar |
| Serve para projetar som? |
Não: o mapa de uma pessoa não vale para outra |
Sim: o ouvinte entende sem treino |
A revisão de Spence (2011) reúne as correspondências que a
pesquisa encontrou de forma consistente. Deroy e Spence (2013)
argumentam que elas não são uma forma fraca de sinestesia, e sim
outro fenômeno. Um produto que precisa ser entendido em segundos
por qualquer pessoa só pode se apoiar no que é compartilhado.
As correspondências que o projeto usa
| Dado |
Vira |
Correspondência |
Onde está no código |
| Intensidade do fenômeno |
Altura da nota e do acorde |
Agudo = mais (magnitude e altura do som) |
jukebox() em core/music.js
|
| Velocidade de mudança |
Andamento e figura rítmica |
Rápido = veloz (tempo e movimento) |
jukebox(): bpm,
arpRate
|
| Intensidade ou água mais quente |
Brilho do timbre (corte do filtro) |
Mais energia = som mais claro |
brightnessHz |
| Longitude na trajetória |
Posição estéreo |
Espaço para espaço |
pan |
| Largura da pluma |
Tamanho do eco (reverberação) |
Maior = espaço mais amplo |
reverbWet |
| Topos mais frios da pluma |
Brilho agudo e trêmulo |
Frio = agudo e cristalino |
shimmerDb |
| Intensidade |
Pulsos de vibração mais longos, mais numerosos e mais
próximos
|
Forte = mais energia no tato |
intensityToVibration() |
| Intensidade |
Cor, do verde-mar ao rosa quente |
Calmo = frio, intenso = quente |
intensityColor em palette.js
|
| Batida da música |
Anel de luz saindo do fenômeno |
Som e imagem no mesmo instante |
BeatRings.js |
Além das correspondências, o projeto usa
redundância entre canais: o mesmo dado sai ao mesmo tempo
como som, imagem e vibração. Se um canal falta (a pessoa não vê a
tela, o celular está sem som), os outros carregam a informação.
Uma correspondência saiu do projeto:
timbre áspero = perigo. A primeira versão aplicava
distorção acima de 72% de intensidade. Ela foi removida em 12 de
novembro de 2026 porque, na prática, deixava a música cansativa
justamente no pico do evento. Hoje o perigo é ouvido pela altura,
pelo andamento e pelo tamanho da banda.
3. Como chegamos aos acordes
Os acordes não foram o ponto de partida. O projeto começou como
uma sonificação direta (dado vira frequência) e chegou à música em
sete passos, todos registrados no histórico de versões.
-
Frequência contínua 24 de setembro de 2026
A primeira versão mapeava o vento direto em hertz:
expMap(vento, 220, 880), de 35 a 155 kt, em curva
exponencial (passos iguais para o ouvido). O andamento ia de
52 a 168 BPM e a distorção crescia com o perigo. Funcionava
como alarme, mas soava como sirene: a frequência deslizava sem
nunca pousar em uma nota.
-
Cada fenômeno com sua lógica 9 de outubro de 2026
Ao entrar o iceberg e o vulcão, cada um ganhou um mapa
próprio: o iceberg ia de 41 a 196 Hz (maior = mais grave) e o
drone do Tonga descia de 110 para 36 Hz enquanto a
pluma crescia. O problema ficou claro: em um fenômeno agudo
queria dizer "mais", em outro queria dizer "menos". O ouvinte
tinha que reaprender a cada página.
-
A virada: grau de escala no lugar de hertz
9 de outubro de 2026
Nasce core/music.js. O dado deixa de escolher uma
frequência e passa a escolher um grau de uma escala: 15
graus de Lá menor natural, de Lá2 a Lá4. Sobre o grau, o
acorde é montado empilhando terças da própria escala. A mesma
função, jukebox(nível, velocidade), passa a
servir os três fenômenos, e nasce a regra única. Os acordes
mudam só na batida, então uma mudança no dado é ouvida como a
harmonia andando, e as notas saltam em vez de deslizar, como
em um instrumento.
-
A música na frente, a textura atrás
9 de outubro de 2026
Vento, chuva, mar e rugido foram empurrados para baixo da
música (o vento caiu de −9 dB para −20 dB no máximo, depois
para −33 dB) e um filtro passa-baixa em 7 kHz entrou na saída
para tirar o chiado.
-
Sotaque brasileiro 12 de novembro de 2026
Entram baião, bossa nova e maracatu
(core/sotaque.js). O baião troca o modo para Lá
dórico (o menor com a sexta elevada, típico do Nordeste), a
bossa passa a usar acordes com sétima, e a intensidade ganha
um segundo papel: decidir quem toca. Cada instrumento entra em
um limiar do dado.
-
Os eventos entram no acorde
12 de novembro de 2026
O relâmpago era um estalo de ruído; virou um sino em uma nota
do acorde atual, encaixado na próxima colcheia. A ruptura do
iceberg era um estalo; virou uma cascata de notas do acorde
caindo, como um glissando de harpa. A explosão virou um golpe
de tambor grave e o acorde inteiro se abrindo. As melodias
deixaram de ser contornos mecânicos e viraram frases de cada
gênero, com pausas. A distorção foi zerada e um compressor
suave entrou para a música estar presente desde o primeiro
compasso.
-
Quadros do EIC 15 de novembro de 2026
As três primeiras experiências usavam a EONET e a GIBS, e só
o Tonga media pixels. A quarta, Luzes da noite, é feita dos
quadros do Earth Information Center (SVS 5313): a área acesa
de cada ano é medida pixel a pixel, uma linha varre o mapa e
cada lugar aceso vira um sino do acorde. Entra o samba
(core/sotaque.js), com os instrumentos entrando
por limiar de área acesa.
-
Mais recursos do desafio 15 de novembro de 2026
O iceberg A23a saiu para o site ficar mais leve, e entraram quatro experiências feitas de quadros do EIC: relâmpagos da ISS (SVS 5011), CO₂ do DYAMOND (SVS 5196), altura das florestas do GEDI (SVS 4950) e aerossóis do GEOS (SVS 5669). Todas rodam no mesmo motor, a página eic.html, e a Home passou a separar as experiências pela fonte dos dados.
-
Todos os recursos de dados do desafio 15 de novembro de 2026
Os outros quatro recursos que o desafio recomenda como dados entraram: correntes e temperatura do mar (SVS 3912), qualidade do ar (SVS 5533), Perpetual Ocean 2 (SVS 5425) e o rio atmosférico em 3D (SVS 4960). Agora 9 dos 11 recursos da lista são usados como dados; o Caldwell 73 inspirou a varredura e a galeria do EIC é a origem de todos.
Por que Lá menor?
O código registra a escolha, mas não o motivo: a constante
JUKEBOX diz apenas "a mesma tonalidade, Lá menor, de
Lá2 a Lá4". O que dá para afirmar com base no histórico:
-
O Lá veio das âncoras da primeira versão. 220 Hz e 880
Hz, os extremos do primeiro mapa, são as notas Lá3 e Lá5. Ao
quantizar, a fundamental continuou sendo Lá, duas oitavas abaixo
(Lá2 = 110 Hz).
-
Duas oitavas, 15 graus. Uma escala de 7 notas em duas
oitavas dá 15 graus contando a nota final. É resolução
suficiente para ouvir cada categoria Saffir-Simpson em uma nota
diferente (ver a tabela abaixo) sem sair do registro em que as
notas são fáceis de distinguir.
-
O modo menor é uma decisão estética, coerente com eventos
graves (um furacão, um iceberg sumindo, uma explosão). Não há
teste com usuários por trás dela. Isso é interpretação nossa a
partir do código, não um registro do time.
-
Menor natural e dórico diferem em uma nota só (Fá e Fá
sustenido), então o sotaque muda a cor sem mudar a regra.
4. A regra, passo a passo
Cada fenômeno entrega à regra dois números entre 0 e 1: o
nível (quão intenso está agora) e a velocidade (quão
rápido está mudando).
| Fenômeno |
Nível (0 a 1) |
Velocidade (0 a 1) |
| Helene |
norm(vento, 35, 155) em nós |
norm(vento, 15, 140), o próprio vento |
| Tonga |
norm(diâmetro, 0, 750) em km |
norm(expansão, 0, 6) em km/min, zero antes da
explosão
|
| Luzes da noite |
norm(área acesa, 0,315%, 0,447%), a menor e a
maior dos 12 quadros anuais
|
norm(|variação anual|, 0, 0,037 p.p.), a
maior variação entre dois anos
|
norm(v, min, max) é
(v − min) / (max − min), preso entre 0 e 1.
Do nível à nota
grau = round(nível × 14) // 15 graus, de 0 a 14
midi = 45 + 12 × ⌊grau / 7⌋ + escala[grau mod 7] // 45 = Lá2
hertz = 440 × 2^((midi − 69) / 12) // temperamento igual, Lá4 = 440 Hz
menor natural (eólio) = [0, 2, 3, 5, 7, 8, 10] // semitons acima da fundamental
dórico (baião) = [0, 2, 3, 5, 7, 9, 10] // sexta elevada: Fá vira Fá#
Da nota ao acorde
O acorde é montado sobre o grau, pulando uma nota da escala a cada
passo (terças empilhadas): graus g,
g + 2, g + 4 formam a tríade;
g + 6 acrescenta a sétima. Como as notas vêm sempre
da escala, o resultado é o campo harmônico do tom: a qualidade do
acorde (maior, menor, diminuto) não é escolhida, ela aparece
sozinha.
acorde(g) = [ nota(g), nota(g + 2), nota(g + 4) ] // tríade (universal, baião, maracatu)
acorde(g) = [ nota(g), nota(g + 2), nota(g + 4), nota(g + 6) ] // tétrade (bossa nova)
Os 15 graus
Tabela gerada pelo código. As quatro últimas colunas mostram o valor
do dado que cai em cada grau.
| Grau |
Nota |
Hz |
MIDI |
Tríade em Lá menor |
No dórico |
Com sétima |
Vento |
Pluma |
Luzes |
Os nomes seguem o solfejo brasileiro com o número da oitava
científica (Dó4 é o dó central). Cada grau do furacão cobre cerca
de 8,6 kt.
Da velocidade ao andamento
BPM = 60 + velocidade × 90 // de 60 a 150 batidas por minuto
figura = semínimas se velocidade < 0,33
colcheias se velocidade < 0,66
semicolcheias caso contrário
O andamento muda em rampa de 0,4 s, sem saltos. A figura rítmica
vale para o arpejo (sotaque universal) ou para a melodia (sotaque
brasileiro). No furacão, isso dá semínimas até cerca de 56 kt,
colcheias até cerca de 97 kt e semicolcheias acima disso.
Quando o acorde muda
O dado pode pedir outro acorde a qualquer momento, mas a troca só
soa na próxima batida. O acorde pedido fica guardado e o
laço da batida compara com o que está soando. Assim a harmonia
nunca corta um compasso no meio. O controlador envia parâmetros ao
áudio no máximo a cada 60 ms (cerca de 16 vezes por segundo): o
ouvido percebe como contínuo e o relógio de áudio não é inundado
de rampas.
5. Calculadora ao vivo
Mexa no dado e veja o que a regra devolve. Os valores saem das
mesmas funções que as experiências chamam.
6. Os fenômenos
A música é a mesma regra em todos. O que muda por fenômeno é a
textura por baixo da música e os
eventos pontuais por cima. Tudo abaixo vem de
src/models/SensoryMapper.js.
Furacão Helene
A linha do tempo de quatro dias toca em 48 segundos. Vozes:
StormVoice e ThunderVoice.
| Entrada |
Saída |
Faixa |
Origem |
| Vento, 35 a 155 kt |
Nota e acorde |
Lá2 a Lá4 |
medido |
| Vento, 15 a 140 kt |
Andamento |
60 a 150 BPM |
medido |
| Vento ao quadrado |
Volume do vento (ruído rosa em filtro passa-banda) |
−56 a −33 dB |
medido |
| Vento |
Brilho (filtro passa-baixa) |
500 a 2.400 Hz, exponencial |
medido |
| Vento |
Desafinação do núcleo (3 dentes de serra) |
4 a 16 cents |
medido |
| Vento acima de 35% da faixa |
Chuva (ruído rosa em 1.600 Hz) |
−60 a −46 dB |
medido |
| Longitude na trajetória |
Posição estéreo |
esquerda a direita |
medido |
| Vento, 34 a 140 kt |
Relâmpagos por minuto (sino e tambor no acorde) |
2 a 40 |
ilustrativo |
Câmera no olho: dentro do olho do furacão o ar é quase
parado. O vento cai 16 dB, a chuva some, o brilho cai para 45% e a
reverberação dobra (insideEye()). O pulso da música
continua.
Relâmpago: um sino em FM (harmonicidade 3,01) toca uma nota
sorteada do acorde, duas oitavas acima, e um tambor grave toca a
fundamental. O golpe é agendado na próxima colcheia do transporte
e a banda responde no máximo uma vez a cada 1,6 s. Os relâmpagos
são desenhados a partir do vento: não há dados de descargas
carregados.
Olho visível: só aparece em força de furacão e fica nítido
entre 64 e 105 kt (hurricaneToVisual()).
Hunga Tonga
Quatro horas de imagens tocam em 70 segundos. Vozes:
EruptionVoice e ThunderVoice.
| Entrada |
Saída |
Faixa |
Origem |
| Diâmetro da pluma, 0 a 750 km |
Nota e acorde |
Lá2 a Lá4 |
medido |
| Expansão da borda, 0 a 6 km/min |
Andamento |
60 a 150 BPM |
calculado |
| Expansão |
Rugido (ruído marrom em passa-banda) |
−58 a −34 dB · 110 a 520 Hz |
calculado |
| Diâmetro |
Drone (uma oitava abaixo) e sub (duas abaixo) |
−30 a −17 dB |
medido |
| Diâmetro |
Reverberação: o espaço abre com a pluma |
20% a 60% |
medido |
| Núcleo frio (fração de pixels vermelhos), 0 a 0,4 |
Brilho gélido em 1.760 Hz |
−62 a −20 dB |
medido |
| Hora da explosão (USGS) |
Tambor grave e acorde cheio |
uma vez |
medido |
| Expansão |
Relâmpagos por minuto |
0 a 45 |
ilustrativo |
Explosão: um golpe de tambor em 55 Hz (Lá1) que cai duas
oitavas e meia em meio segundo, e sobre ele o acorde atual aberto
do grave para o agudo: fundamental uma oitava abaixo, fundamental,
quinta, oitava e terça na oitava de cima. Soa quando a linha do
tempo cruza 04:14:45 UTC.
Luzes da noite
Os 12 quadros anuais (2012 a 2023) ocupam os primeiros 72% da
linha do tempo e o mapa de mudança o resto; tudo toca em 80
segundos. Vozes: NightLightsVoice. Uma linha varre o
mapa em 14 segundos, e a cada 120 ms a coluna sob ela (3,75° de
longitude) é lida e pode tocar um sino.
| Entrada |
Saída |
Faixa |
Origem |
| Área acesa do mapa, 0,315% a 0,447% |
Nota e acorde |
Lá2 a Lá4 |
medido |
| Variação anual da área acesa, 0 a 0,037 p.p. |
Andamento |
60 a 150 BPM |
calculado |
| Área acesa |
Cintilação, três oitavas acima da nota |
−62 a −30 dB |
medido |
| Área acesa |
Drone na nota atual |
−36 a −22 dB |
medido |
| Pixels acesos na coluna sob a linha |
Sino numa nota do acorde: a latitude média dos pixels
escolhe a nota (mais ao norte, mais agudo) e a longitude
da coluna escolhe o lado do som
|
chance proporcional à coluna |
medido |
| Pixels roxos no mapa de mudança (mais luz) |
Sino agudo e cristalino, duas oitavas acima |
chance proporcional à coluna |
medido |
| Pixels laranja no mapa de mudança (menos luz) |
Nota grave e suave que se apaga |
chance proporcional à coluna |
medido |
Os quadros do EIC são imagens de visualização, com brilho e cores
ajustados para serem vistos, não radiância calibrada. Por isso as
medidas valem para comparar um ano com outro dentro do mesmo
conjunto, não como valores físicos. Um pixel conta como aceso
quando a luminância passa de 60 em 255; no mapa de mudança, roxo
é mais luz em 2023 do que em 2012 e laranja é menos luz. Nos 12
quadros, a área acesa vai de 0,315% a 0,447% (+42%), com um único
recuo, em 2020.
7. Sotaques brasileiros
Um sotaque é o conjunto de instrumentos que toca a regra. O
acorde, o andamento e a lógica são os mesmos do sotaque universal
(três sintetizadores: pad, arpejo e baixo). O sotaque brasileiro
acrescenta uma camada de informação:
cada instrumento entra quando o nível cruza um limiar. De
olhos fechados, dá para saber em que faixa o fenômeno está
contando quem está tocando.
As grades abaixo têm 16 semicolcheias (dois compassos de 2/4). A
intensidade de cada célula é a força da nota, de 0 a 1; cada golpe
ainda recebe uma variação aleatória de ±12% para soar tocado por
gente. Os instrumentos não são gravados: tambores, ferros e foles
são osciladores e ruído. A única música gravada é a faixa do Suno
que toca por baixo, escolhida por quem ouve.
Baião · Furacão Helene
Por quê: o vento toca a sanfona, um instrumento que só
soa com ar em movimento. Cada categoria da escala Saffir-Simpson
traz um instrumento do trio de forró.
.
| Instrumento |
Entra em |
Nível |
Dado |
Nota e acorde nesse ponto |
Frase da sanfona (passos da escala acima da fundamental
do acorde; ponto = pausa):
A zabumba faz o 3+3+2 do baião ("tum, tum, tá"). A frase se
apoia na quinta e na sexta elevada do dórico, desce para casa e
responde. O Helene chegou a 120 kt (categoria 4), então a caixa,
que só entra na categoria 5, nunca toca nesta história: a
ausência também é informação, e o encerramento diz isso.
Maracatu de baque virado · Hunga Tonga
Por quê: as alfaias são os tambores mais graves da música
brasileira. Antes da explosão só o gonguê marca o tempo; a pluma
traz o baque inteiro.
.
| Instrumento |
Entra em |
Nível |
Dado |
Nota e acorde nesse ponto |
Frase (metais, ou uma voz grave antes de eles entrarem):
O gonguê toca notas do acorde, então até quem marca o tempo está
na harmonia. As duas alfaias ficam na fundamental: a grave leva
os acentos, a outra fica uma oitava acima.
Samba · Luzes da noite
Por quê: o samba é a música das cidades, e as luzes da
noite são as cidades vistas do espaço. O surdo marca o pulso
desde 2012; cada limiar de área acesa traz mais um instrumento
da roda.
.
| Instrumento |
Entra em |
Nível |
Dado |
Nota e acorde nesse ponto |
Frase (cavaquinho, ou uma voz antes de ele entrar):
O surdo marca o segundo tempo do compasso, o coração do samba.
O cavaquinho toca os acordes e a frase, então quando ele entra a
roda ganha melodia.
Como cada instrumento é sintetizado
| Família |
Instrumentos |
Receita (Tone.js) |
| Pele grave |
zabumba, alfaia, surdo |
MembraneSynth: senoide com queda rápida de
afinação (2 oitavas em 30 a 50 ms), afinada na fundamental
do acorde dobrada para 55 a 104 Hz, para soar em caixas
pequenas
|
| Ferro |
triângulo, agogô, gonguê, aro |
FMSynth como sino pequeno: dois parciais,
índice de modulação 2,5, harmonicidade de 1,41 a 3,4
|
| Ruído curto |
bacalhau, caixa, ganzá, agbê, pandeiro, tamborim |
NoiseSynth (ruído rosa ou branco) em filtro
passa-banda de 1.500 a 4.200 Hz, 40 a 90 ms
|
| Palheta |
sanfona, fole |
Dois dentes de serra levemente desafinados por nota (16
cents): é isso que faz um acordeão soar como acordeão
|
| Corda dedilhada |
violão, baixo, cavaquinho |
Onda triangular (violão) ou senoide (baixo), ataque de 6
ms e decaimento de 1,3 s, sem sustentação
|
| Voz que canta |
flauta, metais, voz grave |
Synth monofônico com vibrato de 5 Hz e
deslize curto entre notas (30 a 60 ms)
|
| Cama |
pad (todos os estilos) |
Três triângulos desafinados segurando o acorde uma oitava
abaixo, filtro em 1.100 Hz
|
A percussão é suave de propósito: ataques mais lentos e bandas
mais graves que as de um kit real, para o ritmo ser sentido como
pulso sob a canção e não como uma fileira de cliques. Os padrões
são
inspirados nos gêneros; não são transcrições de
gravações.
Sotaque universal
Três sintetizadores, sempre os três
(HarmonyLayer.js): um pad segura o acorde uma oitava
abaixo; um arpejo em FM sobe pelas notas do acorde em duas oitavas
e volta ao início; um baixo de membrana toca a fundamental, duas
oitavas abaixo, em toda batida. Trocar de sotaque no meio da
música (tecla B) faz a banda antiga parar e a nova entrar no mesmo
acorde e no mesmo andamento.
8. Motor de áudio
Todo o som é síntese em tempo real com Tone.js sobre a Web Audio
API. Não há arquivos de áudio no projeto.
Cadeia de sinal
voz do fenômeno ─┬─ música (pad, melodia, percussão) ─┐
└─ texturas (vento, mar, rugido) ├─► reverberação ─► panorama ─► saída da voz
voz de evento (sino, harpa, explosão) ───────────────┘
│
▼
entrada do barramento ─► compressor (−26 dB, 3:1) ─► ganho +5 dB ─► passa-baixa 7 kHz ─► limitador −1,5 dB ─► alto-falante
│
└─► analisadores: forma de onda (1.024 amostras) e espectro (64 faixas)
-
Compressor: segura a banda junta e levanta as aberturas
quietas, para a música estar presente desde o primeiro compasso,
não só no pico.
-
Passa-baixa em 7 kHz: corta o topo, onde as texturas de
ruído viram chiado.
- Limitador: impede a saída de saturar.
-
Percussão seca: a melodia e os acordes passam pela
reverberação; a percussão vai quase direta (22% de sala), para
ficar firme.
-
Analisadores: alimentam o osciloscópio da interface e o
volume RMS que faz a cena 3D reagir ao que está tocando de fato.
Tempo e sincronia
-
Tudo é agendado no transporte do Tone.js, com precisão de
amostra. A grade de percussão roda em semicolcheias; a melodia,
na figura que a velocidade escolheu.
-
As atualizações visuais ligadas à batida usam um temporizador
calculado a partir do relógio de áudio, porque o agendador
visual do Tone.js descarta eventos quando um quadro atrasa.
-
A chance de uma gota de degelo é ajustada pelo andamento (
gotas por minuto ÷ (BPM × 4)), para a taxa real não depender da velocidade da música.
Liberar o áudio
O navegador só libera som depois de um gesto, então toda
experiência começa com um toque. No iPhone, a Web Audio obedece à
chave de silencioso; a página se declara como reprodução de mídia
(navigator.audioSession.type = 'playback' no iOS 17
ou mais novo, e um <audio> em laço com um
segundo de silêncio gerado em memória nas versões anteriores) para
soar como um vídeo soaria. O áudio também é retomado quando a aba
volta a ficar visível.
9. Tato e visão
Vibração
No celular, usa a Vibration API. Os padrões são listas de
milissegundos (liga, desliga, liga...).
| Evento |
Padrão |
| Intensidade contínua |
1 a 5 pulsos; cada um de 35 a 190 ms; pausas de 230 a 45
ms. Mais forte = mais pulsos, mais longos e mais juntos
|
| Relâmpago |
Um pulso de 30 a 90 ms |
| Intensificação rápida |
90 · 60 · 90 · 60 · 220 ms |
| Explosão do Tonga |
600 · 60 · 380 · 60 · 220 · 80 · 120 ms: um tremor longo
que se apaga
|
| Lugar que escurece (Luzes da noite) |
Um pulso de 90 ms, de vez em quando, sob o mapa de mudança |
No computador não há motor de vibração e o navegador não pode
mover o ponteiro real. Durante um tremor, o cursor do sistema é
escondido e um cursor desenhado treme no lugar, de 2 a 8 pixels,
seguindo o mesmo padrão (CursorShake.js). Com a
preferência de movimento reduzido ligada, isso não acontece.
Visão
-
Cor: uma rampa única de intensidade, do verde-mar ao rosa
da buganvília, usada na trajetória, no perfil da linha do tempo
e nas categorias. A pluma vai do violeta de cinza ao laranja e rosa
incandescentes.
-
Anéis no compasso: a cada batida um anel de luz sai do
fenômeno e se espalha pela superfície, como a pele de um tambor
respondendo ao golpe. O primeiro tempo do compasso é o mais
brilhante.
-
Varredura das luzes: uma linha atravessa o mapa plano em
14 segundos, com um rastro suave; cada nota deixa um anel no
lugar do mapa que a gerou (dourado para lugares acesos, roxo
para mais luz, laranja para menos). É um canvas 2D, sem
Three.js, e a página pesa uma fração das outras.
-
Sol real: dia e noite no globo vêm do ponto subsolar
calculado para a data (aproximação de baixa precisão do
NOAA/USNO, erro de uma fração de grau).
-
Osciloscópio: a forma de onda e o espectro do som gerado
ficam visíveis no painel.
-
Desempenho: a cena mede o tempo médio de quadro a cada
segundo e ajusta a própria resolução (até 60% da original),
desligando o brilho difuso se ainda assim faltar fôlego. A
máquina de referência usa gráficos integrados.
10. Dados e medições
EONET: trajetórias e magnitudes
https://eonet.gsfc.nasa.gov/api/v3/events/{id}. Cada
evento traz uma lista de pontos com data, coordenadas e magnitude.
Helene: EONET_11304 (vento em nós).
-
Entre dois registros, vento e posição são interpolados
linearmente.
-
Deriva e rumo são calculados entre registros pela
distância de círculo máximo (fórmula de haversine, raio de 6.371
km).
-
Chegada à costa: o toque do Helene na Flórida (27 set.
2024, 03:10 UTC, categoria 4) não está na trajetória da EONET;
vem do National Hurricane Center e a interface nomeia a fonte
quando fala disso.
Earth Information Center: luzes da noite
Visualização “Change in Night Lights between 2012 and 2023”
(SVS 5313), feita
com o Black Marble: médias anuais de luz noturna do instrumento
VIIRS, no satélite Suomi NPP. A coleção original tem quadros EXR
de 7680 × 2160 pixels, de 20 a 35 MB cada, pesados demais para um
navegador; por isso foi cortado do vídeo do EIC um quadro estável
por ano, recortado em um mapa-múndi de 1600 × 900 (um quadro por
ano e o mapa de mudança, 13 imagens em
public/img/eic/nightlights). A medição, feita no
navegador, está em src/models/core/nightlights.js.
GIBS: imagens de satélite
Serviço WMS em
gibs.earthdata.nasa.gov/wms/epsg4326/best/wms.cgi
(WMS 1.3.0, EPSG:4326).
| Camada |
Uso |
VIIRS_NOAA20_CorrectedReflectance_TrueColor
|
Quadro diário do Helene (fonte principal, 2.048 px) |
MODIS_Aqua_… e
MODIS_Terra_CorrectedReflectance_TrueColor
|
Preenchem as faixas sem dado do NOAA-20 |
BlueMarble_ShadedRelief_Bathymetry |
Globo de dia |
VIIRS_Black_Marble |
Globo à noite (luzes das cidades) |
GOES-West_ABI_Band13_Clean_Infrared |
Infravermelho do Tonga, onde a pluma é medida (25 px por
grau)
|
GOES-West_ABI_GeoColor |
Imagem em cor do Tonga (50 px por grau) |
-
Composição do Helene: um quadro por dia; pixels pretos
(sem dado) do NOAA-20 são preenchidos com Aqua e depois Terra. A
troca entre dois dias acontece em uma janela curta, para a
tempestade nunca aparecer dobrada.
-
Antimeridiano: a região do Tonga cruza a linha de 180°, o
que um pedido WMS não faz. Ela é buscada em duas metades e
costurada no navegador.
-
Varredura do GOES: os quadros de disco inteiro levam o
nome da hora de início, mas varrem de norte a sul. Tonga (20° S)
é fotografado cerca de 6 minutos depois, então o quadro "04:10"
já mostra a explosão das 04:14. O modelo soma esse atraso.
A pluma medida no navegador
É a única medição que o projeto faz por conta própria
(core/plume.js), em 15 quadros infravermelhos entre
03:50 e 08:00 UTC:
-
Na renderização realçada da Banda 13, superfícies quentes são
cinza e topos frios de nuvem são coloridos. Um pixel é
frio quando a cor é saturada:
max(R,G,B) − min(R,G,B) > 50.
-
A partir de uma janela de 25 × 25 pixels em volta do vulcão
(20,55° S, 175,39° O), um
preenchimento por inundação segue os pixels frios
vizinhos. Assim só entra a região conectada à erupção.
-
A busca para a 8 graus do vulcão, para tempestades distantes não
contarem.
-
Cada pixel soma a sua área real:
Δlon × 111,32 × cos(lat) × Δlat × 110,57 km².
-
O diâmetro é o do círculo de mesma área:
2 × √(área ÷ π).
-
O índice do núcleo frio é a fração de pixels em tons
vermelhos (
R > 170 e G < 110):
os topos mais frios, a coluna que ultrapassa a pluma.
Entre dois quadros a pluma cresce linearmente, mas nunca antes da
hora da explosão. A velocidade da borda é metade da variação do
diâmetro por minuto.
Ao vivo, cópia local e modo sem rede
Toda chamada devolve o mesmo formato, com a origem:
ao vivo (a API respondeu) ou
cópia local (resposta real
anterior, guardada em public/data/ e
public/img/gibs/). Se a API falhar ou passar do tempo
limite (15 s para dados, 25 s para imagens), a cópia entra sozinha
e a interface mostra isso. Com ?local no endereço, a
página nem tenta a rede: uma demonstração com internet ruim começa
na hora. A escolha vale para a aba inteira e acompanha os links
entre as páginas.
Os quadros do EIC (Luzes da noite) são sempre cópias locais, em
public/img/eic/nightlights/: os quadros do SVS têm de
20 a 35 MB cada, e a experiência não depende da rede.
11. Física ao vivo
Calculada a cada instante a partir das medições, em
core/physics.js. Cada constante nomeia a fonte.
| Grandeza |
Fórmula |
Constantes e fonte |
| Pressão dinâmica do vento |
q = ½ · ρ · v² |
ρ = 1,15 kg/m³ (ar quente e úmido ao nível do mar); 1 kt =
0,514444 m/s
|
| Empurrão em kg por m² |
q ÷ g |
g = 9,80665 m/s² |
| Poder destrutivo relativo |
(v ÷ 64 kt)³ |
A potência dissipada cresce com v³ (Emanuel, 2005); 1× é
um furacão recém-formado
|
| Intensificação rápida |
vento sobe ≥ 30 kt em 24 h |
Critério do National Hurricane Center |
| Categoria |
limiares em 34, 64, 83, 96, 113 e 137 kt |
Escala Saffir-Simpson de vento |
| Comparações de área |
área ÷ 1.521 km² e ÷ 248.219 km²
|
Cidade e estado de São Paulo (IBGE) |
| Área da pluma |
π · (d ÷ 2)² |
Diâmetro medido nos quadros |
| Onda de pressão (Lamb) |
distância ÷ 315 m/s |
Velocidade medida no mundo todo (Matoza et al., 2022);
partida às 04:14:45 UTC (USGS)
|
| Altura máxima da pluma |
57 km (valor fixo, citado) |
Proud et al., 2022 |
Onda de Lamb até São Paulo (calculado agora, por esta
página): — km pelo círculo
máximo, — horas de
viagem, chegada às —.
Uma volta completa na Terra leva
— horas. A chegada é um
modelo: o projeto não tem
registro da onda em barômetros brasileiros.
12. Arquitetura
Site estático, sem backend. Vite com uma página HTML por
experiência, Three.js para a cena, Tone.js para o áudio, GSAP para
a linha do tempo e D3 para as rampas de cor.
| Biblioteca |
Versão |
Para quê |
| Vite |
8.3 |
Servidor de desenvolvimento e empacotamento em várias
páginas
|
| Three.js |
0.186 |
Globo, nuvens, pluma, pós-processamento |
| Tone.js |
15.1 |
Síntese, transporte, efeitos e analisadores |
| GSAP |
3.15 |
Reprodução da linha do tempo e tremor de elementos |
| D3 |
7.9 |
Interpolação de cores |
Modelo, visão, controlador
src/
├─ config/example.js os eventos reais: ids, datas, regiões, cópias locais
├─ models/ sem DOM e sem áudio: só dados e funções puras
│ ├─ core/music.js escalas, graus, acordes e a regra jukebox()
│ ├─ core/sotaque.js os quatro estilos: limiares, grades rítmicas, frases
│ ├─ core/physics.js física derivada, com as fontes
│ ├─ core/plume.js medição da pluma nos pixels do infravermelho
│ ├─ core/nightlights.js medição da área acesa e do mapa de mudança
│ ├─ core/frames.js medição por tipo de pixel dos quadros do EIC (eic.html)
│ ├─ core/solar.js ponto subsolar e elevação do Sol
│ ├─ SensoryMapper.js dado → parâmetros de som, imagem e vibração
│ ├─ HurricaneModel.js · EruptionModel.js · NightLightsModel.js · FramesModel.js
│ └─ services/ eonet.js · gibs.js · http.js (ao vivo ou cópia)
├─ controllers/ ligam modelo, visão e áudio; anunciam os marcos
│ └─ ExperienceController.js fluxo comum; um controlador por fenômeno o estende
├─ views/
│ ├─ pages/ a interface de cada página
│ ├─ scenes/ cenas (globo, tempestade, erupção em 3D; mapas e globos em 2D dos quadros do EIC)
│ ├─ sensory/ AudioEngine, vibração, cursor
│ │ └─ voices/ HarmonyLayer, BrazilLayer e as vozes de cada fenômeno
│ └─ shared/ mapeamento, osciloscópio, paleta, formatação
├─ main/ ponto de entrada de cada página
└─ styles/ tokens, base, componentes e páginas
O fluxo de um instante: o modelo emite o estado, o controlador
passa pelo SensoryMapper e entrega o resultado à
visão (painéis e cena) e à voz (áudio). Os modelos e o mapeador
são funções puras, sem DOM nem áudio, e é por isso que esta página
consegue importá-los para gerar as tabelas.
Rodar
npm install
npm run dev # desenvolvimento
npm run build # gera dist/
npm run preview # serve o resultado do build
Acrescente ?local a qualquer endereço para usar só as
cópias locais dos dados.
13. Acessibilidade
Acessibilidade é o argumento central do desafio, não um extra. O
som é o canal principal de informação; a tela, a vibração e a voz
repetem o que ele diz.
-
Teste de olhos fechados: na página do Helene, dois botões
tocam a categoria 1 (70 kt) e a categoria 5 (145 kt) por 3,5 s.
Se dá para distinguir sem olhar, o som está codificando o dado.
Durante o teste, a interface troca "medido" por "teste manual".
-
Narração em voz: os marcos (mudança de categoria,
instrumento que entra, ruptura, explosão) são falados em
português pela Web Speech API. Com a narração ligada, os avisos
deixam de ser região viva, para um leitor de tela não repetir
tudo.
-
Avisos em fila: cada aviso espera a sua vez e fica tempo
suficiente para ser lido; um não atropela o outro.
-
Movimento reduzido: a preferência do sistema desliga
animações de interface e o tremor do cursor. A barra de
acessibilidade também tem um botão “Reduzir movimento” que
faz o mesmo à mão: ele marca
data-reduced-motion no
<html>, e as transições e animações caem
para praticamente zero e a rolagem deixa de ser suave.
-
Barra de acessibilidade: fica no topo de todas as
páginas, agrupada e rotulada como “Acessibilidade”. Reúne o
tamanho da fonte, o movimento reduzido e a narração em voz. Os
botões de liga/desliga usam
aria-pressed e
mostram o estado por escrito (ON/OFF), sem depender só de cor.
-
Tamanho da fonte: cinco níveis (90%, 100%, 110%, 120% e
130%), com botões de diminuir e aumentar. O valor atual é
anunciado por um campo
aria-live="polite".
-
Volume: as quatro experiências têm, no dock ao lado do
botão de som, um menu de volume com “−”, um controle deslizante
e “+” (passos de 5%). O menu abre e fecha com
Esc, devolve o foco ao botão, e o nível é anunciado
como “Volume: 75%”. O padrão, 70%, é a mistura como foi
composta; acima disso há até 6 dB de ganho extra (o limitador
evita distorção). O volume também vale para a narração em voz,
é lembrado entre as páginas e não afeta os gráficos de onda,
que mostram o nível do dado.
-
Libras: o plugin VLibras do governo federal é carregado
em todas as páginas e traduz o texto para a Língua Brasileira
de Sinais. Ele vem do domínio
vlibras.gov.br, então
precisa de rede.
-
Idioma: o site abre em inglês, e há um seletor com rótulo
para trocar de idioma. O escolhido é lembrado e o atributo
lang do <html> acompanha a
troca, para o leitor de tela usar a pronúncia certa.
-
Foco e alvos de toque: todo controle interativo tem
contorno de foco amarelo de 3 px, visível sobre o fundo
escuro, e altura mínima de 44 px. O texto corrido usa
entrelinha de 1,5. A página de documentação tem um link
“Pular para o conteúdo”.
-
Painel de atalhos: o botão “Atalhos” abre uma lista das
teclas (
aria-expanded e aria-controls
indicam o estado). O foco vai para dentro do painel ao abrir,
Esc fecha e devolve o foco ao botão, e um clique
fora também fecha.
-
Tipografia: Atkinson Hyperlegible, desenhada para baixa
visão: nenhuma letra se confunde com outra.
-
Preferências lembradas: sotaque, narração, idioma,
tamanho da fonte e movimento reduzido ficam no
localStorage e valem para as quatro experiências.
Se o navegador bloquear o armazenamento, a preferência vale só
até sair da página e nada quebra.
Teclado
| Tecla |
Ação |
| Espaço |
Tocar ou pausar |
| ← → |
Voltar ou avançar (1 hora no furacão, 10 minutos no vulcão, 1 ano nas luzes da noite, um passo nos quadros do EIC)
|
| 1 2 3 |
Câmeras |
| 1 2 3 4 |
Regiões do mapa nas luzes da noite |
| B |
Alternar sotaque brasileiro e universal |
| N |
Narração em voz |
| M |
Ligar ou desligar o som |
| H |
Esconder ou mostrar os painéis |
| Esc |
Fechar o painel de detalhes |
14. Limites e honestidade
O único compromisso fixado pelo time é usar só dados reais da NASA
e rotular todo o resto.
| Rótulo |
Significa |
Exemplos |
| medido |
Veio de uma fonte oficial ou foi medido em imagem real
|
Vento, posição, área, diâmetro da pluma, núcleo frio
|
| calculado |
Derivado de medições por uma fórmula declarada |
Deriva, expansão da borda, pressão, massa |
| modelo |
Previsão a partir de um valor medido em outro lugar |
Posição e chegada da onda de Lamb |
| ilustrativo |
Desenhado para dar vida à cena, sem dado por trás |
Relâmpagos (taxa estimada pelo vento ou pela expansão)
|
O que não existe
-
Testes com usuários, depoimentos ou medição de acessibilidade
com pessoas cegas ou com baixa visão. As escolhas se apoiam na
literatura, não em estudo próprio.
-
Meta formal de acessibilidade (um nível WCAG, por exemplo).
-
Dados de relâmpagos e registro da onda de pressão em barômetros
brasileiros.
-
Temperatura da água medida: a latitude é usada como aproximação.
-
Radiância calibrada nas luzes da noite: os quadros do EIC são
imagens de visualização, então a medida só compara um ano com
outro.
-
A coleção completa de quadros do EIC no navegador: as luzes da
noite usam 12 quadros cortados do vídeo oficial, um por ano.
-
As notas do time sobre sinestesia, que deram origem ao primeiro
mapeamento, não estão no repositório.
Decisões estéticas, não científicas
A tonalidade, o modo menor, os timbres, as frases melódicas e a
escolha de qual gênero vai com qual fenômeno são decisões de
composição. A ciência está em o que controla a música (a
medição) e em quando os instrumentos entram (os
limiares). Os instrumentos são sintetizados, mas isso não é um
compromisso: as músicas de fundo do Suno que tocam por baixo já
são gravadas.
15. Referências
Citadas na interface e no código
-
Dubus, G.; Bresin, R. (2013). A systematic review of mapping
strategies for the sonification of physical quantities.
PLoS ONE, 8(12), e82491.
Base para usar a altura da nota como dimensão principal e o
espaço sonoro para grandezas de posição.
-
Spence, C. (2011). Crossmodal correspondences: a tutorial
review.
Attention, Perception, & Psychophysics, 73(4),
971–995.
Base para agudo = mais e rápido = veloz.
-
Emanuel, K. (2005). Increasing destructiveness of tropical
cyclones over the past 30 years. Nature, 436, 686–688.
Potência dissipada proporcional a v³.
-
Matoza, R. S. et al. (2022). Atmospheric waves and global
seismoacoustic observations of the January 2022 Hunga eruption,
Tonga. Science, 377(6601), 95–100.
Velocidade da onda de Lamb.
-
Proud, S. R.; Prata, A. T.; Schmauß, S. (2022). The January 2022
eruption of Hunga Tonga-Hunga Ha'apai volcano reached the
mesosphere. Science, 378(6619), 554–557.
Altura de 57 km.
-
National Hurricane Center (NOAA). Glossário:
rapid intensification; escala Saffir-Simpson de vento;
relatório do ciclone tropical Helene (2024).
Critério de 30 kt em 24 h, limiares das categorias e chegada
à costa.
-
USGS. Hora de início da explosão principal do Hunga Tonga-Hunga
Ha'apai, 15 jan. 2022, 04:14:45 UTC.
-
IBGE. Áreas territoriais do município e do estado de São Paulo.
Dados
-
NASA EONET, Earth Observatory Natural Event Tracker, API v3.
eonet.gsfc.nasa.gov
-
NASA GIBS, Global Imagery Browse Services, WMS.
gibs.earthdata.nasa.gov
-
NASA Scientific Visualization Studio. Change in Night Lights
between 2012 and 2023, EIC Version (SVS 5313), 14 jun. 2024.
Visualizador: Kel Elkins (USRA). Cientistas: Zhuosen Wang,
Miguel Román, Ranjay Shrestha, Srija Chakraborty e Virginia
Kalb. svs.gsfc.nasa.gov/5313
-
NOAA GOES-West (ABI), NOAA-20 (VIIRS), NASA Aqua e Terra
(MODIS), Blue Marble e Black Marble. Via GIBS.
Tecnologia
- Tone.js · Three.js · GSAP · D3 · Vite.
-
W3C: Web Audio API, Vibration API, Web Speech API, Audio Session
API.
-
Atkinson Hyperlegible (Braille Institute), Bricolage Grotesque,
Space Grotesk e Inter, via Google Fonts.
Leitura complementar
Não são citadas na interface. Estão aqui para quem quiser
aprofundar os temas desta página.
-
Deroy, O.; Spence, C. (2013). Why we are not all synesthetes
(not even weakly so). Psychonomic Bulletin & Review,
20, 643–664.
A diferença entre sinestesia e correspondências.
-
Hermann, T.; Hunt, A.; Neuhoff, J. G. (orgs.) (2011).
The Sonification Handbook. Berlim: Logos.
Referência geral de sonificação.
-
Walker, B. N. (2002). Magnitude estimation of conceptual data
dimensions for use in sonification.
Journal of Experimental Psychology: Applied, 8(4),
211–221.
Polaridade dos mapeamentos: quando agudo é "mais".
-
Eitan, Z.; Granot, R. Y. (2006). How music moves: musical
parameters and listeners' images of motion.
Music Perception, 23(3), 221–247.
Altura, andamento e a sensação de movimento.