From 1a0f664806a1e89001476420ee36439d8644faa9 Mon Sep 17 00:00:00 2001 From: Philipp Kramer Date: Thu, 5 May 2022 17:00:31 +0200 Subject: [PATCH] oscplayer in python with more features --- oscplayer/data.csv | 6 +- oscplayer/heart_cluster_max.csv | 276 ++++++++++++++++++++++++++++++++ oscplayer/oscplayer.py | 125 +++++++++++++++ 3 files changed, 404 insertions(+), 3 deletions(-) create mode 100644 oscplayer/heart_cluster_max.csv create mode 100644 oscplayer/oscplayer.py diff --git a/oscplayer/data.csv b/oscplayer/data.csv index 6af7ae6..ae8b948 100644 --- a/oscplayer/data.csv +++ b/oscplayer/data.csv @@ -6,9 +6,9 @@ time,heartrate,random 1.0,83.910385,0.23544657 1.25,83.910385,0.9030523 1.5,83.910385,0.24920326 -1.75,83.910385,0.8914295 -2.0,83.910385,0.09346372 -2.25,83.910385,0.8276468 +1.75,,0.8914295 +2.0,,0.09346372 +2.25,,0.8276468 2.5,88.35135,0.99510956 2.75,88.35135,0.51485765 3.0,88.35135,0.6635224 diff --git a/oscplayer/heart_cluster_max.csv b/oscplayer/heart_cluster_max.csv new file mode 100644 index 0000000..f76ed0f --- /dev/null +++ b/oscplayer/heart_cluster_max.csv @@ -0,0 +1,276 @@ +time,value +0,78 +1,78 +2,78 +3,78 +4,78 +5,50 +6,74 +7,73 +8,52 +9,51 +10,51 +11,79 +12,51 +13,51 +14,79 +15,51 +16,51 +17,72 +18,79 +19,66 +20,81 +21,66 +22,73 +23,66 +24,82 +25,73 +26,66 +27,82 +28,66 +29,80 +30,66 +31,66 +32,66 +33,52 +34,80 +35,52 +36,80 +37,52 +38,70 +39,62 +40,62 +41,62 +42,69 +43,68 +44,66 +45,76 +46,76 +47,76 +48,66 +49,66 +50,62 +51,75 +52,62 +53,62 +54,68 +55,73 +56,73 +57,73 +58,68 +59,73 +60,73 +61,63 +62,72 +63,63 +64,63 +65,68 +66,68 +67,63 +68,69 +69,69 +70,72 +71,72 +72,68 +73,63 +74,74 +75,63 +76,74 +77,69 +78,70 +79,70 +80,61 +81,74 +82,61 +83,61 +84,74 +85,68 +86,74 +87,68 +88,72 +89,61 +90,74 +91,61 +92,61 +93,75 +94,61 +95,61 +96,61 +97,73 +98,75 +99,64 +100,75 +101,64 +102,74 +103,64 +104,64 +105,68 +106,74 +107,74 +108,64 +109,66 +110,64 +111,65 +112,64 +113,65 +114,65 +115,65 +116,64 +117,67 +118,64 +119,68 +120,68 +121,68 +122,68 +123,64 +124,69 +125,78 +126,78 +127,64 +128,70 +129,64 +130,64 +131,69 +132,77 +133,77 +134,69 +135,70 +136,70 +137,66 +138,70 +139,66 +140,70 +141,69 +142,74 +143,66 +144,66 +145,68 +146,66 +147,75 +148,74 +149,66 +150,66 +151,68 +152,67 +153,67 +154,75 +155,68 +156,75 +157,81 +158,63 +159,63 +160,82 +161,70 +162,80 +163,79 +164,70 +165,70 +166,63 +167,78 +168,63 +169,63 +170,74 +171,72 +172,72 +173,53 +174,71 +175,74 +176,53 +177,74 +178,74 +179,61 +180,75 +181,75 +182,75 +183,72 +184,72 +185,75 +186,72 +187,68 +188,61 +189,61 +190,61 +191,71 +192,71 +193,61 +194,76 +195,76 +196,61 +197,66 +198,70 +199,70 +200,76 +201,70 +202,61 +203,70 +204,64 +205,71 +206,71 +207,61 +208,72 +209,73 +210,73 +211,75 +212,69 +213,61 +214,75 +215,74 +216,61 +217,61 +218,61 +219,61 +220,74 +221,61 +222,74 +223,74 +224,61 +225,73 +226,61 +227,61 +228,61 +229,61 +230,73 +231,72 +232,61 +233,61 +234,61 +235,61 +236,67 +237,67 +238,62 +239,62 +240,66 +241,62 +242,70 +243,66 +244,70 +245,62 +246,71 +247,71 +248,62 +249,70 +250,70 +251,68 +252,62 +253,62 +254,62 +255,62 +256,57 +257,57 +258,72 +259,72 +260,72 +261,62 +262,70 +263,70 +264,69 +265,64 +266,62 +267,68 +268,62 +269,67 +270,62 +271,65 +272,74 +273,62 +274,74 diff --git a/oscplayer/oscplayer.py b/oscplayer/oscplayer.py new file mode 100644 index 0000000..22aee27 --- /dev/null +++ b/oscplayer/oscplayer.py @@ -0,0 +1,125 @@ +import argparse +import random +import time + +from pythonosc import udp_client + +import csv +import numpy as np + + +header=None +rows=None +rowid=0 +time_start=0 + +client=None +lastvalue=[] + +minvalues=[] +maxvalues=[] +meanvalues=[] + +basetopics=["/3/oscplayer","/oscplayer","/oscplayer"] + +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=7000, help="The port the OSC server is listening on") + args = parser.parse_args() + + global client + client = udp_client.SimpleUDPClient(args.ip, args.port) + + csvlist=None + with open('heart_cluster_max.csv', newline='') as csvfile: + csvreader = csv.reader(csvfile, delimiter=',', quotechar='|') + csvlist = list(csvreader) + '''for row in csvreader: + if header is None: + header=row + else: + rows.vstack(row) + ''' + global header + header=csvlist[0] + global rows + rows=csvlist[1:] + + global rowid + rowid=0 #waiting for this row to send + + global lastvalue + lastvalue=np.zeros(len(rows)-1) + + global minvalues + global maxvalues + global meanvalues + + + minvalues=[float(min(x)) for x in filterEmpty(rows)] + maxvalues=[float(max(x)) for x in filterEmpty(rows)] + + #print(np.mean(np.array((filterEmpty(rows))),axis=1)) #TODO: mittelwert ausrechnen funktioniert noch nicht + #exit() + #meanvalues=[float(np.mean(x)) for x in filterEmpty(rows)] + + global time_start + time_start = time.time() + + +def update(ctime): + global minvalues + global maxvalues + global meanvalues + global rowid + global client + global lastvalue + if rowid>=len(rows): #ended? + return False + + if ctime-time_start>=float(rows[rowid][0]): + #print(rows[rowid]) + crow=rows[rowid] + for i in range(len(header)-1): + if len(crow[i+1])>0: #value not empty + value=float(crow[i+1]) + send=False + if (i==0): + value=int(mapRange(value,minvalues[i],maxvalues[i],1,40)) + send=True + if (i==1): + send=True + if (i==2): + send=True + if (i==3): + send=True + if (i==4): + send=True + + if send: + print(basetopics[i]+"/"+header[i+1]+": "+ str(value)) + client.send_message(basetopics[i]+"/"+header[i+1], value) + + lastvalue[i]=value #save last value + rowid+=1 + return True + + + +def filterEmpty(rows): + m=[np.array(rows)[:,i+1] for i in range(np.shape(np.array(rows))[1]-1)] + 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)) + +if __name__ == "__main__": + init() + res=True + while res: + res=update(time.time())