static void init(scicos_block *block) { char str[20]; struct MbxSif * mbx = (struct MbxSif *) malloc(sizeof(struct MbxSif)); int nch=block->nin; par_getstr(str,block->ipar,2,block->ipar[0]); strcpy(mbx->mbxName,str); par_getstr(str,block->ipar,2+block->ipar[0],block->ipar[1]); struct sockaddr_in addr; if(!strcmp(str,"0")) { mbx->tNode = 0; mbx->tPort = 0; } else { inet_aton(str, &addr.sin_addr); mbx->tNode = addr.sin_addr.s_addr; while ((mbx->tPort = rt_request_port(mbx->tNode)) <= 0 && mbx->tPort != -EINVAL); } mbx->mbx = (MBX *) RT_typed_named_mbx_init(mbx->tNode,mbx->tPort,mbx->mbxName,nch*sizeof(double),FIFO_Q); if(mbx->mbx == NULL) { fprintf(stderr, "Error in getting %s mailbox address\n", mbx->mbxName); exit_on_error(); } *block->work=(void *) mbx; }
static void init(scicos_block *block) { FILE * fp; double * pData; char filename[30]; int i; int npts=block->ipar[0]; if(npts==0) { fprintf(stderr, "Error - Data length is 0!\n"); exit_on_error(); } pData=(double *) calloc(npts,sizeof(double)); par_getstr(filename,block->ipar,3,block->ipar[2]); fp=fopen(filename,"r"); if(fp!=NULL){ block->ipar[1]=0; for(i=0;i<npts;i++) { if(feof(fp)) break; fscanf(fp,"%lf",&(pData[i])); } fclose(fp); } else{ fprintf(stderr, "File %s not found!\n",filename); exit_on_error(); } *block->work=(void *) pData; }
static void end(scicos_block *block) { int * ipar = GetIparPtrs(block); char ledName[10]; MBX * mbx = *(block->work); RT_named_mbx_delete(0, 0, mbx); par_getstr(ledName,ipar,1,ipar[0]); printf("Led %s closed\n",ledName); }
static void init(scicos_block *block) { char ledName[20]; char name[7]; int nch = GetNin(block); int * ipar = GetIparPtrs(block); MBX *mbx; par_getstr(ledName,ipar,1,ipar[0]); rtRegisterLed(ledName,nch); get_a_name(TargetLedMbxID,name); mbx = (MBX *) RT_typed_named_mbx_init(0,0,name,MBX_RTAI_LED_SIZE/sizeof(unsigned int)*sizeof(unsigned int),FIFO_Q); if(mbx == NULL) { fprintf(stderr, "Cannot init mailbox\n"); exit_on_error(); } *(block->work) = mbx; }
void cmd_play() { char *p; var_t var; int n = 0; int calc_time_f = 1; char *str, *s; double TmpL; par_getstr(&var); if (prog_error) { return; } if (strncmp("file://", var.v.p.ptr, FILE_PREFIX_LEN) == 0) { const char *path = var.v.p.ptr + FILE_PREFIX_LEN; if (dev_fexists(path)) { dev_audio(path); } else { err_file_not_found(); } v_free(&var); return; } str = (char *) malloc(var.v.p.length + 1); // copy without spaces p = (char *) var.v.p.ptr; s = str; while (*p) { if (*p > 32) { *s++ = to_upper(*p); } p++; } *s = '\0'; v_free(&var); // run p = str; while (*p) { if (dev_events(0) < 0) { break; } if (calc_time_f) { period = (4.0 / L) * (60000 / T) * TM; duration = M * period; calc_time_f = 0; } switch (*p) { // Volume case 'V': n = 0; while (is_digit(*(p + 1))) { p++; n = (n * 10) + (*p - '0'); } CPLERR((n < 0 || n > 100), "PLAY: V0-100"); vol = n; break; // clear queue case 'Q': dev_clear_sound_queue(); break; // Octaves case '<': if (O > 0) O--; break; case '>': if (O < 6) O++; break; case 'O': O = -1; if (is_digit(*(p + 1))) { p++; O = *p - '0'; } CPLERR((O < 0 || O > 6), "PLAY: O0-6"); break; // Time case 'L': n = 0; while (is_digit(*(p + 1))) { p++; n = (n * 10) + (*p - '0'); } CPLERR((n < 1 || n > 64), "PLAY: L1-64"); L = n; calc_time_f = 1; break; case 'T': n = 0; while (is_digit(*(p + 1))) { p++; n = (n * 10) + (*p - '0'); } CPLERR((n < 45 || n > 255), "PLAY: T32-255"); T = n; calc_time_f = 1; break; case 'M': p++; switch (*p) { case 'S': M = 0.5; break; case 'N': M = 3.0 / 4.0; break; case 'L': M = 1.0; break; case 'F': bg = 0; break; case 'B': bg = 1; break; default: rt_raise("PLAY: M%c UNSUPPORTED", *p); v_free(&var); } calc_time_f = 1; break; // Pause case 'P': n = 0; while (is_digit(*(p + 1))) { p++; n = (n * 10) + (*p - '0'); } if (*(p + 1) == '.') { p++; TM = 1.5; } else { TM = 1.0; } CPLERR((n < 1 || n > 64), "PLAY: P1-64"); period = (4.0 / n) * (60000 / T) * TM; dev_sound(0, period, vol, bg); calc_time_f = 1; break; // Play N case 'N': n = 0; while (is_digit(*(p + 1))) { p++; n = (n * 10) + (*p - '0'); } CPLERR((n < 0 || n > 84), "PLAY: N0-84"); if (n) { // oct = n / 12; // pitch = tones[n - oct * 12] * (1 << oct); pitch = tones[n]; } if (n == 0) dev_sound(0, period, vol, bg); else { dev_sound(pitch, duration, vol, bg); if (duration < period) dev_sound(0, period - duration, vol, bg); } calc_time_f = 1; break; // Play note case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': switch (*p) { case 'A': n = 13; break; case 'B': n = 15; break; case 'C': n = 4; break; case 'D': n = 6; break; case 'E': n = 8; break; case 'F': n = 9; break; case 'G': n = 11; break; } if (*(p + 1) == '-' || *(p + 1) == '+' || *(p + 1) == '#') { p++; if (*p == '-') n--; else n++; } if (is_digit(*(p + 1))) { TmpL = 0; while (is_digit(*(p + 1))) { p++; TmpL = (TmpL * 10) + (*p - '0'); } calc_time_f = 1; } else { TmpL = L; } if (*(p + 1) == '.') { p++; TM = 1.5; } else { TM = 1.0; } period = (4.0 / TmpL) * (60000 / T) * TM; duration = M * period; // pitch = tones[n] * (1 << O); pitch = tones[(n - 4) + O * 12]; dev_sound(pitch, duration, vol, bg); if (duration < period) { dev_sound(0, period - duration, vol, bg); } break; default: rt_raise("PLAY: '%c' UNSUPPORTED", *p); free(str); return; } // next if (*p) { p++; } } free(str); }