Csound Csound-dev Csound-tekno Search About

[Csnd-dev] Csound 7: csoundListChannels returns always 0

Date2024-09-05 08:06
FromTarmo Johannes
Subject[Csnd-dev] Csound 7: csoundListChannels returns always 0
Hi,

This is mostly meant for Victor:

Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.

CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.

The problem is that with Csound 7 (built from feature/newapi Augus 30)

csoundListChannels()

returns always 0, although there are declared channels:

controlChannelInfo_t *channelList;
int numChannels = csoundListChannels(ud->csound, &channelList);

What has changed? Might be that I need to implement it differently on CsoundQt side.

Should I file a bug report?

tarmo

Date2024-09-05 08:30
Fromvlz
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
No that function was not touched, but I'll check what the matter is today.
Prof. Victor Lazzarini
Maynooth University
Ireland

On 5 Sep 2024, at 08:07, Tarmo Johannes <trmjhnns@gmail.com> wrote:


Hi,

This is mostly meant for Victor:

Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.

CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.

The problem is that with Csound 7 (built from feature/newapi Augus 30)

csoundListChannels()

returns always 0, although there are declared channels:

controlChannelInfo_t *channelList;
int numChannels = csoundListChannels(ud->csound, &channelList);

What has changed? Might be that I need to implement it differently on CsoundQt side.

Should I file a bug report?

tarmo

Date2024-09-05 08:39
Fromvlz
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
I can't see anything wrong immediately. Can you pull the latest and see if the issue is there? There was a bug I fixed at some point which may have a bearing on it.


Prof. Victor Lazzarini
Maynooth University
Ireland

On 5 Sep 2024, at 08:07, Tarmo Johannes <trmjhnns@gmail.com> wrote:


Hi,

This is mostly meant for Victor:

Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.

CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.

The problem is that with Csound 7 (built from feature/newapi Augus 30)

csoundListChannels()

returns always 0, although there are declared channels:

controlChannelInfo_t *channelList;
int numChannels = csoundListChannels(ud->csound, &channelList);

What has changed? Might be that I need to implement it differently on CsoundQt side.

Should I file a bug report?

tarmo

Date2024-09-05 08:59
Fromvlz
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
I tested it here and it is working. See the test program

const char *code =    
  "0dbfs = 1              \n"
  "chn_k \"pitch\",3  \n" 
  "instr 1                \n"
  "kp chnget \"pitch\"    \n"
  "a1 expon p4,p3,0.001   \n"
  "a2 oscil a1,cpsmidinn(p5)*kp\n"
  "    out a2             \n"
  "endin                  \n";

int main(int argc, const char *argv[]) {
  /* Create the Csound engine instance */
  CSOUND *csound = csoundCreate(NULL, NULL);

  if(csound != NULL) {
    int res = CSOUND_SUCCESS, i;
    /* Set options checking for any errors */
    for(i = 1; i < argc; i++)
      res += csoundSetOption(csound, argv[i]);
    if(res == CSOUND_SUCCESS) {
      /* Compile code from string, synchronously */
      res = csoundCompileOrc(csound, code, 0);
      if(res == CSOUND_SUCCESS) {
        char evt[64];
        MYFLT dur = 5.;
        MYFLT pitch = 1., incr = 1./(dur*csoundGetKr(csound));
        /* Start engine */
        res = csoundStart(csound);
        controlChannelInfo_t *list;
        int chn = csoundListChannels(csound, &list);
        csoundMessage(csound, "%d channels\n", chn);
        /* send realtine event, synchronously */
        snprintf(evt, 64, "i1 0 %f 0.1 60\n", dur);
        csoundEventString(csound, evt, 0);
       /* compute audio blocks */
        csoundPerformKsmps(csound);
        while(res == CSOUND_SUCCESS) {       
          csoundSetControlChannel(csound, "pitch", pitch);
          res = csoundPerformKsmps(csound);
          pitch += incr;
          if(pitch > 2) 
           csoundEventString(csound, "e 0", 0);
        }
      }
    }
    /* Destroy the engine instance */
    csoundDestroy(csound);
    return 0;
  }
  return -1;
}

It prints

SECTION 1:
1 channels
new alloc for instr 1:
  T  5.000 TT  5.000 M:  0.09989
End of Performance inactive allocs returned to freespace
  overall amps:  0.09989
  overall samples out of range:        0
0 errors in performance


