Make smnp.audio.synth::synth and smnp.audio.synth::wave functions accepting configMap-based commands

This commit is contained in:
2020-04-06 13:00:48 +02:00
parent e7e76e9165
commit af48d6b640
2 changed files with 22 additions and 15 deletions

View File

@@ -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()
}

View File

@@ -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())
}