Re: [Csnd-dev] [EXTERNAL] [Csnd-dev] arrays in the API

vlz <[email protected]>
Newsgroups gmane.comp.audio.csound.devel
Message-ID <[email protected]>
Ok, see what you think of the current state and if you feel we need to modify the interface and introduce CS_VARIABLEs, then we need to come up with a plan. At the moment, I have basically kept the same interface and extended it to handle arrays.

I think opaque types are probable the best way forward in any case.

Prof. Victor Lazzarini
Maynooth University
Ireland

> On 10 Aug 2024, at 21:26, Steven Yi <[email protected]> wrote:
> 
> I need to catch up with all of this, but I had the thought we could be
> exposing channels as CS_VARIABLE's and creating an API around
> reading/writing CS_VARIABLE. It'd make it a little easier for channels
> to have one csoundGetChannelVar() function and then have functions to
> interrogate the type and call appropriate functions to work with the
> variable.
> 
>> On Sat, Aug 10, 2024 at 2:28 PM vlz <[email protected]> wrote:
>> 
>> Ok I have changed the interface. We get the channel pointer and then use API to
>> access the array data.
>> Here’s a test program
>> 
>> int main(int argc, char **argv) {
>> 
>>  CSOUND  *csound;
>>  ARRAYDAT *adat, *adat2;
>>  const MYFLT *data;
>>  MYFLT indata[4] = {5,6,7,8};
>>  int   n, siz;
>> 
>>  const char *code = R"ORC(
>>   instr 1
>>   kArr[] fillarray 1,2,3,4  // array data for output
>>   kArr2[] init 4    // array data for input
>> 
>>   chnset kArr, "testout" // set channel
>>   kArr2[] chnget "testin" // get channel
>> 
>>   printarray kArr2  // print channel
>>   endin
>>   )ORC";
>> 
>>  csound = csoundCreate(NULL, NULL);
>>  csoundSetOption(csound,"-n");
>>  csoundCompileOrc(csound, code, 0);
>>  csoundEventString(csound, "i1 0 1", 0);
>>  csoundStart(csound);
>> 
>>  // perform once
>>  csoundPerformKsmps(csound);
>> 
>>  // access channels directly
>>  csoundGetChannelPtr(csound, (void **) &adat, "testout", CSOUND_ARRAY_CHANNEL
>>                      | CSOUND_OUTPUT_CHANNEL);
>>  csoundGetChannelPtr(csound, (void **) &adat2, "testin", CSOUND_ARRAY_CHANNEL
>>                      | CSOUND_INPUT_CHANNEL);
>> 
>>  // get channel data
>>  data = (const MYFLT *) csoundGetArrayData(adat);
>>  siz = csoundArrayDataSizes(adat)[0];
>>  for(n = 0; n < siz; n++)
>>    printf("[%d]: %f \n", n, data[n]);
>> 
>>  // set channel data
>>  csoundSetArrayData(adat2, (void *) indata);
>> 
>>  // perform again
>>  csoundPerformKsmps(csound);
>>  csoundDestroy(csound);
>> 
>>  return 0;
>> }
>> 
>> 
>> 
>> 
>>>> On 10 Aug 2024, at 18:06, vlz <[email protected]> wrote:
>>> 
>>> *Warning*
>>> This email originated from outside of Maynooth University's Mail System. Do not reply, click links or open attachments unless you recognise the sender and know the content is safe.
>>> Agreed. I have a design for this and I'll go ahead and implement.
>>> 
>>> Prof. Victor Lazzarini
>>> Maynooth University
>>> Ireland
>>> 
>>>> On 9 Aug 2024, at 18:49, Rory Walsh <[email protected]> wrote:
>>>> 
>>>>  I'd be leaning towards making it opaque and doing the same for PVSDATEXT.
>>>> 
>>>> On Fri, 9 Aug 2024 at 14:56, Victor Lazzarini <[email protected]> wrote:
>>>> I am now wondering about the best way to give access to arrays in the API.
>>>> 
>>>> (1) Expose ARRAYDAT: at the moment the array data structure is transparent, so we can access all its members directly.
>>>> 
>>>> or
>>>> 
>>>> (2) Provide an interface: we can make the object opaque, providing access through API functions.
>>>> 
>>>> I can't decide. At the moment, STRINGDAT is opaque but PVSDATEXT is not. I am thinking of changing that one but have not decided yet.
>>>> 
>>>> Option 2 is safer but may be cumbersome for users.
>>>> 
>>>> Prof. Victor Lazzarini
>>>> Maynooth University
>>>> Ireland
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.