diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..efe2e14
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+procedural-musix
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..1bec35e
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/kotlin/AudioSink.kt b/src/main/kotlin/AudioSink.kt
index c3165c6..b834c41 100644
--- a/src/main/kotlin/AudioSink.kt
+++ b/src/main/kotlin/AudioSink.kt
@@ -18,6 +18,7 @@ class AudioSink : Thread() {
get() = chunks.size
fun enqueueChunk(chunk: AudioChunk) {
+ println(chunk.tick)
chunks.add(chunk.toBytes())
}
diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt
index 047ec45..c9140e6 100644
--- a/src/main/kotlin/Main.kt
+++ b/src/main/kotlin/Main.kt
@@ -3,6 +3,7 @@ import Params.TWO_PI
import Params.as_samples
import filter.Compressor
import filter.Limiter
+import java.lang.StrictMath.pow
import kotlin.math.cos
import kotlin.math.pow
import kotlin.math.sin
@@ -35,7 +36,24 @@ class SineWaveGenerator(var tone: Float) : StepGenerator() {
}
}
-
+class RandomGenerator(var tone: Float) :StepGenerator() {
+ val N = 200
+ val loudness = fun(i:Int): Double {
+ return i.toDouble().pow(-0)
+ }
+ var loudnessSum = 0.0
+ init {
+ for (i in 1 .. N)
+ loudnessSum+=loudness(i)
+ }
+ override fun generateSingle(time: Float): Float {
+ var p : Double = 0.0
+ for (i in 1 .. N) {
+ p += sin(time * toFrequency(tone) * TWO_PI * i) * loudness(i)
+ }
+ return (p/loudnessSum).toFloat()
+ }
+}
fun main(args: Array) {
val sink = AudioSink()
@@ -46,7 +64,7 @@ fun main(args: Array) {
gen.globalEffects.add(Compressor(as_samples(.4f).toInt())::apply)
gen.globalEffects.add(Limiter(.9f)::apply)
- gen.generators.add(Chain(SineWaveGenerator(0f)::generate, ArrayList()))
+ gen.generators.add(Chain(RandomGenerator(0f)::generate, ArrayList()))
sink.enqueueChunk(gen.nextChunk())