> On 5 Sep 2024, at 08:06, Tarmo Johannes  wrote:
> 
> Hi,
> 
> This is mostly meant for Victor:
> 
> Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.
> 
> CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.
> see https://github.com/CsoundQt/CsoundQt/blob/5ca6f63a11a470575bc53fcdc3629cd8079df2b4/src/csoundengine.cpp#L1062
> 
> The problem is that with Csound 7 (built from feature/newapi Augus 30) 
> 
> csoundListChannels()
> 
> returns always 0, although there are declared channels:
> 
> controlChannelInfo_t *channelList;
> int numChannels = csoundListChannels(ud->csound, &channelList);
> 
> What has changed? Might be that I need to implement it differently on CsoundQt side.
> 
> Should I file a bug report?
> 
> tarmo

Date2024-09-05 09:27
FromTarmo Johannes
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
Hm,

in CsoundQt with the latest pull from Csound feature/newapi still the same result:

controlChannelInfo_t *channelList;
int numChannels = csoundListChannels(ud->csound, &channelList);

the second lines sets channelList to 0x0 and returns 0 as numChannels.

When I build CsoundQt (the non modified code) agains Csound6, it returns correct number of channels.

I need to go now but will think have closer look later. Maybe it is when is  csoundStart() called.

tarmo





Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval N, 5. september 2024 kell 10:59:
I tested it here and it is working. See the test program

const char *code =   
  "0dbfs = 1              \n"
  "chn_k \"pitch\",3  \n"
  "instr 1                \n"
  "kp chnget \"pitch\"    \n"
  "a1 expon p4,p3,0.001   \n"
  "a2 oscil a1,cpsmidinn(p5)*kp\n"
  "    out a2             \n"
  "endin                  \n";

int main(int argc, const char *argv[]) {
  /* Create the Csound engine instance */
  CSOUND *csound = csoundCreate(NULL, NULL);

  if(csound != NULL) {
    int res = CSOUND_SUCCESS, i;
    /* Set options checking for any errors */
    for(i = 1; i < argc; i++)
      res += csoundSetOption(csound, argv[i]);
    if(res == CSOUND_SUCCESS) {
      /* Compile code from string, synchronously */
      res = csoundCompileOrc(csound, code, 0);
      if(res == CSOUND_SUCCESS) {
        char evt[64];
        MYFLT dur = 5.;
        MYFLT pitch = 1., incr = 1./(dur*csoundGetKr(csound));
        /* Start engine */
        res = csoundStart(csound);
        controlChannelInfo_t *list;
        int chn = csoundListChannels(csound, &list);
        csoundMessage(csound, "%d channels\n", chn);
        /* send realtine event, synchronously */
        snprintf(evt, 64, "i1 0 %f 0.1 60\n", dur);
        csoundEventString(csound, evt, 0);
       /* compute audio blocks */
        csoundPerformKsmps(csound);
        while(res == CSOUND_SUCCESS) {       
          csoundSetControlChannel(csound, "pitch", pitch);
          res = csoundPerformKsmps(csound);
          pitch += incr;
          if(pitch > 2)
           csoundEventString(csound, "e 0", 0);
        }
      }
    }
    /* Destroy the engine instance */
    csoundDestroy(csound);
    return 0;
  }
  return -1;
}

It prints

SECTION 1:
1 channels
new alloc for instr 1:
  T  5.000 TT  5.000 M:  0.09989
End of Performance inactive allocs returned to freespace
  overall amps:  0.09989
  overall samples out of range:        0
0 errors in performance


> On 5 Sep 2024, at 08:06, Tarmo Johannes <trmjhnns@GMAIL.COM> wrote:
>
> Hi,
>
> This is mostly meant for Victor:
>
> Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.
>
> CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.
> see https://github.com/CsoundQt/CsoundQt/blob/5ca6f63a11a470575bc53fcdc3629cd8079df2b4/src/csoundengine.cpp#L1062
>
> The problem is that with Csound 7 (built from feature/newapi Augus 30)
>
> csoundListChannels()
>
> returns always 0, although there are declared channels:
>
> controlChannelInfo_t *channelList;
> int numChannels = csoundListChannels(ud->csound, &channelList);
>
> What has changed? Might be that I need to implement it differently on CsoundQt side.
>
> Should I file a bug report?
>
> tarmo

Date2024-09-05 10:47
Fromvlz
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
ah that's it, you need to call it after Csound starts. Maybe that has changed at some point early in development. Not sure when/why. Is that a problem?

Prof. Victor Lazzarini
Maynooth University
Ireland

On 5 Sep 2024, at 09:27, Tarmo Johannes <trmjhnns@gmail.com> wrote:


Hm,

in CsoundQt with the latest pull from Csound feature/newapi still the same result:

controlChannelInfo_t *channelList;
int numChannels = csoundListChannels(ud->csound, &channelList);

the second lines sets channelList to 0x0 and returns 0 as numChannels.

