Пример #1
0
void* AudioThread(void*)
{
    sched_param		sched;
    int policy;

    pthread_getschedparam(pthread_self(),&policy,&sched);
    sched.sched_priority++;//policy=SCHED_RR;
    pthread_setschedparam(pthread_self(),policy,&sched);

    for(;;)
    {
        UpdateBuff(Tempbuffer);
        int rc = snd_pcm_writei(handle, Tempbuffer, settings.aica.BufferSize);
        if (rc == -EPIPE) {
            /* EPIPE means underrun */
            fprintf(stderr, "underrun occurred\n");
            snd_pcm_prepare(handle);
        } else if (rc < 0) {
            fprintf(stderr,
                    "error from writei: %s\n",
                    snd_strerror(rc));
        }  else if (rc != (int)settings.aica.BufferSize) {
            fprintf(stderr,
                    "short write, write %d frames\n", rc);
        }
    }
}
Пример #2
0
u32 THREADCALL SoundThread1(void* param)
{
	for(;;)
	{
		u32 rv = WaitForMultipleObjects(sound_buffer_count,buffer_events,FALSE,400);
		
		if (!soundthread_running)
			break;

		LPVOID p1,p2;
		DWORD s1,s2;

		rv-=WAIT_OBJECT_0;

		if(SUCCEEDED(buffer->Lock(WritePositions[rv],wait_buffer_size,&p1,&s1,&p2,&s2,0)))
		{
			UpdateBuff((u8*)p1);	
			verifyc(buffer->Unlock(p1,s1,p2,s2));
		}

	}
	return 0;
}