From 83a8ccc6e5d2ea5c19c862806a10abadc1ac620b Mon Sep 17 00:00:00 2001 From: "Edumo.net" Date: Tue, 8 Mar 2016 01:09:42 +0100 Subject: [PATCH 01/10] mods for mic init --- src/app/sound/sound-system.coffee | 5 ++- src/app/sound/webAudioApi.coffee | 58 ++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 2 deletions(-) mode change 100644 => 100755 src/app/sound/sound-system.coffee mode change 100644 => 100755 src/app/sound/webAudioApi.coffee diff --git a/src/app/sound/sound-system.coffee b/src/app/sound/sound-system.coffee old mode 100644 new mode 100755 index 6178cd06..fee4ad35 --- a/src/app/sound/sound-system.coffee +++ b/src/app/sound/sound-system.coffee @@ -18,6 +18,7 @@ class SoundSystem addToScope: (scope) -> scope.addFunction('play', (soundName, pattern) => @play(soundName, pattern)) + scope.addFunction('readMic', () => @readMic()) clearPatterns: -> @playPatterns = [] @@ -33,6 +34,9 @@ class SoundSystem pattern: pattern }) + readMic: () -> + @audioApi.readMic() + playSounds: (beat) => for p in @playPatterns if (@patternPlayer.runPattern(p.pattern, beat)) @@ -40,4 +44,3 @@ class SoundSystem @clearPatterns() module.exports = SoundSystem - diff --git a/src/app/sound/webAudioApi.coffee b/src/app/sound/webAudioApi.coffee old mode 100644 new mode 100755 index 2fb46fc6..17a1b01a --- a/src/app/sound/webAudioApi.coffee +++ b/src/app/sound/webAudioApi.coffee @@ -9,10 +9,67 @@ class WebAudioApi @context = new AudioContext() @soundout = @context.destination @samples = {} + @bufferSize = 4096 + @total = 0 + @bufL = [] + @bufR = [] + @getUserMedia audio:true, @gotStream getTime: () => @context.currentTime * 1000 + getUserMedia: (dictionary, callback) -> + try + navigator.getMedia = navigator.getUserMedia || + navigator.webkitGetUserMedia || + navigator.mozGetUserMedia || + navigator.msGetUserMedia + + navigator.getMedia dictionary, callback, (err) -> + console.log("The following error occured: " + err); + catch e + throw "Could not getMedia" + + + callback: (data) => + console.log('ESTAMOS YA EN EL CALLBACCKKKKKSS') + + + gotStream: (stream) => + @bufLength = @length * @context.sampleRate + + # get an AudioNode from the stream + @mediaStreamSource = @context.createMediaStreamSource stream + + # binding to window because otherwise it'll + # get garbage collected + window.microphoneProcessingNode = @createNode() + @mediaStreamSource.connect window.microphoneProcessingNode + window.microphoneProcessingNode.connect @context.destination + + createNode: => + node = @context.createScriptProcessor @bufferSize, 2, 2 + node.onaudioprocess = (e) => + left = e.inputBuffer.getChannelData(0) + right = e.inputBuffer.getChannelData(1) + console.log('received audio ' +left[0]) + # clone the samples + @bufL.push new Float32Array(left) + @bufR.push new Float32Array(right) + + @total += @bufferSize + if @total > @bufLength + outBuffer = @prepareBuffer() + @callback outBuffer + + node + + activateMic: () => + console.log('hola +++++++++++++++++++++++') + + readMic: () => + @bufL + loadSample: (name, path) => url = path request = new XMLHttpRequest() @@ -38,4 +95,3 @@ class WebAudioApi source.start(0) module.exports = WebAudioApi - From 9115c300abf59677d81cd61597ff0647c8e76e65 Mon Sep 17 00:00:00 2001 From: "Edumo.net" Date: Tue, 8 Mar 2016 15:35:39 +0100 Subject: [PATCH 02/10] added micro demo working with raw leftata --- src/app/sound/webAudioApi.coffee | 8 ++++---- src/programs/demos/soundmicdemo.lcl.yaml | 12 ++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 src/programs/demos/soundmicdemo.lcl.yaml diff --git a/src/app/sound/webAudioApi.coffee b/src/app/sound/webAudioApi.coffee index 17a1b01a..ae7b65a8 100755 --- a/src/app/sound/webAudioApi.coffee +++ b/src/app/sound/webAudioApi.coffee @@ -9,7 +9,7 @@ class WebAudioApi @context = new AudioContext() @soundout = @context.destination @samples = {} - @bufferSize = 4096 + @bufferSize = 1024 @total = 0 @bufL = [] @bufR = [] @@ -52,10 +52,10 @@ class WebAudioApi node.onaudioprocess = (e) => left = e.inputBuffer.getChannelData(0) right = e.inputBuffer.getChannelData(1) - console.log('received audio ' +left[0]) + #console.log('received audio ' +left[0]) # clone the samples - @bufL.push new Float32Array(left) - @bufR.push new Float32Array(right) + @bufL = new Float32Array(left) + @bufR = new Float32Array(right) @total += @bufferSize if @total > @bufLength diff --git a/src/programs/demos/soundmicdemo.lcl.yaml b/src/programs/demos/soundmicdemo.lcl.yaml new file mode 100644 index 00000000..6f41698d --- /dev/null +++ b/src/programs/demos/soundmicdemo.lcl.yaml @@ -0,0 +1,12 @@ +submenu: Sound +title: Microphone Demo +code: | + // draw lines like this + audioRaw = (readMic 0) + move -1, 0, 0 + for i in audioRaw + //console.log 'h'+i + move 0.003, 0, 0 + //rotate audioRaw[i] + //console.log audioRaw[i] + box 0.002, 1.0 + audioRaw[i] * 2.0, 0.2 From 39e2ccd8452f04847cd2ef06c663b35d80956b4c Mon Sep 17 00:00:00 2001 From: "Edumo.net" Date: Tue, 8 Mar 2016 20:12:47 +0100 Subject: [PATCH 03/10] adding fft analyzer --- src/app/sound/webAudioApi.coffee | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/app/sound/webAudioApi.coffee b/src/app/sound/webAudioApi.coffee index ae7b65a8..adba7c8c 100755 --- a/src/app/sound/webAudioApi.coffee +++ b/src/app/sound/webAudioApi.coffee @@ -13,6 +13,7 @@ class WebAudioApi @total = 0 @bufL = [] @bufR = [] + @analyser @getUserMedia audio:true, @gotStream getTime: () => @@ -40,10 +41,16 @@ class WebAudioApi # get an AudioNode from the stream @mediaStreamSource = @context.createMediaStreamSource stream - + @analyser = @context.createAnalyser() + + @analyser.fftSize = 1024 + @analyser.smoothingTimeConstant = 0.3 # binding to window because otherwise it'll # get garbage collected window.microphoneProcessingNode = @createNode() + @mediaStreamSource.connect @analyser; + # @analyser.connect @mediaStreamSource; + @mediaStreamSource.connect window.microphoneProcessingNode window.microphoneProcessingNode.connect @context.destination @@ -54,6 +61,11 @@ class WebAudioApi right = e.inputBuffer.getChannelData(1) #console.log('received audio ' +left[0]) # clone the samples + + freqByteData = new Uint8Array @analyser.frequencyBinCount + + @analyser.getByteFrequencyData freqByteData; + @bufL = new Float32Array(left) @bufR = new Float32Array(right) From 2bdbd6a6ab3a28ed429d787e45d306f78c0d6958 Mon Sep 17 00:00:00 2001 From: "Edumo.net" Date: Tue, 8 Mar 2016 23:17:59 +0100 Subject: [PATCH 04/10] start working fft --- src/app/sound/webAudioApi.coffee | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/app/sound/webAudioApi.coffee b/src/app/sound/webAudioApi.coffee index adba7c8c..c6944726 100755 --- a/src/app/sound/webAudioApi.coffee +++ b/src/app/sound/webAudioApi.coffee @@ -13,6 +13,7 @@ class WebAudioApi @total = 0 @bufL = [] @bufR = [] + @fft = [] @analyser @getUserMedia audio:true, @gotStream @@ -42,15 +43,15 @@ class WebAudioApi # get an AudioNode from the stream @mediaStreamSource = @context.createMediaStreamSource stream @analyser = @context.createAnalyser() - - @analyser.fftSize = 1024 + + @analyser.fftSize = 2048 @analyser.smoothingTimeConstant = 0.3 # binding to window because otherwise it'll # get garbage collected window.microphoneProcessingNode = @createNode() @mediaStreamSource.connect @analyser; # @analyser.connect @mediaStreamSource; - + @mediaStreamSource.connect window.microphoneProcessingNode window.microphoneProcessingNode.connect @context.destination @@ -61,11 +62,25 @@ class WebAudioApi right = e.inputBuffer.getChannelData(1) #console.log('received audio ' +left[0]) # clone the samples - + freqByteData = new Uint8Array @analyser.frequencyBinCount - - @analyser.getByteFrequencyData freqByteData; - + + @analyser.getByteFrequencyData freqByteData; + numbars = 14 + + for i in [0...numbars] + multipliers = @analyser.frequencyBinCount / numbars + + magnitude = 0 + multipliers = Math.floor ( multipliers ) + offset = i * multipliers + #gotta sum/average the block, or we miss narrow-bandwidth spikes + for j in [0...multipliers] + magnitude += freqByteData[offset + j] + + magnitude = magnitude / multipliers + @fft[i] = magnitude + @bufL = new Float32Array(left) @bufR = new Float32Array(right) @@ -80,7 +95,7 @@ class WebAudioApi console.log('hola +++++++++++++++++++++++') readMic: () => - @bufL + @fft loadSample: (name, path) => url = path From 6bbcaec50b0f076ae324eafa26a854c541421c46 Mon Sep 17 00:00:00 2001 From: "Edumo.net" Date: Tue, 8 Mar 2016 23:20:14 +0100 Subject: [PATCH 05/10] start working fft and example --- src/programs/demos/soundmicdemo.lcl.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/programs/demos/soundmicdemo.lcl.yaml b/src/programs/demos/soundmicdemo.lcl.yaml index 6f41698d..f12f5423 100644 --- a/src/programs/demos/soundmicdemo.lcl.yaml +++ b/src/programs/demos/soundmicdemo.lcl.yaml @@ -4,9 +4,9 @@ code: | // draw lines like this audioRaw = (readMic 0) move -1, 0, 0 - for i in audioRaw + for i in [0...audioRaw.length] //console.log 'h'+i - move 0.003, 0, 0 + move 0.3, 0, 0 //rotate audioRaw[i] //console.log audioRaw[i] - box 0.002, 1.0 + audioRaw[i] * 2.0, 0.2 + box 0.2, 0.1 + audioRaw[i] * 0.02, 0.2 From fae7babbf1a8997a1f3a32c3f9a702d05eec941c Mon Sep 17 00:00:00 2001 From: "Edumo.net" Date: Wed, 9 Mar 2016 00:18:56 +0100 Subject: [PATCH 06/10] start working control of fft vars and smooth --- src/app/sound/sound-system.coffee | 16 +++++++++++++++- src/app/sound/webAudioApi.coffee | 15 +++++++++++---- src/programs/demos/soundmicdemo.lcl.yaml | 2 ++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/app/sound/sound-system.coffee b/src/app/sound/sound-system.coffee index fee4ad35..263d42b7 100755 --- a/src/app/sound/sound-system.coffee +++ b/src/app/sound/sound-system.coffee @@ -18,7 +18,10 @@ class SoundSystem addToScope: (scope) -> scope.addFunction('play', (soundName, pattern) => @play(soundName, pattern)) - scope.addFunction('readMic', () => @readMic()) + scope.addFunction('readMic', (hola) => @readMic()) + scope.addFunction('setSmoothingTimeConstant', (hola) => @setSmoothingTimeConstant(hola)) + scope.addFunction('setNumVars', (value) => @setNumVars(value)) + scope.addFunction('getFFT', (value) => @getFFT(value)) clearPatterns: -> @playPatterns = [] @@ -37,6 +40,17 @@ class SoundSystem readMic: () -> @audioApi.readMic() + + getFFT: (value) -> + @audioApi.readMic()[value] + + + setSmoothingTimeConstant: (value) -> + @audioApi.setSmoothingTimeConstant value + + setNumVars: (value) -> + @audioApi.setNumVars value + playSounds: (beat) => for p in @playPatterns if (@patternPlayer.runPattern(p.pattern, beat)) diff --git a/src/app/sound/webAudioApi.coffee b/src/app/sound/webAudioApi.coffee index c6944726..1a27fb2d 100755 --- a/src/app/sound/webAudioApi.coffee +++ b/src/app/sound/webAudioApi.coffee @@ -15,6 +15,7 @@ class WebAudioApi @bufR = [] @fft = [] @analyser + @numbars = 14 @getUserMedia audio:true, @gotStream getTime: () => @@ -44,7 +45,7 @@ class WebAudioApi @mediaStreamSource = @context.createMediaStreamSource stream @analyser = @context.createAnalyser() - @analyser.fftSize = 2048 + @analyser.fftSize = 1024 @analyser.smoothingTimeConstant = 0.3 # binding to window because otherwise it'll # get garbage collected @@ -66,10 +67,10 @@ class WebAudioApi freqByteData = new Uint8Array @analyser.frequencyBinCount @analyser.getByteFrequencyData freqByteData; - numbars = 14 + #numbars = 14 - for i in [0...numbars] - multipliers = @analyser.frequencyBinCount / numbars + for i in [0...@numbars] + multipliers = @analyser.frequencyBinCount / @numbars magnitude = 0 multipliers = Math.floor ( multipliers ) @@ -97,6 +98,12 @@ class WebAudioApi readMic: () => @fft + setNumVars: (value) => + @numbars = value + + setSmoothingTimeConstant: (smooth) => + @analyser.smoothingTimeConstant = smooth + loadSample: (name, path) => url = path request = new XMLHttpRequest() diff --git a/src/programs/demos/soundmicdemo.lcl.yaml b/src/programs/demos/soundmicdemo.lcl.yaml index f12f5423..5f872414 100644 --- a/src/programs/demos/soundmicdemo.lcl.yaml +++ b/src/programs/demos/soundmicdemo.lcl.yaml @@ -3,6 +3,8 @@ title: Microphone Demo code: | // draw lines like this audioRaw = (readMic 0) + setSmoothingTimeConstant 0.8 + setNumVars 19 move -1, 0, 0 for i in [0...audioRaw.length] //console.log 'h'+i From df69413212c4fc371bb4193b31af794939269974 Mon Sep 17 00:00:00 2001 From: "Edumo.net" Date: Fri, 11 Mar 2016 13:12:49 +0100 Subject: [PATCH 07/10] some clean and added waveform example --- src/app/sound/sound-system.coffee | 17 ++++++++--------- src/app/sound/webAudioApi.coffee | 18 +++++++++++------- src/programs/demos/soundmicdemo.lcl.yaml | 8 +++----- src/programs/demos/soundwaveformdemo.lcl.yaml | 11 +++++++++++ 4 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 src/programs/demos/soundwaveformdemo.lcl.yaml diff --git a/src/app/sound/sound-system.coffee b/src/app/sound/sound-system.coffee index 263d42b7..c3910e86 100755 --- a/src/app/sound/sound-system.coffee +++ b/src/app/sound/sound-system.coffee @@ -18,10 +18,11 @@ class SoundSystem addToScope: (scope) -> scope.addFunction('play', (soundName, pattern) => @play(soundName, pattern)) - scope.addFunction('readMic', (hola) => @readMic()) - scope.addFunction('setSmoothingTimeConstant', (hola) => @setSmoothingTimeConstant(hola)) + scope.addFunction('getFFT', () => @getFFT()) + scope.addFunction('getWaveForm', () => @getWaveForm()) + scope.addFunction('setSmoothingTimeConstant', (value) => @setSmoothingTimeConstant(valuehola)) scope.addFunction('setNumVars', (value) => @setNumVars(value)) - scope.addFunction('getFFT', (value) => @getFFT(value)) + scope.addFunction('getFFTvalue', (value) => @getFFT()[0][value])#TODO this not working clearPatterns: -> @playPatterns = [] @@ -37,13 +38,11 @@ class SoundSystem pattern: pattern }) - readMic: () -> - @audioApi.readMic() - - - getFFT: (value) -> - @audioApi.readMic()[value] + getFFT: () -> + @audioApi.getFFT() + getWaveForm: (value) -> + @audioApi.getWaveForm() setSmoothingTimeConstant: (value) -> @audioApi.setSmoothingTimeConstant value diff --git a/src/app/sound/webAudioApi.coffee b/src/app/sound/webAudioApi.coffee index 1a27fb2d..7c3a34e1 100755 --- a/src/app/sound/webAudioApi.coffee +++ b/src/app/sound/webAudioApi.coffee @@ -11,9 +11,8 @@ class WebAudioApi @samples = {} @bufferSize = 1024 @total = 0 - @bufL = [] - @bufR = [] @fft = [] + @waveform = [] @analyser @numbars = 14 @getUserMedia audio:true, @gotStream @@ -59,14 +58,16 @@ class WebAudioApi createNode: => node = @context.createScriptProcessor @bufferSize, 2, 2 node.onaudioprocess = (e) => - left = e.inputBuffer.getChannelData(0) - right = e.inputBuffer.getChannelData(1) + #console.log('received audio ' +left[0]) # clone the samples freqByteData = new Uint8Array @analyser.frequencyBinCount + timeByteData = new Uint8Array @analyser.frequencyBinCount @analyser.getByteFrequencyData freqByteData; + @analyser.getByteTimeDomainData timeByteData; + @waveform = timeByteData #numbars = 14 for i in [0...@numbars] @@ -82,9 +83,6 @@ class WebAudioApi magnitude = magnitude / multipliers @fft[i] = magnitude - @bufL = new Float32Array(left) - @bufR = new Float32Array(right) - @total += @bufferSize if @total > @bufLength outBuffer = @prepareBuffer() @@ -98,6 +96,12 @@ class WebAudioApi readMic: () => @fft + getFFT: () => + @fft + + getWaveForm: () => + @waveform + setNumVars: (value) => @numbars = value diff --git a/src/programs/demos/soundmicdemo.lcl.yaml b/src/programs/demos/soundmicdemo.lcl.yaml index 5f872414..4bc74ea4 100644 --- a/src/programs/demos/soundmicdemo.lcl.yaml +++ b/src/programs/demos/soundmicdemo.lcl.yaml @@ -1,14 +1,12 @@ submenu: Sound title: Microphone Demo code: | - // draw lines like this - audioRaw = (readMic 0) + audioRaw = (getFFT 0) setSmoothingTimeConstant 0.8 setNumVars 19 - move -1, 0, 0 for i in [0...audioRaw.length] //console.log 'h'+i - move 0.3, 0, 0 + move 0.1, 0, 0 //rotate audioRaw[i] //console.log audioRaw[i] - box 0.2, 0.1 + audioRaw[i] * 0.02, 0.2 + box 0.05, 0.1 + audioRaw[i] * 0.02, 0.2 diff --git a/src/programs/demos/soundwaveformdemo.lcl.yaml b/src/programs/demos/soundwaveformdemo.lcl.yaml new file mode 100644 index 00000000..69d44ca0 --- /dev/null +++ b/src/programs/demos/soundwaveformdemo.lcl.yaml @@ -0,0 +1,11 @@ +submenu: Sound +title: Waveform Demo +code: | + // draw lines like this + audioRaw = (getWaveForm 0) + setSmoothingTimeConstant 0.8 + etNumVars 19 + move -0.5, -2, 0 + for i in [0...audioRaw.length] + move 0.005*i, audioRaw[i] * 0.02, 0 + box 0.0005, 0.05, 0.2 From d0c02c28c277841bdf893fcc16eadcce4558ea2d Mon Sep 17 00:00:00 2001 From: Guy John Date: Tue, 11 Sep 2018 22:23:35 +0100 Subject: [PATCH 08/10] Correctly load fft demo programs --- src/app/programs/programs.coffee | 2 ++ src/app/sound/webAudioApi.coffee | 18 +++++++++--------- src/programs/demos/soundmicdemo.lcl.yaml | 5 +++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/app/programs/programs.coffee b/src/app/programs/programs.coffee index 64e4a709..bf84d87a 100644 --- a/src/app/programs/programs.coffee +++ b/src/app/programs/programs.coffee @@ -40,6 +40,8 @@ programs.demos.industrial = require('./demos/soundindustrial') programs.demos.overscratch = require('./demos/soundoverscratch') programs.demos.trythemall = require('./demos/soundtrythemall') programs.demos.djcastro = require('./demos/sounddjcastro') +programs.demos.fftmic = require('../../programs/demos/soundmicdemo') +programs.demos.fftwave = require('../../programs/demos/soundwaveformdemo') diff --git a/src/app/sound/webAudioApi.coffee b/src/app/sound/webAudioApi.coffee index 7c3a34e1..913b4a69 100755 --- a/src/app/sound/webAudioApi.coffee +++ b/src/app/sound/webAudioApi.coffee @@ -71,17 +71,17 @@ class WebAudioApi #numbars = 14 for i in [0...@numbars] - multipliers = @analyser.frequencyBinCount / @numbars + multipliers = @analyser.frequencyBinCount / @numbars - magnitude = 0 - multipliers = Math.floor ( multipliers ) - offset = i * multipliers - #gotta sum/average the block, or we miss narrow-bandwidth spikes - for j in [0...multipliers] - magnitude += freqByteData[offset + j] + magnitude = 0 + multipliers = Math.floor ( multipliers ) + offset = i * multipliers + #gotta sum/average the block, or we miss narrow-bandwidth spikes + for j in [0...multipliers] + magnitude += freqByteData[offset + j] - magnitude = magnitude / multipliers - @fft[i] = magnitude + magnitude = magnitude / multipliers + @fft[i] = magnitude @total += @bufferSize if @total > @bufLength diff --git a/src/programs/demos/soundmicdemo.lcl.yaml b/src/programs/demos/soundmicdemo.lcl.yaml index 4bc74ea4..d33dee9f 100644 --- a/src/programs/demos/soundmicdemo.lcl.yaml +++ b/src/programs/demos/soundmicdemo.lcl.yaml @@ -1,9 +1,10 @@ submenu: Sound title: Microphone Demo code: | + // draw lines like this audioRaw = (getFFT 0) - setSmoothingTimeConstant 0.8 - setNumVars 19 + setSmoothingTimeConstant 0.8 + setNumVars 19 for i in [0...audioRaw.length] //console.log 'h'+i move 0.1, 0, 0 From cb4fbe036bf22a4bd9263d61b3a51af1ece40d04 Mon Sep 17 00:00:00 2001 From: Guy John Date: Tue, 11 Sep 2018 22:25:32 +0100 Subject: [PATCH 09/10] Fix a couple of silly bugs --- src/app/sound/sound-system.coffee | 2 +- src/programs/demos/soundwaveformdemo.lcl.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/sound/sound-system.coffee b/src/app/sound/sound-system.coffee index c3910e86..d7b7fc62 100755 --- a/src/app/sound/sound-system.coffee +++ b/src/app/sound/sound-system.coffee @@ -20,7 +20,7 @@ class SoundSystem scope.addFunction('play', (soundName, pattern) => @play(soundName, pattern)) scope.addFunction('getFFT', () => @getFFT()) scope.addFunction('getWaveForm', () => @getWaveForm()) - scope.addFunction('setSmoothingTimeConstant', (value) => @setSmoothingTimeConstant(valuehola)) + scope.addFunction('setSmoothingTimeConstant', (value) => @setSmoothingTimeConstant(value)) scope.addFunction('setNumVars', (value) => @setNumVars(value)) scope.addFunction('getFFTvalue', (value) => @getFFT()[0][value])#TODO this not working diff --git a/src/programs/demos/soundwaveformdemo.lcl.yaml b/src/programs/demos/soundwaveformdemo.lcl.yaml index 69d44ca0..0bba0ba3 100644 --- a/src/programs/demos/soundwaveformdemo.lcl.yaml +++ b/src/programs/demos/soundwaveformdemo.lcl.yaml @@ -4,7 +4,7 @@ code: | // draw lines like this audioRaw = (getWaveForm 0) setSmoothingTimeConstant 0.8 - etNumVars 19 + setNumVars 19 move -0.5, -2, 0 for i in [0...audioRaw.length] move 0.005*i, audioRaw[i] * 0.02, 0 From 0ad454ddce2fe06a0ada84baef27b1a0bff5e738 Mon Sep 17 00:00:00 2001 From: Guy John Date: Tue, 11 Sep 2018 22:35:50 +0100 Subject: [PATCH 10/10] Add maintainer note about edumo to readme --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index 94f024ed..8b1b267b 100644 --- a/readme.md +++ b/readme.md @@ -57,6 +57,7 @@ For a more fine-grained look at ideas and bugs, take a look at