public class OnsetStrength extends Object implements SignalProcessor<AudioSpectrum,AudioBuffer>
AudioSpectrum
to compute an onset strength signal in the form of an AudioBuffer
produced on flush()
.log(power(k,t)+1)-log(power(k,t-1)+1)
for the band k
and the spectrum t
.
Differences for all bands in the valid frequency range are averaged.
Note, that the input is half-wave rectified, i.e. only increases in power are taken into account.
You can manipulate the incFactor
to require a certain amount of increase, i.e.
power(k,t)>incFactor*power(k,t-1)
is evaluated before a difference is computed.
You may specify lower and upper frequency bounds, to only take a certain frequency range into account. Often
a lower bound of 30Hz is a good idea.
Hopsize
is a required parameter, if you want the resulting buffers to use the correct AudioFormat
.
If not specified, hopsize will default to the number of samples of the first input spectrum.
This processor produces output only upon flush()
. The produced buffer will contain all
onset strength values. The values are normalized, i.e. divided by their max.Constructor and Description |
---|
OnsetStrength()
Creates an onset strength signal with no frequency boundaries a hopsize equal to
AudioBuffer.getNumberOfSamples()
of the first processed spectrum and an incFactor of 1f . |
OnsetStrength(int low,
int high,
int hopSize)
Creates an onset strength signal with the given lower and upper frequency bounds, hopsize and an incFactor
of
1f . |
OnsetStrength(Object id,
int low,
int high,
int hopSize,
float incFactor)
Creates an onset strength signal with the given lower and upper frequency bounds, hopsize and incFactor.
|
Modifier and Type | Method and Description |
---|---|
<O2> SignalProcessor<AudioBuffer,O2> |
connectTo(SignalProcessor<AudioBuffer,O2> floatO2SignalProcessor)
Connects this processor to another processor to forward processed data to.
|
protected double |
difference(float power,
float lastPower)
Computes the difference between a power and its predecessor.
|
<O2> SignalProcessor<AudioBuffer,O2> |
disconnectFrom(SignalProcessor<AudioBuffer,O2> floatO2SignalProcessor)
Disconnects a child processor.
|
boolean |
equals(Object o) |
void |
flush()
Asks to complete all pending operations.
|
SignalProcessor<AudioBuffer,?>[] |
getConnectedProcessors()
Lists all connected processors.
|
Object |
getId()
Arbitrary object to identify a processor.
|
AudioBuffer |
getOutput()
First calls
SignalProcessor.flush() , then returns the pending output, should there be any. |
int |
hashCode() |
void |
process(AudioSpectrum spectrum)
Asks this processor to work on the provided data and pipe the
output to the connected processors' own
SignalProcessor.process(Object) method.Implementing methods must not modify or hold on to the provided data. |
String |
toString() |
protected boolean |
useFrequency(float frequency)
Indicate, whether the power for the given frequency should be taken into account.
|
protected boolean |
usePower(float power,
float lastPower)
Indicate, whether we should proceed calculating the difference in some way,
for the given power and its predecessor (for a given frequency).
|
public OnsetStrength(Object id, int low, int high, int hopSize, float incFactor)
id
- SignalPump
idlow
- lower freq boundary in Hzhigh
- upper freq boundary in HzhopSize
- hop sizeincFactor
- incFactorpublic OnsetStrength(int low, int high, int hopSize)
1f
.low
- lower freq boundary in Hzhigh
- upper freq boundary in HzhopSize
- hop sizepublic OnsetStrength()
AudioBuffer.getNumberOfSamples()
of the first processed spectrum and an incFactor of 1f
.public void process(AudioSpectrum spectrum) throws IOException
SignalProcessor
SignalProcessor.process(Object)
method.Object.clone()
method.
It is the responsibility of implementing classes to call the SignalProcessor.process(Object)
method of any connected processors. To manage connected processors classes may want
to use a SignalProcessorSupport
instance.process
in interface SignalProcessor<AudioSpectrum,AudioBuffer>
spectrum
- data to processIOException
- if a processing error occursSignalProcessor.getConnectedProcessors()
protected double difference(float power, float lastPower)
process(AudioSpectrum)
.power
- powerlastPower
- previous power (same band)protected boolean usePower(float power, float lastPower)
process(AudioSpectrum)
.power
- powerlastPower
- previous power (same band)protected boolean useFrequency(float frequency)
process(AudioSpectrum)
.frequency
- frequency (of a given power)public void flush() throws IOException
SignalProcessor
SignalProcessor.flush()
method.flush
in interface SignalProcessor<AudioSpectrum,AudioBuffer>
IOException
- if a processing error occurspublic AudioBuffer getOutput() throws IOException
SignalProcessor
SignalProcessor.flush()
, then returns the pending output, should there be any.
Note that this call may only succeed once to preserve memory.getOutput
in interface SignalProcessor<AudioSpectrum,AudioBuffer>
null
is returnedIOException
- if a processing error occurspublic Object getId()
SignalProcessor
SignalProcessor.getOutput()
.getId
in interface SignalProcessor<AudioSpectrum,AudioBuffer>
SignalPump.pump()
public <O2> SignalProcessor<AudioBuffer,O2> connectTo(SignalProcessor<AudioBuffer,O2> floatO2SignalProcessor)
SignalProcessor
connectTo
in interface SignalProcessor<AudioSpectrum,AudioBuffer>
O2
- output type of the processor we want to connect tofloatO2SignalProcessor
- processorSignalProcessor.disconnectFrom(SignalProcessor)
,
SignalProcessor.getConnectedProcessors()
,
SignalPipeline
public <O2> SignalProcessor<AudioBuffer,O2> disconnectFrom(SignalProcessor<AudioBuffer,O2> floatO2SignalProcessor)
SignalProcessor
disconnectFrom
in interface SignalProcessor<AudioSpectrum,AudioBuffer>
O2
- output type of the processor we want to disconnect fromfloatO2SignalProcessor
- processorSignalProcessor.connectTo(SignalProcessor)
,
SignalProcessor.getConnectedProcessors()
public SignalProcessor<AudioBuffer,?>[] getConnectedProcessors()
SignalProcessor
getConnectedProcessors
in interface SignalProcessor<AudioSpectrum,AudioBuffer>
null
SignalProcessor.disconnectFrom(SignalProcessor)
,
SignalProcessor.connectTo(SignalProcessor)
Copyright © 2011–2020 tagtraum industries incorporated. All rights reserved.