¿Por qué se corta el audio si el uso de la CPU es bajo? — Pensarlo en términos de búferes y plazos

· Actualizado el: · · Windows, Audio, Rendimiento, Investigación de fallos

Está escuchando música y de vez en cuando se corta con un chasquido. Abre el Administrador de tareas y el uso de la CPU ronda el 10 %. El vídeo sigue reproduciéndose y el ratón se mueve con normalidad.

Dan ganas de preguntar: «con todo este margen, ¿reproducir audio es realmente demasiado pedir?»

Pero lo que el audio necesita no es solo la capacidad de despachar mucho trabajo deprisa. También necesita que el siguiente tramo de sonido esté listo antes de que se agote el que suena ahora. Este artículo sigue esa reposición tardía, el mecanismo que hay detrás de un corte típico.1

Partimos de la escena de reproducir música en un PC. Las secciones 1 a 4 cierran la explicación del mecanismo, y de la sección 5 en adelante se reúnen los métodos de investigación. Se supone en todo momento una salida de audio en Windows 11, y las cifras son supuestos usados para explicar.

1. El audio suena mientras se guarda de reserva un poco de lo que viene

Un archivo de música guardado en el PC no hace sonar los altavoces por el mero hecho de estar ahí. La aplicación de reproducción prepara los datos de audio y los entrega, a través de Windows y del controlador, al dispositivo que produce el sonido. En el modo compartido habitual, el motor de audio de Windows mezcla por el camino varias secuencias y aplica efectos.2

Si el audio se entregara pieza a pieza justo cuando hace falta, el más mínimo retraso de procesamiento se reflejaría directamente en la reproducción. Por eso se guarda de antemano un poco de lo que se reproducirá a continuación. Ese lugar de retención temporal es el búfer. Mientras la reproducción avanza del lado del dispositivo, la aplicación y el procesamiento de audio lo reponen con los datos siguientes.3

Almacenar un poco de sonido en el búfer y después reproducirloEl flujo de reponer el búfer con datos de audio preparados y preparar los datos siguientes mientras la reproducción avanza del lado del dispositivo.Antes de que se agote el restoPreparar los datos de audio siguientesReponer el búferReproducir el audio del búfer

Figura 1: Para que la reproducción continúe, la reposición tiene que seguir el ritmo del lado que consume el audio.

Supongamos que el búfer contiene ahora mismo 10 milisegundos de audio. Si la siguiente reposición llega dentro de 8 milisegundos, enlaza cuando todavía queda algo. Pero si no llega nada hasta dentro de 12 milisegundos, la reserva se agota en la marca de los 10 milisegundos.

Los mismos 10 milisegundos restantes, distinto resultado según cuándo llegue la reposiciónComo supuesto para explicar, se muestra que con 10 milisegundos de datos de reproducción restantes una reposición 8 milisegundos después llega a tiempo, mientras que una 12 milisegundos después llega tras el agotamiento.Ahora quedan 10 milisegundosReposición 8 ms despuésEnlaza mientras queda algoReposición 12 ms despuésReserva agotada a los 10 ms

Figura 2: Un ejemplo simplificado en términos de tiempo. Lo que importa no es solo si hubo reposición, sino cuándo.

Quedarse sin reserva porque el suministro de los datos de audio necesarios no llega a tiempo es un underrun. Provoca cortes, chasquidos y artefactos similares. Aunque los datos aparezcan tarde, un hueco ya oído no puede rellenarse después.1

La reproducción de audio es un trabajo en el que «al final se calculó» no basta; lo que hace falta es «estaba listo cuando tenía que sonar».

En el diagrama, una línea continua marca una relación que siempre se cumple y una línea discontinua una relación condicional (las condiciones están en la explicación de cada relación en la página de detalle). La lista completa de relaciones (5 en total, con evidencia y grado de certeza) y las definiciones de los conceptos principales están reunidas en la página de detalle del mapa de conocimiento (en japonés). Datos: JSON-LD / Turtle

2. Por qué la reposición llega tarde aunque la CPU esté ociosa

Al oír esto, la reacción natural es: «entonces, si la CPU está ociosa, ¿por qué no reponer antes?»