When I build CsoundQt (the non modified code) agains Csound6, it returns correct number of channels.

I need to go now but will think have closer look later. Maybe it is when is  csoundStart() called.

tarmo





Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval N, 5. september 2024 kell 10:59:
I tested it here and it is working. See the test program

const char *code =   
  "0dbfs = 1              \n"
  "chn_k \"pitch\",3  \n"
  "instr 1                \n"
  "kp chnget \"pitch\"    \n"
  "a1 expon p4,p3,0.001   \n"
  "a2 oscil a1,cpsmidinn(p5)*kp\n"
  "    out a2             \n"
  "endin                  \n";

int main(int argc, const char *argv[]) {
  /* Create the Csound engine instance */
  CSOUND *csound = csoundCreate(NULL, NULL);

  if(csound != NULL) {
    int res = CSOUND_SUCCESS, i;
    /* Set options checking for any errors */
    for(i = 1; i < argc; i++)
      res += csoundSetOption(csound, argv[i]);
    if(res == CSOUND_SUCCESS) {
      /* Compile code from string, synchronously */
      res = csoundCompileOrc(csound, code, 0);
      if(res == CSOUND_SUCCESS) {
        char evt[64];
        MYFLT dur = 5.;
        MYFLT pitch = 1., incr = 1./(dur*csoundGetKr(csound));
        /* Start engine */
        res = csoundStart(csound);
        controlChannelInfo_t *list;
        int chn = csoundListChannels(csound, &list);
        csoundMessage(csound, "%d channels\n", chn);
        /* send realtine event, synchronously */
        snprintf(evt, 64, "i1 0 %f 0.1 60\n", dur);
        csoundEventString(csound, evt, 0);
       /* compute audio blocks */
        csoundPerformKsmps(csound);
        while(res == CSOUND_SUCCESS) {       
          csoundSetControlChannel(csound, "pitch", pitch);
          res = csoundPerformKsmps(csound);
          pitch += incr;
          if(pitch > 2)
           csoundEventString(csound, "e 0", 0);
        }
      }
    }
    /* Destroy the engine instance */
    csoundDestroy(csound);
    return 0;
  }
  return -1;
}

It prints

SECTION 1:
1 channels
new alloc for instr 1:
  T  5.000 TT  5.000 M:  0.09989
End of Performance inactive allocs returned to freespace
  overall amps:  0.09989
  overall samples out of range:        0
0 errors in performance


> On 5 Sep 2024, at 08:06, Tarmo Johannes <trmjhnns@GMAIL.COM> wrote:
>
> Hi,
>
> This is mostly meant for Victor:
>
> Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.
>
> CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.
> see https://github.com/CsoundQt/CsoundQt/blob/5ca6f63a11a470575bc53fcdc3629cd8079df2b4/src/csoundengine.cpp#L1062
>
> The problem is that with Csound 7 (built from feature/newapi Augus 30)
>
> csoundListChannels()
>
> returns always 0, although there are declared channels:
>
> controlChannelInfo_t *channelList;
> int numChannels = csoundListChannels(ud->csound, &channelList);
>
> What has changed? Might be that I need to implement it differently on CsoundQt side.
>
> Should I file a bug report?
>
> tarmo

Date2024-09-05 10:51
Fromvlz
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
and the reason is that instr0 code (header) gets called by csoundStart() in this case. So the channels had not yet been created.


Prof. Victor Lazzarini
Maynooth University
Ireland

On 5 Sep 2024, at 09:27, Tarmo Johannes <trmjhnns@gmail.com> wrote:


Hm,

in CsoundQt with the latest pull from Csound feature/newapi still the same result:

controlChannelInfo_t *channelList;
int numChannels = csoundListChannels(ud->csound, &channelList);

the second lines sets channelList to 0x0 and returns 0 as numChannels.

When I build CsoundQt (the non modified code) agains Csound6, it returns correct number of channels.

I need to go now but will think have closer look later. Maybe it is when is  csoundStart() called.

tarmo





Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval N, 5. september 2024 kell 10:59:
I tested it here and it is working. See the test program

const char *code =   
  "0dbfs = 1              \n"
  "chn_k \"pitch\",3  \n"
  "instr 1                \n"
  "kp chnget \"pitch\"    \n"
  "a1 expon p4,p3,0.001   \n"
  "a2 oscil a1,cpsmidinn(p5)*kp\n"
  "    out a2             \n"
  "endin                  \n";

int main(int argc, const char *argv[]) {
  /* Create the Csound engine instance */
  CSOUND *csound = csoundCreate(NULL, NULL);

  if(csound != NULL) {
    int res = CSOUND_SUCCESS, i;
    /* Set options checking for any errors */
    for(i = 1; i < argc; i++)
      res += csoundSetOption(csound, argv[i]);
    if(res == CSOUND_SUCCESS) {
      /* Compile code from string, synchronously */
      res = csoundCompileOrc(csound, code, 0);
      if(res == CSOUND_SUCCESS) {
        char evt[64];
        MYFLT dur = 5.;
        MYFLT pitch = 1., incr = 1./(dur*csoundGetKr(csound));
        /* Start engine */
        res = csoundStart(csound);
        controlChannelInfo_t *list;
        int chn = csoundListChannels(csound, &list);
        csoundMessage(csound, "%d channels\n", chn);
        /* send realtine event, synchronously */
        snprintf(evt, 64, "i1 0 %f 0.1 60\n", dur);
        csoundEventString(csound, evt, 0);
       /* compute audio blocks */
        csoundPerformKsmps(csound);
        while(res == CSOUND_SUCCESS) {       
          csoundSetControlChannel(csound, "pitch", pitch);
          res = csoundPerformKsmps(csound);
          pitch += incr;
          if(pitch > 2)
           csoundEventString(csound, "e 0", 0);
        }
      }
    }
    /* Destroy the engine instance */
    csoundDestroy(csound);
    return 0;
  }
  return -1;
}

It prints

SECTION 1:
1 channels
new alloc for instr 1:
  T  5.000 TT  5.000 M:  0.09989
End of Performance inactive allocs returned to freespace
  overall amps:  0.09989
  overall samples out of range:        0
0 errors in performance


> On 5 Sep 2024, at 08:06, Tarmo Johannes <trmjhnns@GMAIL.COM> wrote:
>
> Hi,
>
> This is mostly meant for Victor:
>
> Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.
>
> CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.
> see https://github.com/CsoundQt/CsoundQt/blob/5ca6f63a11a470575bc53fcdc3629cd8079df2b4/src/csoundengine.cpp#L1062
>
> The problem is that with Csound 7 (built from feature/newapi Augus 30)
>
> csoundListChannels()
>
> returns always 0, although there are declared channels:
>
> controlChannelInfo_t *channelList;
> int numChannels = csoundListChannels(ud->csound, &channelList);
>
> What has changed? Might be that I need to implement it differently on CsoundQt side.
>
> Should I file a bug report?
>
> tarmo

Date2024-09-05 11:09
Fromvlz
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
Looking at this, I think the change is that csoundStart() *always* need to be called now (it was an anomaly that it didn’t in some cases).
So in the past if you used csoundCompile(csound, argc, arg), then csoundStart() was called and so channels would be there because
it starts Csound running. 

> On 5 Sep 2024, at 09:27, Tarmo Johannes  wrote:
> 
> Hm, 
> 
> in CsoundQt with the latest pull from Csound feature/newapi still the same result:
> 
> controlChannelInfo_t *channelList;
> int numChannels = csoundListChannels(ud->csound, &channelList);
> 
> the second lines sets channelList to 0x0 and returns 0 as numChannels.
> 
> When I build CsoundQt (the non modified code) agains Csound6, it returns correct number of channels.
> 
> I need to go now but will think have closer look later. Maybe it is when is  csoundStart() called.
> 
> tarmo
> 
> 
> 
> 
> 
> Kontakt vlz () kirjutas kuupäeval N, 5. september 2024 kell 10:59:
> I tested it here and it is working. See the test program
> 
> const char *code =    
>   "0dbfs = 1              \n"
>   "chn_k \"pitch\",3  \n" 
>   "instr 1                \n"
>   "kp chnget \"pitch\"    \n"
>   "a1 expon p4,p3,0.001   \n"
>   "a2 oscil a1,cpsmidinn(p5)*kp\n"
>   "    out a2             \n"
>   "endin                  \n";
> 
> int main(int argc, const char *argv[]) {
>   /* Create the Csound engine instance */
>   CSOUND *csound = csoundCreate(NULL, NULL);
> 
>   if(csound != NULL) {
>     int res = CSOUND_SUCCESS, i;
>     /* Set options checking for any errors */
>     for(i = 1; i < argc; i++)
>       res += csoundSetOption(csound, argv[i]);
>     if(res == CSOUND_SUCCESS) {
>       /* Compile code from string, synchronously */
>       res = csoundCompileOrc(csound, code, 0);
>       if(res == CSOUND_SUCCESS) {
>         char evt[64];
>         MYFLT dur = 5.;
>         MYFLT pitch = 1., incr = 1./(dur*csoundGetKr(csound));
>         /* Start engine */
>         res = csoundStart(csound);
>         controlChannelInfo_t *list;
>         int chn = csoundListChannels(csound, &list);
>         csoundMessage(csound, "%d channels\n", chn);
>         /* send realtine event, synchronously */
>         snprintf(evt, 64, "i1 0 %f 0.1 60\n", dur);
>         csoundEventString(csound, evt, 0);
>        /* compute audio blocks */
>         csoundPerformKsmps(csound);
>         while(res == CSOUND_SUCCESS) {       
>           csoundSetControlChannel(csound, "pitch", pitch);
>           res = csoundPerformKsmps(csound);
>           pitch += incr;
>           if(pitch > 2) 
>            csoundEventString(csound, "e 0", 0);
>         }
>       }
>     }
>     /* Destroy the engine instance */
>     csoundDestroy(csound);
>     return 0;
>   }
>   return -1;
> }
> 
> It prints
> 
> SECTION 1:
> 1 channels
> new alloc for instr 1:
>   T  5.000 TT  5.000 M:  0.09989
> End of Performance inactive allocs returned to freespace
>   overall amps:  0.09989
>   overall samples out of range:        0
> 0 errors in performance
> 
> 
> > On 5 Sep 2024, at 08:06, Tarmo Johannes  wrote:
> > 
> > Hi,
> > 
> > This is mostly meant for Victor:
> > 
> > Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.
> > 
> > CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.
> > see https://github.com/CsoundQt/CsoundQt/blob/5ca6f63a11a470575bc53fcdc3629cd8079df2b4/src/csoundengine.cpp#L1062
> > 
> > The problem is that with Csound 7 (built from feature/newapi Augus 30) 
> > 
> > csoundListChannels()
> > 
> > returns always 0, although there are declared channels:
> > 
> > controlChannelInfo_t *channelList;
> > int numChannels = csoundListChannels(ud->csound, &channelList);
> > 
> > What has changed? Might be that I need to implement it differently on CsoundQt side.
> > 
> > Should I file a bug report?
> > 
> > tarmo

Date2024-09-07 21:18
FromTarmo Johannes
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
Hi!

yes, it was csoundStart(), inserting it 'kind of' solved the problem - now the channels are read correctly - but I am not certain how to do it properly.


This is how it was organized before:

csoundCreate
 / setting callbacks etc /
csoundCompile
setupChannels ( including csoundListChannels() )
new CsoundPerformanceThread
CsoundPerformanceThread::Play()


Now I tried to insert csoundStart() before and after csoundCompile. If before, the csoundCompile fails, if after, csoundStart() returned -1 and reported in the console "Csound is already started, call csoundReset() before starting again."
If I ignore the error and just keep going, everythings seems to work fine but I don't like the message in CsoundQt console and ignoring error code also does not feel right.

Can you see how to solve it?

Tarmo

Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval N, 5. september 2024 kell 13:09:
Looking at this, I think the change is that csoundStart() *always* need to be called now (it was an anomaly that it didn’t in some cases).
So in the past if you used csoundCompile(csound, argc, arg), then csoundStart() was called and so channels would be there because
it starts Csound running.

> On 5 Sep 2024, at 09:27, Tarmo Johannes <trmjhnns@GMAIL.COM> wrote:
>
> Hm,
>
> in CsoundQt with the latest pull from Csound feature/newapi still the same result:
>
> controlChannelInfo_t *channelList;
> int numChannels = csoundListChannels(ud->csound, &channelList);
>
> the second lines sets channelList to 0x0 and returns 0 as numChannels.
>
> When I build CsoundQt (the non modified code) agains Csound6, it returns correct number of channels.
>
> I need to go now but will think have closer look later. Maybe it is when is  csoundStart() called.
>
> tarmo
>
>
>
>
>
> Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval N, 5. september 2024 kell 10:59:
> I tested it here and it is working. See the test program
>
> const char *code =   
>   "0dbfs = 1              \n"
>   "chn_k \"pitch\",3  \n"
>   "instr 1                \n"
>   "kp chnget \"pitch\"    \n"
>   "a1 expon p4,p3,0.001   \n"
>   "a2 oscil a1,cpsmidinn(p5)*kp\n"
>   "    out a2             \n"
>   "endin                  \n";
>
> int main(int argc, const char *argv[]) {
>   /* Create the Csound engine instance */
>   CSOUND *csound = csoundCreate(NULL, NULL);
>
>   if(csound != NULL) {
>     int res = CSOUND_SUCCESS, i;
>     /* Set options checking for any errors */
>     for(i = 1; i < argc; i++)
>       res += csoundSetOption(csound, argv[i]);
>     if(res == CSOUND_SUCCESS) {
>       /* Compile code from string, synchronously */
>       res = csoundCompileOrc(csound, code, 0);
>       if(res == CSOUND_SUCCESS) {
>         char evt[64];
>         MYFLT dur = 5.;
>         MYFLT pitch = 1., incr = 1./(dur*csoundGetKr(csound));
>         /* Start engine */
>         res = csoundStart(csound);
>         controlChannelInfo_t *list;
>         int chn = csoundListChannels(csound, &list);
>         csoundMessage(csound, "%d channels\n", chn);
>         /* send realtine event, synchronously */
>         snprintf(evt, 64, "i1 0 %f 0.1 60\n", dur);
>         csoundEventString(csound, evt, 0);
>        /* compute audio blocks */
>         csoundPerformKsmps(csound);
>         while(res == CSOUND_SUCCESS) {       
>           csoundSetControlChannel(csound, "pitch", pitch);
>           res = csoundPerformKsmps(csound);
>           pitch += incr;
>           if(pitch > 2)
>            csoundEventString(csound, "e 0", 0);
>         }
>       }
>     }
>     /* Destroy the engine instance */
>     csoundDestroy(csound);
>     return 0;
>   }
>   return -1;
> }
>
> It prints
>
> SECTION 1:
> 1 channels
> new alloc for instr 1:
>   T  5.000 TT  5.000 M:  0.09989
> End of Performance inactive allocs returned to freespace
>   overall amps:  0.09989
>   overall samples out of range:        0
> 0 errors in performance
>
>
> > On 5 Sep 2024, at 08:06, Tarmo Johannes <trmjhnns@GMAIL.COM> wrote:
> >
> > Hi,
> >
> > This is mostly meant for Victor:
> >
> > Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.
> >
> > CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.
> > see https://github.com/CsoundQt/CsoundQt/blob/5ca6f63a11a470575bc53fcdc3629cd8079df2b4/src/csoundengine.cpp#L1062
> >
> > The problem is that with Csound 7 (built from feature/newapi Augus 30)
> >
> > csoundListChannels()
> >
> > returns always 0, although there are declared channels:
> >
> > controlChannelInfo_t *channelList;
> > int numChannels = csoundListChannels(ud->csound, &channelList);
> >
> > What has changed? Might be that I need to implement it differently on CsoundQt side.
> >
> > Should I file a bug report?
> >
> > tarmo

