-
Notifications
You must be signed in to change notification settings - Fork 0
/
tsne2dict.scd
80 lines (63 loc) · 2.13 KB
/
tsne2dict.scd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
(
// Im Folgenden werden die Einträge aus dem audiotsne.json
// mit den Ergebnissen meiner vorangegangenen Projekte zusammengeführt:
var tsne, exp, emot, point, path, wavePath, csvPath, emotions, expressions, who, index, symb;
var dict;
var csvFolder = PathName("../data/csv".resolveRelative);
var waveFolder = PathName("../data/Wave".resolveRelative);
var new = [];
tsne = File.use("data/audiotsne.json".resolveRelative, "r", {|x| x.readAllString.parseYAML });
emotions = ["happiness", "sadness", "fear", "disgust", "anger", "surprise", "neutral", "undefined"];
expressions = ["yes", "no", "question"];
expressions = (expressions ! 7).flatten.add("undefined");
tsne.do{|x,i|
point = x.at("point").asFloat;
path = PathName(x.at("path"));
who = path.folderName;
index = path.fileNameWithoutExtension.keep(-3).asInteger - 1;
index = index.clip2(21);
csvPath = PathName(csvFolder.fullPath +/+ who +/+ path.fileNameWithoutExtension ++ ".csv");
wavePath = PathName(waveFolder.fullPath +/+ who +/+ path.fileName);
exp = expressions.at(index);
emot = emotions.at((index/3).asInteger); // roundDown-hack :)
// s. Dokumentation:
// Die einzelnen "Silben", die aus der Trennung mehrteiliger Ausdrücke entstanden sind,
// besitzen seitdem keine (intendierte) Bedeutung mehr
if(who=="XX") { exp = "undefined"; emot = "undefined" };
if(who.size > 2) { who.pop };
new = new.add(Dictionary.newFrom(
[
"point", point,
"path", wavePath.fullPath,
"emotion", emot,
"expression", exp,
"index", i,
"csv", csvPath.fullPath
]);
)
};
dict = new;
// Mit den Ergänzungen dann ein neues json-file schreiben:
f = File.new("data/vocalmap.json".resolveRelative, "w");
k = dict[0].keys;
f.write("[");
dict.do{|x,i|
f.write("{");
k.do{|y,j|
f.write("\"" ++ y.asString ++ "\": ");
// Zahlen und Arrays werden nicht in Anführungszeichen gesetzt
if( (y=="index") || (y=="point")) {
f.write(x.at(y).asString);
if(j < (k.size-1)) { f.write(", ") }
} {
f.write("\"" ++ x.at(y).asString ++ "\"");
if(j < (k.size-1)) { f.write(", ") }
}
};
f.write("}");
if(i < (dict.size-1)) { f.write(", ") }
};
f.write("]");
f.close;
"done".postln
)