Re: [Csnd-dev] [EXTERNAL] [Csnd-dev] strange string behaviour

vlz <[email protected]> Sun, 14 Sep 2025 09:21:07 +0100
Newsgroups gmane.comp.audio.csound.devel
Message-ID <[email protected]>
yes, S-types are confusing that way. 


Prof. Victor Lazzarini
Maynooth University
Ireland

> On 14 Sep 2025, at 02:33, joachim heintz <[email protected]> wrote:
> 
> thank you!
> it is confusing to me that sprintfk and strcatk not only run at k-time but also at i-time.
> but i see now that the problem is in
> Snew = ""
> which tells csound to run also at i-rate.
> it works when i change to
> Snew = strcpyk("")
> 
> 
>> On 14/09/2025 09:15, Victor Lazzarini wrote:
>> There is no issue, the printout is what I would have expected.
>> Snew runs only at i-time, sprintfk/strcatk run at i-time and perf-time, printf only at perf-time.
>> i-time:
>> Snew >>>> ""
>> Sline >>>> "1\n"
>> Snew >>>> "1\n"
>> p-time:
>> Sline >>>> "1\n1\n"
>> Snew >>>> "1\n1\n1\n"
>> Sline =
>> 1
>> 1
>> Snew =
>> 1
>> 1
>> 1
>> turnoff
>> Prof. Victor Lazzarini
>> Maynooth University
>> Ireland
>>>> On 14 Sep 2025, at 01:01, joachim heintz <[email protected]> wrote:
>>> 
>>> yes but there is only one cycle because of the turnoff.
>>> so why is it repeating the string?
>>> 
>>> this code gets the same result although it clearly should only run one cycle:
>>>  Snew = ""
>>>  if timeinstk() == 1 then
>>>    Sline = sprintfk("%s%d\n",Snew,1)
>>>    Snew = strcatk(Snew,Sline)
>>>    printf("Sline = \n%s\n",1,Sline)
>>>    printf("Snew = \n%s\n",1,Snew)
>>>  endif
>>> 
>>> i tried several versions and it has something to do with the line
>>>  Snew = ""
>>> 
>>> i will try to get closer and then file an issue.
>>> 
>>>> On 13/09/2025 23:35, Victor Lazzarini wrote:
>>>> is printf running at perf time? the string opcodes are "k"
>>>> Prof. Victor Lazzarini
>>>> Maynooth University
>>>> Ireland
>>>>>> On 13 Sep 2025, at 15:11, joachim heintz <[email protected]> wrote:
>>>>> 
>>>>> due to strange problems with an old csd i came to this:
>>>>> 
>>>>> instr 1
>>>>>  Snew = ""
>>>>>  Sline = sprintfk("%s%d\n",Snew,1)
>>>>>  Snew = strcatk(Snew,Sline)
>>>>>  printf("Sline = \n%s\n",1,Sline)
>>>>>  printf("Snew = \n%s\n",1,Snew)
>>>>>  turnoff
>>>>> endin
>>>>> schedule(1,0,1)
>>>>> 
>>>>> i expect Sline to be 1 and Snew also.  but as printout shows:
>>>>> Sline =
>>>>> 1
>>>>> 1
>>>>> Snew =
>>>>> 1
>>>>> 1
>>>>> 1
>>>>> 
>>>>> am i doing something silly, or what is happening here?