[Csnd] csound timing accuray
Date | 2019-01-13 18:59 |
From | Richard |
Subject | [Csnd] csound timing accuray |
i have a metronome instrument that sounds every half second. I also have a bass instrument where i send events to - they are scheduled via cs.sendEvent(), also half second apart When I start the csd, the metronome and my instrument are in sync, but after a few seconds the bass instrument starts lagging behind the metronome. How can this be? Richard 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 | 2019-01-13 19:31 |
From | Tarmo Johannes |
Subject | Re: [Csnd] csound timing accuray |
Hi, Csound is extremely accurate timewise - if you use very high samplerates you could theoretically achieve preciseness of nanoseconds (If I am correct) - but this is not what a human listener needs. I guess there could be something in your code (or maybe some hidden bug... ). Can you send how you use the metronome and how the sounds are started? tarmo On pühapäev, 13. jaanuar 2019 20:59.21 EET you wrote: > i have a metronome instrument that sounds every half second. > > I also have a bass instrument where i send events to - they are > scheduled via cs.sendEvent(), also half second apart > > When I start the csd, the metronome and my instrument are in sync, but > after a few seconds the bass instrument starts lagging behind the > metronome. How can this be? > > Richard > > 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 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 | 2019-01-13 20:08 |
From | Richard |
Subject | Re: [Csnd] csound timing accuray |
Attachments | temp.csd |
Here is the csd. The Python program using it is getting quite complex, it is going to be a 4 channel DAW with PySimpleGUI. The csd is started with ctcsound. When starting the csd, also the following function is called: def createScore(): s='11,% 3.2f,0.10,41,91' for t in range(0,500,1): print(s % (t/2.0,)) cs.scoreEvent('i', eval(s % (t/2.0,))) Pressing play in the GUI does this: if event=='Play' and not recording: print('Play pressed') pulse('metroon') # sends a 1, then a 0 to the 'metroon' channel createScore() So the events are all queued and csound should handle the timing. On 13/01/2019 20:31, Tarmo Johannes wrote: > Hi, > > Csound is extremely accurate timewise - if you use very high samplerates you > could theoretically achieve preciseness of nanoseconds (If I am correct) - > but this is not what a human listener needs. I guess there could be something > in your code (or maybe some hidden bug... ). > > Can you send how you use the metronome and how the sounds are started? > > tarmo > > On pühapäev, 13. jaanuar 2019 20:59.21 EET you wrote: >> i have a metronome instrument that sounds every half second. >> >> I also have a bass instrument where i send events to - they are >> scheduled via cs.sendEvent(), also half second apart >> >> When I start the csd, the metronome and my instrument are in sync, but >> after a few seconds the bass instrument starts lagging behind the >> metronome. How can this be? >> >> Richard >> >> 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 > 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 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 | 2019-01-13 20:39 |
From | Tarmo Johannes |
Subject | Re: [Csnd] csound timing accuray |
Hi, I did not test and don't have a definite answer yet but I think the problem is that it takes some time from a command to arrive from Python to Csound: pulse('metroon') happens first and when this is done you call createScore() Also in the score loop of createScore for t in range(0,500,1): print(s % (t/2.0,)) cs.scoreEvent('i', eval(s % (t/2.0,))) cs.ScoreEvent may take some time thus every next event arrives to Csound one or several k-cycles later, hence the shift. I think it is much better to make the score generation happen also in csound side (have an instrumente createScore that starts also the metronome instrument) OR you should add some design that the new events may be started only on metronomes trigger (schedkwhen in Csound - but you cannot send this directly from host to csd, since it is k-time opcode, so you need some kind of wrapper instrument in between anyway). Hope if it is of any help... tarmo On pühapäev, 13. jaanuar 2019 22:08.31 EET you wrote: > pulse('metroon') # sends a 1, then a 0 to the 'metroon' channel > createScore() 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 | 2019-01-13 20:58 |
From | Richard |
Subject | Re: [Csnd] csound timing accuray |
But it starts ok (in sync), only after 10 seconds or so it starts to deviate. Also, the events are queued much faster than they should execute (.5 seconds apart),so even if it takes a few k -cycles for them to arrive at csound, that should not matter. On 13/01/2019 21:39, Tarmo Johannes wrote: > Hi, > > I did not test and don't have a definite answer yet but I think the problem is > that it takes some time from a command to arrive from Python to Csound: > > pulse('metroon') > > happens first and when this is done you call > > createScore() > > Also in the score loop of createScore > for t in range(0,500,1): > print(s % (t/2.0,)) > cs.scoreEvent('i', eval(s % (t/2.0,))) > cs.ScoreEvent may take some time thus every next event arrives to Csound one > or several k-cycles later, hence the shift. > > I think it is much better to make the score generation happen also in csound > side (have an instrumente createScore that starts also the metronome > instrument) OR you should add some design that the new events may be started > only on metronomes trigger (schedkwhen in Csound - but you cannot send this > directly from host to csd, since it is k-time opcode, so you need some kind of > wrapper instrument in between anyway). > > Hope if it is of any help... > > tarmo > > > On pühapäev, 13. jaanuar 2019 22:08.31 EET you wrote: >> pulse('metroon') # sends a 1, then a 0 to the 'metroon' channel >> createScore() > 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 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 | 2019-01-13 21:38 |
From | Richard |
Subject | Re: [Csnd] csound timing accuray |
I found a nice workaround, I now trigger the metronome also via cs.ScoreEvent() and that seems to work.. On 13/01/2019 21:39, Tarmo Johannes wrote: > Hi, > > I did not test and don't have a definite answer yet but I think the problem is > that it takes some time from a command to arrive from Python to Csound: > > pulse('metroon') > > happens first and when this is done you call > > createScore() > > Also in the score loop of createScore > for t in range(0,500,1): > print(s % (t/2.0,)) > cs.scoreEvent('i', eval(s % (t/2.0,))) > cs.ScoreEvent may take some time thus every next event arrives to Csound one > or several k-cycles later, hence the shift. > > I think it is much better to make the score generation happen also in csound > side (have an instrumente createScore that starts also the metronome > instrument) OR you should add some design that the new events may be started > only on metronomes trigger (schedkwhen in Csound - but you cannot send this > directly from host to csd, since it is k-time opcode, so you need some kind of > wrapper instrument in between anyway). > > Hope if it is of any help... > > tarmo > > > On pühapäev, 13. jaanuar 2019 22:08.31 EET you wrote: >> pulse('metroon') # sends a 1, then a 0 to the 'metroon' channel >> createScore() > 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 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 |