-
Notifications
You must be signed in to change notification settings - Fork 0
/
Elerp.wl
47 lines (34 loc) · 1.28 KB
/
Elerp.wl
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
"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
vol=<|#[[4]]|>@SoundVolume&
time=#[[2]]&
transients=First@Import@InputString["\n MIDI file: "]~
Select~(vol@#>0&) //
First/@time/@#& //
DeleteDuplicates
"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
r=If[#1>#2 && IntegerQ@#1, #1,
Echo@"invalid framerate";
Echo["framerate set to "<>ToString@#2]<>"\n";
#2
]&@@{Input@"\n framerate = ",
1/Min@Differences@transients//Ceiling}
Pause@.05
ld=Input@"\n latent space dimension = "//
If[IntegerQ@#,#,
Echo@"invalid dimension"; Exit[]
]&
"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
laTour=NormalDistribution[]~
RandomVariate~{Length@transients,ld}//
#~Part~Last@FindShortestTour@# &//
Most@Partition[#,2,1]&
lerped=Table[#1(1-i)+#2 i,
{i,Most@Rescale@Table[Tan[.77 Pi(k-1/2)],
{k,0,1,1/#3}]}
]&@@@Append@@@Transpose@
{laTour,
r Differences@transients//Round} //
Join@@#&
"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
Print@"\n"
"elasticLatents.dat"~Export~lerped//Echo