Welcome to the Linux Foundation Forum!

questions about real-time programming

I write a music composition application in my free time. It's called ags. I didn't work on it for months and now I don't know if there is a bug in it, which I don't know about or something changed recently in real-time programming with GNU/Linux.

I use debian GNU/Linux unstable with up-to-date software and a self compiled RT Kernel.

`ags` has three threads one for the gui, one for playing 4 buffers and one for processing the audio network. I posted some of the code below, which should run in real-time! I believe that the synchronization is the problem.

void*
ags_devout_play_functions(void *devout0)
{
AgsDevout *devout;
GStaticMutex mutex = G_STATIC_MUTEX_INIT;
void ags_devout_play_functions_timing(){
while((AGS_DEVOUT_WAIT_DEVICE & (devout->flags)) != 0){
g_cond_wait(devout->play_functions_cond,
g_static_mutex_get_mutex(&mutex));
}

devout->flags |= AGS_DEVOUT_WAIT_RECALL;
devout->flags |= AGS_DEVOUT_WAIT_DEVICE;
g_static_mutex_unlock(&mutex);
}

/* ... */

g_static_mutex_lock(&mutex);
devout->flags &= (~AGS_DEVOUT_WAIT_RECALL);

if((AGS_DEVOUT_WAIT_DEVICE & devout->flags) != 0){
ags_devout_play_functions_timing();
}else{
g_cond_broadcast(devout->play_cond);
g_static_mutex_unlock(&mutex);
}
}

return(NULL);
}
void*
ags_devout_alsa_play(void *devout0)
{
AgsDevout *devout;
GStaticMutex mutex = G_STATIC_MUTEX_INIT;
void ags_devout_play_timing(){
while((AGS_DEVOUT_WAIT_RECALL & (devout->flags)) != 0){
g_cond_wait(devout->play_cond,
g_static_mutex_get_mutex(&mutex));
}

devout->flags |= AGS_DEVOUT_WAIT_RECALL;
devout->flags |= AGS_DEVOUT_WAIT_DEVICE;
g_static_mutex_unlock(&mutex);
}

/*...*/

g_static_mutex_lock(&mutex);
devout->flags &= (~AGS_DEVOUT_WAIT_DEVICE);

if((AGS_DEVOUT_WAIT_RECALL & (devout->flags)) != 0){
ags_devout_play_timing();
}else{
g_cond_broadcast(devout->play_functions_cond);
g_static_mutex_unlock(&mutex);
}

/* ... */

}

Comments

  • Posts: 54
    Sorry, I found a new bug in my application. I introduced a new list of effects (AgsRecalls) in a object (AgsAudio) and didn't move a timer (AgsDelay) to the right place. It's probably the cause of the ugly sound output and I'm going to fix it!

Welcome!

It looks like you're new here. Sign in or register to get started.
Sign In

Welcome!

It looks like you're new here. Sign in or register to get started.
Sign In

Categories

Upcoming Training