diff --git a/oscplayer/oscplayer.py b/oscplayer/oscplayer.py index 6c773e2..753d82a 100644 --- a/oscplayer/oscplayer.py +++ b/oscplayer/oscplayer.py @@ -20,9 +20,11 @@ import numpy as np #pip install numpy -scenetimes=[0,20,60,70,120,150,500] #definition of times . Last value will be overwritten by last time of csv file +scenetimes=[0,10,60,70,130,150,155,210,220,290,500] #definition of times . Last value will be overwritten by last time of csv file #scenetimes=[0,2,4,5,6,10,300] #definition of times FASTER FOR TESTING -scenes =[0,1, 0, 2, 0, 3, -1] #definition of scenes. scene -1 will end the program +scenes =[0,1, 0, 2, 0 ,3 , 0, 3 , 0, 3, -1] #definition of scenes. scene -1 will end the program + +scenes =[0,2,2,2,2,2,2,2,2,2, -1] #definition of scenes. scene -1 will end the program currentScene=-1 #keeps track of current scene @@ -60,7 +62,7 @@ def init(): parser = argparse.ArgumentParser() parser.add_argument("--ip", default="127.0.0.1", help="The ip of the OSC server") parser.add_argument("--port", type=int, default=7005, help="The port the OSC server is listening on") - parser.add_argument("--channel", type=int, default=1, help="The midi channel to use for osc topic") + parser.add_argument("--channel", type=int, default=None, help="The midi channel to use for osc topic. Default=Automatic") parser.add_argument("--file", type=str, default='heart_cluster_max.csv', help="The csv file used for data input") args = parser.parse_args() @@ -75,20 +77,6 @@ def init(): print("Using csv file "+str(csvfilename)) - # Initialize parameters for scenes - #Scene 0 - - #Scene 1 - topicScene[1]="/"+str(midiChannel)+"/oscplayer/strophe" - stropheTriggered=False #keep track if it is already triggered once - - #Scene 2 - topicScene[2]="/"+str(midiChannel)+"/oscplayer/satz/?" - valueCommulative=0 - - #Scene 3 - topicScene[3]="/"+str(midiChannel)+"/oscplayer/value/?" - timemultiplierScene[3]=60.0 / 50 / 2 ######### @@ -106,12 +94,17 @@ def init(): header=csvlist[0] global rows rows=csvlist[1:] #discard first row/header + + + rows = [x for x in rows if float(x[1])>40] #filter out rows with value <40 + global rowid rowid=0 #waiting for this row to send global lastvalue lastvalue=np.zeros(len(rows)-1) + global minvalues global maxvalues @@ -121,15 +114,37 @@ def init(): minvalues=[min([float(a) for a in x]) for x in filterEmpty(rows)] maxvalues=[max([float(a) for a in x]) for x in filterEmpty(rows)] meanvalues=[np.mean([float(a) for a in x]) for x in filterEmpty(rows)] + + if midiChannel is None: + midiChannel=int(mapRangeConstrain(float(rows[0][1]),minvalues[1],maxvalues[1],1,16)) + print("Using midi Channel "+str(midiChannel)) scenetimes[-1]=maxvalues[0] #take maximum value of first column (time) as endtime + scenetimes[-2]=maxvalues[0]-20 print("Scenetimes:" + str(scenetimes)) + print("minvalues="+str(minvalues)) print("maxvalues="+str(maxvalues)) print("meanvalues="+str(meanvalues)) + + # Initialize parameters for scenes + #Scene 0 + + #Scene 1 + topicScene[1]="/"+str(midiChannel)+"/oscplayer/strophe" + stropheTriggered=False #keep track if it is already triggered once + + #Scene 2 + topicScene[2]="/"+str(midiChannel)+"/oscplayer/satz/?" + valueCommulative=0 + + #Scene 3 + topicScene[3]="/"+str(midiChannel)+"/oscplayer/value/?" + timemultiplierScene[3]=60.0 / 50 / 2 + #print(np.mean(np.array((filterEmpty(rows))),axis=1)) #TODO: mittelwert ausrechnen funktioniert noch nicht #exit() @@ -214,10 +229,11 @@ def update(ctime): if currentScene==2: print("waiting. diff="+str(abs(maxvalues[i+1]-value))+" commulative="+str(valueCommulative)) - valueCommulative+=abs(maxvalues[i+1]-value) + #valueCommulative+=abs(maxvalues[i+1]-value) + valueCommulative+=mapRangeConstrain(value,minvalues[i+1],maxvalues[i+1],0,100) - if valueCommulative>100: - valueCommulative=0 #reset + if valueCommulative>500: #higher value triggers less + valueCommulative-=500 #reset sendvalue=int(mapRangeConstrain(value,minvalues[i+1],maxvalues[i+1],1,4)) sendOSCTrigger(topicScene[currentScene].replace('?',str(sendvalue))) @@ -241,7 +257,9 @@ def filterEmpty(rows): n=[[x if len(x)>0 else None for x in y] for y in m] n=[list(filter(None, x)) for x in n] return n - + + + def mapRange(value, inMin, inMax, outMin, outMax): return outMin + (((value - inMin) / (inMax - inMin)) * (outMax - outMin)) @@ -260,4 +278,4 @@ if __name__ == "__main__": res=True while res: - res=update(time.time()) + res=update(time.time()) \ No newline at end of file