PredominantPitchMelodia
extends BaseAlgorithm
in package
PredominantPitchMelodia
Inputs:
[vector_real] signal - the input signal
Outputs:
[vector_real] pitch - the estimated pitch values [Hz] [vector_real] pitchConfidence - confidence with which the pitch was detected
Parameters:
binResolution: real ∈ (0,inf) (default = 10) salience function bin resolution [cents]
filterIterations: integer ∈ [1,inf) (default = 3) number of iterations for the octave errors / pitch outlier filtering process
frameSize: integer ∈ (0,inf) (default = 2048) the frame size for computing pitch salience
guessUnvoiced: bool ∈ {false,true} (default = false) estimate pitch for non-voiced segments by using non-salient contours when no salient ones are present in a frame
harmonicWeight: real ∈ (0,1) (default = 0.800000011921) harmonic weighting parameter (weight decay ratio between two consequent harmonics, =1 for no decay)
hopSize: integer ∈ (0,inf) (default = 128) the hop size with which the pitch salience function was computed
magnitudeCompression: real ∈ (0,1] (default = 1) magnitude compression parameter for the salience function (=0 for maximum compression, =1 for no compression)
magnitudeThreshold: integer ∈ [0,inf) (default = 40) spectral peak magnitude threshold (maximum allowed difference from the highest peak in dBs)
maxFrequency: real ∈ [0,inf) (default = 20000) the maximum allowed frequency for salience function peaks (ignore contours with peaks above) [Hz]
minDuration: integer ∈ (0,inf) (default = 100) the minimum allowed contour duration [ms]
minFrequency: real ∈ [0,inf) (default = 80) the minimum allowed frequency for salience function peaks (ignore contours with peaks below) [Hz]
numberHarmonics: integer ∈ [1,inf) (default = 20) number of considered harmonics
peakDistributionThreshold: real ∈ [0,2] (default = 0.899999976158) allowed deviation below the peak salience mean over all frames (fraction of the standard deviation)
peakFrameThreshold: real ∈ [0,1] (default = 0.899999976158) per-frame salience threshold factor (fraction of the highest peak salience in a frame)
pitchContinuity: real ∈ [0,inf) (default = 27.5625) pitch continuity cue (maximum allowed pitch change during 1 ms time period) [cents]
referenceFrequency: real ∈ (0,inf) (default = 55) the reference frequency for Hertz to cent conversion [Hz], corresponding to the 0th cent bin
sampleRate: real ∈ (0,inf) (default = 44100) the sampling rate of the audio signal [Hz]
timeContinuity: integer ∈ (0,inf) (default = 100) time continuity cue (the maximum allowed gap duration for a pitch contour) [ms]
voiceVibrato: bool ∈ {true,false} (default = false) detect voice vibrato
voicingTolerance: real ∈ [-1.0,1.4] (default = 0.20000000298) allowed deviation below the average contour mean salience of all contours (fraction of the standard deviation)
Description:
This algorithm estimates the fundamental frequency of the predominant melody from polyphonic music signals using the MELODIA algorithm. It is specifically suited for music with a predominent melodic element, for example the singing voice melody in an accompanied singing recording. The approach [1] is based on the creation and characterization of pitch contours, time continuous sequences of pitch candidates grouped using auditory streaming cues. It furthermore determines for each frame, if the predominant melody is present or not. To this end, PitchSalienceFunction, PitchSalienceFunctionPeaks, PitchContours, and PitchContoursMelody algorithms are employed. It is strongly advised to use the default parameter values which are optimized according to [1] (where further details are provided) except for minFrequency, maxFrequency, and voicingTolerance, which will depend on your application.
The output is a vector of estimated melody pitch values and a vector of confidence values. The first value corresponds to the beginning of the input signal (time 0).
It is recommended to apply EqualLoudness on the input signal (see [1]) as a pre-processing stage before running this algorithm.
Note that "pitchConfidence" can be negative in the case of "guessUnvoiced"=True: the absolute values represent the confidence, negative values correspond to segments for which non-salient contours where selected, zero values correspond to non-voiced segments.
References: [1] J. Salamon and E. Gómez, "Melody extraction from polyphonic music signals using pitch contour characteristics," IEEE Transactions on Audio, Speech, and Language Processing, vol. 20, no. 6, pp. 1759–1770, 2012.
[2] http://mtg.upf.edu/technologies/melodia
[3] http://www.justinsalamon.com/melody-extraction
Category: Spectral Mode: standard
Table of Contents
Properties
- $algorithmName : string
- $category : string
- $essentia : EssentiaFFI
- $mode : string
- $parameters : array<string|int, mixed>
- $algorithmHandle : CData|null
- $configured : bool
Methods
- __construct() : mixed
- __destruct() : mixed
- compute() : array<string|int, mixed>
- getAlgorithmName() : string
- getCategory() : string
- getMode() : string
- getParameters() : array<string|int, mixed>
- setParameter() : self
- configure() : void
- isValidParameter() : bool
- validateInput() : void
- cleanupAlgorithm() : void
- configureAlgorithmParameters() : void
- estimateOutputSize() : int
- executeAlgorithm() : array<string|int, mixed>
- executeGenericAlgorithm() : array<string|int, mixed>
- executeSpecificAlgorithm() : array<string|int, mixed>
- getAlgorithmCreateFunction() : string
- getValidParameters() : array<string|int, mixed>
- initializeAlgorithm() : void
- prepareInput() : mixed
- processOutput() : array<string|int, mixed>
- processRhythmOutput() : array<string|int, mixed>
- processSpectralOutput() : array<string|int, mixed>
- processStatsOutput() : array<string|int, mixed>
- processTemporalOutput() : array<string|int, mixed>
- processTonalOutput() : array<string|int, mixed>
- setAlgorithmParameter() : void
- setArrayParameter() : void
- validateAlgorithmInput() : void
Properties
$algorithmName
protected
string
$algorithmName
= 'PredominantPitchMelodia'
$category
protected
string
$category
= 'Spectral'
$essentia
protected
EssentiaFFI
$essentia
$mode
protected
string
$mode
= 'standard'
$parameters
protected
array<string|int, mixed>
$parameters
= []
$algorithmHandle
private
CData|null
$algorithmHandle
= null
$configured
private
bool
$configured
= false
Methods
__construct()
public
__construct([array<string|int, mixed> $parameters = [] ]) : mixed
Parameters
- $parameters : array<string|int, mixed> = []
__destruct()
public
__destruct() : mixed
compute()
public
compute(mixed $input) : array<string|int, mixed>
Parameters
- $input : mixed
Return values
array<string|int, mixed>getAlgorithmName()
public
getAlgorithmName() : string
Return values
stringgetCategory()
public
getCategory() : string
Return values
stringgetMode()
public
getMode() : string
Return values
stringgetParameters()
public
getParameters() : array<string|int, mixed>
Return values
array<string|int, mixed>setParameter()
public
setParameter(string $key, mixed $value) : self
Parameters
- $key : string
- $value : mixed
Return values
selfconfigure()
protected
configure(array<string|int, mixed> $parameters) : void
Parameters
- $parameters : array<string|int, mixed>
isValidParameter()
protected
isValidParameter(string $parameter) : bool
Parameters
- $parameter : string
Return values
boolvalidateInput()
protected
validateInput(mixed $input, string $expectedType) : void
Parameters
- $input : mixed
- $expectedType : string
cleanupAlgorithm()
private
cleanupAlgorithm() : void
configureAlgorithmParameters()
private
configureAlgorithmParameters() : void
estimateOutputSize()
private
estimateOutputSize(mixed $input) : int
Parameters
- $input : mixed
Return values
intexecuteAlgorithm()
private
executeAlgorithm(mixed $input) : array<string|int, mixed>
Parameters
- $input : mixed
Return values
array<string|int, mixed>executeGenericAlgorithm()
private
executeGenericAlgorithm(FFI $ffi, mixed $input) : array<string|int, mixed>
Parameters
- $ffi : FFI
- $input : mixed
Return values
array<string|int, mixed>executeSpecificAlgorithm()
private
executeSpecificAlgorithm(FFI $ffi, mixed $input) : array<string|int, mixed>
Parameters
- $ffi : FFI
- $input : mixed
Return values
array<string|int, mixed>getAlgorithmCreateFunction()
private
getAlgorithmCreateFunction() : string
Return values
stringgetValidParameters()
private
getValidParameters() : array<string|int, mixed>
Return values
array<string|int, mixed>initializeAlgorithm()
private
initializeAlgorithm() : void
prepareInput()
private
prepareInput(mixed $input) : mixed
Parameters
- $input : mixed
processOutput()
private
processOutput(array<string|int, mixed> $result) : array<string|int, mixed>
Parameters
- $result : array<string|int, mixed>
Return values
array<string|int, mixed>processRhythmOutput()
private
processRhythmOutput(array<string|int, mixed> $result) : array<string|int, mixed>
Parameters
- $result : array<string|int, mixed>
Return values
array<string|int, mixed>processSpectralOutput()
private
processSpectralOutput(array<string|int, mixed> $result) : array<string|int, mixed>
Parameters
- $result : array<string|int, mixed>
Return values
array<string|int, mixed>processStatsOutput()
private
processStatsOutput(array<string|int, mixed> $result) : array<string|int, mixed>
Parameters
- $result : array<string|int, mixed>
Return values
array<string|int, mixed>processTemporalOutput()
private
processTemporalOutput(array<string|int, mixed> $result) : array<string|int, mixed>
Parameters
- $result : array<string|int, mixed>
Return values
array<string|int, mixed>processTonalOutput()
private
processTonalOutput(array<string|int, mixed> $result) : array<string|int, mixed>
Parameters
- $result : array<string|int, mixed>
Return values
array<string|int, mixed>setAlgorithmParameter()
private
setAlgorithmParameter(FFI $ffi, string $key, mixed $value) : void
Parameters
- $ffi : FFI
- $key : string
- $value : mixed
setArrayParameter()
private
setArrayParameter(FFI $ffi, string $key, array<string|int, mixed> $value) : void
Parameters
- $ffi : FFI
- $key : string
- $value : array<string|int, mixed>
validateAlgorithmInput()
private
validateAlgorithmInput(mixed $input) : void
Parameters
- $input : mixed