コード例 #1
0
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);
}
コード例 #2
0
//_____________________________________________
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;
}
コード例 #3
0
ファイル: light_switch.c プロジェクト: shobhitkukreti/Hue
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;
}