Exploring sound corpora in SC

Yep. TGrains actually asks for the grain’s center position in the buffer (in seconds). So I’m calculating this just by taking start + (num/2) to get it in samples. Then I divide by the buffer’s sample rate to get that position in seconds.

Let me know if that clarifies!

T

Ah, i wasn’t aware TGrains needs the center position! (Buts still reads from beginning i assume)
So for PlayBuf id just need start in any case and can remove num/2!
Thanks!

1 Like

Correct.

Yes, and, PlayBuf’s argument startPos is in samples, so you shouldn’t use the divide-by-samplerate either.

1 Like

Hi @tedmoore,
im encountering this error for the first time while sorting the infos from each slices of a cluster into buffers (block number 7 from code above).
I had gotten warning about empty clusters, could that be a reason? I don’t understand though why the destination buffer is supposedly invalid as they’re allocate as usual!

cluster 7 id slice-94302
cluster 7 id slice-34196
cluster 7 id slice-172353
cluster 7 id slice-173521
cluster 20 id slice-87261
ERROR: FluidBufCompose: Invalid destination buffer
CALL STACK:
Object:reportError
arg this = “FluidBufCompose: Invalid de…”
Nil:handleError
arg this = nil
arg error = “FluidBufCompose: Invalid de…”
Thread:handleError
arg this =
arg error = “FluidBufCompose: Invalid de…”
Thread:handleError
arg this =
arg error = “FluidBufCompose: Invalid de…”
Object:throw
arg this = “FluidBufCompose: Invalid de…”
Meta_FluidBufCompose:processBlocking
arg this =
arg server =
arg source = 1002
arg startFrame = 0
arg numFrames = 1
arg startChan = 0
arg numChans = -1
arg gain = 1
arg destination = nil
arg destStartFrame = 0
arg destStartChan = 0
arg destGain = 0
arg freeWhenDone = true
arg action = nil
< FunctionDef in closed FunctionDef >
arg id = “slice-87261”
arg i = 0
ArrayedCollection:do
arg this = [*15145]
arg function =
var i = 0
List:do
arg this =
arg function =
Dictionary:keysValuesArrayDo
arg this =
arg argArray = [*64]
arg function =
var i = 10
var j = 3
var key = nil
var val = nil
var arraySize = nil
Dictionary:keysValuesDo
arg this =
arg function =
< closed FunctionDef >
var tmpbuf =
Routine:prStart
arg this =
arg inval = 43133.665797292

Thanks,
Jan

Hmm, yes I suppose rather than asking for the size of the Dictionary, it should be the maxItem of the keys.

Try replacing this line:

~play_info_clusters = {Buffer(s)} ! ~clusters.size;

with:

~play_info_clusters = {Buffer(s)} ! ~clusters.keys.maxItem;

I’m not able to test right now, but this should do it.

Notice that if you have empty clusters here, you’ll end up with some buffers that are 0 samples long, which might cause some problems farther down the line during playback or whatever, so just keep that in mind! Maybe check for it at some point.

1 Like

Ah yes, makes sense, ill try this out after another longer round of Umap processing;)

What is rather odd though is that i get quite a lot of empty clusters warnings after running seeded Kmeans, but none of the buffers are actually empty!?

I believe this is a question we should direct towards @weefuzzy. I too have noticed that sometimes I will get an “empty clusters” warning but then the result of KMeans doesn’t have any empty clusters. I believe this is because it’s reporting that there is an empty cluster at some point in the process, but by the end of the process no clusters are empty?

It does seems strange though that you’d get this when doing the seeding because all those seeded means have lots of points around them!

Precisely! Here is an example: It actually seems to post a warning for each seeded Kmeans cluster!


DataSet 512230:
rows: 42 cols: 2
0 0.11713 0.88917
1 0.11713 0.88917
2 0.22292 0.78338

39 0.32494 0.23552
40 0.75693 0.68262
41 0.75693 0.68262

