Adding metadata stream update for long-form music shows

I run an all-music online station where half the programmers use Libre Time to upload individual tracks and half either broadcast live or upload 1 or 2-hour long mp3 archives. I’ve devised a system outside of Libre Time for updating title and artist for the long-form shows. I ask the show producer to get me a .csv that has artist / title / start-time-of-track (assuming show begins at 0:00:00 - h:mm:ss). Then I upload the .csv to a server and crontab it to run through a php script that loops through the csv contents, updating title and artist to Icecast and then sleeping the appropriate number of seconds between tracks.

What I would like to do is add another option to the calendar in Libre Time for when a time slot is clicked on. Under “Schedule Tracks” have “Schedule Metadata”. A form would come up allowing the user to upload a .csv and / or fill out a form with artist / title / start-time. Then when the show runs, a process would pick up the show’s metadata and update the server at the designated time stamps. Also, it would write this information into the playout history.

If it would make more sense (or be easier) to attach the metadata to the file object or to a playlist, then we could do it that way.

It’s a huge undertaking, no matter how it’s accomplished. Let me know what you think. I’ve programmed in php for over 15 years, so I can begin development of this feature. I’m eager to hear what the rest of you have to say about this. Thanks.

I do like the sound of this (it would be helpful in my station too), though I think it would be useful to hide the option to schedule metadata by default. The metadata should come from the files being played first. Maybe a + button or some such.

In terms of implementation, this would probably require a new DB table for metadata schedule (that way it is unrelated to the files being played out and can be flexible). This would then need to be presented to the pypo python application via an API endpoint and pushed to RabbitMQ (have a look at how the current schedule is pushed and pulled). The reason there is both is to facilitate real-time updates to the schedule while the show is playing. Most of the time pypo pulls the schedule from the API, but it gets pushed to RabbitMQ when the user makes a change during the show. Liquidsoap should have a mechanism to update the metadata independently from the media playing, so that could be used within pypo to update the metadata during playout.

The PHP side of things would be the updated UI, datatables and RabbitMQ integration and the new API endpoint.