Tengo curiosidad acerca de la posibilidad de sonificar datos MIDI, que tiene una tasa de bits de 31250. El rango de audición humana se extiende a unos 20 kHz, lo que significa que los bits más rápidos de la señal estarían cerca de la parte superior de este rango: no ideal para mis propósitos Imagino estirar la señal y luego pasar el resultado a un pequeño altavoz.
No estoy seguro de si existe 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á bastante atonal/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 parecido a usar un IC contador 4018 dividido por N? Reconozco que el 4018 no es exactamente lo que busco, ya que este actúa sobre una señal de reloj estrictamente periódica.
¿Algunas ideas?
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 retransmitirlos a una velocidad en baudios más baja. Esto supone que hay suficientes lagunas en los datos para que no sobrecargue 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.
Entonces, esencialmente, desea hacer audible un flujo de bits aleatorio de alta frecuencia (solo algunos datos binarios). Si se reproduce literalmente como bits, sin más procesamiento, sonará como un ruido "blanco" aleatorio.
Para reducir la velocidad, ya sea:
Para una manera simple, pero interesante, de tirar bits, podría usar una técnica utilizada en algunos 'dispositivos de escucha de murciélagos'. Usan un registro de desplazamiento, inicializado con un solo '1' y el resto son '0'.
La salida de los registros de desplazamiento se retroalimenta a la entrada, y la salida controlaría el audio. El reloj para el registro de desplazamiento es la señal. Entonces, una secuencia de '1' en la señal se fusionará en 1/2 reloj, y una secuencia de '0' se fusionará en 1/2 reloj.
Por lo tanto, tiende a conservar 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 finalmente se reproduzcan, se requerirá memoria. Eso 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 retraso' necesita suficiente almacenamiento para contener los datos. Cinco minutos a 31250b/s (casi 4kB/s) = 1144kB, es decir, más de 1 MB.
Sería sencillo hacer algo así con cualquier dispositivo con suficiente RAM, como un R-Pi o un BeagleBone negro. Podría hacerse usando una MCU, como un Arduino, con la adición de algo de almacenamiento externo. No use la memoria Flash para el almacenamiento a menos que planee usarla raramente, o el almacenamiento externo sea mucho más grande que una 'pista', porque la memoria Flash eventualmente se agotará.
¿Qué tal algo como un flip-flop 4027 JK configurado para alternar su salida (J & K en alto)? Esto reduciría efectivamente la frecuencia máxima posible a la mitad. El resultado usando su ejemplo sería: 00101110100001 >> flip-flop >> 00110000111110 No es el mismo flujo de bits por ningún tramo de la imaginación, pero sospecho que realmente no está buscando precisión aquí ...
gbulmer
jptacek
gbulmer
Cerveza inglesa
MarkU
Super gato