From: Sascha B. <sbe...@go...> - 2012-04-18 11:39:06
|
Hi Guys, i'm from Germany, so excuse my english :-) Hope, you'll understand me..... I would like to change my Radio-Streaming-Server from Win to Linux. On Windows i developed my own Application, that manages the Playing of the stream and include the User requests. While looking for a solution for linux i found LS and im amazed of it's features. But, i've a little problem with the transition to the next song.. This is how my Software handle the transition: When i load a Track i analyze it forward to find the starting Point (eg. cueing at 0:02min). To avoid silence at the end of a track my software analyze the playing track backwards and remember the position, when the volume hit a treshold (-15db) for the first time (maybe 3:43min). At this time the next track starts playing and the last one is playing until it ends . So for a few seconds both tracks are played, and that's what i want to do with LS. In my case it doesn't matter if the next track is a louder than the last or both were silent (smart_crossfade). Maybe someone can help me. Greets from Germany Sascha |
From: Romain B. <to...@ra...> - 2012-04-20 04:32:32
|
Le 18 avril 2012 06:38, Sascha Bettels <sbe...@go...> a écrit : > Hi Guys, Hi Sascha! > i'm from Germany, so excuse my english :-) Hope, you'll understand me..... No problem! > I would like to change my Radio-Streaming-Server from Win to Linux. > On Windows i developed my own Application, that manages the Playing of the > stream and include the User requests. > > While looking for a solution for linux i found LS and im amazed of it's > features. > > But, i've a little problem with the transition to the next song.. > > This is how my Software handle the transition: > When i load a Track i analyze it forward to find the starting Point (eg. > cueing at 0:02min). > To avoid silence at the end of a track my software analyze the playing track > backwards and remember the position, when the volume hit a treshold (-15db) > for the first time (maybe 3:43min). > At this time the next track starts playing and the last one is playing until > it ends . > So for a few seconds both tracks are played, and that's what i want to do > with LS. > > In my case it doesn't matter if the next track is a louder than the last or > both were silent (smart_crossfade). So, liquidsoap cannot be used to compute cue points, you will need to cook up your own program for extracting this information. However, it can utilize this information. We're flexible, so I will describe all the elements involved and the usual ways to combine them. You might imagine others :-) In order to actually cut beginning and end of any track, there is one good candidate: * We have an operator called cue_cut which can cut a stream's tracks at cue points given through the track's metadata. In other to add those metadata, you have two usual ways: * Metadata can be added to any request using the "annotate" protocol: "annotate:liq_cue_in=\"#{start}\",liq_cue_out=\"#{stop}\":/path/to/file.mp3" * Metadata can be added/modified on-the-fly in any stream using the map_metadata operator. You can use it, for instance, to encode this information in your file's metadata: title="Foo Bar | cue_start=...,cue_stop=..." and parse that string in map_metadata (you could even using the json parser here). In the following, I describe some possibilities using the first way. * Use request-based source. For instance: s = cue_cut(request.queue(id="cue")) In this case, you'd be pushing request through the telnet/server interface of the form: cue.push "annotate:liq_cue_in=\"#{start}\",liq_cue_out=\"#{stop}\":/path/to/file.mp3" * Use request.dynamic. For instance: s = cue_cut(request.dynamic(callback)) In this case, callback is a liquidsoap function like this: def callback() = (... Call an external program using get_process_lines ..) "annotate:liq_cue_in=\"#{start}\",liq_cue_out=\"#{stop}\":/path/to/file.mp3" end Now, if you want to do it on any local file, you can define a new request protocol, named for instance "cue_points", which receives URIs of the form: cue_points:/path/to/file.mp3 Then you register a custom function to resolve the URIs, that calls a program of yours and do something like this: def breakpoint_resolve(file, timeout) = (... use get_process_lines to get: ...) ["annotate:liq_cue_in=\"#{start}\",liq_cue_out=\"#{stop}\":#{file}"] end In this case, you can use for instance a playlist of local files and its prefix parameter to forcefully add "cue_points:" to each file, thus forcing them to go through the cue_point resolution function: s = cue_cut(playlist(prefix="cue_points:", "/path/to/directory")) Hope this helps, do not hesitate to follow-up if you have more questions! Romain |
From: Sascha <sbe...@go...> - 2012-04-20 11:13:20
|
Hi Roman, first of all - thanks for fast answering my question. May the thing i would like to do is a feature in future releases of LS :-) because i think it's the best way to have less silence on the stream. Sascha |
From: Romain B. <to...@ra...> - 2012-04-27 07:44:01
|
Hi Sasha! 2012/4/20 Sascha <sbe...@go...>: > first of all - thanks for fast answering my question. No problem, I try to answer fast but times is running fast too..! > May the thing i would like to do is a feature in future releases of LS :-) > because i think it's the best way to have less silence on the stream. We'll keep that in mind. For now liquidsoap is not really designed to do sound processing, even less on the fly, but that's something to consider in the future indeed. Romain |
From: David B. <dav...@gm...> - 2012-04-27 13:20:57
|
On Thu, Apr 26, 2012 at 6:04 AM, Romain Beauxis <to...@ra...> wrote: > For now liquidsoap is not really designed to > do sound processing, even less on the fly, but that's something to > consider in the future indeed. To avoid confusion, I'd like to clarify this after checking with Romain. Liquidsoap is perfectly good at doing sound processing. It may not have the best toolkit in terms of filters and effects, but there's no reason it couldn't. What Romain meant is that it's not particularly good at doing offline analysis of files in isolation. There is an essential reason: we've focused on stream processing. But files are streams, so it may just be an issue of working on a few utilities on top of the existing stuff. David |
From: Christo G. <gr...@dd...> - 2014-01-03 08:40:14
|
Dear Sascha, could you share what tool/script you are using for the automatic analysis of the cue-points/mix-points of your tracks? Best regards Christo |