Prehisto a écrit:
Oui, je ne sais pas pour l'instant pourquoi Teo utilise 100% du CPU sous Windows.
J'ai trouvé. Le problème vient du while() sur get_audio_stream_buffer() dans asound.c
Code:
void PlaySoundBuffer(void)
{
register int i;
char *buffer_ptr;
/* on remplit la fin du buffer avec le dernier byte déposé */
for (i=last_index; i<sound_buffer_size; i++)
sound_buffer[i]=last_data;
last_index=0;
while ((buffer_ptr=get_audio_stream_buffer(stream)) == NULL) /* <=== NdSam: ICI! */
;
memcpy(buffer_ptr, sound_buffer, sound_buffer_size);
free_audio_stream_buffer(stream);
}
L'idée du programmeur est, je crois, d'attendre la fin de la période de 1/50sec du driver son pour la synchro. Ca marche bien, sauf quand la fenêtre n'est plus active, car dans ce cas pour un raison que j'ignore get_audio_stream_buffer() vaut tout le temps NULL et la boucle mange 100% du cpu.
Perso j'ai ajouté un petit usleep(1000) pour pauser le système pendant 1ms entre 2 appels:
Code:
while ((buffer_ptr=get_audio_stream_buffer(stream)) == NULL)
usleep(1000);
Et ca marche beaucoup mieux! Cela dit c'est pas la meilleur solution car si on joue du son, alors il part quand même en boucle (sans manger du cpu cependant).
sam.