changed Test
[ModSynth.git] / com / wha / modsynth / Module.scala
blob11fb7b8127335d6b887b277527a0a89786213992
1 package com.wha.modsynth;
3 import scala.actors._
4 import scala.actors.Actor._
5 import scala.collection.mutable._
7 trait Connector
8 case class Connect(client: Module) extends Connector
9 case class Disconnect(client: Module) extends Connector
11 trait Signal
12 case class Control(name: String, f: Double) extends Signal
13 case class Audio(buf: List[List[float]]) extends Signal
15 trait Module extends Actor {
16 var input: Module = _
17 var outputs:List[Module] = Nil
18 var controls:Map[String, Double] = new HashMap[String, Double]
20 val name: String
22 def log(s: String): Unit = () // println(name + ": " + s)
24 def act() {
25 while(true) {
26 log("in act")
27 receive {
28 case Connect(client) => {outputs = client :: outputs; log("Output client: " + client.name)}
29 case Disconnect(client) => {outputs = outputs filter(x => x != client); log("Output client: " + client.name)}
30 case Audio(buf) => {doAudio(buf) ; log("Audio(client)")}
31 case Control(name, f) => {doControl(name, f) ; log("Audio(client)")}
36 def doAudio(buf: List[List[float]]) = {
37 log("in doAudio")
38 val b = transformAudio(buf)
39 outputs foreach (x => {log("sending audio to " + x.name); x ! new Audio(b)})
42 def doControl(name: String, f: Double) {
43 controls += name -> f
46 // a null definition since no inputs
47 def transformAudio(buf: List[List[float]]): List[List[float]] = buf
50 case class CopyModule(n: String) extends Module {
51 val name = n