// // eeg2osc Debug // SERVER s.boot; s.stop; // Testing incoming traffic OSCFunc.trace(true); OSCFunc.trace(false); // Receive OSC NetAddr.langPort; NetAddr.localAddr; thisProcess.openPorts; // MIDI Settings MIDIClient.init; MIDIClient.sources; MIDIIn.findPort; // Midi Connections MIDIIn.connect(3,MidiClient.sources[9]); MIDIIn.connect(9,MidiClient.sources[17]); MIDIIn.connect(0,MIDIClient.sources[0]) //first number is port number, second is device from sources list // Initialize MIDI Socket ( k = BasicMIDISocket( [\all, \omni], { |note, vel| [note, vel].debug("Note on") }, { |note, vel| [note, vel].debug("\tNote off") } ); ) // cleanup ( MIDIIn.removeFuncFrom(\noteOn, ~noteOnFunc); MIDIIn.removeFuncFrom(\noteOff, ~noteOffFunc); ) // Quarks Settings Quarks.gui; Quarks.openFolder; Quarks.save("~/Music/sc/quarks.txt"); Quarks.clear; // Load Synths SCLOrkSynths.gui SCLOrkSynths.directory SCLOrkSynths.load SCLOrkSynths.synthDictionary SynthDefPool.gui SInstruments.openHelpFile Quarks.install("OpenBCI-SuperCollider") Synth(\midisynth1) // Define Datapoints // ( o = { |msg| //if(msg[0] != '/status.reply' // && msg[0] !='n_go' //) { if(msg[0] == '/eeg') { "%\n".postf(msg); ~time = msg[1]; ~signal = msg[2]; ~atn = msg[3]; ~med = msg[4]; ~delta = msg[5]; ~theta = msg[6]; ~l_alpha = msg[7]; ~h_alpha = msg[8]; ~l_beta = msg[9]; ~h_beta = msg[10]; ~l_gamma = msg[11]; ~m_gamma = msg[12]; }}; ) thisProcess.addOSCRecvFunc(o); thisProcess.removeOSCRecvFunc(o); // Print Datapoints // (~data = { ~time.postln; ~atn.postln; ~med.postln; ~delta.postln; ~theta.postln; ~l_alpha.postln; ~h_alpha.postln; ~l_beta.postln; ~h_beta.postln; ~l_gamma.postln; ~m_gamma.postln; };) ~data.value() // Print Labeled Data // (~printData = { postln(""); postln("Time \t\t" + ~time); postln("Atn \t\t" + ~atn); postln("Med \t\t" + ~med); postln("Delta \t\t" + ~delta); postln("Theta \t\t" + ~theta); postln("L_Alpha \t" + ~l_alpha); postln("H_Alpha \t" + ~h_alpha); postln("L_Beta \t" + ~l_beta); postln("H_Beta \t" + ~h_beta); postln("L_Gamma \t" + ~l_gamma); postln("M_Gamma \t" + ~m_gamma); postln(""); };) ~printData.value() // SynthDefs (( SynthDef("umbSinewave",{ arg freq=440, gate=1, amp=1, pan=0; var x; x = SinOsc.ar(freq, 0, amp); x = EnvGen.kr(Env.adsr(0.01,0.3,0.5,1,0.6,-4),gate,doneAction: 2) * x; Out.ar(0, Pan2.ar(x,pan)); })); ( SynthDef(\midisynth1, {arg freq=440, amp=0.1; var signal, env; signal = VarSaw.ar([freq, freq+2], 0, XLine.ar(0.7, 0.9, 0.13)); env = EnvGen.ar(Env.perc(0.001), doneAction:2); // this envelope will die out Out.ar(0, signal*env*amp); })); ( SynthDef(\sound,{arg freq=440, amp=0.1; var saw, filter, env; saw= Saw.ar(freq); filter= Resonz.ar(saw,1000,0.1)*amp; env= EnvGen.ar(Env([0,1,0],[0.01,0.1]),doneAction:2); Out.ar(0,(filter*env).dup(2)) })); ) // Define Arrays // ~atnmed = Array.with(~atn, ~med).postln; ~pows = Array.with(~delta, ~theta, ~l_alpha, ~h_alpha, ~l_beta, ~h_beta, ~l_gamma, ~mid_gamma).postln; ~mini = ~pows.minItem(); postln(~mini); ~pows.normalize[5]; normalize([1,2,3]); ([1,2,3]).normalize; minItem([1,2,3]); ([1,2,3]).minItem; maxItem([1,2,3]); ([1,2,3]).maxItem;