Hi,
lets first introduce myself - I am Knutterton, developing professional audio plugins and hosts for serveral years for a big, well known company. Now that I don’t work for this company anymore, I cannot keep my hands off writing music software - so I found the juce framework as ideal basement for all the dreams I always wanted to implement.
I would like to thank jules for his great work. The framework you are providing is outstanding, very stable, easy to use and it saved me 100s of hours - thanks a lot!
Most things do immediately work as expected, but some do not: I don’t know whether it is my misunderstanding or it is a bug - here is my list:
//-------------------------------------------------
The Win32 implementation of readSocket hangs if I use it like this:
String readStream;
int iTimeOut = 100;
while(pConnection->waitUntilReady (true, iTimeOut))
{
char txt[8192];
int iBytesRead = pConnection->read (txt, 8191);
txt[iBytesRead] = ‘\0’;
readStream += txt;
}
because the readSocket function tries to read all the 8191 bytes, even if the server sends less. Do I misuse the read? Should I find out the number of available bytes before I call read()? But then why is the second argument called MAXbytes? I found a workaround that fixes my problem (by commenting out the while loop in readSocket), but I wonder what is the right solution.
//-------------------------------------------------
Next thing: How do I send XML via http? In a previous version of the framework there was a function (URL::createPostInputStream) that accepted all the data I wanted to post as String. The new concept wants me to add the parameters as name/value-pairs, where the values are “escapeChar”-ed and mangeled, so that no server side XML processor can read it anymore. Of course it was easy to work around, but I wonder, how you ment the new concept to work with binary data or xml? I am sure, I am missing something.
//-------------------------------------------------
Next: What is the right way to stop a waiting StreamingSocket? I start waiting in a background thread but when the app shuts down I want to gracefully stop waiting? Currently the framework exits the thread after 3 seconds - which is not exactly nice.
//-------------------------------------------------
Next: The AudioProcessors initial samplerate is set to 0. When scanning, some VST-Plugs ask for the SR and then hang or crash (div by zero-exception) because of that. I suggest to initilalize it to an unusual, but valid value, like 8244. That wont hurt but make the scanning more stable.
//-------------------------------------------------
On Mac the retrieving of the plugin version doesn’t work for me at all (Returns V255.255.255.255 always).
Anyway - I would like to have a general File::getVersionString() function. I implemented it for Win32 and MacOS (I can send it via mail if you like) - Linux is missing. Also I changed the VSTPluginInstance::getVersion function to:
const String VSTPluginInstance::getVersion() const throw()
{
return module->file.getVersionString();
}
which perfectly works for me.
//-------------------------------------------------
The problem I am currently working on is missing text input in the TextEditor-Component under Windows Vista and some vst hosts under WinXP. The TextEditor gets the focus, but it seems to ignore all the key events. I will let you know if I found the reason.
//-------------------------------------------------
I would very much like to help making the juce framework even better - so let me know if I can do anything.
Best, Knutterton