Como os dados viram música

Tudo o que o projeto faz, de onde vem cada número e por que cada decisão foi tomada: a regra musical, o caminho até os acordes, os sotaques brasileiros, o motor de áudio, as medições, a física e as referências.

As tabelas e a calculadora desta página são geradas pelo mesmo código que toca nas experiências (core/music.js, core/sotaque.js, SensoryMapper.js). Se o código mudar, a página muda junto.

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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:

  1. 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.
  2. 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.
  3. A busca para a 8 graus do vulcão, para tempestades distantes não contarem.
  4. Cada pixel soma a sua área real: Δlon × 111,32 × cos(lat) × Δlat × 110,57 km².
  5. O diâmetro é o do círculo de mesma área: 2 × √(área ÷ π).
  6. 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.