int osc_send_status(lo_address a, int d) { struct deck *de; struct player *pl; struct track *tr; de = &osc_deck[d]; pl = &de->player; tr = pl->track; char *path; if(tr->path) path = tr->path; else path = ""; if(tr) { /* send a message to /xwax/status */ if (lo_send(a, "/xwax/status", "isssfffi", de->ncontrol, // deck number (int) path, // track path (string) de->record->artist, // artist name (string) de->record->title, // track title (string) (float) tr->length / (float) tr->rate, // track length in seconds (float) player_get_elapsed(pl), // player position in seconds (float) pl->pitch, // player pitch (float) pl->timecode_control) // timecode activated or not (int) == -1) { printf("OSC error %d: %s\n", lo_address_errno(a), lo_address_errstr(a)); } printf("osc_send_status: sent deck %i status to %s\n", d, lo_address_get_url(a)); } return 0; }
void osc_start_updater() { while(!done) { int i; for(i = 0; i < osc_ndeck; ++i) { osc_send_pos(i, player_get_elapsed(&osc_deck[i].player), osc_deck[i].player.pitch); } // wierd. much less jitter when sleeping between updates usleep(1000); } }
static void draw_spinner(SDL_Surface *surface, const struct rect *rect, struct player *pl) { int x, y, r, c, rangle, pangle; double elapsed, remain, rps; Uint8 *rp, *p; SDL_Color col; x = rect->x; y = rect->y; elapsed = player_get_elapsed(pl); remain = player_get_remain(pl); rps = timecoder_revs_per_sec(pl->timecoder); rangle = (int)(player_get_position(pl) * 1024 * rps) % 1024; if (elapsed < 0 || remain < 0) col = warn_col; else col = ok_col; for (r = 0; r < spinner_size; r++) { /* Store a pointer to this row of the framebuffer */ rp = surface->pixels + (y + r) * surface->pitch; for (c = 0; c < spinner_size; c++) { /* Use the lookup table to provide the angle at each * pixel */ pangle = spinner_angle[r * spinner_size + c]; /* Calculate the final pixel location and set it */ p = rp + (x + c) * surface->format->BytesPerPixel; if ((rangle - pangle + 1024) % 1024 < 512) { p[0] = col.b >> 2; p[1] = col.g >> 2; p[2] = col.r >> 2; } else { p[0] = col.b; p[1] = col.g; p[2] = col.r; } }