Date2024-09-07 21:37
Fromvlz
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
On Csound 6, csoundCompile() calls csoundStart() internally, so for 7,
the sequence

csoundCompile(csound, argc, argv);
csoundStart(csound);

should reproduce the previous behaviour. The message you are getting should not happen in Csound 7.0. It will happen in Csound 6.

Prof. Victor Lazzarini
Maynooth University
Ireland

On 7 Sep 2024, at 21:18, Tarmo Johannes <trmjhnns@gmail.com> wrote:


Hi!

yes, it was csoundStart(), inserting it 'kind of' solved the problem - now the channels are read correctly - but I am not certain how to do it properly.


This is how it was organized before:

csoundCreate
 / setting callbacks etc /
csoundCompile
setupChannels ( including csoundListChannels() )
new CsoundPerformanceThread
CsoundPerformanceThread::Play()


Now I tried to insert csoundStart() before and after csoundCompile. If before, the csoundCompile fails, if after, csoundStart() returned -1 and reported in the console "Csound is already started, call csoundReset() before starting again."
If I ignore the error and just keep going, everythings seems to work fine but I don't like the message in CsoundQt console and ignoring error code also does not feel right.

Can you see how to solve it?

Tarmo

Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval N, 5. september 2024 kell 13:09:
Looking at this, I think the change is that csoundStart() *always* need to be called now (it was an anomaly that it didn’t in some cases).
So in the past if you used csoundCompile(csound, argc, arg), then csoundStart() was called and so channels would be there because
it starts Csound running.

