music21.features.jSymbolic
The features implemented here are based on those found in jSymbolic and
defined in Cory McKay’s MA Thesis, “Automatic Genre Classification of MIDI Recordings”
The LGPL jSymbolic system can be found here: http://jmir.sourceforge.net/jSymbolic.html
Functions
-
music21.features.jSymbolic.getCompletionStats()
>>> features.jSymbolic.getCompletionStats()
completion stats: 70/111 (0.6306...)
-
music21.features.jSymbolic.getExtractorByTypeAndNumber(type, number)
Typical usage:
>>> t5 = features.jSymbolic.getExtractorByTypeAndNumber('T', 5)
>>> t5.__name__
'VoiceEqualityNoteDurationFeature'
>>> bachExample = corpus.parse('bach/bwv66.6')
>>> fe = t5(bachExample)
Features unimplemented in jSymbolic but documented in the dissertation return None
>>> features.jSymbolic.getExtractorByTypeAndNumber('C', 20) is None
True
Totally unknown features return an exception:
>>> features.jSymbolic.getExtractorByTypeAndNumber('L', 900)
Traceback (most recent call last):
...
JSymbolicFeatureException: Could not find any jSymbolic features of type L
>>> features.jSymbolic.getExtractorByTypeAndNumber('C', 200)
Traceback (most recent call last):
...
JSymbolicFeatureException: jSymbolic features of type C do not have number 200
You could also find all the feature extractors this way:
>>> fs = features.jSymbolic.extractorsById
>>> for k in fs:
... for i in range(len(fs[k])):
... if fs[k][i] is not None:
... n = fs[k][i].__name__
... if fs[k][i] not in features.jSymbolic.featureExtractors:
... n += " (not implemented)"
... print("%s %d %s" % (k, i, n))
D 1 OverallDynamicRangeFeature (not implemented)
D 2 VariationOfDynamicsFeature (not implemented)
D 3 VariationOfDynamicsInEachVoiceFeature (not implemented)
D 4 AverageNoteToNoteDynamicsChangeFeature (not implemented)
I 1 PitchedInstrumentsPresentFeature
I 2 UnpitchedInstrumentsPresentFeature (not implemented)
I 3 NotePrevalenceOfPitchedInstrumentsFeature
I 4 NotePrevalenceOfUnpitchedInstrumentsFeature (not implemented)
I 5 TimePrevalenceOfPitchedInstrumentsFeature (not implemented)
I 6 VariabilityOfNotePrevalenceOfPitchedInstrumentsFeature
I 7 VariabilityOfNotePrevalenceOfUnpitchedInstrumentsFeature (not implemented)
I 8 NumberOfPitchedInstrumentsFeature
I 9 NumberOfUnpitchedInstrumentsFeature (not implemented)
I 10 PercussionPrevalenceFeature (not implemented)
I 11 StringKeyboardFractionFeature
I 12 AcousticGuitarFractionFeature
I 13 ElectricGuitarFractionFeature
I 14 ViolinFractionFeature
I 15 SaxophoneFractionFeature
I 16 BrassFractionFeature
I 17 WoodwindsFractionFeature
I 18 OrchestralStringsFractionFeature
I 19 StringEnsembleFractionFeature
I 20 ElectricInstrumentFractionFeature
M 1 MelodicIntervalHistogramFeature
M 2 AverageMelodicIntervalFeature
M 3 MostCommonMelodicIntervalFeature
M 4 DistanceBetweenMostCommonMelodicIntervalsFeature
M 5 MostCommonMelodicIntervalPrevalenceFeature
M 6 RelativeStrengthOfMostCommonIntervalsFeature
M 7 NumberOfCommonMelodicIntervalsFeature
M 8 AmountOfArpeggiationFeature
M 9 RepeatedNotesFeature
M 10 ChromaticMotionFeature
M 11 StepwiseMotionFeature
M 12 MelodicThirdsFeature
M 13 MelodicFifthsFeature
M 14 MelodicTritonesFeature
M 15 MelodicOctavesFeature
M 17 DirectionOfMotionFeature
M 18 DurationOfMelodicArcsFeature
M 19 SizeOfMelodicArcsFeature
P 1 MostCommonPitchPrevalenceFeature
P 2 MostCommonPitchClassPrevalenceFeature
P 3 RelativeStrengthOfTopPitchesFeature
P 4 RelativeStrengthOfTopPitchClassesFeature
P 5 IntervalBetweenStrongestPitchesFeature
P 6 IntervalBetweenStrongestPitchClassesFeature
P 7 NumberOfCommonPitchesFeature
P 8 PitchVarietyFeature
P 9 PitchClassVarietyFeature
P 10 RangeFeature
P 11 MostCommonPitchFeature
P 12 PrimaryRegisterFeature
P 13 ImportanceOfBassRegisterFeature
P 14 ImportanceOfMiddleRegisterFeature
P 15 ImportanceOfHighRegisterFeature
P 16 MostCommonPitchClassFeature
P 17 DominantSpreadFeature (not implemented)
P 18 StrongTonalCentresFeature (not implemented)
P 19 BasicPitchHistogramFeature
P 20 PitchClassDistributionFeature
P 21 FifthsPitchHistogramFeature
P 22 QualityFeature
P 23 GlissandoPrevalenceFeature (not implemented)
P 24 AverageRangeOfGlissandosFeature (not implemented)
P 25 VibratoPrevalenceFeature (not implemented)
R 1 StrongestRhythmicPulseFeature (not implemented)
R 2 SecondStrongestRhythmicPulseFeature (not implemented)
R 3 HarmonicityOfTwoStrongestRhythmicPulsesFeature (not implemented)
R 4 StrengthOfStrongestRhythmicPulseFeature (not implemented)
R 5 StrengthOfSecondStrongestRhythmicPulseFeature (not implemented)
R 6 StrengthRatioOfTwoStrongestRhythmicPulsesFeature (not implemented)
R 7 CombinedStrengthOfTwoStrongestRhythmicPulsesFeature (not implemented)
R 8 NumberOfStrongPulsesFeature (not implemented)
R 9 NumberOfModeratePulsesFeature (not implemented)
R 10 NumberOfRelativelyStrongPulsesFeature (not implemented)
R 11 RhythmicLoosenessFeature (not implemented)
R 12 PolyrhythmsFeature (not implemented)
R 13 RhythmicVariabilityFeature (not implemented)
R 14 BeatHistogramFeature (not implemented)
R 15 NoteDensityFeature
R 17 AverageNoteDurationFeature
R 18 VariabilityOfNoteDurationFeature (not implemented)
R 19 MaximumNoteDurationFeature
R 20 MinimumNoteDurationFeature
R 21 StaccatoIncidenceFeature
R 22 AverageTimeBetweenAttacksFeature
R 23 VariabilityOfTimeBetweenAttacksFeature
R 24 AverageTimeBetweenAttacksForEachVoiceFeature
R 25 AverageVariabilityOfTimeBetweenAttacksForEachVoiceFeature
R 30 InitialTempoFeature
R 31 InitialTimeSignatureFeature
R 32 CompoundOrSimpleMeterFeature
R 33 TripleMeterFeature
R 34 QuintupleMeterFeature
R 35 ChangesOfMeterFeature
T 1 MaximumNumberOfIndependentVoicesFeature
T 2 AverageNumberOfIndependentVoicesFeature
T 3 VariabilityOfNumberOfIndependentVoicesFeature
T 4 VoiceEqualityNumberOfNotesFeature (not implemented)
T 5 VoiceEqualityNoteDurationFeature (not implemented)
T 6 VoiceEqualityDynamicsFeature (not implemented)
T 7 VoiceEqualityMelodicLeapsFeature (not implemented)
T 8 VoiceEqualityRangeFeature (not implemented)
T 9 ImportanceOfLoudestVoiceFeature (not implemented)
T 10 RelativeRangeOfLoudestVoiceFeature (not implemented)
T 12 RangeOfHighestLineFeature (not implemented)
T 13 RelativeNoteDensityOfHighestLineFeature (not implemented)
T 15 MelodicIntervalsInLowestLineFeature (not implemented)
T 20 VoiceSeparationFeature (not implemented)
AcousticGuitarFractionFeature
-
class music21.features.jSymbolic.AcousticGuitarFractionFeature(dataOrStream=None, *arguments, **keywords)
A feature exractor that extracts the fraction of all Note Ons belonging to acoustic guitar patches (General MIDI patches 25 to 26).
>>> s1 = stream.Stream()
>>> s1.append(instrument.AcousticGuitar())
>>> s1.repeatAppend(note.Note(), 3)
>>> s1.append(instrument.Tuba())
>>> s1.append(note.Note())
>>> fe = features.jSymbolic.AcousticGuitarFractionFeature(s1)
>>> fe.extract().vector
[0.75]
AcousticGuitarFractionFeature bases
AcousticGuitarFractionFeature methods
Methods inherited from FeatureExtractor:
AmountOfArpeggiationFeature
-
class music21.features.jSymbolic.AmountOfArpeggiationFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.AmountOfArpeggiationFeature(s)
>>> f = fe.extract()
>>> f.name
'Amount of Arpeggiation'
AmountOfArpeggiationFeature bases
AmountOfArpeggiationFeature methods
Methods inherited from FeatureExtractor:
AverageMelodicIntervalFeature
-
class music21.features.jSymbolic.AverageMelodicIntervalFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.AverageMelodicIntervalFeature(s)
>>> f = fe.extract()
>>> f.vector
[2.0714...]
AverageMelodicIntervalFeature bases
AverageMelodicIntervalFeature methods
Methods inherited from FeatureExtractor:
AverageNoteDurationFeature
-
class music21.features.jSymbolic.AverageNoteDurationFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.AverageNoteDurationFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.441717...]
>>> s.insert(0, tempo.MetronomeMark(number=240))
>>> fe = features.jSymbolic.AverageNoteDurationFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.220858...]
AverageNoteDurationFeature bases
AverageNoteDurationFeature methods
Methods inherited from FeatureExtractor:
AverageNumberOfIndependentVoicesFeature
-
class music21.features.jSymbolic.AverageNumberOfIndependentVoicesFeature(dataOrStream=None, *arguments, **keywords)
Average number of different channels in which notes have sounded simultaneously. Rests are not included in this calculation. Here, Parts are treated as voices
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.AverageNumberOfIndependentVoicesFeature(s)
>>> f = fe.extract()
>>> f.vector
[1.6...]
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.AverageNumberOfIndependentVoicesFeature(s)
>>> f = fe.extract()
>>> f.vector
[3.96...]
AverageNumberOfIndependentVoicesFeature bases
AverageNumberOfIndependentVoicesFeature methods
Methods inherited from FeatureExtractor:
AverageTimeBetweenAttacksFeature
-
class music21.features.jSymbolic.AverageTimeBetweenAttacksFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.AverageTimeBetweenAttacksFeature(s)
>>> f = fe.extract()
>>> print(round(f.vector[0], 2))
0.35
AverageTimeBetweenAttacksFeature bases
AverageTimeBetweenAttacksFeature methods
Methods inherited from FeatureExtractor:
BasicPitchHistogramFeature
-
class music21.features.jSymbolic.BasicPitchHistogramFeature(dataOrStream=None, *arguments, **keywords)
A feature exractor that finds a features array with bins corresponding to the values of the basic pitch histogram.
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.BasicPitchHistogramFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.052631578..., 0.0, 0.0, 0.052631578..., 0.05263157894..., 0.2631578..., 0.0, 0.3157894..., 0.1052631..., 0.0, 0.052631..., 0.157894736..., 0.5263157..., 0.0, 0.368421052..., 0.6315789473..., 0.105263157..., 0.78947368..., 0.0, 1.0, 0.52631578..., 0.052631578..., 0.736842105..., 0.1578947..., 0.9473684..., 0.0, 0.36842105..., 0.47368421..., 0.0, 0.42105263..., 0.0, 0.36842105..., 0.0, 0.0, 0.052631578..., 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
BasicPitchHistogramFeature bases
BasicPitchHistogramFeature methods
Methods inherited from FeatureExtractor:
BeatHistogramFeature
-
class music21.features.jSymbolic.BeatHistogramFeature(dataOrStream=None, *arguments, **keywords)
A feature exractor that finds a feature array with entries corresponding to the frequency values of each of the bins of the beat histogram (except the first 40 empty ones).
BeatHistogramFeature bases
BeatHistogramFeature methods
Methods inherited from FeatureExtractor:
BrassFractionFeature
-
class music21.features.jSymbolic.BrassFractionFeature(dataOrStream=None, *arguments, **keywords)
A feature exractor that extracts the fraction of all Note Ons belonging to brass patches (General MIDI patches 57 or 68).
>>> s1 = stream.Stream()
>>> s1.append(instrument.SopranoSaxophone())
>>> s1.repeatAppend(note.Note(), 6)
>>> s1.append(instrument.Tuba())
>>> s1.repeatAppend(note.Note(), 4)
>>> fe = features.jSymbolic.BrassFractionFeature(s1)
>>> print(fe.extract().vector[0])
0.4
BrassFractionFeature bases
BrassFractionFeature methods
Methods inherited from FeatureExtractor:
ChangesOfMeterFeature
-
class music21.features.jSymbolic.ChangesOfMeterFeature(dataOrStream=None, *arguments, **keywords)
A feature exractor that sets the feature to 1 if the time signature is changed one or more times during the recording.
>>> s1 = stream.Stream()
>>> s1.append(meter.TimeSignature('3/4'))
>>> s2 = stream.Stream()
>>> s2.append(meter.TimeSignature('3/4'))
>>> s2.append(meter.TimeSignature('4/4'))
>>> fe = features.jSymbolic.ChangesOfMeterFeature(s1)
>>> fe.extract().vector
[0]
>>> fe.setData(s2) # change the data
>>> fe.extract().vector
[1]
ChangesOfMeterFeature bases
ChangesOfMeterFeature methods
Methods inherited from FeatureExtractor:
CompoundOrSimpleMeterFeature
-
class music21.features.jSymbolic.CompoundOrSimpleMeterFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(meter.TimeSignature('3/4'))
>>> s2 = stream.Stream()
>>> s2.append(meter.TimeSignature('9/8'))
>>> fe = features.jSymbolic.CompoundOrSimpleMeterFeature(s1)
>>> fe.extract().vector
[0]
>>> fe.setData(s2) # change the data
>>> fe.extract().vector
[1]
CompoundOrSimpleMeterFeature bases
CompoundOrSimpleMeterFeature methods
Methods inherited from FeatureExtractor:
DirectionOfMotionFeature
-
class music21.features.jSymbolic.DirectionOfMotionFeature(dataOrStream=None, *arguments, **keywords)
Returns the fraction of melodic intervals that are rising rather than falling. Unisons are omitted
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.DirectionOfMotionFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.5263...]
DirectionOfMotionFeature bases
DirectionOfMotionFeature methods
Methods inherited from FeatureExtractor:
DurationFeature
-
class music21.features.jSymbolic.DurationFeature(dataOrStream=None, *arguments, **keywords)
A feature extractor that extracts the duration in seconds.
DurationFeature bases
DurationFeature methods
Methods inherited from FeatureExtractor:
DurationOfMelodicArcsFeature
-
class music21.features.jSymbolic.DurationOfMelodicArcsFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.DurationOfMelodicArcsFeature(s)
>>> f = fe.extract()
>>> f.vector
[3.1666...]
DurationOfMelodicArcsFeature bases
DurationOfMelodicArcsFeature methods
Methods inherited from FeatureExtractor:
ElectricGuitarFractionFeature
-
class music21.features.jSymbolic.ElectricGuitarFractionFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.ElectricGuitar())
>>> s1.repeatAppend(note.Note(), 4)
>>> s1.append(instrument.Tuba())
>>> s1.repeatAppend(note.Note(), 4)
>>> fe = features.jSymbolic.ElectricGuitarFractionFeature(s1)
>>> fe.extract().vector
[0.5]
ElectricGuitarFractionFeature bases
ElectricGuitarFractionFeature methods
Methods inherited from FeatureExtractor:
ElectricInstrumentFractionFeature
-
class music21.features.jSymbolic.ElectricInstrumentFractionFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.ElectricOrgan())
>>> s1.repeatAppend(note.Note(), 8)
>>> s1.append(instrument.Tuba())
>>> s1.repeatAppend(note.Note(), 2)
>>> fe = features.jSymbolic.ElectricInstrumentFractionFeature(s1)
>>> print(fe.extract().vector[0])
0.8
ElectricInstrumentFractionFeature bases
ElectricInstrumentFractionFeature methods
Methods inherited from FeatureExtractor:
FifthsPitchHistogramFeature
-
class music21.features.jSymbolic.FifthsPitchHistogramFeature(dataOrStream=None, *arguments, **keywords)
A feature array with bins corresponding to the values of the 5ths pitch class histogram.
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.FifthsPitchHistogramFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.0, 0.0, 0.375, 0.6875, 0.5, 0.875, 0.90625, 1.0, 0.4375, 0.03125, 0.09375, 0.1875]
FifthsPitchHistogramFeature bases
FifthsPitchHistogramFeature methods
Methods inherited from FeatureExtractor:
ImportanceOfBassRegisterFeature
-
class music21.features.jSymbolic.ImportanceOfBassRegisterFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.ImportanceOfBassRegisterFeature(s)
>>> fe.extract().vector
[0.266666...]
ImportanceOfBassRegisterFeature bases
ImportanceOfBassRegisterFeature methods
Methods inherited from FeatureExtractor:
ImportanceOfHighRegisterFeature
-
class music21.features.jSymbolic.ImportanceOfHighRegisterFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.ImportanceOfHighRegisterFeature(s)
>>> fe.extract().vector
[0.0]
ImportanceOfHighRegisterFeature bases
ImportanceOfHighRegisterFeature methods
Methods inherited from FeatureExtractor:
ImportanceOfMiddleRegisterFeature
-
class music21.features.jSymbolic.ImportanceOfMiddleRegisterFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.ImportanceOfMiddleRegisterFeature(s)
>>> fe.extract().vector
[0.73333333...]
ImportanceOfMiddleRegisterFeature bases
ImportanceOfMiddleRegisterFeature methods
Methods inherited from FeatureExtractor:
InitialTempoFeature
-
class music21.features.jSymbolic.InitialTempoFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.InitialTempoFeature(s)
>>> f = fe.extract()
>>> f.vector # a default
[120.0]
>>> s = corpus.parse('hwv56/movement2-09.md') # has a tempos
>>> fe = features.jSymbolic.InitialTempoFeature(s)
>>> f = fe.extract()
>>> f.vector
[46.0]
InitialTempoFeature bases
InitialTempoFeature methods
Methods inherited from FeatureExtractor:
InitialTimeSignatureFeature
-
class music21.features.jSymbolic.InitialTimeSignatureFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(meter.TimeSignature('3/4'))
>>> fe = features.jSymbolic.InitialTimeSignatureFeature(s1)
>>> fe.extract().vector
[3, 4]
InitialTimeSignatureFeature bases
InitialTimeSignatureFeature methods
Methods inherited from FeatureExtractor:
InstrumentFractionFeature
-
class music21.features.jSymbolic.InstrumentFractionFeature(dataOrStream=None, *arguments, **keywords)
This subclass is in-turn subclassed by all FeatureExtractors that look at the proportional usage of an Insutrment
InstrumentFractionFeature bases
InstrumentFractionFeature methods
Methods inherited from FeatureExtractor:
MaximumNoteDurationFeature
-
class music21.features.jSymbolic.MaximumNoteDurationFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.MaximumNoteDurationFeature(s)
>>> f = fe.extract()
>>> f.vector
[1.0]
MaximumNoteDurationFeature bases
MaximumNoteDurationFeature methods
Methods inherited from FeatureExtractor:
MaximumNumberOfIndependentVoicesFeature
-
class music21.features.jSymbolic.MaximumNumberOfIndependentVoicesFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.MaximumNumberOfIndependentVoicesFeature(s)
>>> f = fe.extract()
>>> f.vector
[2]
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.MaximumNumberOfIndependentVoicesFeature(s)
>>> f = fe.extract()
>>> f.vector
[4]
MaximumNumberOfIndependentVoicesFeature bases
MaximumNumberOfIndependentVoicesFeature methods
Methods inherited from FeatureExtractor:
MelodicIntervalHistogramFeature
-
class music21.features.jSymbolic.MelodicIntervalHistogramFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('bwv887')
>>> fe = features.jSymbolic.MelodicIntervalHistogramFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.146..., 0.853..., 1.0, 0.292..., 0.209..., 0.139..., 0.101..., 0.257..., 0.22299..., 0.456..., 0.1289..., 0.0871..., 0.233..., 0.07317..., 0.03832..., 0.031..., 0.0278..., 0.0139..., 0.01742..., 0.00348..., 0.0, 0.017..., 0.003484..., 0.01742..., 0.00348..., 0.0, 0.00348..., 0.0, 0.0174..., 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
MelodicIntervalHistogramFeature bases
MelodicIntervalHistogramFeature methods
Methods inherited from FeatureExtractor:
MinimumNoteDurationFeature
-
class music21.features.jSymbolic.MinimumNoteDurationFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.MinimumNoteDurationFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.25]
MinimumNoteDurationFeature bases
MinimumNoteDurationFeature methods
Methods inherited from FeatureExtractor:
MostCommonMelodicIntervalFeature
-
class music21.features.jSymbolic.MostCommonMelodicIntervalFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.MostCommonMelodicIntervalFeature(s)
>>> f = fe.extract()
>>> f.vector
[0]
MostCommonMelodicIntervalFeature bases
MostCommonMelodicIntervalFeature methods
Methods inherited from FeatureExtractor:
MostCommonPitchClassFeature
-
class music21.features.jSymbolic.MostCommonPitchClassFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.MostCommonPitchClassFeature(s)
>>> fe.extract().vector
[5]
MostCommonPitchClassFeature bases
MostCommonPitchClassFeature methods
Methods inherited from FeatureExtractor:
MostCommonPitchFeature
-
class music21.features.jSymbolic.MostCommonPitchFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.MostCommonPitchFeature(s)
>>> fe.extract().vector
[0.5078125]
MostCommonPitchFeature bases
MostCommonPitchFeature methods
Methods inherited from FeatureExtractor:
MostCommonPitchPrevalenceFeature
-
class music21.features.jSymbolic.MostCommonPitchPrevalenceFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.MostCommonPitchPrevalenceFeature(s)
>>> fe.extract().vector[0] + .0001 # slightly less than .3 on 32-bit systems
0.3...
MostCommonPitchPrevalenceFeature bases
MostCommonPitchPrevalenceFeature methods
Methods inherited from FeatureExtractor:
NoteDensityFeature
-
class music21.features.jSymbolic.NoteDensityFeature(dataOrStream=None, *arguments, **keywords)
Gives the Average number of notes per second, taking into account
the tempo at any moment in the piece. N.B. unlike the jSymbolic
version, music21’s Feature Extraction methods can run on a subset
of the entire piece (measures, certain parts, etc.). However, unlike
jSymbolic, music21 quantizes notes from midi somewhat before running
this test, so it is better run on encoded midi scores than recorded
midi performances.
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.NoteDensityFeature(s)
>>> f = fe.extract()
>>> f.vector
[12.368421...]
NoteDensityFeature bases
NoteDensityFeature methods
Methods inherited from FeatureExtractor:
NotePrevalenceOfPitchedInstrumentsFeature
-
class music21.features.jSymbolic.NotePrevalenceOfPitchedInstrumentsFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.AcousticGuitar())
>>> s1.repeatAppend(note.Note(), 4)
>>> s1.append(instrument.Tuba())
>>> s1.append(note.Note())
>>> fe = features.jSymbolic.NotePrevalenceOfPitchedInstrumentsFeature(s1)
>>> fe.extract().vector
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.8..., 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2..., 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
NotePrevalenceOfPitchedInstrumentsFeature bases
NotePrevalenceOfPitchedInstrumentsFeature methods
Methods inherited from FeatureExtractor:
NumberOfCommonPitchesFeature
-
class music21.features.jSymbolic.NumberOfCommonPitchesFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.NumberOfCommonPitchesFeature(s)
>>> fe.extract().vector
[4]
NumberOfCommonPitchesFeature bases
NumberOfCommonPitchesFeature methods
Methods inherited from FeatureExtractor:
NumberOfPitchedInstrumentsFeature
-
class music21.features.jSymbolic.NumberOfPitchedInstrumentsFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.AcousticGuitar())
>>> s1.append(note.Note())
>>> s1.append(instrument.Tuba())
>>> s1.append(note.Note())
>>> fe = features.jSymbolic.NumberOfPitchedInstrumentsFeature(s1)
>>> fe.extract().vector
[2]
NumberOfPitchedInstrumentsFeature bases
NumberOfPitchedInstrumentsFeature methods
Methods inherited from FeatureExtractor:
OrchestralStringsFractionFeature
-
class music21.features.jSymbolic.OrchestralStringsFractionFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.Violoncello())
>>> s1.repeatAppend(note.Note(), 4)
>>> s1.append(instrument.Tuba())
>>> s1.repeatAppend(note.Note(), 6)
>>> fe = features.jSymbolic.OrchestralStringsFractionFeature(s1)
>>> print(fe.extract().vector[0])
0.4
OrchestralStringsFractionFeature bases
OrchestralStringsFractionFeature methods
Methods inherited from FeatureExtractor:
PitchClassDistributionFeature
-
class music21.features.jSymbolic.PitchClassDistributionFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.PitchClassDistributionFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.0, 1.0, 0.375, 0.03125, 0.5, 0.1875, 0.90625, 0.0, 0.4375, 0.6875, 0.09375, 0.875]
PitchClassDistributionFeature bases
PitchClassDistributionFeature methods
Methods inherited from FeatureExtractor:
PitchClassVarietyFeature
-
class music21.features.jSymbolic.PitchClassVarietyFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.PitchClassVarietyFeature(s)
>>> fe.extract().vector
[8]
PitchClassVarietyFeature bases
PitchClassVarietyFeature methods
Methods inherited from FeatureExtractor:
PitchVarietyFeature
-
class music21.features.jSymbolic.PitchVarietyFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.PitchVarietyFeature(s)
>>> fe.extract().vector
[12]
PitchVarietyFeature bases
PitchVarietyFeature methods
Methods inherited from FeatureExtractor:
PitchedInstrumentsPresentFeature
-
class music21.features.jSymbolic.PitchedInstrumentsPresentFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.AcousticGuitar())
>>> s1.append(note.Note())
>>> s1.append(instrument.Tuba())
>>> s1.append(note.Note())
>>> fe = features.jSymbolic.PitchedInstrumentsPresentFeature(s1)
>>> fe.extract().vector
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
PitchedInstrumentsPresentFeature bases
PitchedInstrumentsPresentFeature methods
Methods inherited from FeatureExtractor:
PrimaryRegisterFeature
-
class music21.features.jSymbolic.PrimaryRegisterFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.PrimaryRegisterFeature(s)
>>> fe.extract().vector
[54.91666666...]
PrimaryRegisterFeature bases
PrimaryRegisterFeature methods
Methods inherited from FeatureExtractor:
QualityFeature
-
class music21.features.jSymbolic.QualityFeature(dataOrStream=None, *arguments, **keywords)
Set to 0 if the key signature indicates that
a recording is major, set to 1 if it indicates
that it is minor. In jSymbolic, this is set to 0 if key signature is unknown.
See features.native.QualityFeature for a music21 improvement on this method
>>> mozart155mvmt2 = corpus.parse('mozart/k155', 2)
>>> fe = features.jSymbolic.QualityFeature(mozart155mvmt2)
>>> f = fe.extract()
>>> f.vector
[0]
QualityFeature bases
QualityFeature methods
Methods inherited from FeatureExtractor:
QuintupleMeterFeature
-
class music21.features.jSymbolic.QuintupleMeterFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(meter.TimeSignature('5/4'))
>>> s2 = stream.Stream()
>>> s2.append(meter.TimeSignature('3/4'))
>>> fe = features.jSymbolic.QuintupleMeterFeature(s1)
>>> fe.extract().vector
[1]
>>> fe.setData(s2) # change the data
>>> fe.extract().vector
[0]
QuintupleMeterFeature bases
QuintupleMeterFeature methods
Methods inherited from FeatureExtractor:
RangeFeature
-
class music21.features.jSymbolic.RangeFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.RangeFeature(s)
>>> fe.extract().vector
[31]
RangeFeature bases
RangeFeature methods
Methods inherited from FeatureExtractor:
SaxophoneFractionFeature
-
class music21.features.jSymbolic.SaxophoneFractionFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.SopranoSaxophone())
>>> s1.repeatAppend(note.Note(), 6)
>>> s1.append(instrument.Tuba())
>>> s1.repeatAppend(note.Note(), 4)
>>> fe = features.jSymbolic.SaxophoneFractionFeature(s1)
>>> print(fe.extract().vector[0])
0.6
SaxophoneFractionFeature bases
SaxophoneFractionFeature methods
Methods inherited from FeatureExtractor:
SizeOfMelodicArcsFeature
-
class music21.features.jSymbolic.SizeOfMelodicArcsFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.SizeOfMelodicArcsFeature(s)
>>> f = fe.extract()
>>> f.vector
[8.5]
SizeOfMelodicArcsFeature bases
SizeOfMelodicArcsFeature methods
Methods inherited from FeatureExtractor:
StaccatoIncidenceFeature
-
class music21.features.jSymbolic.StaccatoIncidenceFeature(dataOrStream=None, *arguments, **keywords)
>>> s = corpus.parse('bwv66.6')
>>> fe = features.jSymbolic.StaccatoIncidenceFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.0]
StaccatoIncidenceFeature bases
StaccatoIncidenceFeature methods
Methods inherited from FeatureExtractor:
StringKeyboardFractionFeature
-
class music21.features.jSymbolic.StringKeyboardFractionFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.Piano())
>>> s1.repeatAppend(note.Note(), 9)
>>> s1.append(instrument.Tuba())
>>> s1.append(note.Note())
>>> fe = features.jSymbolic.StringKeyboardFractionFeature(s1)
>>> fe.extract().vector
[0.9...]
StringKeyboardFractionFeature bases
StringKeyboardFractionFeature methods
Methods inherited from FeatureExtractor:
TripleMeterFeature
-
class music21.features.jSymbolic.TripleMeterFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(meter.TimeSignature('5/4'))
>>> s2 = stream.Stream()
>>> s2.append(meter.TimeSignature('3/4'))
>>> fe = features.jSymbolic.TripleMeterFeature(s1)
>>> fe.extract().vector
[0]
>>> fe.setData(s2) # change the data
>>> fe.extract().vector
[1]
TripleMeterFeature bases
TripleMeterFeature methods
Methods inherited from FeatureExtractor:
VariabilityOfNotePrevalenceOfPitchedInstrumentsFeature
-
class music21.features.jSymbolic.VariabilityOfNotePrevalenceOfPitchedInstrumentsFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.AcousticGuitar())
>>> s1.repeatAppend(note.Note(), 5)
>>> s1.append(instrument.Tuba())
>>> s1.append(note.Note())
>>> fe = features.jSymbolic.VariabilityOfNotePrevalenceOfPitchedInstrumentsFeature(s1)
>>> fe.extract().vector
[0.33333...]
VariabilityOfNotePrevalenceOfPitchedInstrumentsFeature bases
VariabilityOfNotePrevalenceOfPitchedInstrumentsFeature methods
Methods inherited from FeatureExtractor:
VariabilityOfNumberOfIndependentVoicesFeature
-
class music21.features.jSymbolic.VariabilityOfNumberOfIndependentVoicesFeature(dataOrStream=None, *arguments, **keywords)
Standard deviation of number of different channels in which notes have sounded simultaneously. Rests are not included in this calculation.
>>> s = corpus.parse('hwv56/movement3-05.md')
>>> fe = features.jSymbolic.VariabilityOfNumberOfIndependentVoicesFeature(s)
>>> f = fe.extract()
>>> f.vector
[0.489...]
VariabilityOfNumberOfIndependentVoicesFeature bases
VariabilityOfNumberOfIndependentVoicesFeature methods
Methods inherited from FeatureExtractor:
ViolinFractionFeature
-
class music21.features.jSymbolic.ViolinFractionFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.Violin())
>>> s1.repeatAppend(note.Note(), 2)
>>> s1.append(instrument.Tuba())
>>> s1.repeatAppend(note.Note(), 8)
>>> fe = features.jSymbolic.ViolinFractionFeature(s1)
>>> fe.extract().vector
[0.2...]
ViolinFractionFeature bases
ViolinFractionFeature methods
Methods inherited from FeatureExtractor:
WoodwindsFractionFeature
-
class music21.features.jSymbolic.WoodwindsFractionFeature(dataOrStream=None, *arguments, **keywords)
>>> s1 = stream.Stream()
>>> s1.append(instrument.Flute())
>>> s1.repeatAppend(note.Note(), 3)
>>> s1.append(instrument.Tuba())
>>> s1.repeatAppend(note.Note(), 7)
>>> fe = features.jSymbolic.WoodwindsFractionFeature(s1)
>>> print(fe.extract().vector[0])
0.3
WoodwindsFractionFeature bases
WoodwindsFractionFeature methods
Methods inherited from FeatureExtractor: