none
¿Cómo puedo recuperar las amplitudes de un array de bytes leídas por la entrada de línea? RRS feed

  • Pregunta

  • 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! 

    miércoles, 22 de diciembre de 2010 13:07

Todas las respuestas

  • Saludo Toay, Verificate este ejemplo del metodo ToInt32() de la clase BitConverter del espacio de nombre System

    Convert.ToSByte (Método)

    Convert.ToSByte (Método) (Byte)

    Convert.ToSByte (Método) (Int32)


    Si la informacion te fue de Utilidad marcala como util

    Angel R. Jimenez G.
    Software Development
    Santo Domingo Republica Dominicana

    • Editado Angel Jimenez sábado, 25 de diciembre de 2010 17:49 Modificar
    sábado, 25 de diciembre de 2010 17:30
  • Muchas gracia por tu respuesta Angel y felíz navidad y próspero año a todos!

    ¿El método BitConverter no reclama un array mínimo de datos?, es decir, si le introduzco un array de 2 bytes me dice datos insuficientes. Si le adjunto más componentes de valor 0 al array, me da resultados del orden: 1,256478954758 e+324 y creo que hablando de miliVoltios esos valores quedan un poco por encima, XD,  por lo que deduzco que no es la conversión que esperaba.

    Probé introduciendo estos valores "0" antes y depues por si realizaba la conversión leyendo de izquierda a derecha o viceversa. Además estuve leyendo la ayuda de bitconverter  y su funcionamiento, para el método (ToInt32), siempre cogía grupos de 4 bytes. O en el caso de (ToDouble) de 8 bytes.

    Quizá no he sabido emplear el método correctamente.

    No obstante, por el momento he reducido la calidad de lectura del buffer de audio leyendo cada canal en 8 bits ya que su conversión es directa si aplico a los datos capturados el siguiente algoritmo:

    Valor_deseado=(datos.readbyte-128)*(0.4/128)

    0,4: amplitud máxima de la señal

    128: numero de valores posibles que adquirirá la señal de salida en un semiperiodo una vez realizado el algoritmo PCM. (de 0 a 127)

    Si teneis alguna información sobre cómo ampliar la definición de la captura a 16 bits os lo agradezco.

    Gracias otra vez Angel!

    lunes, 27 de diciembre de 2010 9:51