[Csnd] filelen problem on multiple schedule
Date | 2024-09-04 16:42 |
From | fordelya <00000c641a512f08-dmarc-request@LISTSERV.HEANET.IE> |
Subject | [Csnd] filelen problem on multiple schedule |
Hello, I’m working on a simple sample based live coding instrument using the diskin and filelen opcode. The setup is simple: I have a folder with samples like “samp1.wav, samp2.wav, samp3.wav”. My code picks a sample based on a calculated icps, so it ends up like: aouts[] diskin sprintf("%ssamp%i.wav", Sdirectory, inum) with his relatively calculated length that replaces p3. Everything works fine initially, even when i schedule the instrument multiple time and quickly, but for some reasons sometimes things start acting weird and filelen suddenly stop reading the path reporting: INIT ERROR in instr 10 (opcode filelen) line 59: diskinfo cannot open /my_path/samp1.wav Steven Yi on Discord suggested that it could be a 'ulimit' problem on the OS. https://apple.stackexchange.com/questions/366187/why-does-setting-the-hard-limit-for-maxfiles-to-unlimited-using-launchctl-lim I tried setting 'sudo launchctl limit maxfiles 1024 unlimited' (from 256), but nothing seems changed. I am on macos 14, m1. I know that it could be better replacing path with a GEN01, but I wanted to test this way and really everything works until dont.. I cannot figure out why this problem. Any ideas on what could be causing this issue? thank u 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 | 2024-09-04 22:04 |
From | Victor Lazzarini <000010b17ddd988e-dmarc-request@LISTSERV.HEANET.IE> |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] filelen problem on multiple schedule |
Sounds like a limit on open files.
Reading from disk is not the best approach for hard realtime audio (eventually you may get interruptions if pushing the system).
I think tables offer a more robust solution.
Rory has introduced this opcode
that is handy for generating tables for files.
It may be useful for you.
Prof. Victor Lazzarini
Maynooth University
Ireland
On 4 Sep 2024, at 16:43, fordelya <00000c641a512f08-dmarc-request@listserv.heanet.ie> wrote:
|
Date | 2024-09-11 16:18 |
From | Risto Kuusisto |
Subject | [Csnd] Channel-related questions |
Hello all, I have been testing channels to communicate with java and partly also succeeded. Now I have noticed something, where I don't know if there is a problem in the versions of Csound (6.17) or csnd6.jar that I use. 1) Csound-side If i have something like this in csd-code: ... chn_k "Dat2", 2, 1 ... chnset kData2, "Dat2" This works well. Now if I add a line: chnset kStatus, "BBBB" That works also without complaints although I haven't added any new chn_k-definition. I would have expected some error-message at least during run-time because of the missing channel definition. So the code works without complaints but where does that kStatus-value now go, when "BBBB" is not defined ? 2) Java-side I assumed that the following code would catch an exception, if the Csound-counterpart can not be found: (Note c is a csound-object here) try { So in this case I had a faulty definition for "Req1" in the csound-code but not the required correct "Req". As a surprise to me java-code was executed without any error-messages during run-time and the execution did not reach the catch-part above. Is the situation the same in the of python- or c++-case ? Or can this be handled by some other means, e.g. is there a way to check the existence of the channel somehow before trying to connec to that ? --Risto |
Date | 2024-09-11 17:56 |
From | Victor Lazzarini <000010b17ddd988e-dmarc-request@LISTSERV.HEANET.IE> |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] Channel-related questions |
Whenever you call chnset, if the channel does not exist, it will be created. So in general, you may not need to declare channels to start with. The API function GetChannelPtr() likewise creates a channel if there isn’t one. From the API reference (https://csound.com/docs/api/group__CONTROLEVENTS.html#gaeac3632d42e1d94d6d65a099f940a9db) PUBLIC int csoundGetChannelPtr(CSOUND * ,MYFLT ** p,const char * name,int type ) Stores a pointer to the specified channel of the bus in *p, creating the channel first if it does not exist yet. So you can just create a channel with it too. ======================== Prof. Victor Lazzarini Maynooth University Ireland > On 11 Sep 2024, at 16:18, Risto Kuusisto |
Date | 2024-09-11 18:41 |
From | Risto Kuusisto |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] Channel-related questions |
OK, it has been designed in that way to be as flexible as possible. From programming point of view you can't be sure if your code is correct. Neither compilation nor run-time doesn't give any indication of a possible error in your code. In small cases this may not be a problem, but how about the larger ones ? So there really isn't a method (in java/python/c++) that would tell the names of the available channels of the Csound-object in question? --Risto ke 11. syysk. 2024 klo 19.56 Victor Lazzarini (000010b17ddd988e-dmarc-request@listserv.heanet.ie) kirjoitti: Whenever you call chnset, if the channel does not exist, it will be created. So in general, you may not need |
Date | 2024-09-11 19:32 |
From | vlz |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] Channel-related questions |
There is no error to speak of in this case. This code has been used for over twenty years in numerous projects, including many commercial software that people pay money for and it has not been found that there is a design problem. Prof. Victor Lazzarini Maynooth University Ireland On 11 Sep 2024, at 18:41, Risto Kuusisto <rjzkuusisto@gmail.com> wrote:
|
Date | 2024-09-11 19:39 |
From | Tarmo Johannes |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] Channel-related questions |
Hi Risto, Yes, you should not worry about the channel management, it is very solid. If in some reason your code needs to check which channels are available, you can use PUBLIC int csoundListChannels(CSOUND *, controlChannelInfo_t **lst); (this is from C API, most likely it is exposed also to the Java API) from the code of CsoundQt (it is C++ ) to get some idea how it could be used. As much I know, csoundListChannels reports only the channels that are declared with chn_k/chn_S, so that's why those opcodes are can be necessary. It all depends from your own use case, what you need and what your host does. Best! tarmo Kontakt vlz (<viclazzarini@gmail.com>) kirjutas kuupäeval K, 11. september 2024 kell 21:32:
|
Date | 2024-09-11 19:42 |
From | vlz |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] Channel-related questions |
csoundListChannels should report any channels existing at the time it is called, whichever way they were created. Prof. Victor Lazzarini Maynooth University Ireland On 11 Sep 2024, at 19:39, Tarmo Johannes <trmjhnns@gmail.com> wrote:
|
Date | 2024-09-11 20:48 |
From | Risto Kuusisto |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] Channel-related questions |
I was not saying that channel management doesn't work. It seems to work fine. The problem is that when I myself make a mistake, "Req1" on java-code, "Req2" on csound-code, what then ? Neither java nor Csound does give any kind of error message, not during compilation or during run-time. Maybe this has to be learned in a hard way in practice and start to suspect the channel-names immediately, if the application doesn't work as expected. There seems to be this method in java also for Csound-object: ListChannels() I can see this in Eclipse. The problem is the argument type which has been copied here manually from the help-display in Eclipse. So the required argument type seen in Eclipse-help is SWIGTYPE_p_p_ControlChannellnfo_s. I went through the whole list of methods for csound-object, but none of those has this type as their result type. So I suppose it's something not doable in java. Seems to be quite hard to stay in java without documentation when trying to communicate with Csound . And "translating" c++ to java is a bit too much for me. --Risto ke 11. syysk. 2024 klo 21.39 Tarmo Johannes (trmjhnns@gmail.com) kirjoitti:
|
Date | 2024-09-25 14:00 |
From | Steven Yi |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] Channel-related questions |
I missed this thread earlier, but for what it's worth, I'm using Java FFM now with Csound and have released a library called CsoundFFM: https://central.sonatype.com/artifact/com.kunstmusik/csoundffm It works with Java 22+. It's not fully compliant with Csound API yet but does work with both Csound 6 and 7. (Currently using it in one of Blue's development branches.) For channels, would you prefer to have something that can check if a channel exists? Seems like that'd be enough API-wise for you to do: if(!csound.channelExists("test')) { throw Exception("Channel test did not exist"); } and you could create some utility functions around that for your code. On Wed, Sep 11, 2024 at 3:49 PM Risto Kuusisto <rjzkuusisto@gmail.com> wrote:
|
Date | 2024-09-25 15:37 |
From | John ff |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] Channel-related questions |
-------- Original Message -------- From: Steven Yi |
Date | 2024-09-27 17:35 |
From | Risto Kuusisto |
Subject | Re: [Csnd] [EXTERNAL] [Csnd] Channel-related questions |
Thanks Steven, So that possibility is already there? Nice. What about testing those in/out definitions ? Is it possible or is it worth to do ? E.g. if I have this in java-code: c.GetChannelPtr(CtNbrChannel.GetPtr(), "CtNbr", controlChannelType.CSOUND_CONTROL_CHANNEL.swigValue() | controlChannelType.CSOUND_INPUT_CHANNEL.swigValue() ); And the corresponding Csound: chn_k CtNbr, 1 What happens if those doesn't match ? if i have CSOUND_OUTPUT_CHANNEL instead of CSOUND_INPUT_CHANNEL, does the java-csound-combination still work ? When using a channel in java I have something like this: CtNbrChannel.SetValue(0, (double) Cnbr); What does the first integer-parameter, 0, mean in this method ? I simply guessed that it means the first element in some API-table and it works with the value 0 in a standard scalar-case, but what about if I put 55 there ? Another guess is that it could be something to do with arrays. Is it possible to to create array-channels also ? How do they show in Csound, if possible ? --Risto ke 25. syysk. 2024 klo 16.00 Steven Yi (stevenyi@gmail.com) kirjoitti:
|