1 package com
.wha
.modsynth
;
4 import scala
.actors
.Actor
._
5 import scala
.collection
.mutable
._
8 case class Connect(client
: Module
) extends Connector
9 case class Disconnect(client
: Module
) extends Connector
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
{
17 var outputs
:List
[Module
] = Nil
18 var controls
:Map
[String
, Double
] = new HashMap
[String
, Double
]
22 def log(s
: String
): Unit
= () // println(name + ": " + s)
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]]) = {
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
) {
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
{