Make smnp.audio.synth::synth and smnp.audio.synth::wave functions accepting configMap-based commands
This commit is contained in:
@@ -7,10 +7,12 @@ import io.smnp.callable.signature.Signature.Companion.simple
|
||||
import io.smnp.ext.synth.lib.synthesizer.Synthesizer
|
||||
import io.smnp.ext.synth.lib.wave.Wave
|
||||
import io.smnp.ext.synth.lib.wave.WaveCompiler
|
||||
import io.smnp.type.enumeration.DataType
|
||||
import io.smnp.type.enumeration.DataType.INT
|
||||
import io.smnp.type.matcher.Matcher
|
||||
import io.smnp.type.enumeration.DataType.*
|
||||
import io.smnp.type.matcher.Matcher.Companion.anyType
|
||||
import io.smnp.type.matcher.Matcher.Companion.listOf
|
||||
import io.smnp.type.matcher.Matcher.Companion.listOfMatchers
|
||||
import io.smnp.type.matcher.Matcher.Companion.mapOfMatchers
|
||||
import io.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import io.smnp.type.model.Value
|
||||
|
||||
class SynthFunction : Function("synth") {
|
||||
@@ -23,24 +25,30 @@ class SynthFunction : Function("synth") {
|
||||
}
|
||||
|
||||
new function Signature.vararg(
|
||||
listOf(DataType.NOTE, INT, DataType.STRING),
|
||||
Matcher.mapOfMatchers(Matcher.ofType(DataType.STRING), Matcher.anyType())
|
||||
listOfMatchers(ofType(NOTE), ofType(INT), mapOfMatchers(ofType(STRING), anyType())),
|
||||
mapOfMatchers(ofType(STRING), anyType())
|
||||
) body { _, (config, vararg) ->
|
||||
val compiler = WaveCompiler(
|
||||
config,
|
||||
Synthesizer.SAMPLING_RATE
|
||||
)
|
||||
val wave = compiler.compileLines(vararg.unwrapCollections() as List<List<Value>>)
|
||||
val wave = compiler.compileLines((vararg.value as List<Value>).map { it.value as List<Value> })
|
||||
Synthesizer.synth(wave)
|
||||
Value.void()
|
||||
}
|
||||
|
||||
new function Signature.vararg(listOf(DataType.NOTE, INT, DataType.STRING)) body { _, (vararg) ->
|
||||
new function Signature.vararg(
|
||||
listOfMatchers(
|
||||
ofType(NOTE),
|
||||
ofType(INT),
|
||||
mapOfMatchers(ofType(STRING), anyType())
|
||||
)
|
||||
) body { _, (vararg) ->
|
||||
val compiler = WaveCompiler(
|
||||
Value.map(emptyMap()),
|
||||
Synthesizer.SAMPLING_RATE
|
||||
)
|
||||
val wave = compiler.compileLines(vararg.unwrapCollections() as List<List<Value>>)
|
||||
val wave = compiler.compileLines((vararg.value as List<Value>).map { it.value as List<Value> })
|
||||
Synthesizer.synth(wave)
|
||||
Value.void()
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import io.smnp.ext.synth.lib.synthesizer.Synthesizer
|
||||
import io.smnp.ext.synth.lib.wave.WaveCompiler
|
||||
import io.smnp.type.enumeration.DataType.*
|
||||
import io.smnp.type.matcher.Matcher.Companion.anyType
|
||||
import io.smnp.type.matcher.Matcher.Companion.listOf
|
||||
import io.smnp.type.matcher.Matcher.Companion.listOfMatchers
|
||||
import io.smnp.type.matcher.Matcher.Companion.mapOfMatchers
|
||||
import io.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import io.smnp.type.model.Value
|
||||
@@ -16,21 +16,20 @@ class WaveFunction : Function("wave") {
|
||||
|
||||
override fun define(new: FunctionDefinitionTool) {
|
||||
new function Signature.vararg(
|
||||
listOf(NOTE, INT, STRING),
|
||||
listOfMatchers(ofType(NOTE), ofType(INT), mapOfMatchers(ofType(STRING), anyType())),
|
||||
mapOfMatchers(ofType(STRING), anyType())
|
||||
) body { _, (config, vararg) ->
|
||||
val compiler = WaveCompiler(config, Synthesizer.SAMPLING_RATE)
|
||||
|
||||
val wave = compiler.compileLines(vararg.unwrapCollections() as List<List<Value>>)
|
||||
val wave = compiler.compileLines((vararg.value as List<Value>).map { it.value as List<Value> })
|
||||
|
||||
Value.list(wave.bytes.map { Value.int(it.toInt()) }.toList())
|
||||
}
|
||||
|
||||
new function Signature.vararg(listOf(NOTE, INT, STRING)) body { _, (vararg) ->
|
||||
val compiler =
|
||||
WaveCompiler(Value.map(emptyMap()), Synthesizer.SAMPLING_RATE)
|
||||
new function Signature.vararg(listOfMatchers(ofType(NOTE), ofType(INT), mapOfMatchers(ofType(STRING), anyType()))) body { _, (vararg) ->
|
||||
val compiler = WaveCompiler(Value.map(emptyMap()), Synthesizer.SAMPLING_RATE)
|
||||
|
||||
val wave = compiler.compileLines(vararg.unwrapCollections() as List<List<Value>>)
|
||||
val wave = compiler.compileLines((vararg.value as List<Value>).map { it.value as List<Value> })
|
||||
|
||||
Value.list(wave.bytes.map { Value.int(it.toInt()) }.toList())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user