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); } } }
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; }