diff --git a/frontend/src/components/GraphCanvas.svelte b/frontend/src/components/GraphCanvas.svelte index dcb9000..11feb1f 100644 --- a/frontend/src/components/GraphCanvas.svelte +++ b/frontend/src/components/GraphCanvas.svelte @@ -693,8 +693,8 @@ {#if nd.sample_rate > 0}Sample Rate{nd.sample_rate} Hz{/if} {#if nd.channels > 0}Channels{nd.channels}{/if} {#if nd.format}Format{nd.format}{/if} - {#if nd.quantum > 0}Quantum{nd.quantum}{/if} - {#if nd.rate > 0}Rate{nd.rate}{/if} + {#if nd.quantum > 0}Latency{nd.quantum} samples @ {nd.sample_rate} Hz{/if} + {#if nd.rate > 0}Period Size{nd.rate}{/if} {#if nd.device_name}Device{nd.device_name}{/if} {#if nd.device_bus}Bus{nd.device_bus}{/if} {#if nd.api}API{nd.api}{/if} diff --git a/src/graph_engine.cpp b/src/graph_engine.cpp index d08190c..03e6b94 100644 --- a/src/graph_engine.cpp +++ b/src/graph_engine.cpp @@ -125,8 +125,26 @@ static void on_node_info(void *data, const struct pw_node_info *info) { str = spa_dict_lookup(info->props, "priority.driver"); if (str) nobj->node.priority = atoi(str); - str = spa_dict_lookup(info->props, "node.rate"); - if (str) nobj->node.rate = (uint32_t)atoi(str); + // Latency info + str = spa_dict_lookup(info->props, "node.latency"); + if (str) { + // Format: "256/48000" -> quantum=256 rate=48000 + uint32_t q = 0, r = 0; + if (sscanf(str, "%u/%u", &q, &r) == 2) { + nobj->node.quantum = q; + nobj->node.sample_rate = r; + } + } + + // Fallback: read clock rate from device props + if (nobj->node.sample_rate == 0) { + str = spa_dict_lookup(info->props, "clock.rate"); + if (str) nobj->node.sample_rate = (uint32_t)atoi(str); + } + + // ALSA latency + str = spa_dict_lookup(info->props, "api.alsa.period-size"); + if (str) nobj->node.rate = (uint32_t)atoi(str); // reuse rate field for period-size } }