Hello everyone!
Does anyone of you know about a good resource for statistical info about
used graphical toolkits? So which toolkits are used the most. Including all
platforms would be nice, but info on Linux-based toolkits would be a good
start.
Thanks and kind regards
Julien
=-=-=-=-=-=-=-=-=-=-=-=-
Such Is Life: Very Intensely Adorable;
Free And Jubilating Amazement Revels, Dancing On - FLOWERS!
====== Find my music at ======
http://juliencoder.de/nama/music.html
.....................................
"If you live to be 100, I hope I live to be 100 minus 1 day,
so I never have to live without you." (Winnie the Pooh)
Hi all,
I've been trying to get the attached patch to steve at plugin dot org
dot uk.... unfortunately his email address has been unavailable for 5
days now.
The attached patch allows the OSC port a timemachine instance is
listening on to be specified at startup with a -o flag.
Can anyone else commit this to the project's git repository whilst
he's unavailable (providing it's up to scratch of course!) or forward
this on to Steve for me please?
This is the first patch I'll have submitted to a well used open source
project so I'm super keen to see it in timemachines code base.
Many thanks,
Tristan
Dear All,
The Linux Audio Conference submissions deadline has been extended! It is
now January 22nd, 2012.
So, if you were considering submitting a paper but couldn't make up your
mind yet, here is your chance to become active! Never forget that this
conference lives through the people participating in it.
January 22nd is the new deadline for all submission types: papers,
music, installations, workshop proposals.
Notifications of acceptance will still be sent out on February 6th, 2012.
Check out the link below more info:
http://lac.linuxaudio.org/2012/participation
Please spread this information to anyone who might be interested.
Questions? Drop us a line at lac(a)linuxaudio.org
We are looking forward to seeing you at Stanford in April!
Thanks,
The LAC 2012 organization team
HI Guys
happy new year.
Has anyone got the autofaders to work with Ardour and a DDX?
I believe this is possible but can find no info as yet.
Thanks for your time
Cheers
Bob
On Thursday 05 January 2012, Dave Stikkolorum wrote:
> On 05-01-12 15:31, Pedro Lopez-Cabanillas wrote:
> > The problem in loop.c is that you are using the function
snd_seq_ev_set_note()
> > that includes a duration as the 5th parameter. This function will create
two
> > MIDI events in a queue, the first one will be the noteon event, and the
second
> > one will be a noteoff event, scheduled adding the specified duration to
the
> > start time of the former noteon event. That requires a queue for event
> > scheduling.
> So in fact with a message that contains a duration for a note is always
> a queue involved?
Yes, but this macro snd_seq_ev_set_note() is the only one that includes a
duration parameter. It is not really a MIDI message, but the sequencer event
is converted into two MIDI messages (noteOn + noteOff). There aren't MIDI
messages containing durations.
OTOH any event using the macros snd_seq_ev_schedule_real() or
snd_seq_ev_schedule_tick() requires a queue as well, because the message
delivering time will be scheduled in the future.
Events using the macros snd_seq_ev_set_queue_control(),
snd_seq_ev_set_queue_start(), snd_seq_ev_set_queue_stop(),
snd_seq_ev_set_queue_continue() or snd_seq_ev_set_queue_tempo() also require a
queue, because all these macros have a queue parameter.
Regards,
Pedro
Hi all,
I try to write a c program that sends midi notes to the Hydrogen drum
sequencer.
I use the alsa library to create a client with an output port.
I attached two files.
loopqueue.c works but loop.c doesn't.
A base drum (note:28) is being send.
I am not succeeding to use direct delivery,
but it only works with the queue.
Any ideas why?
Regards,
Dave
Hi all,
I have been looking into ye olde denormal problem a little, lately.
Particularly with respect to Ardour and plugins. I've assembled what I
believe to be a coherent statement of what is going on, but I'd very much
appreciate any corrections and clarifications that anyone can offer.
Here's how it seems to me:
If you compile your code (e.g. a plugin) without -msse and -mfpmath=sse on
the GCC command line you get *no* protection from denormals from the CPU.
If they occur in your code, they will be very much slower than normal
floating point numbers (~49 times slower on my Core 2 Duo, ~7 times slower
on a Core i3). As far as I can see, it does not matter that Ardour has
been built with those flags: if a plugin has not, you have no protection.
If you compile your code with -msse and -mfpmath=sse, you have Ardour's
protection from denormals. If the user's CPU supports it, you get
there is no significant slowdown with denormals using this mode. However
CPU support is "some later processors with SSE2", according to Intel.
The problem, I guess, is that we cannot really distribute plugins with SSE
instructions, otherwise we do not support people with older CPUs. In this
case, I think the plugin code must avoid denormals, otherwise there will
be a significant performance hit if they arise.
I've been testing behaviour using a very dumb program which you can get
from http://carlh.net/software/denormals.tar.gz
I've also been testing plugins using a primitive torture tester that you
can get from http://carlh.net/software/ or on github via
git@github.com:cth103/plugin-torture.git
Any comments?
Best
Carl
Hi folks, wondering if anyone might be able to point me at the way to sort
this out, my latest queue is segfaulting when written to or read from,
while the rest ( which are supposed to be identical except for message type
) are working great, and have been tested with full stack runs fine. I'm
banging my head on the desk at this point trying to find the difference,
but perhaps others have seen similar behaviour?
I've made a template class for a queue, that internally uses a jack
ringbuffer. I have four of them, some of my data message struct, one for a
csound note message struct, and a new one for my raw midi message struct
which looks this this:
struct MidiMessage {
char status;
char data_1;
char data_2;
int time; // time in samples when midi message arrived
};
I instantiate them before anything else and pass them into the components
that need them in their constructors
MessageQueue<DataMessage> *toEngineDataQueue = new
MessageQueue<DataMessage>();
MessageQueue<DataMessage> *fromEngineDataQueue = new
MessageQueue<DataMessage>();
MessageQueue<NoteMessage> *toEngineNoteQueue = new
MessageQueue<NoteMessage>();
MessageQueue<MidiMessage> *fromEngineMidiQueue = new
MessageQueue<MidiMessage>();
All instantiation is working fine, app starts up, and the first three
queues are working. As soon as I either write to or read from the midi
queue, I segfault. Not sure how to debug this, hints welcome! Below is the
cue code in case anyone wants to look at it. I can't see anything wrong,
but maybe I've been doing something wrong and just gotten lucky so far??
thanks
Iain
template <class Type>
class MessageQueue {
private:
// pointer to the ring buffer the ring buffer
jack_ringbuffer_t *mRingBuffer;
int mQueueLength;
public:
MessageQueue();
~MessageQueue();
// put a msg on the queue, returns 0 or error code
void push( Type msg );
// store message in msg, returns true if message
bool tryPop( Type *msg );
};
template <class Type>
MessageQueue<Type>::MessageQueue(){
mQueueLength = DEFAULT_QUEUE_LENGTH;
// create our ringbuffer, sized by Type
mRingBuffer = jack_ringbuffer_create( mQueueLength * sizeof(Type) );
// lock the buffer into memory, this is *NOT* realtime safe
int errorLocking = jack_ringbuffer_mlock(mRingBuffer);
if( errorLocking ){
std::cout << "MessageQueue - Error locking memory when creating
ringbuffer\n";
// XXX raise an exception or something?? how do we fail here??
}
}
template <class Type>
MessageQueue<Type>::~MessageQueue(){
cout << "MessageQueue destructor\n";
// free the memory allocated for the ring buffer
ack_ringbuffer_free( mRingBuffer );
}
template <class Type>
void MessageQueue<Type>::push( Type msg ){
// write to the ring buffer, converting Type to a string
unsigned int written = jack_ringbuffer_write( mRingBuffer, (const char
*) &msg , sizeof(Type) );
// XXX: what to do if it fails anyway??
if( written < sizeof(Type) ){
cout << "Error, unable to write full message to ring buffer\n";
// do something else here yo!
}
}
// if a message is on the queue, get it
// returns True if it got a message
template <class Type>
bool MessageQueue<Type>::tryPop( Type *msgBuf ){
// if there is a message on the ring buffer, copy contents into msg
if( jack_ringbuffer_read_space( mRingBuffer) >= sizeof(Type) ){
jack_ringbuffer_read( mRingBuffer, (char *)msgBuf, sizeof(Type) );
// return True because a msg was read
return 1;
}else{
// return False, no msg read
return 0;
}
}