Refactor/unify modules files structure

This commit is contained in:
2020-03-20 20:29:25 +01:00
parent 730d3803f0
commit 7bccb28080
50 changed files with 138 additions and 96 deletions

View File

@@ -1,4 +1,4 @@
package io.smnp.ext
package io.smnp.ext.provider
import io.smnp.callable.function.Function
import io.smnp.callable.method.Method

View File

@@ -1,4 +1,4 @@
package io.smnp.ext
package io.smnp.ext.provider
import io.smnp.interpreter.LanguageModuleInterpreter
import io.smnp.type.module.Module

View File

@@ -1,4 +1,4 @@
package io.smnp.ext
package io.smnp.ext.provider
import io.smnp.environment.Environment
import io.smnp.interpreter.LanguageModuleInterpreter

View File

@@ -1,7 +1,8 @@
package io.smnp.ext
package io.smnp.ext.provider
import io.smnp.callable.function.Function
import io.smnp.callable.method.Method
import io.smnp.ext.provider.ModuleProvider
import io.smnp.interpreter.LanguageModuleInterpreter
import io.smnp.type.module.Module

View File

@@ -1,6 +1,7 @@
package io.smnp.ext
package io.smnp.ext.registry
import io.smnp.environment.Environment
import io.smnp.ext.provider.ModuleProvider
interface ModuleRegistry {
fun requestModuleProviderForPath(path: String): ModuleProvider?

View File

@@ -8,7 +8,7 @@ import io.smnp.environment.DefaultEnvironment
import io.smnp.error.EnvironmentException
import io.smnp.error.PositionException
import io.smnp.error.SmnpException
import io.smnp.ext.DefaultModuleRegistry
import io.smnp.ext.registry.DefaultModuleRegistry
import io.smnp.interpreter.DefaultInterpreter
import io.smnp.preset.PresetProvider.providePresetCode
import io.smnp.type.model.Value

View File

@@ -5,9 +5,9 @@ import io.smnp.callable.method.Method
import io.smnp.callable.signature.ActualSignatureFormatter.format
import io.smnp.error.FunctionInvocationException
import io.smnp.error.MethodInvocationException
import io.smnp.ext.DefaultModuleRegistry
import io.smnp.ext.DefaultModuleRegistry.requestModuleProviderForPath
import io.smnp.ext.ModuleProvider
import io.smnp.ext.registry.DefaultModuleRegistry
import io.smnp.ext.registry.DefaultModuleRegistry.requestModuleProviderForPath
import io.smnp.ext.provider.ModuleProvider
import io.smnp.interpreter.DefaultLanguageModuleInterpreter
import io.smnp.runtime.model.CallStack
import io.smnp.type.model.Value

View File

@@ -1,7 +1,8 @@
package io.smnp.ext
package io.smnp.ext.registry
import io.smnp.environment.Environment
import io.smnp.error.ModuleException
import io.smnp.ext.provider.ModuleProvider
import org.pf4j.DefaultPluginManager
import java.nio.file.Paths

View File

@@ -1,5 +1,6 @@
package io.smnp.ext
package io.smnp.ext.collection
import io.smnp.ext.provider.LanguageModuleProvider
import org.pf4j.Extension
@Extension

View File

@@ -1,6 +1,7 @@
package io.smnp.ext
package io.smnp.ext.debug
import io.smnp.ext.function.StackTraceFuction
import io.smnp.ext.provider.NativeModuleProvider
import io.smnp.ext.debug.function.StackTraceFuction
import org.pf4j.Extension
@Extension

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.function
package io.smnp.ext.debug.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool

View File

@@ -1,6 +1,6 @@
package io.smnp.ext.io
import io.smnp.ext.NativeModuleProvider
import io.smnp.ext.provider.NativeModuleProvider
import io.smnp.ext.io.function.PrintlnFunction
import io.smnp.ext.io.function.ReadFunction
import org.pf4j.Extension

View File

@@ -1,6 +1,6 @@
package io.smnp.ext.lang
import io.smnp.ext.NativeModuleProvider
import io.smnp.ext.provider.NativeModuleProvider
import io.smnp.ext.lang.constructor.IntConstructor
import io.smnp.ext.lang.constructor.NoteConstructor
import io.smnp.ext.lang.function.TypeOfFunction

View File

@@ -1,12 +0,0 @@
package io.smnp.ext
import io.smnp.ext.function.ModuloFunction
import io.smnp.ext.function.RandomFunction
import io.smnp.ext.function.RangeFunction
import org.pf4j.Extension
@Extension
class MathModule : HybridModuleProvider("smnp.math") {
override fun functions() = listOf(ModuloFunction(), RangeFunction(), RandomFunction())
override fun dependencies() = listOf("smnp.lang", "smnp.collection")
}

View File

@@ -0,0 +1,16 @@
package io.smnp.ext.math
import io.smnp.ext.provider.HybridModuleProvider
import io.smnp.ext.math.function.ModuloFunction
import io.smnp.ext.math.function.RandomFunction
import io.smnp.ext.math.function.RangeFunction
import org.pf4j.Extension
@Extension
class MathModule : HybridModuleProvider("smnp.math") {
override fun functions() = listOf(
ModuloFunction(), RangeFunction(),
RandomFunction()
)
override fun dependencies() = listOf("smnp.lang", "smnp.collection")
}

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.function
package io.smnp.ext.math.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.function
package io.smnp.ext.math.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.function
package io.smnp.ext.math.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool

View File

@@ -1,7 +1,8 @@
package io.smnp.ext
package io.smnp.ext.mic
import io.smnp.ext.function.MicLevelFunction
import io.smnp.ext.function.WaitFunction
import io.smnp.ext.provider.NativeModuleProvider
import io.smnp.ext.mic.function.MicLevelFunction
import io.smnp.ext.mic.function.WaitFunction
import org.pf4j.Extension
@Extension

View File

@@ -1,9 +1,9 @@
package io.smnp.ext.function
package io.smnp.ext.mic.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool
import io.smnp.callable.signature.Signature.Companion.simple
import io.smnp.ext.mic.TestMicrophoneLevelLoop
import io.smnp.ext.mic.lib.loop.TestMicrophoneLevelLoop
import io.smnp.type.model.Value
class MicLevelFunction : Function("micLevel") {

View File

@@ -1,9 +1,9 @@
package io.smnp.ext.function
package io.smnp.ext.mic.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool
import io.smnp.callable.signature.Signature.Companion.simple
import io.smnp.ext.mic.SoundListenerLoop
import io.smnp.ext.mic.lib.loop.SoundListenerLoop
import io.smnp.type.enumeration.DataType.INT
import io.smnp.type.matcher.Matcher.Companion.ofType
import io.smnp.type.model.Value
@@ -11,7 +11,10 @@ import io.smnp.type.model.Value
class WaitFunction : Function("wait") {
override fun define(new: FunctionDefinitionTool) {
new function simple(ofType(INT), ofType(INT)) body { _, (inThreshold, outThreshold) ->
val loop = SoundListenerLoop(inThreshold.value as Int, outThreshold.value as Int)
val loop = SoundListenerLoop(
inThreshold.value as Int,
outThreshold.value as Int
)
loop.run()
Value.void()
}

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.mic
package io.smnp.ext.mic.lib.loop
import io.smnp.error.CustomException
import javax.sound.sampled.AudioFormat

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.mic
package io.smnp.ext.mic.lib.loop
class SoundListenerLoop(private val inThreshold: Int, private val outThreshold: Int) : MicrophoneLevelLoop() {
private var noiseReached = false

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.mic
package io.smnp.ext.mic.lib.loop
import kotlin.math.min

View File

@@ -1,9 +1,10 @@
package io.smnp.ext
package io.smnp.ext.midi
import io.smnp.environment.Environment
import io.smnp.ext.function.MidiFunction
import io.smnp.ext.function.MidiHelpFunction
import io.smnp.ext.midi.Midi
import io.smnp.ext.provider.NativeModuleProvider
import io.smnp.ext.midi.function.MidiFunction
import io.smnp.ext.midi.function.MidiHelpFunction
import io.smnp.ext.midi.lib.midi.Midi
import org.pf4j.Extension
@Extension

View File

@@ -1,11 +1,11 @@
package io.smnp.ext.function
package io.smnp.ext.midi.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool
import io.smnp.callable.signature.Signature.Companion.simple
import io.smnp.callable.signature.Signature.Companion.vararg
import io.smnp.error.CustomException
import io.smnp.ext.midi.Midi
import io.smnp.ext.midi.lib.midi.Midi
import io.smnp.type.enumeration.DataType.*
import io.smnp.type.matcher.Matcher.Companion.anyType
import io.smnp.type.matcher.Matcher.Companion.listOf

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.function
package io.smnp.ext.midi.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool
@@ -6,7 +6,7 @@ import io.smnp.callable.signature.Signature.Companion.simple
import io.smnp.data.entity.Note
import io.smnp.data.enumeration.Pitch
import io.smnp.error.CustomException
import io.smnp.ext.midi.Midi
import io.smnp.ext.midi.lib.midi.Midi
import io.smnp.math.Fraction
import io.smnp.type.enumeration.DataType.*
import io.smnp.type.matcher.Matcher.Companion.ofType

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.midi
package io.smnp.ext.midi.lib.compiler
import io.smnp.data.entity.Note
import javax.sound.midi.Track

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.midi
package io.smnp.ext.midi.lib.compiler
import io.smnp.data.entity.Note
import javax.sound.midi.Track

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.midi
package io.smnp.ext.midi.lib.compiler
import io.smnp.data.entity.Note
import io.smnp.error.EvaluationException
@@ -91,7 +91,10 @@ abstract class SequenceCompiler {
}
private fun allNotesOff(channel: Int, tick: Long): MidiEvent {
return event(Command.CONTROL_CHANGE, channel, Data1.ALL_NOTES_OFF, Data2.ZERO, tick)
return event(
Command.CONTROL_CHANGE, channel,
Data1.ALL_NOTES_OFF,
Data2.ZERO, tick)
}
private fun event(command: Int, channel: Int, data1: Int, data2: Int, tick: Long): MidiEvent {

View File

@@ -1,5 +1,8 @@
package io.smnp.ext.midi
package io.smnp.ext.midi.lib.midi
import io.smnp.ext.midi.lib.compiler.DefaultSequenceCompiler
import io.smnp.ext.midi.lib.compiler.PpqSequenceCompiler
import io.smnp.ext.midi.lib.compiler.SequenceCompiler
import io.smnp.util.config.ConfigMap
import java.io.File
import javax.sound.midi.MidiSystem
@@ -29,12 +32,17 @@ object Midi {
}
fun with(config: ConfigMap): SequenceExecutor {
return SequenceExecutor(sequencer, config)
return SequenceExecutor(
sequencer,
config
)
}
class SequenceExecutor(private val sequencer: Sequencer, private val config: ConfigMap) {
fun play(lines: List<List<Any>>) {
val sequence = Sequence(Sequence.PPQ, config.getUnwrappedOrDefault("ppq", DEFAULT_PPQ))
val sequence = Sequence(Sequence.PPQ, config.getUnwrappedOrDefault("ppq",
DEFAULT_PPQ
))
provideCompiler(config).compileLines(lines, sequence)
play(sequence)
writeToFile(sequence)
@@ -59,7 +67,9 @@ object Midi {
}
fun play(channels: Map<Int, List<List<Any>>>) {
val sequence = Sequence(Sequence.PPQ, config.getUnwrappedOrDefault("ppq", DEFAULT_PPQ))
val sequence = Sequence(Sequence.PPQ, config.getUnwrappedOrDefault("ppq",
DEFAULT_PPQ
))
provideCompiler(config).compileChannels(channels, sequence)
play(sequence)
writeToFile(sequence)

View File

@@ -1,6 +1,6 @@
package io.smnp.ext.musictools
import io.smnp.ext.LanguageModuleProvider
import io.smnp.ext.provider.LanguageModuleProvider
import org.pf4j.Extension
@Extension

View File

@@ -1,5 +1,6 @@
package io.smnp.ext
package io.smnp.ext.music
import io.smnp.ext.provider.LanguageModuleProvider
import org.pf4j.Extension
@Extension

View File

@@ -1,9 +1,10 @@
package io.smnp.ext
package io.smnp.ext.synth
import io.smnp.environment.Environment
import io.smnp.ext.function.SynthFunction
import io.smnp.ext.function.WaveFunction
import io.smnp.ext.synth.Synthesizer
import io.smnp.ext.provider.HybridModuleProvider
import io.smnp.ext.synth.function.SynthFunction
import io.smnp.ext.synth.function.WaveFunction
import io.smnp.ext.synth.lib.synthesizer.Synthesizer
import org.pf4j.Extension
@Extension

View File

@@ -1,12 +1,12 @@
package io.smnp.ext.function
package io.smnp.ext.synth.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool
import io.smnp.callable.signature.Signature
import io.smnp.callable.signature.Signature.Companion.simple
import io.smnp.ext.synth.Synthesizer
import io.smnp.ext.synth.Wave
import io.smnp.ext.synth.WaveCompiler
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
@@ -26,14 +26,20 @@ class SynthFunction : Function("synth") {
listOf(DataType.NOTE, INT, DataType.STRING),
Matcher.mapOfMatchers(Matcher.ofType(DataType.STRING), Matcher.anyType())
) body { _, (config, vararg) ->
val compiler = WaveCompiler(config, Synthesizer.SAMPLING_RATE)
val compiler = WaveCompiler(
config,
Synthesizer.SAMPLING_RATE
)
val wave = compiler.compileLines(vararg.unwrapCollections() as List<List<Value>>)
Synthesizer.synth(wave)
Value.void()
}
new function Signature.vararg(listOf(DataType.NOTE, INT, DataType.STRING)) body { _, (vararg) ->
val compiler = WaveCompiler(Value.map(emptyMap()), Synthesizer.SAMPLING_RATE)
val compiler = WaveCompiler(
Value.map(emptyMap()),
Synthesizer.SAMPLING_RATE
)
val wave = compiler.compileLines(vararg.unwrapCollections() as List<List<Value>>)
Synthesizer.synth(wave)
Value.void()

View File

@@ -1,10 +1,10 @@
package io.smnp.ext.function
package io.smnp.ext.synth.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool
import io.smnp.callable.signature.Signature
import io.smnp.ext.synth.Synthesizer
import io.smnp.ext.synth.WaveCompiler
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
@@ -27,7 +27,8 @@ class WaveFunction : Function("wave") {
}
new function Signature.vararg(listOf(NOTE, INT, STRING)) body { _, (vararg) ->
val compiler = WaveCompiler(Value.map(emptyMap()), Synthesizer.SAMPLING_RATE)
val compiler =
WaveCompiler(Value.map(emptyMap()), Synthesizer.SAMPLING_RATE)
val wave = compiler.compileLines(vararg.unwrapCollections() as List<List<Value>>)

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.synth
package io.smnp.ext.synth.lib.envelope
class AdsrEnvelope(private val p1: Double, private val p2: Double, private val p3: Double, private val s: Double) : Envelope() {

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.synth
package io.smnp.ext.synth.lib.envelope
import io.smnp.type.enumeration.DataType.FLOAT
import io.smnp.type.matcher.Matcher.Companion.ofType

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.synth
package io.smnp.ext.synth.lib.envelope
class ConstantEnvelope : Envelope() {
override fun name() = "Constant"

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.synth
package io.smnp.ext.synth.lib.envelope
import io.smnp.type.model.Value

View File

@@ -1,5 +1,6 @@
package io.smnp.ext.synth
package io.smnp.ext.synth.lib.envelope
import io.smnp.ext.synth.lib.wave.Wave
import org.knowm.xchart.QuickChart
import org.knowm.xchart.SwingWrapper

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.synth
package io.smnp.ext.synth.lib.envelope
import io.smnp.error.CustomException
import io.smnp.type.enumeration.DataType

View File

@@ -1,5 +1,6 @@
package io.smnp.ext.synth
package io.smnp.ext.synth.lib.synthesizer
import io.smnp.ext.synth.lib.wave.Wave
import javax.sound.sampled.AudioFormat
import javax.sound.sampled.AudioSystem
import javax.sound.sampled.SourceDataLine

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.synth
package io.smnp.ext.synth.lib.wave
import org.knowm.xchart.QuickChart
import org.knowm.xchart.SwingWrapper

View File

@@ -1,8 +1,10 @@
package io.smnp.ext.synth
package io.smnp.ext.synth.lib.wave
import io.smnp.data.entity.Note
import io.smnp.data.enumeration.Pitch
import io.smnp.error.CustomException
import io.smnp.ext.synth.lib.envelope.Envelope
import io.smnp.ext.synth.lib.envelope.EnvelopeFactory
import io.smnp.math.Fraction
import io.smnp.type.enumeration.DataType
import io.smnp.type.matcher.Matcher

View File

@@ -1,10 +0,0 @@
package io.smnp.ext
import io.smnp.ext.function.ExitFunction
import io.smnp.ext.function.SleepFunction
import org.pf4j.Extension
@Extension
class SystemModule : NativeModuleProvider("smnp.system") {
override fun functions() = listOf(ExitFunction(), SleepFunction())
}

View File

@@ -0,0 +1,11 @@
package io.smnp.ext.system
import io.smnp.ext.provider.NativeModuleProvider
import io.smnp.ext.system.function.ExitFunction
import io.smnp.ext.system.function.SleepFunction
import org.pf4j.Extension
@Extension
class SystemModule : NativeModuleProvider("smnp.system") {
override fun functions() = listOf(ExitFunction(), SleepFunction())
}

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.function
package io.smnp.ext.system.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool

View File

@@ -1,4 +1,4 @@
package io.smnp.ext.function
package io.smnp.ext.system.function
import io.smnp.callable.function.Function
import io.smnp.callable.function.FunctionDefinitionTool

View File

@@ -1,5 +1,6 @@
package io.smnp.ext
package io.smnp.ext.text
import io.smnp.ext.provider.LanguageModuleProvider
import org.pf4j.Extension
@Extension