Pero la cifra de uso de CPU no es un recuento de plazos de audio cumplidos. Lo ocupada que estuvo toda la CPU durante un intervalo y si el breve trabajo que repone el audio pudo ejecutarse en el momento necesario son dos cosas distintas. Una carga global baja no garantiza que al trabajo de audio le llegue el turno de inmediato cada vez.4

En los términos del ejemplo anterior, aunque haya margen durante la mayor parte de un segundo, un único tramo en el que la reposición no puede producirse durante 12 milisegundos agota los 10 milisegundos de audio que quedaban. El margen que exista más adelante en ese segundo no rescata esa única llegada tardía.

No un cálculo lento, sino la espera de una ocasión para ejecutarse

Supongamos que el código que prepara los datos de audio está esperando a que termine una lectura de archivo. O que espera un bloqueo que mantiene otro trabajo dentro de la aplicación. Mientras espera, ese código consume poca CPU. El audio que ya suena se sigue vaciando igualmente. Un suministro tardío de datos y un subproceso en espera se producen con independencia de que se agote la CPU.54

La reproducción avanza incluso durante un tiempo de espera que no consume CPULa reproducción avanza mientras el procesamiento de audio espera datos o un bloqueo, de modo que el búfer puede vaciarse con el uso de CPU todavía bajo.El procesamiento de audio espera datosEse trabajo no consume CPULa reproducción continúa y lo que queda menguaUna reposición tardía significa quedarse sin reserva

Figura 3: «No usar la CPU» no es lo mismo que «el trabajo necesario está hecho».

También dispositivos aparentemente ajenos al audio pueden retenerlo

Hay un segundo caso, en el que el turno no llega del lado de Windows.

Cuando llega una notificación de un dispositivo de red o similar, Windows ejecuta el código que atiende la interrupción. La breve primera parte de ese trabajo es la ISR, y el mecanismo que aplaza el resto del trabajo es el DPC. Mientras se ejecuta un DPC o una ISR corriente, esa CPU lógica no puede ejecutar subprocesos corrientes. El procesamiento de audio también está sujeto a ello.64

Cuando ese trabajo se prolonga o se repite a menudo en la CPU en la que el audio necesita ejecutarse, la oportunidad de reponer el audio se desplaza hacia atrás. El material de Microsoft sobre análisis de rendimiento para audio y vídeo explica también que DPC e ISR largos procedentes de controladores de red, almacenamiento, gráficos y otros pueden causar fallos de audio.5

Cuando responder a un dispositivo retrasa la ejecución del audioCuando un DPC o una ISR corriente se prolonga en la CPU que el procesamiento de audio necesita, la ejecución del subproceso se retrasa y el plazo de reposición puede verse afectado.Cuando se prolongaDPC o ISR en la misma CPULa ejecución del audio queda retenidaLa siguiente reposición llega tardeUn corte en cuanto se agota lo que queda

Figura 4: No solo el dispositivo que produce el sonido; el trabajo destinado a otros dispositivos puede tener un efecto indirecto.

Dicho de otro modo, un corte no es solo «la CPU es demasiado lenta para terminar el cálculo». El cálculo no puede empezar, o los datos que necesita no llegan. Esa espera también es tiempo arrancado al plazo del audio.

3. Entonces, ¿por qué no guardar sin más mucho audio de reserva?

Si la reposición llega un poco tarde, parece sensato guardar reserva suficiente para absorber ese retraso. Ese es exactamente el razonamiento que lleva a agrandar el búfer de audio.

En las mismas condiciones, guardar más audio por adelantado hace más llevaderos los retrasos breves de reposición. Pero ahora el audio recién producido espera detrás del audio ya guardado de reserva.12

Si solo escucha música, esperar un instante tras pulsar Reproducir quizá no le moleste. Cuando toca un teclado conectado al PC, o procesa su propia voz desde un micrófono y se escucha, esa espera se convierte en un desfase entre el gesto y el sonido.

Margen del búfer y respuesta más lentaGuardar más audio por adelantado facilita absorber los retrasos temporales de reposición, mientras que también crece la espera antes de que se reproduzca el audio nuevo.Guardar más audio por adelantadoLos retrasos de reposición se absorben mejorEl audio nuevo espera detrásMás demora del gesto al sonido

Figura 5: Aumentar el búfer es un ajuste que compra margen a costa de la capacidad de respuesta.

Los ajustes de búfer de 128, 256 y 512 que aparecen en el software de producción musical se refieren también a ese tiempo. En PCM, la unidad que agrupa las muestras de todos los canales en el mismo instante se llama fotograma. A 48 kHz, 480 fotogramas son 480 dividido entre 48000 segundos, es decir, 10 milisegundos de audio. A igual frecuencia de muestreo, cuantos más fotogramas, más largo es el tramo de audio que contienen.3

Lo que se ha contado aquí es la duración de audio que representa ese búfer. En la práctica hay también procesamiento en la aplicación, el controlador y el dispositivo, así que manténgalo aparte de la latencia total entre pulsar una tecla y oír la nota. Tampoco todas las aplicaciones de Windows comparten un único ajuste común de búfer; los tamaños que se pueden elegir varían asimismo con el dispositivo y el controlador.2

Así pues, menor no es más rendimiento, y mayor tampoco es la respuesta correcta. El ajuste consiste en conservar la capacidad de respuesta que necesita tomando a la vez margen suficiente para evitar los cortes.

4. Lo que el audio necesita es cumplir plazos, no velocidad media

Volvamos a la pregunta inicial.

El audio se corta con un uso bajo de CPU porque tener margen en la capacidad global de procesamiento y entregar a tiempo el siguiente tramo de sonido son dos cosas distintas.

El audio suena a partir de una pequeña cantidad guardada de reserva. Esa reserva se repone antes de agotarse. Una sola reposición tardía puede bastar para provocar un hueco, y aumentar la reserva aporta margen pero también alarga el tiempo hasta que se oye el audio nuevo.

Ese es el núcleo del mecanismo. También cambia la pregunta que uno se hace al investigar, de «a qué porcentaje estaba la CPU» a «en el instante en que el audio se cortó, qué estaba esperando el siguiente tramo de sonido». A partir de aquí viene la parte de investigación, para acotar un síntoma real.

5. Investigación: averigüe primero qué combinación se corta

Un chasquido que haya oído no acredita por sí solo el underrun descrito hasta aquí. El propio material de origen, el procesamiento de la aplicación, los efectos de audio, el dispositivo de salida y otros problemas producen síntomas parecidos. El material de resolución de problemas de Microsoft también incluye las mejoras de audio, el formato y los controladores entre las cosas que comprobar.7

No cambie ajustes en bloque al principio. Reproduzca la misma fuente breve durante aproximadamente el mismo tiempo y compare las diferencias una a una. Hágalo fuera de una reunión o una grabación en curso, después de guardar su trabajo, y a un volumen que no maltrate los oídos.

Condición que comparar Qué le indica
Una fuente guardada localmente frente a reproducción por Internet Si ocurre solo con la reproducción por Internet
La misma fuente reproducida en otra aplicación Si se concentra en una aplicación
Salida por Bluetooth y similares frente a salida integrada o por cable Si se concentra en una ruta de salida
Mejoras de audio activadas frente a desactivadas Si la combinación con ese procesamiento de efectos cambia algo
En una DAW o similar, el búfer actual frente a uno mayor Si añadir margen guardado por adelantado cambia algo

En ese orden, la queja de una línea «el audio se corta» puede concretarse lo bastante como para decir «se corta solo en esta aplicación, cuando se usa esta salida». Deshacer cada cambio y volver a probar también facilita distinguir si el síntoma simplemente no se dio por casualidad.

Comparación que cambia una condición y luego la deshaceConfirmar la reproducción con la misma fuente, cambiar una condición como la aplicación o la salida y registrar también el resultado tras deshacerla.Reproducir con la combinación originalCambiar una condición y reproducirDeshacer y reproducirRegistrar condiciones y horas de los cortes

Figura 6: Más que una mejora puntual, confirme que la condición y el síntoma coinciden de forma repetida.

Tenga en cuenta que cambiar la salida cambia también el controlador, los búferes y más. «Por cable no se corta» es una pista para investigar la ruta de salida, pero por sí sola no acredita el enlace inalámbrico como causa. Del mismo modo, una mejora al usar un búfer mayor es una pista de que más margen de tiempo ayudó; no prueba un defecto de un controlador concreto.

Para comparar las mejoras de audio, seleccione en Windows la salida en cuestión en Configuración > Sistema > Sonido y, donde esté disponible, desactive las mejoras de audio y vuelva a probar. Anote el ajuste original y restáurelo si no cambia nada. Obtenga los controladores de Windows Update o de la distribución oficial del fabricante del dispositivo, y registre las versiones antes y después del cambio.7

6. Investigación: grabe el instante del corte y amplíelo

Cuando comparar condiciones no acota nada, o cuando sospecha de un procesamiento del lado del controlador, grabe lo que ocurre en un intervalo breve. Windows Performance Recorder (WPR) realiza la grabación, y Windows Performance Analyzer (WPA) es la herramienta para examinar en detalle la línea de tiempo grabada.8

Inicie la grabación antes de reproducir el problema

En una máquina donde esté instalado el Windows Performance Toolkit, abra More Options en la ventana de WPR. Entre los perfiles integrados están Audio glitches y CPU usage. Partiendo del primero, elija una grabación que permita examinar las discontinuidades de audio junto con la actividad de la CPU. Compruebe los perfiles disponibles y sus nombres en la versión que haya instalado.9

Inicie la grabación y reproduzca después audio en las condiciones halladas antes. Anote las horas de los cortes y lo que estaba haciendo y, tras reproducir el síntoma, termine la grabación con Save para escribir el archivo ETL. Cancel no lo guarda. Incluir un poco de un tramo limpio le da una referencia de comparación. Si se le pide detener una grabación existente, cancele el inicio y consúltelo con la persona responsable, para no interrumpir otra investigación.10

Hacer una grabación breve que incluya el corteIniciar una grabación en WPR, reproducir el síntoma y anotar la hora, después detener y guardar la grabación y examinarla en WPA.Iniciar la grabación en WPRReproducir el corte en las mismas condicionesAnotar la hora y las acciones, después guardarAmpliar el intervalo circundante en WPA

Figura 7: Conserve el intervalo en que se produjo el síntoma, no el uso de CPU una vez pasado.

Un archivo ETL puede contener nombres de procesos, rutas de archivo y demás, así que siga las normas de su organización y compártalo solo con quienes lo necesiten. La grabación puede requerir privilegios o herramientas adicionales; en un PC de empresa, consulte a un administrador. Como la carga de la propia grabación puede alterar el síntoma, anote si había una grabación en curso. Prefiera una grabación breve ajustada a su objetivo antes que una larga con todos los proveedores activados. En una grabación que informe de eventos perdidos, no dé por sanos los intervalos que no puede ver.10

Qué ocurrió al mismo tiempo, en vez de una clasificación de cifras grandes

En WPA, amplíe la zona alrededor del corte usando los eventos de audio capturados y las horas anotadas. En ese mismo intervalo de tiempo, examine DPC/ISR y CPU Usage (Precise), que muestra la ejecución y las esperas de los subprocesos. Si faltan esos datos, compruebe si el perfil captura los eventos que necesita y vuelva a grabar. Una ausencia de registros no equivale a una ausencia de problema.49

El punto de partida es ver si el subproceso relacionado con el audio estaba listo para ejecutarse pero esperaba su turno, o no podía ejecutarse porque esperaba datos o algo parecido. En el primer caso, busque DPC, ISR y similares que se prolongaran en esa CPU. En el segundo, rastree qué liberó la espera, con los registros y las pilas disponibles. Como un subproceso en ejecución también puede ser interrumpido, no se limite al tiempo Ready; superponga los intervalos en que se ejecutaron DPC e ISR.4

Examinar cómo se esperó durante el intervalo del cortePara el subproceso de audio en el intervalo considerado, separar la espera en estado listo de la espera sobre datos o similares y contrastar los registros correspondientes.El mismo intervalo alrededor del corteListo para ejecutarse pero esperando turnoEsperando datos o similaresContrastar el trabajo en la misma CPURastrear qué liberó la espera

Figura 8: No entresaque solo los valores máximos; léalos superpuestos al intervalo en que el procesamiento de audio era necesario.

Aunque encuentre un DPC o una ISR largos, no mire el nombre del módulo y decida al instante «este controlador es el culpable». Puede estar viendo un valor grande de otro momento, o un componente compartido por el que pasan varios dispositivos. Combine la correspondencia temporal con el corte, las CPU implicadas y los resultados de cambiar condiciones, y pida al fabricante del dispositivo que lo investigue si hace falta.

