int sow_drain(ResampleStruct *r, int16_t *obuf, uint32_t *osamp) { uint32_t isamp_res, osamp_res; int16_t *Obuf; int rc; /* fprintf(stderr,"Xoff %d, Xt %d <--- DRAIN\n",r->Xoff, r->Xt); */ /* stuff end with Xoff zeros */ isamp_res = r->Xoff; osamp_res = *osamp; Obuf = obuf; while (isamp_res>0 && osamp_res>0) { int16_t Isamp, Osamp; Isamp = isamp_res; Osamp = osamp_res; rc = sox_run(r, NULL, Obuf, (uint32_t *)&Isamp, (uint32_t *)&Osamp); if (!rc) return rc; /* fprintf(stderr,"DRAIN isamp,osamp (%d,%d) -> (%d,%d)\n", isamp_res,osamp_res,Isamp,Osamp); */ Obuf += Osamp; osamp_res -= Osamp; isamp_res -= Isamp; } *osamp -= osamp_res; /* fprintf(stderr,"DRAIN osamp %d\n", *osamp); */ if (isamp_res) printf("drain overran obuf by %d\n", isamp_res); fflush(stderr); return (1); }
//_____________________________________________ uint32_t AUDMAudioFilterSox::fill(uint32_t max,float *output,AUD_Status *status) { uint32_t nbout,snbout=0,nb_in; uint32_t nbBlockIn,nbi; double d; if(!engaged) { return _previous->fill(max, output,status); } // Compute how much block we want d= _wavHeader.frequency; d=_previous->getInfo()->frequency/d; d*=max; d/=BLK_SIZE; nbBlockIn=(uint32_t)floor(d); if(!nbBlockIn) { printf("[Resampler]Asked less than one block..(%u)\n"),max; return 0; } for(int j=0; j<nbBlockIn; j++) { // Fill incoming buffer shrink(); fillIncomingBuffer(status); if(_head==_tail) { *status=AUD_END_OF_STREAM; return snbout; } ADM_assert(_tail>=_head); nb_in=(_tail-_head)/(_wavHeader.channels); // Nb Sample if(nb_in>BLK_SIZE) nb_in=BLK_SIZE; if(!nb_in) { printf("[Resampler]Not enough audio\n"); break; } // We have one BLK_SIZE incoming for(int i=0; i<_wavHeader.channels; i++) { nbout=BLK_SIZE*8;; // 8Khz->48khz worst case ? nbi=nb_in; if(!sox_run(&(_resamples[i]), _incomingBuffer+i+_head, output+i, &nbi, &nbout,_wavHeader.channels-1)) { printf("[Resampler] run error!!\n"); return 0; } } if(nbi>nb_in) { printf("[Resampler]%u max %u\n",nbi,nb_in); ADM_assert(0); } _head=_head+(nbi*_wavHeader.channels); snbout+=nbout*_wavHeader.channels; output+=nbout*_wavHeader.channels; } return snbout; }
int main(int argc, char **argv) { char domain[80]; char *result = NULL; char *username = NULL; char *password = NULL; char xmpp_server[80]; char pubsub_server[80]; int xmpp_server_port = 5223; int verbose = 0; int current_arg_num = 1; char *current_arg_name = NULL; char *current_arg_val = NULL; sox_userdata_t userdata; sox_conn_t *conn; if (argc == 1 || !strcmp(argv[1], "-help")) { print_usage(argv[0]); return -1; } strcpy(xmpp_server, "none"); strcpy(pubsub_server, "none"); while (current_arg_num < argc) { current_arg_name = argv[current_arg_num++]; if (strcmp(current_arg_name, "-help") == 0) { print_usage(argv[0]); return -1; } if (strcmp(current_arg_name, "-verbose") == 0) { verbose = 1; continue; } if (current_arg_num == argc) { print_usage(argv[0]); return -1; } current_arg_val = argv[current_arg_num++]; if (strcmp(current_arg_name, "-u") == 0) { username = current_arg_val; if (strcmp(xmpp_server, "none") == 0) { strcpy(domain, username); result = strtok(domain, "@"); result = strtok(NULL, "@"); strcpy(xmpp_server, result); strcpy(pubsub_server, "pubsub."); strcat(pubsub_server, xmpp_server); } } else if (strcmp(current_arg_name, "-p") == 0) { password = current_arg_val; } else if (strcmp(current_arg_name, "-sID") == 0) { s_id = current_arg_val; } else if (strcmp(current_arg_name, "-aID") == 0) { a_id = current_arg_val; } else if (strcmp(current_arg_name, "-aEvent") == 0) { actuate_event = current_arg_val; } else { fprintf(stderr, "Unknown argument: %s\n", current_arg_name); print_usage(argv[0]); return -1; } } if (username == NULL ) { fprintf(stderr, "Username missing\n"); print_usage(argv[0]); return -1; } else if (s_id == 0) { fprintf(stderr, "Sensor transducer id missing\n"); print_usage(argv[0]); return -1; } else if (actuate_event == NULL ) { fprintf(stderr, "Actuator event node missing\n"); print_usage(argv[0]); return -1; } else if (a_id == 0) { fprintf(stderr, "Actuator transducer id missing\n"); print_usage(argv[0]); return -1; } else if (password == NULL ) { fprintf(stdout, "%s's ", username); fflush(stdout); password = getpass("password: "******"Invalid password\n"); print_usage(argv[0]); return -1; } } if (verbose) { fprintf(stdout, "XMPP Server: %s\n", xmpp_server); fprintf(stdout, "XMPP Server Port: %d\n", xmpp_server_port); fprintf(stdout, "XMPP PubSub Server: %s\n", pubsub_server); fprintf(stdout, "Username: %s\n", username); fprintf(stdout, "Verbose: YES\n"); fprintf(stdout, "\n"); } if (verbose == 0) conn = sox_connect(username, password, (sox_handler_conn) conn_handler, SOX_LEVEL_ERROR, &userdata); else conn = sox_connect(username, password, (sox_handler_conn) conn_handler, SOX_LEVEL_DEBUG, &userdata); sox_run(conn, NULL ); if (userdata.return_value < 0) fprintf(stderr, "ERROR: Connection failed\n"); return 0; }