PD issues, arrays, tabwrite~ etc

Here’s a few PD issues i encounter with the compiler.

  1. The array object has vanished from the list of supported objects.
    Any hope it’ll come back soon?
    Objects like tabwrite~ are supported but pointless without an array to write to. Table objects are supported but can not be dynamically resized (correct me there if i am wrong).

  2. hip~ gives me an error message, that it is not allowed to use arguments or data input (for the filter frequency) - that way it has no use.

  3. Any hope to implement tabplay~?

I’ll try reuse this thread if i encounter anything else.

If you contact (or use the forums at) heavy / enzien (the compiler), they’re usually very responsive and will know about these issues. I was using an array the other week and it seemed to be working - so not sure about that. I look forward to tabplay~! But until then using phasor~ and tabread~ is working for me.

https://enzienaudio.com/

Thank you, i was under the impression, that Enzianaudio and Owl somehow share a part of devs.
Thanx as well for reminding me of phasor and tabread~ - generally I’ll trying a simple table now and disregarded the idea of resizing an array instead. Will report.

I don’t think its a good idea to dynamically allocate memory. You have the risk of running out of memory. Not a rare situation with microcontrollers.

I would recommend to create a table with the maximum size you will need and then read only part of the table.

[phasor~]   [r size]
 |           |
 |           |
[*~           ]
 |
 |
[tabread4~ someTable]

Thank you for the reminder about using phasor, JoseFuzzNo.
Yet i can’t find a way to read phasor values at audio rate, as Vanilla seems to only supply snapshot for that use. What i am trying to do is playing only parts of a table, so it has to stop at the right sample, not millisecond.
Any idea what i could improve? In extended there is unsig~ but i am even unsure if that ready at audio rate.
Thanx for thinking about this.

You have control over this with [phasor~]. For example, you want to play the first half second of a table at natural speed:

[phasor~ 2]
 |
[*~ 22050]
 |
[tabread4~ someTable]

Lets say that you want to play 50000 samples starting at the sample 385:

[phasor~ 0.882]  ---> ( 44100 / 50000 )
 |
[*~ 50000]
 |
[+~ 385]
 |
[tabread4~ someTable]

Finally, lets say that you want the previous patch but triggered with a [bng] object. You can use [line~] for this:

[bng]
 |
[385, 50385 882(
 |
[line~]
 |
[tabread4~ someTable]

Ah! Interesting solution, especially the last one.
Unfortunately i can’t seem to be able to pack three dynamic values together with a comma into this. Also i will need the phasor~for the looping.

Yes, I suppose you have tried [set $1, $2 $3(. This sets the $1 parameter and then send $2 $3 to the message object.

You could use 2 parameter message -> [set $1 $2(, but you need to set the initial value before. Something like this:

[385(    [50385(  [882(
 |         |        |
 |        [pack f f  ]
 |         |
[t b f]   [set $1 $2(
 ----|-----|
     |    [    (
     |-----
    [line~]
     |
    [tabread4~ someTable]

JoseFuzzNo, yes, that solves a lot, thank you again for another PD lesson :slight_smile:
In the absence of tabplay~, which loops, i am looping the tabread4~ fractional audio between crossings by simultaneously clocking a timer to the length of the respective fraction. It’s quite clumsy, but it works. Will be a nice remix app.
If you should have suggestions to look at similar Vanilla code for this kind of case, please shoot a link.
Thanx again.