music21.stream.filters¶
The filter module contains StreamFilter objects
which are used by StreamIterator objects to
decide whether a given element matches the list of elements that are being
filtered. Filters are used by methods on streams such as
getElementsByClass() to filter elements by classes.
ClassFilter¶
- class music21.stream.filters.ClassFilter(classList=())¶
ClassFilter is used by .getElementsByClass() to find elements belonging to a class or a list of classes.
>>> s = stream.Stream() >>> s.append(note.Note('C')) >>> s.append(note.Rest()) >>> s.append(note.Note('D')) >>> sI = iter(s) >>> sI <music21.stream.iterator.StreamIterator for Stream:0x104843828 @:0> >>> for x in sI: ... print(x) <music21.note.Note C> <music21.note.Rest quarter> <music21.note.Note D>
>>> sI.filters.append(stream.filters.ClassFilter('Note')) >>> sI.filters [<music21.stream.filters.ClassFilter Note>]
>>> for x in sI: ... print(x) <music21.note.Note C> <music21.note.Note D>
ClassFilter bases
ClassFilter read-only properties
Read-only properties inherited from ProtoM21Object:
ClassFilter methods
- ClassFilter.__eq__(other)¶
Return self==value.
Methods inherited from StreamFilter:
Methods inherited from ProtoM21Object:
ClassNotFilter¶
- class music21.stream.filters.ClassNotFilter(classList=())¶
Returns elements not of the class.
>>> s = stream.Stream() >>> s.append(note.Note('C')) >>> s.append(note.Rest()) >>> s.append(note.Note('D')) >>> sI = iter(s)
>>> sI.filters.append(stream.filters.ClassNotFilter('Note')) >>> sI.filters [<music21.stream.filters.ClassNotFilter Note>]
>>> for x in sI: ... print(x) <music21.note.Rest quarter>
ClassNotFilter bases
ClassNotFilter read-only properties
Read-only properties inherited from ProtoM21Object:
ClassNotFilter methods
Methods inherited from ClassFilter:
Methods inherited from StreamFilter:
Methods inherited from ProtoM21Object:
GroupFilter¶
- class music21.stream.filters.GroupFilter(groupFilterList=())¶
Returns elements with a certain group.
>>> n1 = note.Note('C') >>> n1.groups.append('trombone') >>> n2 = note.Note('D') >>> n2.groups.append('trombone') >>> n2.groups.append('tuba') >>> n3 = note.Note('E') >>> n3.groups.append('tuba') >>> s1 = stream.Stream() >>> s1.append(n1) >>> s1.append(n2) >>> s1.append(n3) >>> GF = stream.filters.GroupFilter
>>> for thisNote in iter(s1).addFilter(GF('trombone')): ... print(thisNote.name) C D >>> for thisNote in iter(s1).addFilter(GF('tuba')): ... print(thisNote.name) D E
GroupFilter bases
GroupFilter read-only properties
Read-only properties inherited from ProtoM21Object:
GroupFilter methods
Methods inherited from StreamFilter:
Methods inherited from ProtoM21Object:
IdFilter¶
- class music21.stream.filters.IdFilter(searchId=None)¶
filters on ids. used by stream.getElementById. No corresponding iterator call.
Only a single ID can be passed in. Always returns a single item.
IdFilter bases
IdFilter read-only properties
Read-only properties inherited from ProtoM21Object:
IdFilter methods
Methods inherited from StreamFilter:
Methods inherited from ProtoM21Object:
IsFilter¶
- class music21.stream.filters.IsFilter(target=())¶
filter on items where x IS y
>>> s = stream.Stream() >>> s.insert(0, key.KeySignature(-3)) >>> n = note.Note('C#') >>> s.append(n) >>> s.append(note.Rest()) >>> isFilter = stream.filters.IsFilter(n) >>> isFilter.derivationStr 'is' >>> isFilter.target (<music21.note.Note C#>,) >>> isFilter.numToFind 1
.numToFind is used so that once all elements are found, the iterator can short circuit.
>>> for el in s.iter().addFilter(isFilter): ... print(el is n) True
Multiple elements can also be passed into the isFilter:
>>> s = stream.Stream() >>> s.insert(0, key.KeySignature(-3)) >>> n = note.Note('C#') >>> s.append(n) >>> r = note.Rest() >>> s.append(r) >>> isFilter2 = stream.filters.IsFilter([n, r]) >>> isFilter2.numToFind 2
>>> for el in s.iter().addFilter(isFilter2): ... print(el) <music21.note.Note C#> <music21.note.Rest quarter>
IsFilter bases
IsFilter read-only properties
Read-only properties inherited from ProtoM21Object:
IsFilter methods
- IsFilter.reset()¶
Methods inherited from ProtoM21Object:
IsNotFilter¶
- class music21.stream.filters.IsNotFilter(target=())¶
Filter out everything but an item or list of items:
>>> s = stream.Stream() >>> s.insert(0, key.KeySignature(-3)) >>> n = note.Note('C#') >>> s.append(n) >>> s.append(note.Rest()) >>> for el in s.iter().addFilter(stream.filters.IsNotFilter(n)): ... el <music21.key.KeySignature of 3 flats> <music21.note.Rest quarter>
test that resetting works:
>>> for el in s.iter().addFilter(stream.filters.IsNotFilter(n)): ... el <music21.key.KeySignature of 3 flats> <music21.note.Rest quarter>
Using multiple filters:
>>> s = stream.Stream() >>> s.insert(0, key.KeySignature(-3)) >>> n = note.Note('C#') >>> s.append(n) >>> r = note.Rest() >>> s.append(r) >>> for el in s.iter().addFilter(stream.filters.IsNotFilter([n, r])): ... print(el) <music21.key.KeySignature of 3 flats>
IsNotFilter bases
IsNotFilter read-only properties
Read-only properties inherited from ProtoM21Object:
IsNotFilter methods
- IsNotFilter.reset()¶
Methods inherited from ProtoM21Object:
OffsetFilter¶
- class music21.stream.filters.OffsetFilter(offsetStart=0.0, offsetEnd=None, *, includeEndBoundary=True, mustFinishInSpan=False, mustBeginInSpan=True, includeElementsThatEndAtStart=True, stopAfterEnd=True)¶
see
getElementsByOffset()for docs on this filter.Finds elements that match a given offset range.
Changed in v5.5: all arguments except offsetStart and offsetEnd are keyword only.
Changed in v6.5: stopAfterEnd can be set globally.
OffsetFilter bases
OffsetFilter read-only properties
Read-only properties inherited from ProtoM21Object:
OffsetFilter methods
- OffsetFilter.isElementOffsetInRange(e, offset, *, stopAfterEnd=False) bool¶
Given an element, offset, and stream, return True, False, or raise StopIteration if the element is in the range, not in the range, or (if stopAfterEnd is True) is not and no future elements will be in the range.
Factored out from __call__ to be used by OffsetHierarchyFilter, and it’s just a beast. :-)
Methods inherited from StreamFilter:
Methods inherited from ProtoM21Object:
OffsetHierarchyFilter¶
- class music21.stream.filters.OffsetHierarchyFilter(offsetStart=0.0, offsetEnd=None, *, includeEndBoundary=True, mustFinishInSpan=False, mustBeginInSpan=True, includeElementsThatEndAtStart=True, stopAfterEnd=True)¶
see
getElementsByOffsetInHierarchy()for docs on this filter.Finds elements that match a given offset range in the hierarchy.
Do not call .stream() afterwards or unstable results can occur.
OffsetHierarchyFilter bases
OffsetHierarchyFilter read-only properties
Read-only properties inherited from ProtoM21Object:
OffsetHierarchyFilter methods
Methods inherited from OffsetFilter:
Methods inherited from StreamFilter:
Methods inherited from ProtoM21Object:
StreamFilter¶
- class music21.stream.filters.StreamFilter¶
A filter is an object that when called returns True or False about whether an element in the stream matches the filter.
A lambda expression: lambda el, iterator: True if EXP else False can also be used as a very simple filter.
Filters can also raise StopIteration if no other elements in this Stream can possibly fit.
The StreamFilter object does nothing in itself but subclasses are crucial in filtering out elements according to different properties.
Each subclass of StreamFilter should set its .derivationStr which is a string that determines which a derived Stream based on this filter should be called
>>> sf = stream.filters.StreamFilter() >>> sf <music21.stream.filters.StreamFilter object at 0x1051de828> >>> sf.derivationStr 'streamFilter'
StreamFilters also have these two properties, inherited from
ProtoM21Objectwhich help in certain debug operations>>> 'StreamFilter' in sf.classSet True >>> sf.classes ('StreamFilter', 'ProtoM21Object', 'object')
StreamFilter bases
StreamFilter read-only properties
Read-only properties inherited from ProtoM21Object:
StreamFilter methods
- StreamFilter.reset()¶
Methods inherited from ProtoM21Object: