Esempio n. 1
0
int main(int argc, char *argv[])
{
	int rc, rdnum;
	printf("APRSDUMP V1.0, Stefan Koch <*****@*****.**>\n");

	if (2 != argc) {
		printf("need sound device\n");
		return EXIT_FAILURE;
	}
	audio_dev = strdup(argv[1]);
	//audio_dev = strdup("plughw:0,0");

	printf("- init audio capture\n");
	printf("  + audio device = %s\n", audio_dev);
	rc = audio_capture_init(audio_dev);
	if (0 == rc) {
		printf("  + init sucess\n");
	} else {
		printf("  + init failed (%d)\n", rc);
		return EXIT_FAILURE;
	}
	
	/* register sigint handler */
	printf("- register sigint handler\n");
	signal(SIGINT, sig_int_handler);

	/* start decoder loop */
	while (1 == run) {
		rdnum = audio_capture_read(&aubuf);
		if (-1 == rdnum) break;
	//	cdump(aubuf, rdnum);
		cbar(audiometer(aubuf, rdnum));
	}

	printf("- shutdown audio capture\n");
	audio_capture_close();

	return 0;
}
Esempio n. 2
0
int main(int argc, char *argv[])
{
    /* setup termination signals handler */
	signal(SIGINT, sig_handler);
	signal(SIGHUP, sig_handler);
	signal(SIGKILL, sig_handler);

    audio_capture_init(samplerate);
    atexit(audio_capture_terminate);

    audio_encoder_init(samplerate, opus_complexity, opus_bitrate);
    atexit(audio_encoder_terminate);

    udp_bcast_init(bcast_addr, port);
    atexit(udp_bcast_terminate);

    size_t element_size = (samplerate / 1000 * frame_length) * 2;
    queue_init(queue_elements_num, element_size);
    atexit(queue_terminate);

    pthread_t capt_th, enc_send_th;
    if (pthread_create(&enc_send_th, NULL, enc_send_thread, NULL)) {
        fprintf(stderr, "ERROR: unable to spawn encoding and sending thread\n");
        exit(EXIT_FAILURE);
    }

    if (pthread_create(&capt_th, NULL, capture_thread, NULL)) {
        fprintf(stderr, "ERROR: unable to spawn capturing thread\n");
        terminate_threads = true;
        pthread_join(enc_send_th, NULL);
        exit(EXIT_FAILURE);
    }

	printf("Capturing, encoding and sending Ctrl+C to terminate...\n");
    struct timeval start_ts, cur_ts;

    gettimeofday(&start_ts, NULL);

	while (!app_terminate) {
        sleep(1);
        gettimeofday(&cur_ts, NULL);
        uint32_t time_delta_ms = (cur_ts.tv_sec - start_ts.tv_sec) * 1000 + 
                                    (cur_ts.tv_usec - start_ts.tv_usec) / 1000;

        printf("%u.%03u capt:%"PRIu64" drop:%"PRIu64" enc: %"PRIu64"\n",
                time_delta_ms/1000, time_delta_ms % 1000, capt_buffers,
                capt_buffers_dropped, enc_buffers);
    }

    terminate_threads = true;
    pthread_join(capt_th, NULL);
    pthread_join(enc_send_th, NULL);

    printf("\n");
    printf("Captured packets: %"PRIu64"    Packets dropped at "
            "capture: %" PRIu64"\n", capt_buffers, capt_buffers_dropped);
    printf("Capture time (min/avg/max): %u/%u/%u microseconds\n",
            capt_min_time, (uint32_t)(capt_time/capt_buffers), capt_max_time);
    printf("Encoded packets: %"PRIu64"\n", enc_buffers);
    printf("Encoding time (min/avg/max): %u/%u/%u microseconds\n",
            enc_min_time, (uint32_t)(enc_time/enc_buffers), enc_max_time);

    /* OK */
    exit(EXIT_SUCCESS);
}