→ FluidDataSet(512230)
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
Warning: empty cluster
FluidLabelSet(512231)
points in cluster 5: List[ slice-8563, slice-32094, slice-56969, slice-56758, slice-32357, slice-31805, slice-8765, slice-56547, slice-32073, slice-32334, slice-32490, slice-56851, slice-57033, slice-8587, slice-57098, slice-8396, slice-8768, slice-56492, slice-56370, slice-56916, slice-57018, slice-56542, slice-8647, slice-57015, slice-56682, slice-8029, slice-56622, slice-32143, slice-8734, slice-32450, slice-57120, slice-57326, slice-8771, slice-57060, slice-32263, slice-14709, slice-14708, slice-56645, slice-57010, slice-32…etc…
points in cluster 35: List[ slice-16566, slice-29647, slice-20741, slice-20307, slice-20646, slice-20416, slice-20571, slice-20973, slice-20930, slice-20633, slice-20354, slice-21127, slice-20552, slice-20400, slice-21139, slice-20347, slice-20785, slice-20605, slice-20815, slice-20978, slice-36763, slice-20757, slice-20308, slice-20858, slice-20782, slice-20474, slice-44744, slice-29633, slice-20264, slice-20645, slice-48282, slice-20797, slice-43663, slice-21061, slice-20898, slice-29761, slice-16564, slice-20380, slice-20993,…etc…
points in cluster 25: List[ slice-7537, slice-7455, slice-55995, slice-38587, slice-38234, slice-38244, slice-56018, slice-55611, slice-55852, slice-37878, slice-7276, slice-23628, slice-56124, slice-38269, slice-37890, slice-56200, slice-56215, slice-7099, slice-56117, slice-7067, slice-56167, slice-22965, slice-55868, slice-56255, slice-37940, slice-55594, slice-55857, slice-7722, slice-7736, slice-7404, slice-56011, slice-55953, slice-38277, slice-38371, slice-38058, slice-38477, slice-7180, slice-55679, slice-7251, slice-557…etc…
points in cluster 40: List[ slice-23908, slice-24182, slice-24295, slice-24237, slice-23833, slice-24344, slice-24272, slice-24529, slice-24264, slice-23827, slice-23902, slice-24285, slice-24629, slice-24022, slice-24042, slice-24218, slice-24123, slice-26166, slice-24062, slice-24620, slice-24553, slice-23943, slice-23909, slice-24039, slice-24596, slice-24069, slice-23967, slice-24586, slice-24701, slice-24606, slice-24191, slice-24020, slice-23885, slice-24048, slice-24159, slice-24593, slice-24683, slice-24197, slice-24266,…etc…
points in cluster 8: List[ slice-10466, slice-9834, slice-10036, slice-54230, slice-10294, slice-45121, slice-10405, slice-10101, slice-30328, slice-10226, slice-10005, slice-35233, slice-9877, slice-9761, slice-10519, slice-30826, slice-10200, slice-41404, slice-9699, slice-9876, slice-30318, slice-10090, slice-35094, slice-33085, slice-578, slice-10489, slice-10106, slice-10274, slice-10088, slice-10438, slice-9903, slice-9729, slice-9913, slice-10175, slice-9781, slice-54049, slice-10255, slice-9696, slice-30878, slice-45799…etc…
points in cluster 0: List[ slice-42731, slice-42360, slice-42490, slice-60501, slice-42977, slice-42428, slice-42595, slice-42691, slice-42505, slice-42665, slice-42429, slice-42807, slice-42751, slice-48966, slice-42798, slice-43060, slice-42866, slice-42337, slice-42622, slice-42672, slice-42488, slice-42985, slice-43044, slice-42837, slice-42313, slice-48916, slice-1449, slice-42466, slice-48984, slice-43098, slice-42510, slice-43032, slice-43091, slice-42311, slice-42846, slice-60523, slice-42934, slice-42738, slice-48534, …etc…
points in cluster 28: List[ slice-22310, slice-22126, slice-22083, slice-22473, slice-22459, slice-22422, slice-22575, slice-22505, slice-13576, slice-22188, slice-22435, slice-22692, slice-22741, slice-22704, slice-22760, slice-22444, slice-22834, slice-22783, slice-13980, slice-22074, slice-22404, slice-22900, slice-13692, slice-22374, slice-22210, slice-22328, slice-22153, slice-22222, slice-22081, slice-22073, slice-22835, slice-22346, slice-22443, slice-22509, slice-22861, slice-22875, slice-22503, slice-22287, slice-13508,…etc…
points in cluster 23: List[ slice-27550, slice-27605, slice-27989, slice-27529, slice-37392, slice-27594, slice-27794, slice-28073, slice-17148, slice-27569, slice-27873, slice-27660, slice-28061, slice-27573, slice-27997, slice-27909, slice-27950, slice-27732, slice-28208, slice-27896, slice-28068, slice-27477, slice-28120, slice-27583, slice-27482, slice-28262, slice-27957, slice-27682, slice-27956, slice-28202, slice-27939, slice-17206, slice-27825, slice-28214, slice-28049, slice-27782, slice-28224, slice-27588, slice-28209,…etc…
points in cluster 4: List[ slice-7998, slice-32301, slice-8048, slice-7940, slice-7946, slice-32336, slice-57844, slice-32548, slice-8597, slice-56418, slice-8356, slice-32513, slice-31927, slice-8210, slice-56671, slice-8346, slice-8135, slice-8755, slice-5165, slice-8524, slice-8079, slice-31849, slice-8716, slice-37708, slice-56333, slice-8699, slice-8141, slice-8558, slice-56343, slice-56347, slice-8482, slice-32192, slice-8498, slice-56724, slice-8109, slice-5185, slice-57026, slice-8583, slice-11360, slice-32306, slice-82…etc…
points in cluster 41: List[ slice-24379, slice-24459, slice-23899, slice-23950, slice-24528, slice-24612, slice-24032, slice-24336, slice-24405, slice-24089, slice-24338, slice-24426, slice-24513, slice-24114, slice-24516, slice-24286, slice-24418, slice-24554, slice-24455, slice-23985, slice-24132, slice-24624, slice-24685, slice-24368, slice-24170, slice-23953, slice-23865, slice-24044, slice-24452, slice-23904, slice-24504, slice-24068, slice-24382, slice-23992, slice-24050, slice-23952, slice-23934, slice-51183, slice-24631,…etc…
points in cluster 14: List[ slice-61364, slice-5428, slice-5515, slice-61438, slice-6077, slice-5728, slice-52221, slice-5919, slice-6027, slice-5946, slice-43763, slice-5826, slice-5809, slice-6119, slice-5411, slice-5854, slice-6006, slice-5776, slice-5736, slice-6111, slice-5381, slice-5725, slice-6062, slice-61403, slice-5804, slice-5554, slice-5758, slice-5660, slice-6187, slice-5652, slice-5864, slice-5731, slice-6035, slice-6019, slice-5681, slice-6190, slice-5907, slice-5503, slice-52273, slice-5882, slice-5754, slice-61…etc…
points in cluster 34: List[ slice-40240, slice-54832, slice-18415, slice-34206, slice-47318, slice-47459, slice-33997, slice-34004, slice-36334, slice-55066, slice-60016, slice-46904, slice-47375, slice-18374, slice-54950, slice-4323, slice-33530, slice-33611, slice-58766, slice-34177, slice-34182, slice-54567, slice-55027, slice-58591, slice-18910, slice-55047, slice-18122, slice-54979, slice-54585, slice-58244, slice-58162, slice-55043, slice-40089, slice-36316, slice-33717, slice-33844, slice-36423, slice-55116, slice-33696, …etc…
points in cluster 32: List[ slice-14066, slice-60787, slice-63796, slice-10194, slice-63780, slice-14519, slice-63946, slice-63769, slice-29728, slice-63789, slice-60832, slice-63815, slice-63901, slice-64005, slice-60798, slice-63979, slice-63930, slice-60876, slice-63916, slice-14823, slice-25119, slice-27713, slice-63848, slice-60907, slice-63914, slice-60953, slice-60974, slice-63999, slice-60862, slice-60782, slice-60774, slice-63886, slice-60843, slice-60972, slice-60871, slice-60836, slice-61027, slice-64018, slice-44073,…etc…
points in cluster 11: List[ slice-30447, slice-41160, slice-40854, slice-53407, slice-43686, slice-41364, slice-52922, slice-41373, slice-43412, slice-30223, slice-40868, slice-30510, slice-30088, slice-52948, slice-53305, slice-30294, slice-41180, slice-53345, slice-30461, slice-40835, slice-30062, slice-14557, slice-53232, slice-30365, slice-40905, slice-30103, slice-41185, slice-30621, slice-30889, slice-44503, slice-30850, slice-40798, slice-40995, slice-30503, slice-30291, slice-53299, slice-53446, slice-40711, slice-30343,…etc…
points in cluster 12: List[ slice-52408, slice-43265, slice-52216, slice-43516, slice-44822, slice-43852, slice-43259, slice-52272, slice-51889, slice-34989, slice-43732, slice-52036, slice-43277, slice-43855, slice-43756, slice-43353, slice-43560, slice-52431, slice-43926, slice-43257, slice-43279, slice-52212, slice-51938, slice-52369, slice-43707, slice-43738, slice-52035, slice-52548, slice-52476, slice-43964, slice-44035, slice-43953, slice-51898, slice-52364, slice-43795, slice-43437, slice-51888, slice-43461, slice-43397,…etc…
points in cluster 3: List[ slice-57259, slice-5159, slice-5311, slice-57311, slice-37267, slice-37784, slice-57601, slice-57981, slice-37155, slice-37329, slice-57513, slice-4525, slice-37358, slice-57979, slice-37181, slice-37291, slice-37113, slice-57349, slice-4772, slice-4480, slice-4692, slice-57817, slice-37290, slice-37068, slice-37031, slice-36990, slice-37636, slice-57880, slice-37782, slice-37395, slice-5182, slice-57474, slice-57517, slice-57958, slice-5272, slice-4577, slice-36994, slice-4531, slice-37597, slice-503…etc…
points in cluster 9: List[ slice-32883, slice-45215, slice-45610, slice-716, slice-45547, slice-45065, slice-45714, slice-256, slice-33454, slice-225, slice-32880, slice-200, slice-32662, slice-32956, slice-45678, slice-278, slice-32927, slice-33183, slice-871, slice-14, slice-33028, slice-45629, slice-32852, slice-33490, slice-54031, slice-32984, slice-33202, slice-33415, slice-32751, slice-648, slice-32866, slice-45668, slice-32859, slice-33383, slice-906, slice-133, slice-33373, slice-33420, slice-45473, slice-45214, slice-3…etc…
points in cluster 24: List[ slice-62347, slice-37928, slice-62326, slice-63119, slice-63715, slice-62707, slice-63624, slice-62303, slice-62975, slice-62240, slice-63717, slice-62996, slice-63195, slice-63014, slice-63009, slice-63163, slice-63084, slice-62164, slice-63034, slice-62685, slice-62361, slice-63205, slice-63155, slice-62892, slice-62755, slice-63429, slice-62860, slice-62127, slice-62981, slice-62298, slice-63184, slice-7095, slice-63204, slice-62897, slice-29200, slice-62184, slice-62195, slice-63043, slice-63605, …etc…
points in cluster 27: List[ slice-12026, slice-12153, slice-45966, slice-46181, slice-44092, slice-41568, slice-46114, slice-42094, slice-41621, slice-46028, slice-41802, slice-46248, slice-19682, slice-45841, slice-11639, slice-12090, slice-41938, slice-11785, slice-12052, slice-46489, slice-41639, slice-12166, slice-41451, slice-41847, slice-41494, slice-11796, slice-46714, slice-45973, slice-41905, slice-41946, slice-45999, slice-11612, slice-41845, slice-12083, slice-41929, slice-11974, slice-41743, slice-11400, slice-11917,…etc…
points in cluster 31: List[ slice-2559, slice-49828, slice-2103, slice-2649, slice-1860, slice-49874, slice-35864, slice-35536, slice-1852, slice-35470, slice-2633, slice-35726, slice-35376, slice-2618, slice-1944, slice-2176, slice-49669, slice-2082, slice-44334, slice-1800, slice-35633, slice-49455, slice-35508, slice-35979, slice-35393, slice-35624, slice-49542, slice-50031, slice-2290, slice-35657, slice-49631, slice-35607, slice-2184, slice-35422, slice-2111, slice-14325, slice-35360, slice-35708, slice-49776, slice-49932, …etc…
points in cluster 20: List[ slice-2639, slice-61301, slice-63030, slice-44316, slice-60341, slice-29944, slice-61095, slice-60371, slice-61254, slice-44223, slice-59309, slice-51530, slice-61315, slice-63610, slice-60425, slice-58969, slice-13730, slice-59893, slice-60077, slice-59062, slice-48394, slice-64062, slice-44091, slice-60422, slice-58968, slice-59009, slice-58903, slice-14260, slice-59015, slice-59895, slice-24430, slice-14182, slice-64092, slice-59974, slice-62526, slice-29432, slice-14332, slice-29837, slice-29475, …etc…
points in cluster 33: List[ slice-44407, slice-14764, slice-14593, slice-36118, slice-44584, slice-12817, slice-44798, slice-47231, slice-59300, slice-17562, slice-14681, slice-16516, slice-44633, slice-14766, slice-44725, slice-59152, slice-14688, slice-44364, slice-44709, slice-14607, slice-59343, slice-59411, slice-44622, slice-44757, slice-44392, slice-29743, slice-59275, slice-43517, slice-14679, slice-59321, slice-59136, slice-59426, slice-43589, slice-44803, slice-14737, slice-14659, slice-14668, slice-44567, slice-34176,…etc…
points in cluster 37: List[ slice-25577, slice-25265, slice-25266, slice-25363, slice-24831, slice-25016, slice-24949, slice-24807, slice-25236, slice-25165, slice-25042, slice-25388, slice-25440, slice-25235, slice-24805, slice-25550, slice-24985, slice-24779, slice-24727, slice-25364, slice-25182, slice-25072, slice-25252, slice-25471, slice-25511, slice-24838, slice-25334, slice-25376, slice-25220, slice-24954, slice-25505, slice-25514, slice-24871, slice-25306, slice-25548, slice-25065, slice-25509, slice-24798, slice-25216,…etc…
points in cluster 2: List[ slice-56895, slice-41058, slice-10676, slice-10552, slice-11383, slice-31587, slice-10744, slice-10627, slice-10799, slice-10889, slice-10908, slice-11366, slice-11043, slice-31604, slice-11322, slice-10580, slice-10897, slice-11153, slice-10740, slice-11363, slice-10947, slice-11266, slice-10621, slice-11129, slice-10892, slice-11171, slice-10710, slice-10837, slice-10717, slice-10810, slice-31379, slice-10864, slice-59535, slice-14361, slice-31288, slice-30981, slice-10711, slice-11336, slice-50567,…etc…
points in cluster 19: List[ slice-21161, slice-21632, slice-18248, slice-21456, slice-19087, slice-18027, slice-18018, slice-39653, slice-34184, slice-54865, slice-21951, slice-19314, slice-59248, slice-39654, slice-18283, slice-48270, slice-15832, slice-58895, slice-16654, slice-19124, slice-18559, slice-58997, slice-18333, slice-18341, slice-59641, slice-21272, slice-44382, slice-16196, slice-19333, slice-21248, slice-18169, slice-59461, slice-18776, slice-44495, slice-47092, slice-21651, slice-19259, slice-18850, slice-19212,…etc…
points in cluster 39: List[ slice-28970, slice-63382, slice-28765, slice-28505, slice-63394, slice-28674, slice-29124, slice-28419, slice-63243, slice-63309, slice-63356, slice-28694, slice-63291, slice-63716, slice-28644, slice-29088, slice-28501, slice-28862, slice-63260, slice-28961, slice-28311, slice-28920, slice-28800, slice-28528, slice-28937, slice-28849, slice-28635, slice-28321, slice-29043, slice-28736, slice-63256, slice-28886, slice-28738, slice-63275, slice-63282, slice-63448, slice-28781, slice-28817, slice-28465,…etc…
points in cluster 17: List[ slice-33966, slice-47012, slice-36723, slice-36493, slice-6779, slice-36345, slice-33976, slice-6310, slice-58573, slice-33684, slice-36257, slice-33768, slice-12692, slice-12448, slice-58336, slice-13008, slice-55253, slice-55076, slice-33995, slice-12944, slice-12435, slice-6850, slice-6585, slice-6577, slice-12854, slice-6766, slice-36804, slice-3808, slice-12544, slice-4305, slice-58525, slice-36218, slice-34142, slice-12485, slice-36348, slice-12658, slice-55238, slice-58441, slice-40357, slice-3…etc…
points in cluster 18: List[ slice-40459, slice-47865, slice-55200, slice-48195, slice-16113, slice-16675, slice-48103, slice-25920, slice-18135, slice-16584, slice-48342, slice-25991, slice-16310, slice-47590, slice-29598, slice-58919, slice-24503, slice-48368, slice-26074, slice-16647, slice-24010, slice-36366, slice-16190, slice-26124, slice-16258, slice-25659, slice-29998, slice-26001, slice-16389, slice-26150, slice-59504, slice-61701, slice-25593, slice-18556, slice-16350, slice-25983, slice-16332, slice-16652, slice-18075,…etc…
points in cluster 16: List[ slice-47996, slice-3680, slice-48300, slice-33674, slice-39644, slice-6542, slice-4007, slice-4304, slice-47690, slice-58094, slice-40228, slice-39808, slice-39677, slice-4431, slice-47954, slice-3700, slice-48194, slice-39812, slice-48046, slice-4214, slice-40258, slice-4369, slice-3826, slice-40151, slice-39618, slice-58545, slice-4350, slice-47718, slice-48234, slice-48056, slice-40140, slice-39838, slice-3601, slice-3616, slice-39625, slice-47089, slice-4170, slice-6484, slice-4081, slice-47882, s…etc…
points in cluster 26: List[ slice-19671, slice-20186, slice-12132, slice-19823, slice-19982, slice-46567, slice-19810, slice-19780, slice-45974, slice-19968, slice-19356, slice-19725, slice-19628, slice-19423, slice-20181, slice-42250, slice-20199, slice-20179, slice-20026, slice-19829, slice-46221, slice-19886, slice-20043, slice-19923, slice-19783, slice-19860, slice-20012, slice-19591, slice-46451, slice-20209, slice-19942, slice-41992, slice-20035, slice-19784, slice-42152, slice-19612, slice-20138, slice-20247, slice-19607,…etc…
points in cluster 38: List[ slice-23047, slice-55749, slice-7772, slice-56156, slice-56016, slice-56114, slice-23067, slice-23063, slice-23193, slice-23752, slice-23747, slice-23437, slice-23369, slice-23393, slice-23535, slice-23372, slice-55772, slice-23127, slice-23805, slice-23153, slice-23340, slice-55929, slice-56044, slice-7592, slice-23595, slice-23654, slice-23509, slice-23527, slice-23764, slice-23525, slice-23575, slice-23658, slice-23316, slice-23085, slice-23025, slice-23234, slice-22960, slice-55750, slice-23226, s…etc…
points in cluster 6: List[ slice-9059, slice-31086, slice-9137, slice-8794, slice-9022, slice-8988, slice-50476, slice-9536, slice-9013, slice-9118, slice-9145, slice-8896, slice-9376, slice-8784, slice-50327, slice-9043, slice-50451, slice-31116, slice-9469, slice-9566, slice-9252, slice-8817, slice-9201, slice-9140, slice-8959, slice-9625, slice-9459, slice-9163, slice-50630, slice-50496, slice-9057, slice-9400, slice-9577, slice-50626, slice-9395, slice-9551, slice-9062, slice-50693, slice-50732, slice-8913, slice-8776, slic…etc…
points in cluster 10: List[ slice-9971, slice-30198, slice-52952, slice-2983, slice-30260, slice-2702, slice-3144, slice-30282, slice-3512, slice-10214, slice-3170, slice-30280, slice-53501, slice-30856, slice-3154, slice-3409, slice-52863, slice-3034, slice-3378, slice-3038, slice-53208, slice-9988, slice-9674, slice-2936, slice-3350, slice-2882, slice-3187, slice-53524, slice-2813, slice-2773, slice-514, slice-3097, slice-41381, slice-53120, slice-3371, slice-2984, slice-53607, slice-53412, slice-3525, slice-30201, slice-2774,…etc…
points in cluster 1: List[ slice-1214, slice-49165, slice-48452, slice-49053, slice-49160, slice-1676, slice-48604, slice-1358, slice-1575, slice-48470, slice-969, slice-48574, slice-42764, slice-1151, slice-1701, slice-48521, slice-48839, slice-48465, slice-48612, slice-1648, slice-1285, slice-1148, slice-1545, slice-1652, slice-1590, slice-1317, slice-48831, slice-49247, slice-48564, slice-1319, slice-919, slice-1561, slice-48445, slice-48677, slice-48990, slice-48550, slice-42613, slice-48537, slice-48524, slice-1207, slice-…etc…
points in cluster 13: List[ slice-53685, slice-53674, slice-53696, slice-34962, slice-9706, slice-54248, slice-54314, slice-54205, slice-34586, slice-53680, slice-54129, slice-53649, slice-10503, slice-53633, slice-34445, slice-10509, slice-35216, slice-34477, slice-54089, slice-34467, slice-34583, slice-35176, slice-54451, slice-35045, slice-34887, slice-35241, slice-54501, slice-34676, slice-9738, slice-54490, slice-5642, slice-54361, slice-34903, slice-35201, slice-34934, slice-34427, slice-61426, slice-54340, slice-10224, sl…etc…
points in cluster 7: List[ slice-21040, slice-50610, slice-31760, slice-31243, slice-50719, slice-31242, slice-9602, slice-9122, slice-50564, slice-50728, slice-10957, slice-31019, slice-31696, slice-30990, slice-31090, slice-59302, slice-31285, slice-9457, slice-50755, slice-31006, slice-30966, slice-50374, slice-10923, slice-31119, slice-50617, slice-30976, slice-50558, slice-31000, slice-50606, slice-31155, slice-50893, slice-31030, slice-50511, slice-31003, slice-31416, slice-50342, slice-9254, slice-31278, slice-14556, sli…etc…

btw, also tried to replace the line as suggested, but got the same error unfortunately.
maybe this is related to the mysterious empty clusters problem…

~play_info_clusters = {Buffer(s)} ! ~clusters.keys.maxItem;

cluster 4 id slice-8529
cluster 41 id slice-24379
ERROR: FluidBufCompose: Invalid destination buffer
CALL STACK:
Object:reportError
arg this = “FluidBufCompose: Invalid de…”
Nil:handleError
arg this = nil
arg error = “FluidBufCompose: Invalid de…”
Thread:handleError
arg this =
arg error = “FluidBufCompose: Invalid de…”
Thread:handleError
arg this =
arg error = “FluidBufCompose: Invalid de…”
Object:throw
arg this = “FluidBufCompose: Invalid de…”
Meta_FluidBufCompose:processBlocking
arg this =
arg server =
arg source = 197
arg startFrame = 0
arg numFrames = 1
arg startChan = 0
arg numChans = -1
arg gain = 1
arg destination = nil
arg destStartFrame = 0
arg destStartChan = 0
arg destGain = 0
arg freeWhenDone = true
arg action = nil
< FunctionDef in closed FunctionDef >
arg id = “slice-24379”
arg i = 0
ArrayedCollection:do
arg this = [*367]
arg function =
var i = 0
List:do
arg this =
arg function =
Dictionary:keysValuesArrayDo
arg this =
arg argArray = [*256]
arg function =
var i = 48
var j = 10
var key = nil
var val = nil
var arraySize = nil
Dictionary:keysValuesDo
arg this =
arg function =
< closed FunctionDef >
var tmpbuf =
Routine:prStart
arg this =
arg inval = 54194.1625415

Looking over the code, I think it’s a debugging artefact from when it was being written: the warning is deep in the algorithm code and writes straight to console, meaning that it will show up in SC but not in Max or PD. I’ll take it out.

Hmm. Bummer. I’ll take a look soon.

Going back to this code after an involuntary break, im getting the following error, which if im right didn’t happen before.
I upgraded FluComa in the meanwhile, not sure if thats the reason?

this is the part of the code:

(
var kdtree = FluidKDTree(s);
var buf_2d = Buffer.alloc(s,2);
var scaler = FluidNormalize(s);
~ds_norm = FluidDataSet(s);
~ds_umap=FluidDataSet(s).read("/Users/jan/Sound/Recordings/alog/slices/ds_umap.json");
// whatever the output of umap is, scale it to be between 0 and 1 so that it will look nice in the plotter
scaler.fitTransform(~ds_umap,~ds_norm);

kdtree.fit(~ds_norm);
~ds_norm.dump({
	arg dict;
	var previous, fp;
	fp = FluidPlotter(bounds:Rect(0,0,800,800),dict:dict,mouseMoveAction:{
		arg view, x, y;
		[x,y].postln; // get the (normalized) x, y position of the mouse and...
		buf_2d.setn(0,[x,y]); // load it into a buffer so that...
		kdtree.kNearest(buf_2d,{ // it can be passed to the kdtree to find hte nearest neighbour, which is reported back...
			arg nearest; // here
			var index = nearest.asString.split($-)[1].asInteger; // peel off the index of the slice
			previous = nearest;
			"nearest point is: %".format(nearest).postln;
			{
				var startPos = Index.kr(~indices,index); // look up the start position
				var dur_samps = Index.kr(~indices,index + 1) - startPos; // calculate the duration in samples

				// play the buffer starting from the start position
				var sig = PlayBuf.ar(1,~loader.buffer,BufRateScale.ir(~loader.buffer),startPos:startPos).poll;
				var dur_sec = dur_samps / BufSampleRate.ir(~loader.buffer);
				var env = EnvGen.ar(Env([0,1,1,0],[0.03,dur_sec-0.06,0.03]),doneAction:2);
				sig.dup * env;
		}.play;});

	});
});
);

which returns this:

-> FluidDataSet(13)
ERROR: Qt: You can not use this Qt functionality in the current thread. Try scheduling on AppClock instead.
ERROR: Primitive '_QWindow_ScreenBounds' failed.
Failed.
RECEIVER:
class Window (0x7fc708b7c000) {
  instance variables [19]
    name : Symbol 'Window'
    nextclass : instance of Meta_Wrap (0x7fc7092966c0, size=19, set=5)
    superclass : Symbol 'Object'
    subclasses : instance of Array (0x7fc7085b55c0, size=1, set=2)
    methods : instance of Array (0x7fc708b7c180, size=52, set=6)
    instVarNames : instance of SymbolArray (0x7fc708b7c600, size=5, set=2)
    classVarNames : instance of SymbolArray (0x7fc708b7c7c0, size=2, set=2)
    iprototype : instance of Array (0x7fc708b7c6c0, size=5, set=3)
    cprototype : instance of Array (0x7fc708b7c880, size=2, set=2)
    constNames : nil
    constValues : nil
    instanceFormat : Integer 0
    instanceFlags : Integer 0
    classIndex : Integer 604
    classFlags : Integer 0
    maxSubclassIndex : Integer 605
    filenameSymbol : Symbol '/Applications/SuperCollider.app/Contents/Resources/SCClassLibrary/Common/GUI/Base/QWindow.sc'
    charPos : Integer 1538
    classVarIndex : Integer 198
}
CALL STACK:
	MethodError:reportError
		arg this = <instance of PrimitiveFailedError>
	Nil:handleError
		arg this = nil
		arg error = <instance of PrimitiveFailedError>
	Thread:handleError
		arg this = <instance of Thread>
		arg error = <instance of PrimitiveFailedError>
	Object:throw
		arg this = <instance of PrimitiveFailedError>
	Object:primitiveFailed
		arg this = <instance of Meta_Window>
	Meta_Window:flipY
		arg this = <instance of Meta_Window>
		arg aRect = <instance of Rect>
		var flippedTop = nil
	Meta_Window:new
		arg this = <instance of Meta_Window>
		arg name = "FluidPlotter"
		arg bounds = <instance of Rect>
		arg resizable = true
		arg border = true
		arg server = nil
		arg scroll = false
	FluidPlotter:createPlotWindow
		arg this = <instance of FluidPlotter>
		arg bounds = <instance of Rect>
		arg mouseMoveAction = <instance of Function>
		var zoomRect = nil
		var zoomDragStart = <instance of Point>
	FluidPlotter:init
		arg this = <instance of FluidPlotter>
		arg bounds = <instance of Rect>
		arg dict = <instance of Dictionary>
		arg mouseMoveAction = <instance of Function>
	< FunctionDef in closed FunctionDef >
		arg dict = <instance of Dictionary>
		var previous = nil
		var fp = nil
	< FunctionDef in Method FluidDataObject:dump >  (no arguments or variables)
	OSCFuncAddrMessageMatcher:value
		arg this = <instance of OSCFuncAddrMessageMatcher>
		arg msg = [*2]
		arg time = 301.230025209
		arg testAddr = <instance of NetAddr>
		arg recvPort = 57120
	Dictionary:keysValuesArrayDo
		arg this = <instance of IdentityDictionary>
		arg argArray = [*32]
		arg function = <instance of Function>
		var i = 20
		var j = 1
		var key = nil
		var val = nil
		var arraySize = nil
	Dictionary:keysValuesDo
		arg this = <instance of IdentityDictionary>
		arg function = <instance of Function>
	FluidOSCPatternInversion:value
		arg this = <instance of FluidOSCPatternInversion>
		arg msg = [*2]
		arg time = 301.230025209
		arg addr = <instance of NetAddr>
		arg recvPort = 57120
		var msgpath = '/FluidDataSet/write'
	< FunctionDef in Method Collection:collectInPlace >
		arg item = <instance of FluidOSCPatternInversion>
		arg i = 1
...
^^ The preceding error dump is for ERROR: Primitive '_QWindow_ScreenBounds' failed.
Failed.
RECEIVER: Window

thanks for any suggestion son how to get around this!
jan

Hi @jan,

The error message is from the SC GUI stuff, complaining that its been called from the wrong thread. I think you can only schedule GUI updates on the AppClock. What’s probably happening is that the callback for ~ds_norm dump is on the SystemClock. You could try wrapping the contents of that function with defer.

hi @weefuzzy,
if wrapping the function means to replace .play with .defer it didn’t help unfortunately, as it returns the same error…is there maybe another workaround?
wonder what caused this change also, as it used to work no problem!

I mean making sure the code that creates FluidPlotter is deferred. If you check out the example code in the FluidUMAP help file it might be clearer what I mean: flucoma-docs/example-code/sc/UMAP.scd at 8d81a588ba33ba66d5cb4d3844019ba7e0bd5733 · flucoma/flucoma-docs · GitHub

You’ll see that inside the dump callback, the code to instantiate the plotter is all wrapped in defer:

reduced.dump({
	arg dict;
	var xybuf = Buffer.alloc(s,2);
	defer{
		FluidPlotter(dict:dict,mouseMoveAction:{
			...

ah yes, that seems to do the trick, thank you @weefuzzy!

can it be that wrapping it in defer interferes with the sound in the example being played back?
this code with the defer function added gives no sound when moving over the plotter:

s.boot;

// 1. Load a folder of sounds
(
~folder_path = "/Users/jan/Sound/Recordings/pquin/";
~loader = FluidLoadFolder(~folder_path);
~loader.play(s,{
	"loaded % soundfiles".format(~loader.index.size).postln;
})
)

// 2. Slice
(
~indices = Buffer(s);
FluidBufNoveltySlice.processBlocking(s,~loader.buffer,indices:~indices,threshold:0.5,action:{
	"% slices found".format(~indices.numFrames).postln;
	"average duration in seconds: %".format(~loader.buffer.duration/~indices.numFrames).postln;
});
)

// 3. Analyze
(
fork{
	var feature_buf = Buffer(s);
	var stats_buf = Buffer(s);
	var point_buf = Buffer(s);
	~ds = FluidDataSet(s);
	~indices.loadToFloatArray(action:{
		arg fa;
		fa.doAdjacentPairs{
			arg start, end, i;
			var num = end - start;

			// === PICK YOUR ANALYSIS (JUST CHOOSE 1) ===
			FluidBufMFCC.processBlocking(s,~loader.buffer,start,num,features:feature_buf,numCoeffs:13,startCoeff:1);
			// FluidBufChroma.processBlocking(s,~loader.buffer,start,num,features:feature_buf);
			// FluidBufSpectralShape.processBlocking(s,buffer,start,num,features:feature_buf);
			//FluidBufPitch.processBlocking(s,buffer,start,num,features:feature_buf);

			FluidBufStats.processBlocking(s,feature_buf,stats:stats_buf);
			FluidBufFlatten.processBlocking(s,stats_buf,numFrames:1,destination:point_buf);

			~ds.addPoint("slice-%".format(i),point_buf);
			if(i % 100 == 1,{s.sync});
			"% / % done".format(i+1,~indices.numFrames-1).postln;
		};

		~ds.print;
	});
};
)

// 4. Reduce to 2 Dimensions
(
var umap = FluidUMAP(s,2);
var standardizer = FluidStandardize(s);

~ds_umap = FluidDataSet(s);
~ds_stand = FluidDataSet(s);

// it is often a good idea to scale the data before dimensionality reduction,
// highly recommended if you're using FluidBufSpectralShape or FluidBufPitch as your analysis
// note that if youo choose to not use a scaler here, you should change the first argument to
//  `umap.fitTransform` from `~ds_stand` to just `~ds`
standardizer.fitTransform(~ds,~ds_stand);

// perform umap
umap.fitTransform(~ds_stand,~ds_umap,{"umap complete".postln});
)

// 5. plot it and make sound
(
var kdtree = FluidKDTree(s);
var buf_2d = Buffer.alloc(s,2);
var scaler = FluidNormalize(s);
~ds_norm = FluidDataSet(s);

// whatever the output of umap is, scale it to be between 0 and 1 so that it will look nice in the plotter
scaler.fitTransform(~ds_umap,~ds_norm);

kdtree.fit(~ds_norm);
~ds_norm.dump({
	arg dict;
	var previous, fp;
	defer{
	fp = FluidPlotter(bounds:Rect(0,0,800,800),dict:dict,mouseMoveAction:{
		arg view, x, y;
		[x,y].postln; // get the (normalized) x, y position of the mouse and...
		buf_2d.setn(0,[x,y]); // load it into a buffer so that...
		kdtree.kNearest(buf_2d,{ // it can be passed to the kdtree to find hte nearest neighbour, which is reported back...
			arg nearest; // here
			if(previous != nearest,{ // only if it is a "new" nearest neighbour, should it make sound
				var index = nearest.asString.split($-)[1].asInteger; // peel off the index of the slice
				previous = nearest;
				"nearest point is: %".format(nearest).postln;
				{
					var startPos = Index.kr(~indices,index); // look up the start position
					var dur_samps = Index.kr(~indices,index + 1) - startPos; // calculate the duration in samples

					// play the buffer starting from the start position
					var sig = PlayBuf.ar(1,~loader.buffer,BufRateScale.ir(~loader.buffer),startPos:startPos);
					var dur_sec = dur_samps / BufSampleRate.ir(~loader.buffer);
					var env = EnvGen.kr(Env([0,1,1,0],[0.03,dur_sec-0.06,0.03]),doneAction:2);
					sig.dup *env;
				}.play;
			});
		});
	})};
});
)

It shouldn’t do (the UMAP help follows the same basic path and makes sound ok, at least here: does that play back for you ok?). Is there an error message? Do you see your "nearest point is: %".format(nearest).postln; message posted?

yes, the UMAP example works and sounds fine!
in my example theres no error message, i just get the [x,y] coordinates and no “nearest point” post.

Hmm, is it possible that you’re missing the k argument to kNearest here?

Perhaps try changing to

kdtree.kNearest(buf_2d, 1, { 

I’m surprised it doesn’t shout at you about this – I’ll see if there’s a way of making it do so.