Arte de onda sonora transforma as invisíveis ondas de pressão do áudio em formas visíveis, tangíveis e compartilháveis. Seja um voto de casamento impresso em canvas, um logo de podcast animado para social, ou uma instalação generativa reagindo a som ao vivo, o pipeline é: Áudio → Análise → Mapeamento Visual → Render. Aqui está o espectro completo do no-code ao código customizado.
| Ferramenta | Saída | Personalização | Melhor Para |
|---|---|---|---|
| Wavve.co | Vídeo (MP4) | Alta (templates, cores, partículas, legendas) | Audiograms de podcast, clips social |
| Headliner.app | Vídeo (MP4) | Alta (estilos de forma de onda, branding, legendas) | Promos de podcast, episódios semanais |
| Veed.io / Kapwing | Vídeo (MP4) | Média (formas de onda básicas, legendas) | Vídeos sociais rápidos |
| SoundViz / Soundwave Art (lojas Etsy) | Arquivos de impressão (SVG/PNG/PDF) | Média (estilo, cor, texto) | Impressões físicas, presentes |
| Descript | Vídeo + Transcrição | Alta (cenas de audiogram, legendas, branding) | Integração workflow podcast |
# pip install librosa numpy matplotlib moviepy scipy
import librosa
import numpy as np
import matplotlib.pyplot as plt
from moviepy.editor import ImageSequenceClip, AudioFileClip
from scipy.ndimage import gaussian_filter1d
def waveform_video(audio_path, out_path, fps=30, width=1920, height=1080, style='gradient_bars', color_map='viridis'):
y, sr = librosa.load(audio_path, sr=None, mono=True)
duration = len(y) / sr
samples_per_frame = sr // fps
n_frames = int(duration * fps)
# STFT para estilos baseados em frequência
D = librosa.amplitude_to_db(np.abs(librosa.stft(y, n_fft=2048, hop_length=samples_per_frame)), ref=np.max)
freqs = librosa.fft_frequencies(sr=sr, n_fft=2048)
frames_dir = 'frames'
import os, shutil
os.makedirs(frames_dir, exist_ok=True)
for i in range(n_frames):
fig, ax = plt.subplots(figsize=(width/100, height/100), dpi=100)
fig.patch.set_facecolor('#0a0a0a')
ax.set_facecolor('#0a0a0a')
plt.subplots_adjust(0,0,1,1)
ax.axis('off')
if style == 'gradient_bars':
# Bandas de frequência como barras coloridas
bands = np.array_split(D[:, i], 64)
heights = [np.mean(b) for b in bands]
heights = (np.array(heights) + 80) / 80 # normalize -80..0 dB → 0..1
colors = plt.cm.get_cmap(color_map)(np.linspace(0, 1, 64))
ax.bar(range(64), heights, width=0.9, color=colors, edgecolor='none')
ax.set_ylim(0, 1.3)
elif style == 'circular':
# Forma de onda radial
theta = np.linspace(0, 2*np.pi, len(y[i*samples_per_frame:(i+1)*samples_per_frame]))
r = 1 + 0.5 * y[i*samples_per_frame:(i+1)*samples_per_frame]
ax.plot(theta, r, color='#00ff88', lw=1)
ax.set_ylim(0, 2)
ax.set_xlim(0, 2*np.pi)
ax.set_projection('polar')
elif style == 'spectrogram_strip':
# Fatia de espectrograma scrollando
strip = D[:, max(0,i-50):i+1]
ax.imshow(strip, aspect='auto', origin='lower', cmap=color_map, extent=[0,1,0,sr/2], vmin=-80, vmax=0)
plt.savefig(f'{frames_dir}/f_{i:05d}.png', facecolor='#0a0a0a', dpi=100)
plt.close()
clip = ImageSequenceClip([f'{frames_dir}/f_{i:05d}.png' for i in range(n_frames)], fps=fps)
clip = clip.set_audio(AudioFileClip(audio_path))
clip.write_videofile(out_path, codec='libx264', audio_codec='aac', bitrate='20000k', fps=fps)
shutil.rmtree(frames_dir)
# waveform_video('song.wav', 'art.mp4', style='gradient_bars')
// GLSL Fragment Shader (estilo Shadertoy)
// Uniforms: iTime, iResolution, iChannel0 (textura áudio FFT)
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord / iResolution.xy;
// Sample audio texture (512 freq bins)
float freq = texture(iChannel0, vec2(uv.x, 0.5)).r;
// Map to visual
float ring = length(uv - 0.5) * 50.0;
float wave = sin(ring - iTime * 5.0) * freq * 0.1;
float alpha = smoothstep(0.48, 0.52, length(uv - 0.5) + wave);
fragColor = vec4(mix(vec3(0.03), vec3(0.0, 1.0, 0.5), alpha), alpha);
}
Roda 4K60 em GPU integrada. Use em: OBS ShaderFilter, TouchDesigner, Resolume, players custom.
| Objetivo | Toolchain | Tempo | Custo |
|---|---|---|---|
| Um clip de podcast para IG Reel | CapCut Desktop / Headliner | 5 min | Gratuito |
| Série semanal de audiogram no YouTube | DaVinci Fusion template / Premiere .mogrt | 1 hr setup, 10 min/ep | Gratuito / Sub |
| Visualizador custom de marca (code-based) | Remotion (React) / Python + MoviePy | 4–8 hrs dev | Tempo dev |
| VJ ao vivo / Instalação | TouchDesigner / Notch / Shaders | Curva de aprendizado | Gratuito (Non-com) |
| Arte física (impressão, corte, print) | Audacity → SVG → Illustrator → Laser/3D | 30 min design | Custo material |
| 10.000 vídeos automatizados | Remotion + GitHub Actions / AWS Lambda | Dev + infra | Custo compute |
Arte de onda sonora é visualização de dados com alma. O áudio carrega emoção; seu design visual amplifica. Comece com ferramentas no-code para aprender quais estilos ressoam. Depois gradue para código quando precisar de escala, unicidade ou interatividade. A forma de onda mais poderosa não é a mais complexa — é a que faz alguém sentir o som antes de dar play.
Tecnologia Eletrônica © [www.351231.com]