cutter plugin by thomas <thomas@apestaart.org>

SYNOPSIS

This plugin emits signals when RMS level of audio signal crosses a
threshold for a given amount of time.  

As soon as the buffer's RMS is greater than the threshold value, the plugin fires a CUT_START signal.

When the buffer's RMS level drops below the threshold value for a consecutive run length longer than the given runlength, it sends a CUT_STOP signal.

When a pre-recording buffer is used, the plugin will delay throughput of data when it's in "silent" mode for a maximum length equal to the pre-recording buffer length.  As soon as the input level crosses the threshold level, this pre-recorded buffer is flushed to the src pad (so you can actually record the audio just before the threshold crossing) after sending the signal.

ARGUMENTS

GstCutter::threshold
	level (between 0 and 1) of threshold
GstCutter::threshold_dB
	level of threshold in dB (between -inf and 0)
GstCutter::runlength
	minimum length (in seconds) before plugin sends cut_stop signal
GstCutter::prelength
        length of pre-recording buffer
        
SIGNALS

	CUT_START
	gets sent when the level of the signal goes above threshold level
	CUT_STOP
	gets sent when the level of the signal has been below the
	threshold level for a number of consecutive iterations of which
	the cumulative length is more than the runlength

LIMITATIONS

	* RMS value is calculated over the whole data buffer, so
	  the time resolution is limited to the buffer length
	* RMS value is calculated over all of the channels combined
