I'm writing my first piece that will take advantage of data structures in PD, and I've stumbled upon an error that I do not understand.
I have two structures drawn in the same subpatch. One is a sequence of notes, the other is a playhead. The sequencer was working fine until I added the playhead. Now whenever I try to get data from the sequencer (getsize, get) I receive the following error:
error: getsize pd-instr1: got wrong template (pd-playhead)
My patch is attached below. Is it not possible (or not advisable) for two structures to draw to the same subpatch?
(The csoundapi~ object is used to generate the sound for this patch, but is unnecessary for duplicating the issue...)
Thanks in advance for any advice... Julian Peterson
Oops!
Here's the promised patch...
JP
#N struct playhead float x; #N struct instr1 float x float y float tablenum array notes instr1-note ; #N struct instr1-note float y float w; #N canvas 539 478 675 263 10; #X obj 33 499 csoundapi~ 2; #X obj 34 536 dac~ 1 2; #N canvas 1 25 1246 453 bohgud-score 0; #X scalar playhead 388 ;; #X scalar instr1 1000 159 100 ; -11.5 68 ; -28 46 ; -27 32 ; -19 20 ; -15 10 ; -7 6 ; -1 4 ; 4 0 ; -1 58 ; -15 30 ; -32 21 ; -31 22 ; -16 35 ; -15 51 ; -20 61 ; -14 49 ; -4 29 ; -9 29 ; -11 23 ; -12 12 ; -2 11 ; 0 8 ; -4 58 ; -1 54 ; -2 59 ; -4 56 ; -9 56 ; -11 43 ; -19 35 ; -25 42 ; -30 20 ; 2 61 ; ;; #X coords 0 0 1 0.5 0 0 0; #X restore 553 -31 pd bohgud-score; #N canvas 267 361 450 300 instr1 0; #N canvas 299 78 450 300 instr1-note-template 0; #X obj 51 32 struct instr1-note float y float w; #X obj 51 78 drawnumber w 0 w 525 w=; #X obj 51 56 drawnumber y 1 -10 222 y=; #X obj 51 106 filledpolygon 0 0 1 -2 0 0 -2 2 0 0 2; #X restore 28 19 pd instr1-note-template; #N canvas 0 0 450 300 instr1-control-template 0; #X restore 28 39 pd instr1-control-template; #N canvas 0 0 450 300 instr1-amp-template 0; #X restore 28 60 pd instr1-amp-template; #N canvas 142 25 909 642 instr1-template 0; #X obj 107 28 struct instr1 float x float y float tablenum array notes instr1-note; #X obj 107 75 drawnumber tablenum 0 100 0 table=; #X obj 433 183 pointer; #X msg 433 160 traverse pd-bohgud-score , bang; #X msg 305 184 1 1 1; #X obj 305 211 append instr1 x y tablenum; #X obj 135 333 setsize instr1 notes; #X obj 269 284 pointer; #X msg 269 249 traverse pd-bohgud-score , next; #X obj 108 101 plot notes 255 1 0 0 50; #X msg 125 303 32; #X obj 621 499 get instr1-note y; #X obj 597 557 abs; #X obj 749 498 get instr1-note w; #X obj 729 557 abs; #X obj 599 583 s i1-note-y; #X obj 620 466 t p p; #X obj 689 582 s i1-note-w; #X obj 108 141 drawpolygon 129 0 0 0 0 -100; #X obj 107 165 drawnumber x 0 -110 129 x=; #X obj 612 526 * 0.25; #X obj 729 526 * 0.5; #X obj 624 433 element instr1 notes; #N canvas 0 0 450 300 metroblast 0; #X obj 97 39 inlet; #X obj 96 79 t b b; #X msg 124 101 0; #X obj 90 162 f; #X obj 285 49 inlet; #X msg 47 103 1; #X msg 81 103 0; #X obj 91 245 outlet; #X obj 123 193 select 0; #X obj 123 159 + 1; #X obj 92 135 metro 100; #X obj 217 251 outlet; #X connect 0 0 1 0; #X connect 1 0 5 0; #X connect 1 1 2 0; #X connect 2 0 3 1; #X connect 3 0 7 0; #X connect 3 0 9 0; #X connect 4 0 8 1; #X connect 5 0 10 0; #X connect 6 0 10 0; #X connect 8 0 6 0; #X connect 8 0 11 0; #X connect 8 1 3 1; #X connect 9 0 8 0; #X connect 10 0 3 0; #X restore 624 397 pd metroblast; #X obj 623 369 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 710 365 r i1-size; #X obj 596 324 r i1metroblast; #X obj 783 367 r i1-getsize; #X obj 779 396 pointer; #X obj 24 446 r i1-getsize; #X obj 24 551 s i1-size; #X obj 24 478 pointer; #X obj 23 516 getsize instr1 notes; #X text 126 445 <-- this receives a message to get the table size... ; #X msg 92 479 traverse pd-bohgud-score , next; #X text 312 481 (this message); #X text 146 567 but it gets an error I do not understand?; #X connect 2 0 5 3; #X connect 3 0 2 0; #X connect 4 0 5 0; #X connect 7 0 6 1; #X connect 8 0 7 0; #X connect 10 0 6 0; #X connect 11 0 20 0; #X connect 12 0 15 0; #X connect 13 0 21 0; #X connect 14 0 17 0; #X connect 16 0 11 0; #X connect 16 1 13 0; #X connect 20 0 12 0; #X connect 21 0 14 0; #X connect 22 0 16 0; #X connect 23 0 22 0; #X connect 24 0 23 0; #X connect 25 0 23 1; #X connect 26 0 24 0; #X connect 27 0 28 0; #X connect 28 0 22 1; #X connect 29 0 31 0; #X connect 31 0 32 0; #X connect 32 0 30 0; #X connect 34 0 31 0; #X restore 28 85 pd instr1-template; #N canvas 102 25 639 712 instr1-sequencer 0; #X obj 376 197 pointer; #X msg 401 157 traverse pd-bohgud-score , next; #X obj 376 99 loadbang; #X obj 110 13 get instr1 x tablenum; #X obj 435 197 s i1-getsize; #X msg 337 163 next; #X obj 12 122 >=; #X obj 12 147 select 1; #X obj 346 443 f; #X obj 133 495 pack f f f; #X msg 133 541 ; toCs5 event i 1 0 0.1 $2 $3 $1 7 3 3000 0.15 0 ; #X obj 49 410 r i1-note-y; #X obj 167 410 r i1-note-w; #X obj 13 54 r PLAYHEAD; #X obj 446 98 r rewindpointers; #X obj 12 179 spigot; #X msg 66 179 1; #X obj 376 125 b; #X msg 99 179 0; #X obj 33 243 s i1metroblast; #X obj 169 441 t f b; #X connect 0 0 3 0; #X connect 1 0 0 0; #X connect 1 0 4 0; #X connect 2 0 17 0; #X connect 3 0 6 1; #X connect 3 1 8 1; #X connect 5 0 0 0; #X connect 5 0 4 0; #X connect 6 0 7 0; #X connect 7 0 15 0; #X connect 8 0 9 2; #X connect 9 0 10 0; #X connect 11 0 9 0; #X connect 12 0 20 0; #X connect 13 0 6 0; #X connect 14 0 17 0; #X connect 15 0 19 0; #X connect 16 0 15 1; #X connect 17 0 1 0; #X connect 17 0 16 0; #X connect 18 0 15 1; #X connect 20 0 9 1; #X connect 20 1 8 0; #X restore 28 131 pd instr1-sequencer; #N canvas 0 0 450 300 instr1-event-editor 0; #X restore 29 157 pd instr1-event-editor; #X text 172 85 <-- look here; #X restore 554 2 pd instr1; #X obj 33 471 r toCs5; #X msg 149 427 event f 100 0 512 7 0 10 1 400 0.6 102 0; #X obj 38 17 loadbang; #X msg 149 453 event i 1 0 0.2 25 100 7 6 2 6000 0.5 0; #N canvas 1 477 450 300 playback 0; #X obj 75 46 inlet; #X obj 75 79 route float rewind; #N canvas 477 188 452 442 playhead-template 0; #X obj 45 48 struct playhead float x; #X obj 46 222 append playhead x; #X msg 46 188 0; #X obj 155 188 pointer; #X msg 153 156 traverse pd-bohgud-score , bang; #X obj 50 338 set playhead x; #X obj 144 254 loadbang; #X obj 145 312 pointer; #X obj 51 293 inlet; #X obj 47 86 drawpolygon 500 3 x -300 x 300; #X msg 143 280 traverse pd-bohgud-score , next; #X connect 2 0 1 0; #X connect 3 0 1 1; #X connect 4 0 3 0; #X connect 6 0 10 0; #X connect 7 0 5 1; #X connect 8 0 5 0; #X connect 10 0 7 0; #X restore 264 102 pd playhead-template; #X floatatom 264 75 5 0 0 0 - - -; #X obj 75 145 f; #X msg 149 143 0; #X obj 149 112 t b b; #X msg 179 143 0; #X obj 75 186 s PLAYHEAD; #X msg 214 142 ; rewindpointers bang; #X obj 75 113 metro 4; #X obj 114 151 + 1; #X obj 265 48 / 3; #X floatatom 152 239 5 0 0 0 - - -; #X connect 0 0 1 0; #X connect 1 0 10 0; #X connect 1 1 6 0; #X connect 3 0 2 0; #X connect 4 0 8 0; #X connect 4 0 11 0; #X connect 4 0 12 0; #X connect 4 0 13 0; #X connect 5 0 4 1; #X connect 6 0 5 0; #X connect 6 1 7 0; #X connect 6 1 9 0; #X connect 7 0 10 0; #X connect 10 0 4 0; #X connect 11 0 4 1; #X connect 12 0 3 0; #X restore 50 195 pd playback; #X obj 41 154 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X msg 65 154 rewind; #X msg 38 49 ; toCs5 open bohgud.csd; #X msg 514 81 ; pd-bohgud-score sort; #X text 372 2 The trouble is in here-->; #X text 215 156 This patch uses csoundapi~ , but it is not necessary to reproduce the error I am getting.; #X connect 0 0 1 0; #X connect 0 1 1 1; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 11 0; #X connect 7 0 0 0; #X connect 9 0 8 0; #X connect 10 0 8 0;
On Mon, 2006-06-05 at 09:23 -0400, Julian Peterson wrote:
I'm writing my first piece that will take advantage of data structures in PD, and I've stumbled upon an error that I do not understand.
I have two structures drawn in the same subpatch. One is a sequence of notes, the other is a playhead. The sequencer was working fine until I added the playhead. Now whenever I try to get data from the sequencer (getsize, get) I receive the following error:
error: getsize pd-instr1: got wrong template (pd-playhead)
My patch is attached below. Is it not possible (or not advisable) for two structures to draw to the same subpatch?
(The csoundapi~ object is used to generate the sound for this patch, but is unnecessary for duplicating the issue...)
Thanks in advance for any advice... Julian Peterson
Hallo, Julian Peterson hat gesagt: // Julian Peterson wrote:
I'm writing my first piece that will take advantage of data structures in PD, and I've stumbled upon an error that I do not understand.
I have two structures drawn in the same subpatch. One is a sequence of notes, the other is a playhead. The sequencer was working fine until I added the playhead. Now whenever I try to get data from the sequencer (getsize, get) I receive the following error:
error: getsize pd-instr1: got wrong template (pd-playhead)
My patch is attached below. Is it not possible (or not advisable) for two structures to draw to the same subpatch?
You forgot to attach the patch, but I guess what's happening is some error in traversing the data structures in the patch. If you mix several types in a subpatch - which is perfectly possible - you need to be aware, that on traversal of this subpatch you will hit pointers of different type. So assuming you have a [struct a float x] and [struct b float x] in your patch, then if you do this:
[traverse pd-data, next( | [pointer]
what comes out of [pointer] may be a pointer to "a" or a pointer to "b". So if you try to [get] at the data using this:
[get a x]
you will get an error everytime, the incoming pointer is of type "b", because then you'd need to use [get b x] instead.
A way out can be this construct:
[traverse pd-data, next( | [pointer a b] | | | | | ... do something else here | | | [get b x] | [get a x]|
Frank Barknecht _ ______footils.org_ __goto10.org__
Hallo, Frank Barknecht hat gesagt: // Frank Barknecht wrote:
You forgot to attach the patch, but I guess what's happening is some error in traversing the data structures in the patch.
Okay, I've seen your patch now and indeed what's happeing is what I've suspected. One additional note: If you use [pointer] with one or more type arguments as suggested, you'l probably want to make sure to skip unwanted types and autoamtically advance the traversal with a "next" message. You can do this as in attached patch.
Frank Barknecht _ ______footils.org_ __goto10.org__
If your score gets too long, though, and you have too many of one before the other, you can get overflows from this. Because the action of checking each scalar is a result of the output of the previous scalar, one "next" message can start an indefinitely long string of messages. I find using a 0 ms delay to work for this; the next string is started as a new command, or at least that's how it seems. Anyway, it works as in the attached patch.
This might not be an issue for you, if you are talking about two separate structures that exist for each note, IF you sort the score each time, because then there is never more than a couple of one before the next instance of the other. But if you start adding anything else to your score, like tempo markers, bar lines, or any sort of automation, you might run into this.
-Chuckk
On 6/5/06, Frank Barknecht fbar@footils.org wrote:
Hallo, Frank Barknecht hat gesagt: // Frank Barknecht wrote:
You forgot to attach the patch, but I guess what's happening is some error in traversing the data structures in the patch.
Okay, I've seen your patch now and indeed what's happeing is what I've suspected. One additional note: If you use [pointer] with one or more type arguments as suggested, you'l probably want to make sure to skip unwanted types and autoamtically advance the traversal with a "next" message. You can do this as in attached patch.
Ciao
Frank Barknecht _ ______footils.org_ __goto10.org__
Thank you, that's exactly what I needed.
JP
On Jun 5, 2006, at 9:51 AM, Frank Barknecht wrote:
Hallo, Julian Peterson hat gesagt: // Julian Peterson wrote:
I'm writing my first piece that will take advantage of data
structures in PD, and I've stumbled upon an error that I do not understand.I have two structures drawn in the same subpatch. One is a
sequence of notes, the other is a playhead. The sequencer was working fine
until I added the playhead. Now whenever I try to get data from the
sequencer (getsize, get) I receive the following error:error: getsize pd-instr1: got wrong template (pd-playhead)
My patch is attached below. Is it not possible (or not advisable)
for two structures to draw to the same subpatch?You forgot to attach the patch, but I guess what's happening is some error in traversing the data structures in the patch. If you mix several types in a subpatch - which is perfectly possible - you need to be aware, that on traversal of this subpatch you will hit pointers of different type. So assuming you have a [struct a float x] and
[struct b float x] in your patch, then if you do this:[traverse pd-data, next( | [pointer]
what comes out of [pointer] may be a pointer to "a" or a pointer to "b". So if you try to [get] at the data using this:
[get a x]
you will get an error everytime, the incoming pointer is of type "b", because then you'd need to use [get b x] instead.
A way out can be this construct:
[traverse pd-data, next( | [pointer a b] | | | | | ... do something else here | | | [get b x] | [get a x]|
Ciao
Frank Barknecht _ ______footils.org_ __goto10.org__
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/ listinfo/pd-list