Cómo estirar las señales digitales de alta frecuencia (por ejemplo, MIDI) en el rango de audio

1

Tengo curiosidad por la posibilidad de sonificar datos MIDI, que tiene una tasa de bits de 31250. El rango de audición humana se extiende a aproximadamente 20 kHz, lo que significa que los bits más rápidos de la señal se ubicarán cerca de la parte superior de este rango: No es ideal para mis propósitos. Imagino alargar la señal y luego pasar el resultado a un pequeño altavoz.

No estoy seguro de que exista un término más preciso para esta operación que "estiramiento" (no estoy muy familiarizado con el procesamiento de señales digitales). En cualquier caso, puedo proporcionar un ejemplo concreto de lo que quiero decir:

00101110100001 > > estirar por 2 > > 0000110011111100110000000011

No es improbable, el sonido resultante parecerá más bien tonal / ruidoso, y eso está bien para mí. Me imagino que podría realizar esta tarea con Arduino, pero me pregunto si esto podría hacerse con un diseño de circuito inteligente. Por ejemplo, ¿algo similar al uso de un 4018 contador por división de N? Reconozco que el 4018 no es exactamente lo que estoy buscando, ya que actúa en una señal de reloj estrictamente periódica.

¿Alguna idea?

    
pregunta jptacek

3 respuestas

3

Dado que los datos MIDI parecen ser una serie de bytes de datos de 8 bits enviados por un UART estándar, puede usar un microcontrolador para recibir los datos a la velocidad MIDI estándar y volver a transmitirlos a una velocidad de transmisión inferior. Esto supone que hay suficientes huecos en los datos que no sobrepasará el búfer de recepción.

Esto probablemente requeriría un microcontrolador con dos UART, ya que los UART que he usado no permiten diferentes velocidades de transmisión y recepción.

    
respondido por el Peter Bennett
1

Básicamente, usted desea hacer audible un flujo de bits aleatorio de alta frecuencia (solo algunos datos binarios). Si se reproduce literalmente como bits, sin procesamiento adicional, suena como un ruido "blanco" aleatorio.

Para reducir la velocidad, ya sea:

  1. extienda su duración, por ejemplo, 1 segundo de bits a 31,250b / s último, digamos 3 segundos, o
  2. tirar algunos de los datos de distancia. Decir 2 de cada 3 bits lo conseguirá en un rango audible

Para una manera simple, pero interesante, para deshacerte de los bits, puedes utilizar una técnica utilizada en algunos "dispositivos de escucha de murciélagos". Utilizan un registro de desplazamiento, inicializado con un solo '1' y el resto es '0'.

La salida de los registros de desplazamiento se realimenta a la entrada, y la salida controlará el audio. El reloj para el registro de desplazamiento es la señal. Por lo tanto, una secuencia de '1' en la señal se combinará en 1/2 reloj, y una secuencia de '0' se combinará en 1/2 reloj.

Por lo que tiende a preservar los cambios. Al elegir cuidadosamente la longitud del registro de desplazamiento, puede dividir por una cantidad adecuada.

Para extender la duración, de modo que todos los bits se reproduzcan finalmente, se requerirá memoria. Esto podría deberse a que los datos MIDI se pueden leer y volver a leer, por ejemplo. desde un dispositivo de almacenamiento.

De lo contrario, la 'línea de demora' necesita suficiente almacenamiento para almacenar los datos. Cinco minutos a 31250b / s (casi 4kB / s) = 1,144kB, es decir, más de 1MB.

Sería sencillo hacer algo así con cualquier dispositivo con suficiente RAM, como un R-Pi o un BeagleBone negro. Se podría hacer utilizando una MCU, como un Arduino, con la adición de algún almacenamiento externo. No use la memoria Flash para el almacenamiento a menos que solo planee usar esto rara vez, o el almacenamiento externo es mucho más grande que una "pista", porque la memoria Flash se desgastará con el tiempo.

    
respondido por el gbulmer
0

¿Qué tal algo así como un flip-flop 4027 JK configurado para alternar su salida (J & K elevado)? Esto haría efectivo reducir la frecuencia máxima posible a la mitad. El resultado usando tu ejemplo sería: 00101110100001 > > flip-flop > > 00110000111110 No es el mismo flujo de bits por cualquier tramo de la imaginación, pero sospecho que realmente no está buscando precisión aquí ...

    
respondido por el brhans

Lea otras preguntas en las etiquetas