Sobre o projeto
caddy-midi é um manipulador HTTP do Caddy que serve arquivos Standard MIDI como áudio sintetizado. Uma solicitação de um arquivo MIDI é renderizada através de um SoundFont e retornada como um fluxo WAV, permitindo que os navegadores o reproduzam usando uma tag de áudio simples, sem a necessidade de JavaScript. A síntese é alimentada pelo go-meltysynth em Go puro, criando um binário estático único sem cgo, sem libfluidsynth, sem ALSA e sem a necessidade de placa de som no servidor. O manipulador se registra para ser executado antes do servidor de arquivos, encaminhando solicitações não correspondentes ou inexistentes. As opções de configuração incluem a especificação do caminho do soundfont, taxa de amostragem, duração da cauda de áudio para decaimento de reverb, diretório de cache, tamanho máximo do arquivo e extensões de arquivo reivindicadas. A saída é servida como WAV porque o formato PCM permite o cálculo exato da duração antecipadamente, permitindo que o Caddy suporte nativamente solicitações de intervalo HTTP, busca (seeking) e retomada. Os resultados renderizados são armazenados em cache no disco e reutilizados usando um hash do conteúdo do arquivo MIDI. A concorrência é tratada com segurança usando singleflight e renomeações de arquivos atômicas. O uso de memória permanece baixo, pois a síntese processa o áudio em blocos de tamanho fixo. As limitações incluem a falta de saída de hardware MIDI ao vivo, suporte apenas para SoundFont v2 e amostras de 16 bits, e apenas um SoundFont por bloco de manipulador.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.