Decodificación/codificación correcta de datos PCM sin procesar

Estoy escribiendo mi decodificador/codificador WAVE en C++. Logré convertir correctamente entre diferentes tamaños de muestra (8, 16 y 32), pero necesito ayuda con los canales y la frecuencia.

Canales:

Si quiero convertir de estéreo a mono:

  1. ¿Solo tomo los datos de un canal (¿cuál? ¿1 o 2?)?
  2. o tomo el promedio del canal 1 y 2 para el canal mono.

Si quiero convertir de mono a estéreo: (Sé que esto no es muy científico)

  1. ¿Puedo simplemente agregar las muestras de los canales individuales en ambos canales estéreo?
  2. ¿Hay un método más científico para hacer esto (por ejemplo, interpolación)?

Frecuencia de muestreo:

¿Cómo cambio la frecuencia de muestreo (remuestreo), por ejemplo: de 44100 Hz a 22050 Hz?

  1. ¿simplemente tomo el promedio de 2 muestras secuenciales para el nuevo valor (frecuencia más baja)?
  2. ¿Más algoritmos científicos para esto?

preguntado el 04 de julio de 12 a las 09:07

La pregunta se adapta mejor a dsp.stackexchange.com -

Supongo que te refieres a 44100 Hz a 22050 Hz. -

Para futuras referencias, siempre puede pulsar el botón | edit | enlace de arriba y corregir errores tipográficos y otros errores en su pregunta -

1 Respuestas

  • Estéreo a mono: tome la media de las muestras izquierda y derecha, es decir M = (L + R) / 2 - esto funciona para la gran mayoría del contenido estéreo, pero tenga en cuenta que hay algunos casos raros en los que puede obtener la cancelación izquierda/derecha.

  • Mono a estéreo: coloque la muestra mono en los canales izquierdo y derecho, es decir, L = R = M - esto da una imagen de sonido que se centra cuando se reproduce en estéreo

  • Remuestreo: para una reducción simple de la relación de enteros como en el ejemplo anterior, el proceso es el siguiente:

    • filtro de paso bajo para adaptarse a la nueva frecuencia de Nyquist, por ejemplo, LPF de 10 kHz para una frecuencia de muestreo de 22.05 kHz
    • diezmar por la proporción requerida (es decir, soltar muestras alternativas para su ejemplo de reducción de resolución 2x)

Tenga en cuenta que hay bibliotecas de terceros como libsamplerate que puede manejar el remuestreo por usted en el caso general, por lo que si tiene más de una relación que necesita admitir, o si tiene alguna relación no entera complicada, entonces este podría ser un mejor enfoque

Respondido 04 Jul 12, 10:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.