Cabbage Logo
Back to Cabbage Site

Export all examples to AU errors

I am doing the File>>Export Examples to AU and I get modal window popups in Cabbage xnwith “Error The plugin ID identifier in /Applications/Cabbage.app/Contents/Examples/” and then the name of the .csd, “is empty, or the pluginid identifier string contains a typo. Certain hosts may not recognize your plugin. Please use a unique ID for each plugin.”
for the following .csd files:
/Instruments/Miscellaneous/LorenzSynth.csd
/Effects/Filters/wguide2.csd
/Effects/Miscellaneous/HRTF3D.csd

I don’t see wguide2 available in any of my AU hosts, including the juce audio plugin tester and ableton, but the LorenzSynth and HRF3D seem to work fine.

Thanks, I’ll take a look and update those example tomorrow.

@rorywalsh I am also getting this error. I also wasn’t aware that Cabbage now can export directly to AU format. Fantastic!!

I can load the generated plugin in Logic & Ardour, however when I change any settings the applications hangs or crashes.

In my plugin I have pluginID("def1"), are there special identifiers that need to be used with AU’s?

UPDATE: I was able to get rid of this warning:

use pluginid("def1") instead of pluginID("def1")

So I can now build AU plugins that work in Logic & Ardour, however I have made a plugin based on @iainmccurdy’s great BeatSlicer (just the Beat Slicer part - no FX) but that crashes Logic & Ardour. (Other instrument plugins that I have built from Cabbage don’t)

I have attached my Beat Cutter which works in Logic (when using the old Cabbage AU load technique), but crashes both Logic and Ardour. Possibly I am doing something wrong in the .csd, Cabbage isn’t letting me know what that could be.

beat_cutter_v2.csd (2.9 KB)

When Ardour hangs when using the above ‘BeatSlice’ AU, there are hundreds of:
+ IOAudioEngineUserClient[<private>]::performWatchdogOutput(<private>, 9694) - (25d,3fb4)
messages in the console.

UPDATE2: It looks like there is something wrong with my CSD, when I run it in Cabbage (running Cabbage from command line with $ ./Cabbage and I change the value of SubDivision before changing any other values I get a floating point exception.

UPDATE3: Got it all working. I made a silly mistake of doing:

range(1, 8, 0, 1, 1) <-- which set the range to 1-8, but default value was 0!
range(1, 8, 1, 1, 1) <-- fix

@MacroMachines I was able to get LorenzSynth exporting by adding:

pluginid("lorz") to the first line (remember to put a comer before pluginid)

UPDATE
I did:

grep -r --include=\*.csd "^form" . |  grep -v pluginid

On the Examples directory, and found a few CSD’s that don’t have pluginid set.

1 Like

Hey guys. You need to use unique plugin IDs for AUs, as you’ve already figured out. I’m traveling at the moment and don’t have access to a PC but if anyone wants to make a pull request with updated instrument code I’m can merge on my mobile.

Hey @rorywalsh, I can do a pull request (I did one but will do it for all at once) can you delete that request - as I will squash them all together.

Are you using any particular naming scheme? (for the unique names)

There are about 20 plugins that need pluginid set.

Currently in the Examples directory there are many CSD files that have pluginid(“name”) duplicates:

   2  T808
   2  TDel
   2  add1
   2  comp
   2  gn10
   2  scho
   3  Mout
   3  band
   7  SMo1
  13  plu1
  26  def1

To find this I did:

grep -r  --include=\*.csd "^form" . | grep -E -o '.{0,0}pluginid\(".{0,4}' | cut -c 11-15 | sort | uniq -c | sort -n | grep -v "1 "

Is this ok to have these duplicate names?

1 Like

I think they should be unique for AUs. I don’t think Iain would mind if we changed them, so perhaps we could use something a little more consistent? Does your PR use unique names for all of them?

My PR is just for the CSD’s missing pluginid(""). And it uses unique names (after running the above terminal commands I couldn’t see my new names in the list).

However, I only noticed after that Atom Editor stripped the whitespace from the CSD’s as I saved them. If this is an issue I can do it again.

If the naming is consistent then maybe there should be a script to automatically generate these pluginid names? If not built in Cabbage, then possibly just a sed or awk script? However I am guessing that it would mean changing every .CSD to something like .CSD.IN and then during the project build running the text processor script. (to generate the unique pluginid).

If it is automatic in Cabbage, like adding a user button/slider etc, then it would make sense that an automatic name would be generated- but also changeable by the user.

Auto-generated:
LorenzSynth= LoSy; LorS; LSyn?

What should we do for cases of names with >4 capitals? Or 4 Capitals and a number?

Unfortunately this is all so much thinking for a value that doesn’t really do anything important. :frowning:
Would it not be better (pragmatic) to simply number all as a counter? This could be a ‘burned in’ value (no sed script), and for adding to the CSD examples folder just running a command to list all values in order to see where the numbers are at? Which should give 10,000 possible example files ID’s before having to use a different numbering scheme. This may not be enough for the prolific @iainmccurdy! :wink: (side note Iain, I would love to see a Csound Cabbage synth similar in function to Apple’s Sculpture in Logic. Not all the features- but based on a physical model that can have 3 different systems applied to it: Bow, Strike, Bounce, Rub, Dampen etc.)

Realistically this really is an Audio Unit problem, for example LV2 have solved this issue by using web address ID’s in the TTL file. (As all registered web site’s are already by default unique)

I merged that PR, thanks for doing this.

Agreed :joy: I think a counter would be fine too. If we used hexadecimal values @iainmccurdy could easily produce another 60,000 Cabbage instruments without any conflicts! We could also encourage users to avoid the use of 4 digit hex values.

@rorywalsh I think we should simply use Base 62, (closest is Base64 https://en.wikipedia.org/wiki/Base64).

IIRC the AU id can include:

  • lowercase: a-z
  • uppercase: A-Z
  • numbers 0-9

This should be much better: 16,777,216 will do us fine. :slight_smile:

In hindsight my comment about “not doing anything important” was a bit acerbic, if this value set incorrectly (or not at all) stops the plugin from loading, then its very important. Maybe its not a ‘cool’ sort of important.

Thanks for doing the merge, I will make sure Atom doesn’t strip white-space next time! (Or use another text editor, there are many around).

I have made a new pull request to fix the remaining name conflicts.

The only two I was not sure about:

Instruments/Drum Machines/TR-808.csd              = T808
Instruments/Drum Machines/TR-808_BACKUP_10598.csd = 808B

PS: I decided to stop worrying and love the unique id’s (as opposed to a counter). But it would still be a possibility in the future. Its super easy to see any duplicate names, (possibly this could be a test in the future?)

Great. I just merged that now. Thanks again.

Only strange thing is that many of the csd’s are highlighting as red (in git diff online). I used Linux for the editing, so possibly they were created on Windows?

I wouldn’t worry about it too much. I think Iain uses Windows and OSX a bit, so they could be a result of that. Should be fine though?