À propos du projet

caddy-midi est un gestionnaire HTTP Caddy qui sert des fichiers MIDI standard sous forme d'audio synthétisé. Une requête pour un fichier MIDI est rendue via un SoundFont et renvoyée sous forme de flux WAV, permettant aux navigateurs de le lire à l'aide d'une simple balise audio sans nécessiter de JavaScript. La synthèse est propulsée par go-meltysynth en pur Go, créant un binaire statique unique sans cgo, sans libfluidsynth, sans ALSA, et sans nécessiter de carte son sur le serveur. Le gestionnaire s'enregistre pour s'exécuter avant le serveur de fichiers, laissant passer les requêtes non correspondantes ou inexistantes. Les options de configuration incluent la spécification du chemin du soundfont, du taux d'échantillonnage, de la durée de la queue audio pour la décroissance de la réverbération, du répertoire de cache, de la taille maximale du fichier et des extensions de fichiers revendiquées. La sortie est servie en WAV car le format PCM permet un calcul exact de la durée à l'avance, permettant à Caddy de supporter nativement les requêtes de plage HTTP, le seeking et la reprise. Les résultats rendus sont mis en cache sur le disque et réutilisés à l'aide d'un hachage du contenu du fichier MIDI. La concurrence est gérée en toute sécurité via singleflight et des renommages de fichiers atomiques. L'utilisation de la mémoire reste faible car la synthèse traite l'audio par blocs de taille fixe. Les limitations incluent l'absence de sortie matérielle MIDI en direct, le support exclusif du SoundFont v2 et des échantillons 16 bits, ainsi qu'un seul SoundFont par bloc de gestionnaire.