1
0
Fork 0
livestream-tools/icedreammusic
Icedream ebf3d74b88
Use new settings syntax.
2023-03-21 04:18:53 +01:00
..
auto-restart-voicemeeter Add auto-restart-voicemeeter tool. 2023-03-17 03:40:27 +01:00
foobar2000 Update github.com/icedream/livestream-tools/icedreammusic/tuna digest to ad3e970 2023-03-03 03:42:14 +00:00
icecast Run icecast as non-root user. 2022-03-09 13:25:47 +01:00
images/icecast-2.4.4 Update alpine Docker tag to v3.17 2022-11-17 07:38:46 +00:00
liquidsoap Use new settings syntax. 2023-03-21 04:18:53 +01:00
metacollector Update module gorm.io/gorm to v1.24.6 2023-03-02 14:33:11 +00:00
ndi-feeder Split Dockerfile into multiple stages per package to be built. 2023-03-13 03:25:41 +01:00
prime4 Update go.mod and go.sum. 2023-03-16 14:42:30 +01:00
tuna Update module go to 1.19 2022-08-02 22:45:04 +00:00
tunadish Update github.com/icedream/livestream-tools/icedreammusic/tuna digest to ad3e970 2023-03-03 03:42:14 +00:00
tunaposter Update go.mod. 2023-03-16 14:41:58 +01:00
.dockerignore Rewrite code. 2022-03-13 06:53:21 +01:00
.gitignore Rewrite code. 2022-03-13 06:53:21 +01:00
README.md Add tunadish component to minimally implement Tuna API. 2022-03-09 10:03:16 +01:00
artistlogo.png Add artist logo to load from same directory. 2022-03-09 10:03:13 +01:00
compile-win.sh Add auto-restart-voicemeeter tool. 2023-03-17 03:40:27 +01:00
docker-compose.yml Rewrite code. 2022-03-13 06:53:21 +01:00
nowplaying_overlay.html Update dependency font-awesome to v6.3.0 2023-02-08 02:41:32 +00:00
tunaposter.Dockerfile Update golang Docker tag to v1.20 2023-02-02 02:43:32 +00:00

README.md

Icedream's Music Channel

This directory is specifically for https://twitch.tv/icedreammusic.

DJ streams

I have a specific configuration for DJ streams, where I not only stream to Twitch but also stream audio-only to some Icecast servers like those at Mixcloud.

The system is supposed to do the following things:

  • Capture the audio as directly as possible and turn it into a processable digital audio stream
  • Post-process the audio to be more "radio-ready," so multiband compression, limiting, etc. go here
  • Apply live metadata and write it down into a file for tracklisting on uploads later
  • Stream the end result with as little latency in between as possible via Icecast and via OBS

Below I'm documenting what each component exactly does and how it acts as part of the system.

Meta collector component

This component scans a folder of music files recursively, storing its metadata including title, artist and cover art information in a local database to be served via an HTTP API. This helps other components enrich metadata that is missing more exact information before feeding it to Tuna.

Ideally runs near to or on the storage device (in my case a VM on the NAS storing the music files).

Prime 4 meta component

This component talks via StageLinQ to the Denon Prime 4 I use for DJ sessions. Through this protocol the metadata for the currently playing metadata is received, then enriched with additional info from the Meta collector component and then sent off to Tuna.

foobar2000 meta component

This component sets up a virtual drive for foobar2000 to write out its currently playing track metadata to. Behind the scenes it is enriched with additional info from the Meta collector component and then sent off to the Tuna API.

For this to work, the Now Playing Simple plugin must be installed and configured.

In Preferences » Tools » Now Playing Simple configure the following formatting string:

{
  "isPlaying": $if(%isplaying%,true,false),
  "isPaused": $if(%ispaused%,true,false),
  "playbackTime": $if(%playback_time%,%playback_time_seconds%,null),
  "playbackTimeRemaining": $if(%playback_time_remaining%,%playback_time_remaining_seconds%,null),
  "length": $if(%length%,%length_seconds_fp%,null),
  "path": $if(%isplaying%,"$replace($replace(%path%,\,\\),",\")",null),
  "samplerate": $if(%isplaying%,%samplerate%,null),
  "lengthSamples": $if(%isplaying%,%length_samples%,null),
  "title": $if(%isplaying%,"$replace($replace(%title%,\,\\),",\")",null),
  "artist": $if(%artist%,"$replace($replace(%artist%,\,\\),",\")",null),
  "album": $if(%album%,"$replace($replace(%album%,\,\\),",\")",null),
  "publisher": $if($meta_test(publisher),"$meta(publisher)",$if($meta_test(grouping),"$meta(grouping)",null))
}

Then enable Save to file and insert Z:\nowplaying\nowplaying.json as the path.

NDI Feeder

Liquidsoap by itself has no way to listen for NDI output. This component bridges that gap by receiving the NDI source for the main mixdown audio and sending it off to Liquidsoap in a more compatible manner.

Tunaposter

This component takes the metadata stored by the Tuna API locally, adds missing metadata with the help of the Meta collector component and sends it off to the Liquidsoap component.

This needs to be running on the same machine that runs OBS or Tunadish.

Liquidsoap component

This component receives the main audio feed and metadata and merges it into the final Icecast output.

Tunadish

Reimplements the API of the Tuna OBS plugin as a standalone application.

This component is only used if OBS is not running on the computer that is the main audio source.