Tampoco se puede trazar una línea universal del tipo «un DPC por debajo de tantos microsegundos nunca causa un corte en ningún PC». Los umbrales de advertencia de la documentación están condicionados por esa evaluación. No los use como prueba de aprobado o suspenso desligada del plazo real de reposición y del margen del búfer.5

7. Para desarrolladores: no lleve esperas largas al código que entrega el audio

Cuando es usted quien construye una aplicación de audio, el punto de partida es el mismo. El código que rellena el siguiente búfer tiene que cumplir todos los plazos.

WASAPI ofrece una forma de recibir, como evento, el momento en que se puede procesar un búfer. MMCSS, por su parte, facilita asignar tiempo de CPU a los subprocesos que hacen trabajo multimedia con restricciones de tiempo. Ninguno de los dos es, sin embargo, una magia que elimine las esperas. MMCSS tampoco le preparará por adelantado los datos de audio desde el disco.111

El diseño adecuado consiste en separar el código que lee de archivos o de la red del código que entrega el audio. Realice por adelantado el trabajo cuyo comportamiento temporal es difícil de predecir, y use para la entrega un búfer reservado de antemano. Del lado del audio, dispóngalo de modo que no haga falta esperar una respuesta de la interfaz, un bloqueo largo, una escritura síncrona de registro o similares. Es una pauta de diseño para desacoplar las esperas de datos del plazo.

Separar la preparación difícil de predecir del suministro de audioUn diseño que realiza por adelantado las lecturas y trabajos análogos y pasa los datos preparados al procesamiento de audio a través de un búfer, reduciendo las esperas largas justo antes del plazo.Preparar datos en trabajo hecho por adelantadoZona de entrega reservada de antemanoEntregar al procesamiento de audio lo que necesitaAlimentar el destino de salida de audio

Figura 9: La cuestión no es eliminar el trabajo lento, sino sacarlo del instante previo a la entrega del audio.

Incluso con esa separación, la reserva se agota si el lado de la preparación se atasca mucho tiempo. Más allá del tiempo medio de procesamiento, registre las ocasiones en que el procesamiento o una espera se prolongaron y el número de fallos de suministro, de un modo que no perturbe el procesamiento de audio. Compruebe a través de la API o del controlador el tamaño de búfer y el periodo realmente elegidos, y no dé por hecho que «el valor que indiqué se adoptó tal cual».32

Evite recomendar a los usuarios que pongan todo el reproductor en prioridad de tiempo real. Corre el riesgo de estorbar otros trabajos importantes, y elevar la prioridad de un subproceso corriente no resuelve los DPC, las ISR ni las esperas de datos.124

8. Resumen: un uso bajo de CPU no es prueba de que se cumpliera el plazo del audio

Hay tres ejes para pensar los cortes: guardar audio de reserva, reponerlo antes de que se agote, y una reposición tardía significa un hueco. Incluso con un uso bajo de CPU, una espera en el momento que importa puede retrasar la reposición.

Empiece comparando aplicaciones y salidas con la misma fuente y, si eso sigue sin explicar nada, grabe el intervalo del corte. Pasar de «por qué, si la CPU tiene margen» a «qué estaba esperando en ese instante» pone a la vista lo siguiente que examinar.

Artículos relacionados

