Arte de onda sonora transforma áudio invisível — votos, batimentos cardíacos, risadas, riff favorito — em arte visual tangível. O processo é **Dados Áudio → Geometria Waveform → Design Visual**. Aqui estão os três tiers criativos.
| Ferramenta | Melhor Para | Personalização | Saída | Custo |
|---|---|---|---|---|
| SoundViz / Soundwave Art / WaveVisual | Presentes casamento/aniversário, tatuagens | Cores, texto, estilo (linear, circular, radial), fundo | PNG, JPG, PDF, SVG (pago) | Grátis (marca d'água) / US$ 15–40 |
| Canva "Audio Waveform" Elements | Graphics redes sociais, apresentações | Drag-and-drop, cor, animação (GIF/MP4) | PNG, MP4, GIF | Grátis / Pro |
| Adobe Express | Posts sociais rápidos | Waveform básico + templates texto | PNG, MP4 | Grátis |
Escreva código uma vez → Gere infinitas variações. Melhor para artistas, desenvolvedores, projetos batch.
# wave_art.py — Qualidade galeria import librosa, numpy as np, matplotlib.pyplot as plt, sys, cairo, math # 1. Carregue e Normalize y, sr = librosa.load(sys.argv[1], sr=None, mono=True) y = y / np.max(np.abs(y)) # -1 a 1 # 2. Downsample para largura alvo (ex.: 6000px para print 20" @ 300 DPI) target_w = 6000 step = max(1, len(y) // target_w) y_ds = y[::step] x = np.arange(len(y_ds)) # 3. Saída Vetorial Cairo (Resolução Infinita SVG/PDF) W, H = 6000, 2000 surface = cairo.SVGSurface(sys.argv[2], W, H) # ou PDFSurface / ImageSurface (PNG) ctx = cairo.Context(surface) ctx.set_source_rgb(0.04, 0.04, 0.04) # Fundo escuro ctx.paint() # Caminho waveform ctx.set_line_width(1.5) ctx.set_source_rgba(0, 1, 0.53, 0.9) # Neon teal mid = H / 2 scale = H * 0.4 ctx.move_to(0, mid) for i, val in enumerate(y_ds): ctx.line_to(i * W / len(y_ds), mid - val * scale) ctx.stroke() # Espelho abaixo (simetria) ctx.move_to(0, mid) for i, val in enumerate(y_ds): ctx.line_to(i * W / len(y_ds), mid + val * scale) ctx.stroke() surface.finish() print(f"SVG vetorial salvo: {sys.argv[2]}")
Execute: `pip install librosa numpy pycairo` → `python wave_art.py audio.wav art.svg` → **Zoom infinito, zero pixels.**
// sketch.js — p5.js Web Editor (editor.p5js.org) let song, fft, waveform, particles = []; function preload() { song = loadSound('audio.mp3'); } function setup() { createCanvas(800, 600); colorMode(HSB, 360, 100, 100, 100); fft = new p5.FFT(0.9, 1024); song.loop(); for (let i=0; i<200; i++) particles.push({x:random(width), y:random(height), h:random(360), s:80, b:100, size:random(2,6)}); } function draw() { background(0, 0, 5, 20); // Efeito trail waveform = fft.waveform(); noFill(); strokeWeight(2); beginShape(); for (let i=0; i { p.y += map(bass, 0, 255, 0, 5); if (p.y > height) p.y = 0; noStroke(); fill(p.h, p.s, p.b, 50); circle(p.x, p.y, p.size); }); } function mousePressed() { song.isPlaying() ? song.pause() : song.loop(); }
Tecnologia Eletrônica © [www.351231.com]