in tools/cubeb-test.cpp [575:660]
int main(int argc, char* argv[]) {
#ifdef _WIN32
CoInitialize(nullptr);
#endif
operation_data op;
op.pm = PLAYBACK;
if (argc > 1) {
if ('r' == argv[1][0]) {
op.pm = RECORD;
} else if ('p' == argv[1][0]) {
op.pm = PLAYBACK;
} else if ('d' == argv[1][0]) {
op.pm = DUPLEX;
} else if ('l' == argv[1][0]) {
op.pm = LATENCY_TESTING;
} else if ('c' == argv[1][0]) {
op.pm = COLLECTION_CHANGE;
}
}
op.rate = DEFAULT_RATE;
uint32_t latency_override = 0;
if (op.pm == LATENCY_TESTING && argc > 2) {
latency_override = strtoul(argv[2], NULL, 10);
printf("LATENCY_TESTING %d\n", latency_override);
} else if (argc > 2) {
op.rate = strtoul(argv[2], NULL, 0);
}
bool res = false;
cubeb_client cl;
cl.activate_log(CUBEB_LOG_NORMAL);
fprintf(stderr, "Log level is DISABLED\n");
cl.init(/* default backend */);
op.collection_device_type = CUBEB_DEVICE_TYPE_UNKNOWN;
fprintf(stderr, "collection device type is UNKNOWN\n");
if (op.pm == COLLECTION_CHANGE) {
op.collection_device_type = CUBEB_DEVICE_TYPE_OUTPUT;
fprintf(stderr, "collection device type changed to OUTPUT\n");
res = cl.register_device_collection_changed(op.collection_device_type);
if (res) {
fprintf(stderr, "register_device_collection_changed succeed\n");
} else {
fprintf(stderr, "register_device_collection_changed failed\n");
}
} else {
if (op.pm == PLAYBACK || op.pm == DUPLEX || op.pm == LATENCY_TESTING) {
cl.output_device = cl.select_device(CUBEB_DEVICE_TYPE_OUTPUT);
cl.output_params = {CUBEB_SAMPLE_FLOAT32NE, op.rate, DEFAULT_OUTPUT_CHANNELS,
CUBEB_LAYOUT_STEREO, CUBEB_STREAM_PREF_NONE};
}
if (op.pm == RECORD || op.pm == DUPLEX || op.pm == LATENCY_TESTING) {
cl.input_device = cl.select_device(CUBEB_DEVICE_TYPE_INPUT);
cl.input_params = {CUBEB_SAMPLE_FLOAT32NE, op.rate, DEFAULT_INPUT_CHANNELS, CUBEB_LAYOUT_UNDEFINED, CUBEB_STREAM_PREF_NONE};
}
if (op.pm == LATENCY_TESTING) {
cl.set_latency_testing(true);
if (latency_override) {
cl.set_latency_frames(latency_override);
}
}
res = cl.init_stream();
if (!res) {
fprintf(stderr, "stream_init failed\n");
return -1;
}
fprintf(stderr, "stream_init succeed\n");
res = cl.start_stream();
if (res) {
fprintf(stderr, "stream_start succeed\n");
} else {
fprintf(stderr, "stream_init failed\n");
}
}
// User input
do {
fprintf(stderr, "press `q` to abort or `h` for help\n");
} while (choose_action(cl, &op, getchar()));
cl.destroy();
return 0;
}