Enlaces de referencia

  1. Microsoft Learn, Exclusive-Mode Streams. El momento del suministro del búfer y los fallos de audio, el equilibrio frente a la latencia y el suministro dirigido por eventos. No es una recomendación general del modo exclusivo en sí.  2 3 4

  2. Microsoft Learn, Low Latency Audio. La ruta de audio de Windows, los búferes, los dispositivos, el procesamiento de efectos y la latencia, y las contrapartidas de la baja latencia.  2 3 4

  3. Microsoft Learn, Rendering a Stream. El suministro del búfer de representación, la cantidad restante, el tamaño real del búfer y la definición de fotograma PCM.  2 3

  4. Microsoft Learn, CPU Analysis. Las CPU lógicas, los estados Ready y Waiting de los subprocesos, la relación entre DPC, ISR y ejecución de subprocesos, y el análisis de CPU en WPA.  2 3 4 5 6

  5. Microsoft Learn, Results for the Streaming Media Performance Assessment. DPC e ISR largos y frecuentes, un suministro de datos insuficiente y fallos de audio. Los umbrales de advertencia de la evaluación no se generalizan como criterio de seguridad para cualquier dispositivo.  2 3

  6. Microsoft Learn, Introduction to DPCs. El mecanismo para mantener breve la atención de interrupciones y aplazar el resto del trabajo a un DPC. 

  7. Microsoft Support, Fix distorted or crackling audio in Windows. La comprobación de las mejoras de audio, el formato, los controladores y más.  2

  8. Microsoft Learn, Windows Performance Recorder. La grabación ETW y el análisis con WPA, y el uso del Windows Performance Toolkit. 

  9. Microsoft Learn, Built-in Recording Profiles. More Options en WPR y perfiles integrados como Audio glitches y CPU usage.  2

  10. Microsoft Learn, WPR How-to Topics. Iniciar una grabación y conservarla con Save, los conflictos con una sesión existente y las precauciones sobre información personal y eventos perdidos.  2

  11. Microsoft Learn, Multimedia Class Scheduler Service. La asignación de recursos de CPU al procesamiento multimedia con restricciones de tiempo. 

  12. Microsoft Learn, Scheduling Priorities. Las prioridades de proceso y subproceso, y las precauciones sobre la prioridad de tiempo real. 

Artículos recientes con las mismas etiquetas para profundizar en temas cercanos.

Estas páginas sitúan el tema en un contexto más amplio de servicios y decisiones.

El artículo está directamente relacionado con los siguientes servicios.

Preguntas frecuentes

Preguntas habituales en las consultas sobre el tema del artículo.

¿Por qué se corta el audio cuando el uso de la CPU ronda solo el 10 %?
El audio tiene un plazo: los datos siguientes deben reponerse antes de que se agoten los que se están reproduciendo. Aun con un uso global de CPU bajo, la reposición puede incumplir ese plazo si el procesamiento de audio no pudo ejecutarse en ese instante o estaba esperando los datos que necesitaba. No todos los cortes tienen esta causa, así que hacen falta también comparaciones que cambien el dispositivo de salida y la aplicación.
¿Agrandar el búfer de audio soluciona los cortes?
Cuando la reposición se retrasa de forma puntual, un búfer mayor puede absorberlo. Pero también crece la espera antes de que se reproduzca el audio acumulado. No es un ajuste que resuelva una carencia sostenida de capacidad de procesamiento ni un dispositivo que se desconecta. En las aplicaciones y controladores donde se puede cambiar, anote el valor original y compare un paso cada vez.
A 48 kHz, ¿cuántos milisegundos de audio son 480 fotogramas?
Son 480 dividido entre 48000 segundos, es decir, 10 milisegundos. Un fotograma PCM es la unidad que agrupa las muestras de todos los canales en el mismo instante. Ese valor es la duración de audio que representa ese número de fotogramas, no la latencia total que incluye el dispositivo y la aplicación.
¿Es culpable de un corte un controlador con tiempos de ejecución de DPC o ISR largos?
Es un candidato, pero una clasificación basada solo en el tiempo de ejecución no lo resuelve. Contraste el intervalo en que se produjo el corte con las esperas del subproceso de audio y con la ejecución de DPC/ISR en la misma CPU. No concluya a partir de un nombre de módulo que un dispositivo o controlador concreto es defectuoso, y compruebe también los resultados de cambiar las condiciones de reproducción.
¿Mejora algo poner el reproductor en prioridad de tiempo real?
No como recomendación general. Elevar la prioridad de un subproceso corriente no permite adelantar a los DPC e ISR corrientes de la misma CPU, y no elimina las esperas sobre datos o bloqueos. Quien desarrolla debería usar mecanismos como MMCSS junto con un diseño que no introduzca esperas en la ruta de audio, mientras que los usuarios deberían comparar primero las condiciones de reproducción y las rutas de salida.

Perfil del autor

Página de presentación del autor del artículo.

Go Komura

Representante de KomuraSoft LLC

Especializado en desarrollo de software para Windows, consultoría técnica e investigación de fallos, sobre todo en proyectos con sistemas existentes y errores difíciles de reproducir.

Volver al blog