mirror of
https://github.com/Ryujinx/libsoundio.git
synced 2025-01-03 13:45:41 +00:00
list_devices example: more detailed output
This commit is contained in:
parent
7d45b15036
commit
6c2226a6d7
|
@ -31,27 +31,31 @@ static void print_channel_layout(const struct SoundIoChannelLayout *layout) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_device(struct SoundIoDevice *device, bool is_default) {
|
static void print_device(struct SoundIoDevice *device, bool is_default) {
|
||||||
const char *purpose_str;
|
const char *default_str = is_default ? " (default)" : "";
|
||||||
const char *default_str;
|
const char *raw_str = device->is_raw ? " (raw)" : "";
|
||||||
const char *raw_str;
|
fprintf(stderr, "%s%s%s\n", device->description, default_str, raw_str);
|
||||||
if (soundio_device_purpose(device) == SoundIoDevicePurposeOutput) {
|
fprintf(stderr, " name: %s\n", device->name);
|
||||||
purpose_str = "playback";
|
|
||||||
default_str = is_default ? " (default)" : "";
|
|
||||||
} else {
|
|
||||||
purpose_str = "recording";
|
|
||||||
default_str = is_default ? " (default)" : "";
|
|
||||||
}
|
|
||||||
raw_str = device->is_raw ? "(raw) " : "";
|
|
||||||
const char *description = soundio_device_description(device);
|
|
||||||
int sample_rate = device->sample_rate_max;
|
|
||||||
fprintf(stderr, "%s%s device: ", raw_str, purpose_str);
|
|
||||||
if (device->probe_error) {
|
if (device->probe_error) {
|
||||||
fprintf(stderr, "[%s] %s%s\n", soundio_strerror(device->probe_error),
|
fprintf(stderr, " probe error: %s\n", soundio_strerror(device->probe_error));
|
||||||
description, default_str);
|
|
||||||
} else {
|
} else {
|
||||||
print_channel_layout(soundio_device_channel_layout(device));
|
fprintf(stderr, " channel layout: ");
|
||||||
fprintf(stderr, " %d Hz %s%s\n", sample_rate, description, default_str);
|
print_channel_layout(&device->channel_layout);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
fprintf(stderr, " min sample rate: %d\n", device->sample_rate_min);
|
||||||
|
fprintf(stderr, " max sample rate: %d\n", device->sample_rate_max);
|
||||||
|
if (device->sample_rate_current)
|
||||||
|
fprintf(stderr, " current sample rate: %d\n", device->sample_rate_current);
|
||||||
|
fprintf(stderr, " formats: ");
|
||||||
|
for (int i = 0; i < device->format_count; i += 1) {
|
||||||
|
const char *comma = (i == device->format_count - 1) ? "" : ", ";
|
||||||
|
fprintf(stderr, "%s%s", soundio_format_string(device->formats[i]), comma);
|
||||||
|
}
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
if (device->current_format != SoundIoFormatInvalid)
|
||||||
|
fprintf(stderr, " current format: %s\n", soundio_format_string(device->current_format));
|
||||||
}
|
}
|
||||||
|
fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int list_devices(struct SoundIo *soundio) {
|
static int list_devices(struct SoundIo *soundio) {
|
||||||
|
@ -61,18 +65,20 @@ static int list_devices(struct SoundIo *soundio) {
|
||||||
int default_output = soundio_get_default_output_device_index(soundio);
|
int default_output = soundio_get_default_output_device_index(soundio);
|
||||||
int default_input = soundio_get_default_input_device_index(soundio);
|
int default_input = soundio_get_default_input_device_index(soundio);
|
||||||
|
|
||||||
|
fprintf(stderr, "--------Input Devices--------\n\n");
|
||||||
for (int i = 0; i < input_count; i += 1) {
|
for (int i = 0; i < input_count; i += 1) {
|
||||||
struct SoundIoDevice *device = soundio_get_input_device(soundio, i);
|
struct SoundIoDevice *device = soundio_get_input_device(soundio, i);
|
||||||
print_device(device, default_input == i);
|
print_device(device, default_input == i);
|
||||||
soundio_device_unref(device);
|
soundio_device_unref(device);
|
||||||
}
|
}
|
||||||
|
fprintf(stderr, "\n--------Output Devices--------\n\n");
|
||||||
for (int i = 0; i < output_count; i += 1) {
|
for (int i = 0; i < output_count; i += 1) {
|
||||||
struct SoundIoDevice *device = soundio_get_output_device(soundio, i);
|
struct SoundIoDevice *device = soundio_get_output_device(soundio, i);
|
||||||
print_device(device, default_output == i);
|
print_device(device, default_output == i);
|
||||||
soundio_device_unref(device);
|
soundio_device_unref(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "%d devices found\n", input_count + output_count);
|
fprintf(stderr, "\n%d devices found\n", input_count + output_count);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,13 +64,10 @@ int main(int argc, char **argv) {
|
||||||
if (!in_device)
|
if (!in_device)
|
||||||
panic("could not get input device: out of memory");
|
panic("could not get input device: out of memory");
|
||||||
|
|
||||||
fprintf(stderr, "Input device: %s\n", soundio_device_description(in_device));
|
fprintf(stderr, "Input device: %s\n", in_device->description);
|
||||||
fprintf(stderr, "Output device: %s\n", soundio_device_description(out_device));
|
fprintf(stderr, "Output device: %s\n", out_device->description);
|
||||||
|
|
||||||
const struct SoundIoChannelLayout *in_layout = soundio_device_channel_layout(in_device);
|
if (!soundio_channel_layout_equal(&in_device->channel_layout, &out_device->channel_layout))
|
||||||
const struct SoundIoChannelLayout *out_layout = soundio_device_channel_layout(out_device);
|
|
||||||
|
|
||||||
if (!soundio_channel_layout_equal(in_layout, out_layout))
|
|
||||||
panic("channel layouts not compatible");
|
panic("channel layouts not compatible");
|
||||||
|
|
||||||
double latency = 0.1;
|
double latency = 0.1;
|
||||||
|
|
|
@ -85,9 +85,7 @@ int main(int argc, char **argv) {
|
||||||
if (!device)
|
if (!device)
|
||||||
panic("could not get output device: out of memory");
|
panic("could not get output device: out of memory");
|
||||||
|
|
||||||
fprintf(stderr, "Output device: %s: %s\n",
|
fprintf(stderr, "Output device: %s: %s\n", device->name, device->description);
|
||||||
soundio_device_name(device),
|
|
||||||
soundio_device_description(device));
|
|
||||||
|
|
||||||
struct SoundIoOutStream *out_stream;
|
struct SoundIoOutStream *out_stream;
|
||||||
soundio_out_stream_create(device, SoundIoFormatFloat32NE, 48000,
|
soundio_out_stream_create(device, SoundIoFormatFloat32NE, 48000,
|
||||||
|
|
|
@ -186,7 +186,7 @@ struct SoundIoDevice {
|
||||||
struct SoundIo *soundio;
|
struct SoundIo *soundio;
|
||||||
|
|
||||||
// `name` uniquely identifies this device. `description` is user-friendly
|
// `name` uniquely identifies this device. `description` is user-friendly
|
||||||
// text to describe the device.
|
// text to describe the device. These fields are UTF-8 encoded.
|
||||||
char *name;
|
char *name;
|
||||||
char *description;
|
char *description;
|
||||||
|
|
||||||
|
@ -392,14 +392,6 @@ int soundio_get_default_output_device_index(struct SoundIo *soundio);
|
||||||
void soundio_device_ref(struct SoundIoDevice *device);
|
void soundio_device_ref(struct SoundIoDevice *device);
|
||||||
void soundio_device_unref(struct SoundIoDevice *device);
|
void soundio_device_unref(struct SoundIoDevice *device);
|
||||||
|
|
||||||
// the name is the identifier for the device. UTF-8 encoded
|
|
||||||
const char *soundio_device_name(const struct SoundIoDevice *device);
|
|
||||||
|
|
||||||
// UTF-8 encoded
|
|
||||||
const char *soundio_device_description(const struct SoundIoDevice *device);
|
|
||||||
|
|
||||||
const struct SoundIoChannelLayout *soundio_device_channel_layout(const struct SoundIoDevice *device);
|
|
||||||
|
|
||||||
bool soundio_device_equal(
|
bool soundio_device_equal(
|
||||||
const struct SoundIoDevice *a,
|
const struct SoundIoDevice *a,
|
||||||
const struct SoundIoDevice *b);
|
const struct SoundIoDevice *b);
|
||||||
|
|
|
@ -34,8 +34,6 @@ static void test_create_out_stream(void) {
|
||||||
assert(default_out_device_index >= 0);
|
assert(default_out_device_index >= 0);
|
||||||
struct SoundIoDevice *device = soundio_get_output_device(soundio, default_out_device_index);
|
struct SoundIoDevice *device = soundio_get_output_device(soundio, default_out_device_index);
|
||||||
assert(device);
|
assert(device);
|
||||||
soundio_device_name(device);
|
|
||||||
soundio_device_description(device);
|
|
||||||
struct SoundIoOutStream *out_stream;
|
struct SoundIoOutStream *out_stream;
|
||||||
soundio_out_stream_create(device, SoundIoFormatFloat32NE, 48000, 0.1, NULL,
|
soundio_out_stream_create(device, SoundIoFormatFloat32NE, 48000, 0.1, NULL,
|
||||||
write_callback, underrun_callback, &out_stream);
|
write_callback, underrun_callback, &out_stream);
|
||||||
|
|
Loading…
Reference in a new issue