Example #1
0
int
main(int argc, char **argv)
{
    wav_t *w;
    audio_meta_t meta;
    talking_skull_t *talking_skull;
    void *data;
    size_t n_data;

    if (argc != 2) {
	fprintf(stderr, "usage: filename.wav\n");
	return 1;
    }

    w = wav_new(argv[1]);
    if (! w) {
	perror(argv[1]);
	return 1;
    }

    meta = wav_get_meta(w);
    data = wav_get_raw_data(w, &n_data);

    talking_skull = talking_skull_new(&meta, true, update, NULL);
    talking_skull_play(talking_skull, data, n_data);
sleep(30);

    wav_destroy(w);

    return 0;
}
Example #2
0
int export_wav(struct play_s *play)
{
	/*
	 Export wav uses following pipeline:

	 file -(uncompressed_buffer)->     reads data from stream file
	 unpack -(uncompressed_buffer)->   decompresses lzo/quicklz packets
	 wav -(rgb)->               write audio to file in wav format
	*/

	ps_bufferattr_t attr;
	ps_buffer_t uncompressed_buffer, compressed_buffer;
	wav_t wav;
	unpack_t unpack;
	int ret = 0;

	if ((ret = ps_bufferattr_init(&attr)))
		goto err;

	/* buffers */
	if ((ret = ps_bufferattr_setsize(&attr, play->compressed_size)))
		goto err;
	if ((ret = ps_buffer_init(&compressed_buffer, &attr)))
		goto err;

	if ((ret = ps_bufferattr_setsize(&attr, play->uncompressed_size)))
		goto err;
	if ((ret = ps_buffer_init(&uncompressed_buffer, &attr)))
		goto err;

	if ((ret = ps_bufferattr_destroy(&attr)))
		goto err;

	/* init filters */
	if ((ret = unpack_init(&unpack, &play->glc)))
		goto err;
	if ((ret = wav_init(&wav, &play->glc)))
		goto err;
	wav_set_interpolation(wav, play->interpolate);
	wav_set_filename(wav, play->export_filename_format);
	wav_set_stream_id(wav, play->export_audio_id);
	wav_set_silence_threshold(wav, play->silence_threshold);

	/* start the threads */
	if ((ret = unpack_process_start(unpack, &compressed_buffer, &uncompressed_buffer)))
		goto err;
	if ((ret = wav_process_start(wav, &uncompressed_buffer)))
		goto err;
	if ((ret = file_read(play->file, &compressed_buffer)))
		goto err;

	/* wait and clean up */
	if ((ret = wav_process_wait(wav)))
		goto err;
	if ((ret = unpack_process_wait(unpack)))
		goto err;

	unpack_destroy(unpack);
	wav_destroy(wav);

	ps_buffer_destroy(&compressed_buffer);
	ps_buffer_destroy(&uncompressed_buffer);

	return 0;
err:
	if (!ret) {
		fprintf(stderr, "exporting wav failed: initializing filters failed\n");
		return EAGAIN;
	} else {
		fprintf(stderr, "exporting wav failed: %s (%d)\n", strerror(ret), ret);
		return ret;
	}
}
Example #3
0
int
main(int argc, char **argv)
{
    wav_t *w;
    audio_meta_t meta;
    state_t s;
    audio_config_t audio_cfg;
    audio_device_t audio_dev;
    audio_t *audio;
    talking_skull_t *talking_skull;
    bool has_servo_track;

    pi_usb_init();

    s.gain = 1;
    if ((s.m = maestro_new()) == NULL) {
	fprintf(stderr, "couldn't find a recognized device.\n");
	exit(1);
    }

    while (argc > 1 && argv[1][0] == '-' && argv[1][1] == '-') {
	if (strcmp(argv[1], "--") == 0) {
	    argc -= 1;
	    argv += 1;
	    break;
	}
	if (argc > 2 && strcmp(argv[1], "--gain") == 0) {
	    s.gain = atof(argv[2]);
	    argc -= 2;
	    argv += 2;
	}

	if (argc > 1 && strcmp(argv[1], "--servo") == 0) {
	    has_servo_track = true;
	    argc -= 1;
	    argv += 1;
	}

	if (argc > 1 && strcmp(argv[1], "--baxter") == 0) {
	    maestro_set_servo_range(s.m, SERVO_ID, BAXTER_MOUTH);
	    argc -= 1;
	    argv += 1;
	}

	if (argc > 1 && strcmp(argv[1], "--deer") == 0) {
	    maestro_set_servo_is_inverted(s.m, SERVO_ID, 0);
	    maestro_set_servo_range(s.m, SERVO_ID, TALKING_DEER);
	    argc -= 1;
	    argv += 1;
	}

	if (argc > 1 && strcmp(argv[1], "--skull2") == 0) {
	    maestro_set_servo_is_inverted(s.m, SERVO_ID, 0);
	    maestro_set_servo_range(s.m, SERVO_ID, TALKING_SKULL2);
	    argc -= 1;
	    argv += 1;
	}
    }

    w = wav_new(argv[1]);
    if (! w) {
	perror(argv[1]);
	exit(1);
    }

    meta = wav_get_meta(w);
    talking_skull = talking_skull_new(&meta, has_servo_track, update_servo, &s);
    if (has_servo_track) {
	wav_extract_servo_track(w);
    }

    audio_device_init_playback(&audio_dev);
    audio_config_init_default(&audio_cfg);
    wav_configure_audio(w, &audio_cfg);

    printf("Config from wav file: ");
    audio_config_print(&audio_cfg, stdout);
    printf("\n");

    audio = audio_new(&audio_cfg, &audio_dev);

    if (! audio) {
	perror("audio_new");
	exit(1);
    }

    audio_set_volume(audio, 100);

    wav_play_with_talking_skull(w, audio, talking_skull);

    if (s.m) {
	maestro_set_servo_pos(s.m, SERVO_ID, 50);
	maestro_destroy(s.m);
    }

    wav_destroy(w);
    audio_destroy(audio);
    return 0;
}