• Domingo 17 de Noviembre de 2024, 22:54

Autor Tema:  ¿Cómo recuperar las amplitudes de un array de bytes PCM?  (Leído 1470 veces)

Toay

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
¿Cómo recuperar las amplitudes de un array de bytes PCM?
« en: Miércoles 22 de Diciembre de 2010, 16:59 »
0
Muy buenas,

Mi intención es realizar una captura en tiempo continuo del buffer de audio, empleando VB 2008 Express y DirectSound. Esto lo he logrado, pero como el wave format tag es PCM no sé cómo leer las amplitudes de los dos canales que me entran desde la entrada de línea.

Los datos del buffer son

"datos" que és un MemoryStream de 44100 valores (Esto me da un array de bytes sin signo y me interesarían que fueran con signo por la codificación PCM)

frecuencia de muestreo 44100

16 bits per sample

2 canales.

El rango de amplitudes que se leerán coincidirá con el rango dinámico de la entrada de línea de unos 400mV.

Muchas gracias!

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re: ¿Cómo recuperar las amplitudes de un array de bytes PCM?
« Respuesta #1 en: Jueves 23 de Diciembre de 2010, 15:40 »
0
seria bueno que publiques la solución de tu problema... claro.. cuando  cuando la encuentres..  jejeje..  te ayudaría pero la verdad no sé sobre el tema.. y suena muy interesante, jamaz me eh tomado tiempo para eso.. saludos y mucha suerte! :)
@gabio87

Toay

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: ¿Cómo recuperar las amplitudes de un array de bytes PCM?
« Respuesta #2 en: Viernes 24 de Diciembre de 2010, 15:36 »
0
Al final he tenido que bajarme del burro y conformarme con que mi osciloscopio por tarjeta de audio únicamente dispusiera de 8 bits por canal.

De este modo, empleando un formato de lectura de 8 bits por sample, lo que en realidad realiza el buffer de audio es leer un sample por canal, y no 2 simultáneos para cada canal, repartidos en 4 y 4 bits, como yo esperaba. De esta forma dedica íntegramente 8 bits a una única muestra de un único canal.

Sabiendo que la codificación pcm dispone de signo, únicamente restando a "datos"  el entero 128 obtenemos el signo de los datos.

Si, además, multiplicamos este valor por el cociente formado por la amplitud máxima que alcanzará la señal de entrada entre el número total de valores que tendrá la señal codificada entre 0 y su amplitud máxima, tenemos:

              valor de amplitud= (valor del byte leído-128)*((amplitud máxima de la señal de entrada-en nuestro caso 400mV)/128)

Igualmente si alguien es capaz de decirme como se decodifican lecturas de 16 bits pcm quedaré muy agradecido.

Muchas gracias por la contestación y los ánimos gabio.

Felices fiestas a todos!