A dead simple Icecast transmission library for Go, with support for in-band metadata.
Find a file
2026-04-28 22:52:33 +09:30
internal/icy Add support for non-metadata streams 2026-04-28 21:54:29 +09:30
go.mod Change import path yet again 2026-04-28 22:42:32 +09:30
go.sum Switch to using ffmpeg for transcoding 2026-03-11 21:46:08 +10:30
icy.go Change import path in imports 2026-04-28 22:42:58 +09:30
LICENSE Initial commit 2026-03-11 00:04:51 +10:30
README.md Add install to readme 2026-04-28 22:52:33 +09:30

icy

A dead simple Icecast transmission library for Go, with support for in-band metadata. Icy will figure out the song's title from id3v2 tags in MP3s, or use the filename as a fallback. This behaviour can be changed with SetTitleHandler.

Icy supports whatever input files ffmpeg can transcode. Incidentally, ffmpeg has to be available on the system path for it to work. The original solution decoded MP3 files using a pure Go library, but it didn't work very well.

Icy uses ffmpeg to transcode all input files into a 44.1kHz/192kb double channel MPEG stream.

Installation

go get flipfloppy.io/icy

API

See the pkgsite documentation.

Examples

// shuffles all MP3 files in every subdirectory of mysongs
icy.Shuffle("./mysongs/*/*.mp3", icy.RadioDetails{})

// plays all M4A files in the current directory in order
icy.Play("*.m4a", icy.RadioDetails{})