Move 'iterable' module
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from smnp.module.note.function import tuplet, transpose, semitones, pause, octave, duration
|
||||
from smnp.module.note.function import tuplet, transpose, semitones, pause, octave, duration, interval
|
||||
|
||||
functions = [ pause.function, semitones.function, transpose.function, tuplet.function ]
|
||||
functions = [ pause.function, semitones.function, interval.function, transpose.function, tuplet.function ]
|
||||
methods = [ duration.function, octave.function ]
|
||||
25
smnp/module/note/function/interval.py
Normal file
25
smnp/module/note/function/interval.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from smnp.library.model import Function, CombinedFunction
|
||||
from smnp.library.signature import varargSignature, ofTypes, listOf
|
||||
from smnp.note.interval import intervalToString
|
||||
from smnp.note.model import Note
|
||||
from smnp.type.model import Type
|
||||
|
||||
_signature1 = varargSignature(ofTypes(Type.NOTE, Type.INTEGER))
|
||||
def _function1(env, vararg):
|
||||
withoutPauses = [note.value for note in vararg if note.type == Type.NOTE]
|
||||
if len(withoutPauses) < 2:
|
||||
return Type.list([])
|
||||
semitones = [Note.checkInterval(withoutPauses[i-1], withoutPauses[i]) for i in range(1, len(withoutPauses))]
|
||||
return Type.list([Type.string(intervalToString(s)) for s in semitones]).decompose()
|
||||
|
||||
|
||||
_signature2 = varargSignature(listOf(Type.NOTE, Type.INTEGER))
|
||||
def _function2(env, vararg):
|
||||
return Type.list([_function1(env, arg.value) for arg in vararg]).decompose()
|
||||
|
||||
|
||||
function = CombinedFunction(
|
||||
'interval',
|
||||
Function(_signature1, _function1),
|
||||
Function(_signature2, _function2)
|
||||
)
|
||||
Reference in New Issue
Block a user