> On 5 Sep 2024, at 09:27, Tarmo Johannes <trmjhnns@GMAIL.COM> wrote:
>
> Hm,
>
> in CsoundQt with the latest pull from Csound feature/newapi still the same result:
>
> controlChannelInfo_t *channelList;
> int numChannels = csoundListChannels(ud->csound, &channelList);
>
> the second lines sets channelList to 0x0 and returns 0 as numChannels.
>
> When I build CsoundQt (the non modified code) agains Csound6, it returns correct number of channels.
>
> I need to go now but will think have closer look later. Maybe it is when is  csoundStart() called.
>
> tarmo
>
>
>
>
>
> Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval N, 5. september 2024 kell 10:59:
> I tested it here and it is working. See the test program
>
> const char *code =   
>   "0dbfs = 1              \n"
>   "chn_k \"pitch\",3  \n"
>   "instr 1                \n"
>   "kp chnget \"pitch\"    \n"
>   "a1 expon p4,p3,0.001   \n"
>   "a2 oscil a1,cpsmidinn(p5)*kp\n"
>   "    out a2             \n"
>   "endin                  \n";
>
> int main(int argc, const char *argv[]) {
>   /* Create the Csound engine instance */
>   CSOUND *csound = csoundCreate(NULL, NULL);
>
>   if(csound != NULL) {
>     int res = CSOUND_SUCCESS, i;
>     /* Set options checking for any errors */
>     for(i = 1; i < argc; i++)
>       res += csoundSetOption(csound, argv[i]);
>     if(res == CSOUND_SUCCESS) {
>       /* Compile code from string, synchronously */
>       res = csoundCompileOrc(csound, code, 0);
>       if(res == CSOUND_SUCCESS) {
>         char evt[64];
>         MYFLT dur = 5.;
>         MYFLT pitch = 1., incr = 1./(dur*csoundGetKr(csound));
>         /* Start engine */
>         res = csoundStart(csound);
>         controlChannelInfo_t *list;
>         int chn = csoundListChannels(csound, &list);
>         csoundMessage(csound, "%d channels\n", chn);
>         /* send realtine event, synchronously */
>         snprintf(evt, 64, "i1 0 %f 0.1 60\n", dur);
>         csoundEventString(csound, evt, 0);
>        /* compute audio blocks */
>         csoundPerformKsmps(csound);
>         while(res == CSOUND_SUCCESS) {       
>           csoundSetControlChannel(csound, "pitch", pitch);
>           res = csoundPerformKsmps(csound);
>           pitch += incr;
>           if(pitch > 2)
>            csoundEventString(csound, "e 0", 0);
>         }
>       }
>     }
>     /* Destroy the engine instance */
>     csoundDestroy(csound);
>     return 0;
>   }
>   return -1;
> }
>
> It prints
>
> SECTION 1:
> 1 channels
> new alloc for instr 1:
>   T  5.000 TT  5.000 M:  0.09989
> End of Performance inactive allocs returned to freespace
>   overall amps:  0.09989
>   overall samples out of range:        0
> 0 errors in performance
>
>
> > On 5 Sep 2024, at 08:06, Tarmo Johannes <trmjhnns@GMAIL.COM> wrote:
> >
> > Hi,
> >
> > This is mostly meant for Victor:
> >
> > Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.
> >
> > CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.
> > see https://github.com/CsoundQt/CsoundQt/blob/5ca6f63a11a470575bc53fcdc3629cd8079df2b4/src/csoundengine.cpp#L1062
> >
> > The problem is that with Csound 7 (built from feature/newapi Augus 30)
> >
> > csoundListChannels()
> >
> > returns always 0, although there are declared channels:
> >
> > controlChannelInfo_t *channelList;
> > int numChannels = csoundListChannels(ud->csound, &channelList);
> >
> > What has changed? Might be that I need to implement it differently on CsoundQt side.
> >
> > Should I file a bug report?
> >
> > tarmo

Date2024-09-08 10:41
FromTarmo Johannes
SubjectRe: [Csnd-dev] Csound 7: csoundListChannels returns always 0
Double stupid me.....

First -  I was moving between two branches and build setting between csound 6 and 7 and did not notice that indeed I was on the Csound6 branch with the latest tryout.

Second - I did not  noitice, I had already inserted csoundStart() to the code with some earlier fix but that was run after setupChannels(). Now it is all sorted out and works as expected.

Thank  you, Victor!

I am testing now my own recent works with CsoundQt and Csound7 and so far everything seems to work. I will report if I find any problems.

Best!
tarmo

Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval L, 7. september 2024 kell 23:37:
On Csound 6, csoundCompile() calls csoundStart() internally, so for 7,
the sequence

csoundCompile(csound, argc, argv);
csoundStart(csound);

should reproduce the previous behaviour. The message you are getting should not happen in Csound 7.0. It will happen in Csound 6.

Prof. Victor Lazzarini
Maynooth University
Ireland

On 7 Sep 2024, at 21:18, Tarmo Johannes <trmjhnns@gmail.com> wrote:


Hi!

yes, it was csoundStart(), inserting it 'kind of' solved the problem - now the channels are read correctly - but I am not certain how to do it properly.


This is how it was organized before:

csoundCreate
 / setting callbacks etc /
csoundCompile
setupChannels ( including csoundListChannels() )
new CsoundPerformanceThread
CsoundPerformanceThread::Play()


