[Csnd] Saving arrays in a array and reading it out
| Date | 2023-02-18 19:12 |
| From | Philipp Neumann |
| Subject | [Csnd] Saving arrays in a array and reading it out |
Hello Everybody!
I’m working on a instrument where i can save multiple arrays in one array. Then i want to read these arrays out, one after another.
For example:
iArr1[] = 1, 2, 3, 4, 5
iArr2[] = 11, 22, 33, 44, 55
iArr3[] = 111, 222, 333, 444, 555
iAllArr[] = iArr1, iArr2, iArr3
After this i want to create automatically a new array with all the values like this:
iAllValues[] = 1, 2, 3, 4, 5, 11, 22, 33, 44, 55, 111, 222, 333, 444, 555
I already done this and this working quit well:
kPtr1[] fillarray 1, 2, 3, 4
kPtr2[] fillarray 11, 12, 13
iSngLng = lenarray(kPtr1) + lenarray(kPtr2)
gkPtrCmpl[] init iSngLng
kSngNdx init 0
kRdNdx init 0
kActPtr[] = kPtr1
while kSngNdx < iSngLng do
kNewValue = kActPtr[kRdNdx]
gkPtrCmpl[kSngNdx] = kNewValue
kRdNdx += 1
kSngNdx += 1
if kRdNdx == lenarray(kActPtr) then
kRdNdx = 0
kActPtr = kPtr2
endif
od
But this is only a solution for two arrays as input for a new array.
I want to use a abritary number of kPtrN - Arrays as Input for another Array (iPtrChain[] = iPtr1, iPtr1, iPtr2).
Then i want to read all the values into a new array.
How can i come there?
Greetings,
Philipp
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |
| Date | 2023-02-18 19:53 |
| From | "Jeanette C." |
| Subject | Re: [Csnd] Saving arrays in a array and reading it out |
Hi Philipp!
Feb 18 2023, Philipp Neumann has written:
...
> But this is only a solution for two arrays as input for a new array.
> I want to use a abritary number of kPtrN - Arrays as Input for another Array (iPtrChain[] = iPtr1, iPtr1, iPtr2).
> Then i want to read all the values into a new array.
...
Here are a few things that might help. First, you can change the size of
an array using trim
https://csound.com/manual/trim.html
This can help to change the size of your song array.
You can copy values like you did in a while loop.
You can write a UDO to help you, extend the song by one pattern at a
time. Perhaps something like this:
opcode AddPattern, 0, k[]k[]
kSong[], kPattern[] xin ; get the two arrays inside the UDO
; get the length of the pattern
kPatternLen = lenarray(kPattern) ; or use a fixed value
; Get the length of the song so far
kSongLen = lenarray(kSong)
; Extend the size of your song to accomodate the new pattern
trim(kSong, (kSongLen + kPatternLen)
; Now copy
kReadIndex init 0
kWriteIndex = kSongLen - 1 ; indexing starts at 0 so -1
while (kReadIndex < kPatternLen) do
kSong[kWriteIndex] = kPattern[kReadIndex]
kReadIndex += 1
kWriteIndex += 1
od
endop
I haven't tested the code, but this is the idea. Inside the orchestra
part or directly inside your instrument you can create the patterns and
then use the UDO like this:
instr Player
... ; do stuff
kPart1[] = ...
kPart2 = ...
kSong[] = kPart1 ; yes the first pattern should probably be added like
; this, I'm not sure whether you can create an array with 0 elements
AddPattern kSong, kPart2
AddPattern kSong, kPart1
...
endin
HTH.
Best wishes,
Jeanette
--
* Website: http://juliencoder.de - for summer is a state of sound
* Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
* Audiobombs: https://www.audiobombs.com/users/jeanette_c
* GitHub: https://github.com/jeanette-c
There must be another way
Cause I believe in taking chances
But who am I to say - What a girl is to do <3
(Britney Spears)
Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here |