Now I tried to insert csoundStart() before and after csoundCompile. If before, the csoundCompile fails, if after, csoundStart() returned -1 and reported in the console "Csound is already started, call csoundReset() before starting again."
If I ignore the error and just keep going, everythings seems to work fine but I don't like the message in CsoundQt console and ignoring error code also does not feel right.

Can you see how to solve it?

Tarmo

Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval N, 5. september 2024 kell 13:09:
Looking at this, I think the change is that csoundStart() *always* need to be called now (it was an anomaly that it didn’t in some cases).
So in the past if you used csoundCompile(csound, argc, arg), then csoundStart() was called and so channels would be there because
it starts Csound running.

> On 5 Sep 2024, at 09:27, Tarmo Johannes <trmjhnns@GMAIL.COM> wrote:
>
> Hm,
>
> in CsoundQt with the latest pull from Csound feature/newapi still the same result:
>
> controlChannelInfo_t *channelList;
> int numChannels = csoundListChannels(ud->csound, &channelList);
>
> the second lines sets channelList to 0x0 and returns 0 as numChannels.
>
> When I build CsoundQt (the non modified code) agains Csound6, it returns correct number of channels.
>
> I need to go now but will think have closer look later. Maybe it is when is  csoundStart() called.
>
> tarmo
>
>
>
>
>
> Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval N, 5. september 2024 kell 10:59:
> I tested it here and it is working. See the test program
>
> const char *code =   
>   "0dbfs = 1              \n"
>   "chn_k \"pitch\",3  \n"
>   "instr 1                \n"
>   "kp chnget \"pitch\"    \n"
>   "a1 expon p4,p3,0.001   \n"
>   "a2 oscil a1,cpsmidinn(p5)*kp\n"
>   "    out a2             \n"
>   "endin                  \n";
>
> int main(int argc, const char *argv[]) {
>   /* Create the Csound engine instance */
>   CSOUND *csound = csoundCreate(NULL, NULL);
>
>   if(csound != NULL) {
>     int res = CSOUND_SUCCESS, i;
>     /* Set options checking for any errors */
>     for(i = 1; i < argc; i++)
>       res += csoundSetOption(csound, argv[i]);
>     if(res == CSOUND_SUCCESS) {
>       /* Compile code from string, synchronously */
>       res = csoundCompileOrc(csound, code, 0);
>       if(res == CSOUND_SUCCESS) {
>         char evt[64];
>         MYFLT dur = 5.;
>         MYFLT pitch = 1., incr = 1./(dur*csoundGetKr(csound));
>         /* Start engine */
>         res = csoundStart(csound);
>         controlChannelInfo_t *list;
>         int chn = csoundListChannels(csound, &list);
>         csoundMessage(csound, "%d channels\n", chn);
>         /* send realtine event, synchronously */
>         snprintf(evt, 64, "i1 0 %f 0.1 60\n", dur);
>         csoundEventString(csound, evt, 0);
>        /* compute audio blocks */
>         csoundPerformKsmps(csound);
>         while(res == CSOUND_SUCCESS) {       
>           csoundSetControlChannel(csound, "pitch", pitch);
>           res = csoundPerformKsmps(csound);
>           pitch += incr;
>           if(pitch > 2)
>            csoundEventString(csound, "e 0", 0);
>         }
>       }
>     }
>     /* Destroy the engine instance */
>     csoundDestroy(csound);
>     return 0;
>   }
>   return -1;
> }
>
> It prints
>
> SECTION 1:
> 1 channels
> new alloc for instr 1:
>   T  5.000 TT  5.000 M:  0.09989
> End of Performance inactive allocs returned to freespace
>   overall amps:  0.09989
>   overall samples out of range:        0
> 0 errors in performance
>
>
> > On 5 Sep 2024, at 08:06, Tarmo Johannes <trmjhnns@GMAIL.COM> wrote:
> >
> > Hi,
> >
> > This is mostly meant for Victor:
> >
> > Testing CsoundQt with Csound7 I discovered that the inital values are not read any more from the widgets, chnget returns 0 until the the widget is moved.
> >
> > CsoudnQt goes through the channels declared with chn_k/chn_S and puts a value read from according widgets into the channels.
> > see https://github.com/CsoundQt/CsoundQt/blob/5ca6f63a11a470575bc53fcdc3629cd8079df2b4/src/csoundengine.cpp#L1062
> >
> > The problem is that with Csound 7 (built from feature/newapi Augus 30)
> >
> > csoundListChannels()
> >
> > returns always 0, although there are declared channels:
> >
> > controlChannelInfo_t *channelList;
> > int numChannels = csoundListChannels(ud->csound, &channelList);
> >
> > What has changed? Might be that I need to implement it differently on CsoundQt side.
> >
> > Should I file a bug report?
> >
> > tarmo