
La historia de cómo compré inesperadamente un sintetizador, lo reparé, descubrí cómo funciona y escribí un emulador.
Esta historia comenzó durante el festival
Chaos Constructions el pasado fin de semana de agosto de 2019. Al mirar Avito por la noche en busca de artefactos interesantes de una época pasada, me encontré con un sintetizador Formant P432 económico. Parecía bastante familiar para los sintetizadores digitales: en la parte inferior hay un teclado de 41 teclas (3.5 octavas), en la parte superior hay botones para seleccionar un tono, activar los efectos de coro y unísono, así como ajustar el efecto de vibrato. Un joystick está instalado a la izquierda del teclado, lo que le permite cambiar el tono hacia arriba y hacia abajo, así como conectar sin problemas el vibrato.
Lo más interesante para mí fue que este sintetizador era digital y generaba sonidos utilizando el método de tabla de ondas, es decir, al momento de presionar la tecla, generaba sonido basado en datos tabulares almacenados en chips ROM. Después de un rápido conocimiento de los circuitos en Internet, quedó claro que el control del sintetizador se basa en el conocido microprocesador KP580VM80 (i8080), y los sonidos se almacenan en 8 chips ROM con un volumen total de 8 * 2 = 16 Kb.
El sintetizador fue comprado y despacio de la ciudad del vendedor a la oficina local de la compañía de transporte, y continué estudiando los esquemas. El vendedor escribió en un anuncio que la herramienta tiene un defecto que se manifiesta en forma de sibilancias cuando presiona más de una tecla. Más interesante, pensé. "Será necesario encontrar y eliminar".
Pero el motivo principal para comprar fue el deseo de lidiar con el dispositivo interno y extraer muestras de sonidos de la ROM del sintetizador.
DESCARGO DE RESPONSABILIDAD : Los nombres de los componentes de los nodos y señales del sintetizador (distintos de los indicados en "comillas" y en GRANDES letras) fueron inventados por mí y pueden diferir de lo que pretendían los desarrolladores. La descripción del funcionamiento de los nodos se basa en mi conocimiento (limitado), materiales de Internet y el asesoramiento de personas con experiencia.
Reparación
Cuando P432 [
2 ] me llegó sano y salvo, lo primero que hice fue desarmarlo. En el interior no esperaba una vista muy agradable de los haces de cables y varias placas de circuito impreso.
Nodo de controlLa placa en la que se sueldan los botones y controles del panel frontal, así como una indicación de los modos de funcionamiento.
Nodo del procesadorContiene el microprocesador KR580VM80 y otros chips del kit 580, una ROM de 2 KB en RF2, dos chips RAM estáticos con una capacidad total de 256 bytes (K541RU2). Además, se instalan decodificadores en el tablero, que asignan partes del espacio de direcciones para la interacción con el teclado, con botones y registros de control, a la salida de los cuales se generan señales de control para el nodo generador.
Nodo de interfaz MIDISe instala sobre el nodo del procesador y consta de una ROM separada con rutinas de mensajería MIDI, lógica fina y dos microcircuitos grandes: el controlador de interrupción VN59 y la interfaz BB51 en serie. Para los contactos TX / RX VN51, se conecta un circuito de implementación de bucle de corriente midi estándar con aislamiento de optoacoplador.
Nudo de coroEn forma de una placa aislada con solo entrada analógica, salida y potencia. Se implementa en microcircuitos KA528BR2: líneas de retardo analógicas. La unidad es muy ruidosa, pero le da al sonido un color interesante.
Conjunto generadorEl módulo principal del sintetizador. Contiene 8 chips ROM de 2 KB cada uno, lógica digital (registros, sumadores), dos DAC, un filtro analógico con parámetros variables y estabilización térmica. El nodo también contiene un generador de reloj con el que se sincroniza el funcionamiento de los registros del nodo del procesador. La placa secundaria en este nodo tiene una placa VCO (generador de voltaje controlado), que es un refinamiento de fábrica de revisiones posteriores del sintetizador.
Conjunto rectificador y estabilizadorUna fuente de alimentación lineal que produce + 5V para potencia lógica y + 12 / -15V para amplificadores operacionales. + 5V es estabilizado por KR142EN5, cuyo radiador es la carcasa metálica del sintetizador, y + 12 / -15V son los estabilizadores paramétricos más simples en diodos y transistores zener. Un voltaje de suministro adicional de -5V para el KR580VM50 está formado por un diodo zener desde -15V directamente en la placa de la unidad del procesador. La tierra analógica y digital se separan por separado y se conectan solo en este bloque.
Teclado del instrumentoInterruptor de láminas, no sensible a la velocidad, como en otros sintetizadores de la fábrica de radio Kachkanar de Formant.

La eliminación del nodo MIDI en una placa separada con su ROM se debe a la presencia de otro sintetizador en la línea P432: el "Formant MINI", que no tiene una interfaz MIDI y el efecto HOR. El nodo del procesador MINI es ligeramente diferente en firmware y el nodo generador es el mismo que en P432.
Entonces, cuando encendí por primera vez, noté dos problemas: un nivel de señal muy débil en la salida lineal y el sonido ya mencionado al presionar más de una tecla a la vez. Cabe señalar que el P432 es un sintetizador polifónico, y puede reproducir simultáneamente 4 voces (frecuencias) de un timbre. Y con la inclusión del efecto UNISON, el número de voces sonoras simultáneas aumenta a 8, dos por cada tecla.
La razón del sonido silencioso se encontró casi de inmediato, la salida quemada OU K544UD1A fue la culpable.
Después de reemplazarlo, el instrumento comenzó a sonar fuerte incluso cuando los auriculares pasivos estaban conectados a la salida.
Pero con sonidos extraños, la situación era muy incomprensible, porque incluso cuando se presionaron teclas individuales, los sonidos de los tonos no eran como la demostración de P432 de YouTube.
Tardó bastante tiempo en encontrar el problema, pero al final se localizó en el nivel del DAC principal. El bit alto de la entrada digital no fue suficiente para reconocerlo como 1 lógico, por lo que la señal de salida analógica estaba distorsionada. El culpable de esta historia fue encontrado y eliminado, luego de lo cual se resolvió el problema. Todos los tonos comenzaron a sonar claros y sin problemas con unos pocos toques.
Habría un final para la historia, pero ya se había dedicado mucho tiempo a la reparación, así que decidí que no deberíamos detenernos allí y tenemos que resolverlo:
- como es el proceso de síntesis de sonido
- lo que está almacenado en la ROM de la unidad generadora
- cómo funciona el filtro y sus características
- donde se almacena la configuración para cada tono y parámetros de envolvente
El resultado de este trabajo fue la emulación de software de P432 utilizando datos de la ROM original.
Conjunto generador
La forma de onda en la salida del DAC principal de la unidad generadora está formada por el principio de síntesis digital directa (DDS) [
1 ]. La señal analógica recibida se pasa a través de un filtro de paso bajo, luego, si es necesario, se mezcla con la salida del conjunto del coro, se amplifica mediante un amplificador de salida y se alimenta a una salida lineal. El filtro en P432 se realiza de acuerdo con el esquema utilizado previamente en el sintetizador Polyvox [
3 ].
El diagrama muestra la unidad generadora y sus principales bloques funcionales. Las flechas naranjas indican entradas y salidas de señales digitales externas, señales digitales negras dentro del módulo, señales analógicas azules.
Primero, considere las entradas y salidas:
- Entrada "Frecuencia" (11 bits): para cada voz, incluido el unísono, los valores correspondientes a la tecla presionada o nota MIDI provienen del nodo del procesador.
- Entrada de amplificador (8 bits): el valor de envolvente para la amplitud de la señal.
- Entrada "Filtro" (8 bits): valores de la envolvente de la frecuencia de corte del filtro.
- Entrada de "control" - (8 bits) - 3 bits menos significativos son responsables de la selección de la forma de onda, 2 bits para el desplazamiento del filtro, 2 más para el nivel de calidad del filtro Q Q (resonancia) y el último bit determina si el efecto UNISON está activado o desactivado.
- Salida "Dirección" (3 bits): responsable de la sincronización con el nodo del procesador.
Ahora veamos cómo funcionan los bloques principales del nodo.
El circuito de sincronización con la ayuda de multivibradores, un contador y elementos lógicos genera pulsos de control para varios módulos de la unidad generadora y da el número de voz actual a la "Dirección" de salida. Cuando el modo UNISON "Dirección" está activo, toma los valores [0,1,2,3,4,5,6,7] y cuando está inactivo: [0,2,4,6]. La frecuencia del oscilador maestro se puede cambiar en pequeña medida con la perilla de ajuste en el panel frontal y el joystick a la izquierda del teclado.
Diagrama de tiempos de pulsos de reloj. Explicaciones: Unison - log. 0 nivel activo, FA0-2 - Salida "Dirección", DD8-12 - registro de acumulador de fase, DD33-35 - registro total de votos, DD36-37 - registro DAC.
La parte digital de la placa del generador para cada uno de los 4 (8) votos simultáneamente con un cambio en el valor de la "Dirección" de salida realiza las siguientes operaciones. Desde el nodo del procesador, la entrada "Frecuencia" recibe los valores de frecuencia de la señal. El decodificador de la ROM convierte el valor lineal de la frecuencia en incremento de fase. Los incrementos se suman en el acumulador de fase (20 bits), que consta de un sumador y 8 palabras de RAM. Los 9 bits más altos de la suma se alimentan a las entradas de dirección de la ROM de forma de onda. Los tres bits menos significativos de la entrada "Control" seleccionan un área ROM específica. 10 bits de la salida de la ROM se suman con el valor en la entrada del "Amplificador" y se alimentan a las entradas de la ROM de escala, que genera un código bipolar para el DAC. El resultado cae en el búfer de acumulación, construido en sumadores y registros, que suma secuencialmente los valores de código de los 4 (8) votos. Al final de cada ciclo, el código final es retenido por el registro de almacenamiento y llega al DAC de 12 bits. La frecuencia de emisión del código en el DAC es la frecuencia de muestreo de la señal y para P432 es de aproximadamente 33 kilohercios. Según Nyquist, la frecuencia de sonido máxima disponible para el generador P432 es de aproximadamente 16.5 kHz.
Si el timbre seleccionado requiere un cambio dinámico de los parámetros del filtro de paso bajo, los valores de envolvente se envían a la entrada del filtro, que, pasando por el DAC de 10 bits, forma el voltaje de control para el filtro del amplificador operacional. El filtro de paso bajo está hecho de acuerdo con el filtro sin condensador del filtro de estado variable e incluye un circuito de estabilización de temperatura, un bloque para cambiar el factor Q de Q y la polarización inicial.
Este gráfico de tiempos muestra dos períodos de discretización de la placa del generador. UNISON está apagado. La entrada de frecuencia (Freq_in) sincrónicamente con el cambio de dirección recibe los números de frecuencia de cuatro teclas diferentes. Pero solo se presionan los dos últimos (Volume_in = 0xFF). Al mismo tiempo, se emite un valor constante (Filter_in = 0x60) a la entrada "Filtro". El código final se ingresa al DAC (DAC) después de encajar en los registros de almacenamiento (DD36-37).Para UNISON incluidotodo se ve igual, solo la entrada "Frecuencia" recibe un par de números: para la voz principal y al unísono.
Nota: solo se muestra un período.

Una descripción más detallada del conjunto generador.
A continuación se detallan los diagramas esquemáticos y eléctricos para aquellos que desean comprender el dispositivo sintetizador con más detalle. Los circuitos se encontraron en Internet, aunque se adjuntaron a mi sintetizador un manual de instrucciones [
4 ] y un conjunto completo de circuitos en papel [
5 ]. Las buenas personas compartieron el archivo con el contenido de todas las ROM en un foro, pero resultó que hubo un error en uno de los archivos, así que tuve que cancelar la suscripción de ROM individuales y compararlas con el firmware del archivo.
Cabe señalar que durante la producción de P432, el fabricante emitió varias revisiones de las placas sintetizadoras para mejorar las características técnicas, que pueden diferir de los primeros esquemas de revisión presentados a continuación.

- La ROM de conversión de incremento de frecuencia - DD1-2, ejecutada en dos 573RF2, contiene una tabla de correspondencia del valor de frecuencia lineal con el incremento de fase exponencial. Gráficamente, su contenido se ve así

Sincrónicamente con un cambio en el valor en la "Dirección" de salida, el nodo del procesador emite un valor de frecuencia de 11 bits de la voz correspondiente a la "Frecuencia" de entrada, que se convierte en incrementos de 16 bits.
Si consideramos el contenido de las primeras 16 palabras de DD1-2, entonces se escriben algunos números extraños que parecen no usarse en la síntesis del sonido: - Acumulador de fase: consta de sumadores DD3-7 (561IM1) y registros DD8-12 (561IR11). Los sumadores se incluyen en la cadena con una capacidad total de 20 bits. El bloque de registro le permite almacenar ocho valores de fase de señal de 20 bytes. Las entradas de dirección de los registros de lectura / escritura están conectadas a la "Dirección" del bus. Esta inclusión le permite recibir el valor anterior en la salida del pulso del reloj y guardar el valor actual de la entrada. Esto asegura la acumulación de fase por separado para cada sintetizador de voz. Los 9 bits altos de la salida del registro se alimentan a las entradas de dirección de la forma de onda ROM.
- Forma de onda ROM - DD13-14, DD18-19 (5732) contiene tablas de ocho formas de onda que pueden ser sintetizadas por un conjunto generador. Los bits S0-S2 de la señal "Control" seleccionan un área de memoria específica y un par de ROM. Bajo la descripción de cada señal, se asignan 512 palabras con una capacidad de 11 bits. El 10 bit más significativo tiene un propósito de utilidad, indicando la polaridad de la señal: 1 positivo, 0 negativo. La apariencia de las formas de onda se da teniendo en cuenta la inversión de los valores negativos:
- Sumador de envolvente: se reciben 8 bits de envolvente (desplazados a la izquierda 2 bits) en la entrada del amplificador, que se suman en los elementos DD23-25 (561IM1) con los 10 bits de orden más bajo de la salida ROM de la forma de onda. El sobre tiene 4 fases: Ataque, Decaimiento, Sostenido, Liberación, que son formadas por la unidad del procesador por separado para cada una de las 4 voces principales, dependiendo del momento en que se presiona / suelta la tecla.
Un ejemplo de un sobre para el tono 00: un ataque rápido a 255 es claramente visible, luego una disminución para soportar el nivel 239, luego una disminución suave en el nivel, que termina con una fuerte atenuación a 0 cuando sueltas la tecla. En el eje horizontal está el tiempo en segundos, en el eje vertical está el valor de la entrada "Amplificador".
Los valores en la ROM del sintetizador se seleccionan de tal manera que a 0 en la entrada del "Amplificador", la salida del DAC también tendrá un nivel de señal cero, a pesar de que todos los circuitos intermedios cambian constantemente los valores de las variables y generan diferentes señales. - La ROM de escalado, que consta de DD27-28 (5732), contiene curvas para obtener el código de la señal bipolar de acuerdo con el valor del bit de orden superior de la forma de onda. En forma gráfica, el contenido de la ROM se ve así.

Si el décimo bit es 1, se utiliza el valor de la salida DD28 + 256, y si es 0, entonces DD27 + 1. - El acumulador de votos en DD30-32 (561IM1) y registra DD33-DD35 (5619) mezcla los valores de los códigos de todos los votos antes de emitirlos al DAC. Después de procesar el código de la última voz, el valor recibido se transfiere al registro de almacenamiento y el registro del sumador se restablece a cero.
Ejemplo: como se mencionó anteriormente, si "Amplificador" = 0, y el valor de amplitud máximo posible en la salida de la ROM de forma de onda (1 << 10) -1 = 1023, entonces en la salida de la ROM de escala obtenemos 0 + 256 o 255+ 1 dependiendo de 10 bits de la forma de onda, lo que da un total de 256 * 8 = 2048 y corresponde a 0 en la salida del DAC. - El registro de almacenamiento en los elementos DD36-37 (555TM9) recibe y almacena el valor del código en la salida durante el intervalo de muestreo. La frecuencia de muestreo del nodo generador es aproximadamente igual a 33000 Hz.
- DA38 DAC (534PA1): convierte un valor de 12 bits en una señal bipolar analógica, el código 2048 corresponde al analógico 0.
- Filtro de paso bajo: construido de acuerdo con el esquema desarrollado por Vladimir Kuzmin para el sintetizador Polivox, sin embargo, se ha agregado a P432 un nodo para la estabilización térmica de la corriente de control del filtro OA. Además, se toma del mismo Polivox, donde se utilizó para estabilizar la frecuencia de los generadores. En el sitio del autor puede encontrar instrucciones sobre cómo configurar este nodo [ 6 ].
Ya se ha escrito mucho sobre el filtro en sí, por lo que podemos prescindir de los detalles.
El control del filtro se basa en un DAC de 10 bits (572PA1), cuya entrada se alimenta con una señal de "Filtro" de 8 bits, que es la envolvente del filtro, y, según el timbre, puede ser un valor constante y generalmente igual a cero. Los parámetros del filtro también se ven afectados por el valor de 4 bits de la señal de "Control": F0-F1 establece el desplazamiento del voltaje de salida del DAC, y Q0-Q1 son responsables del factor de calidad (nivel de resonancia) del filtro. - Después del filtro, se instala un interruptor que le permite habilitar la mezcla con la señal principal de su copia procesada por el efecto HOP. En las primeras modificaciones del P432, se usaba el mismo interruptor para apagar la salida de sonido cuando no se presionaba ninguna tecla. Pero en revisiones posteriores esto fue rechazado, comenzaron a cortar caminos, lanzar cables y agregar nuevos elementos al circuito.
- Amplificador: eleva el nivel de la señal de salida a 250 mV.
Configuración de CPU y nodo
Entonces, descubrimos los generadores. Ahora queda por comprender de dónde provienen todas las señales de control y dónde se almacenan los parámetros que las describen.
Al principio, planeé eliminar los volcados de todas las señales de control mediante un analizador lógico y crear un algoritmo para describirlas. Por ejemplo, las envolventes del amplificador y el filtro pueden describirse mediante una función lineal por partes, que requiere un número limitado de parámetros.
Con la entrada "Frecuencia", también fue suficiente para registrar los valores de frecuencia de una sola tecla para cada timbre y calcular todos los demás en función de ella.
Según el manual de instrucciones, el P432 tiene un teclado de 41 teclas con un volumen de 3 y 5/12 octavas con un rango de C1-E4 en notación científica o C1-e1 en notación de Helmholtz. Sin embargo, en la práctica (para el tono 00), basado en la correspondencia A4 = 440 Hz, resultó que la tecla A en la segunda octava izquierda produce un sonido de esta frecuencia, y esto ya da el rango C3-E6. Como resultó más tarde, dependiendo del tono activo, el rango de frecuencias reproducidas puede variar, cambiando en 1 o 2 octavas.
«» .
, , DD16 . , 5732 2048 .

1024 32 , 32 . , . .
, : «», «», «» , «».
, . , , - .
*_dt , , 00: A_min=0, A_dt=48 A_max=255. , 0 48, 255. D_dt A_max S_lvl, S_ft>0, S_ft 1, . R_dt : R_dt 0. dt 1, *_dt<=1 *_dt .
*_ft , , . , ~ 100 ~ 3 .
int(256 / *_ft) * 100 , .. *_ft 100 .
, . *_ft/*_dt.

«» , .
«». , 4 (), , , 1-2 .
: FREQ_1, FREQ_2 FREQ_u1, FREQ_u2 . A 432.
freq_offset = {4:0xd0, 5:0x90, 6:0x50} freq = (config['FREQ_1'] << 8) + freq_offset[config['FREQ_1']] + config['FREQ_2']
Un ejemplo para el tono 00, donde: FREQ_1 = 6, FREQ_2 = 8, obtenemos: 6 * 0x100 + 0x50 + 8 = 0x658, que es consistente con los datos del analizador lógico para todos los tonos. Para unísono, el cálculo es similar.
Vale la pena señalar que para el tono 00, el valor 0x658 corresponde a una frecuencia de 440 Hz o nota A4.
Se estableció experimentalmente que el intervalo de "Frecuencia" para las teclas adyacentes (incluidas las negras) es de 16 (0x10) unidades. Por lo tanto, si conocemos el valor de la tecla 22 a la izquierda (A de la segunda octava) - 0x658, entonces podemos obtener fácilmente el valor para el extremo izquierdo (No. 1): 0x508 y el extremo derecho (No. 41): 0x788.
Basado en esto, puede calcular el rango del teclado y las frecuencias reproducidas para diferentes tonos. La columna "Frecuencia" será correcta solo para formas de onda simples.
Lo anterior es más que suficiente para crear el emulador P432, así que pasemos a él.
Crear emulación P432 en Python
Pensé que sería bueno separar el almacenamiento de configuración y la generación de sonido, por lo que se crearon dos clases principales:
- P432data, responsable de cargar valores de imágenes ROM y llevar la configuración de tonos a una forma conveniente para su uso;
- P432, que contiene métodos para crear formas envolventes y generar muestras digitales.
No me detendré en los datos P432 en detalle, el código fuente se puede ver en github.
Pero los métodos de P432 se consideran con más detalle.
El principal, por supuesto, es
gen_samples con un parámetro que indica el número de muestras que debe devolver. En este método, el procesamiento de señales desde la recepción del valor en la entrada "Frecuencia" hasta la salida al DAC se recrea lo más cerca posible del prototipo. En principio, centrándose en el esquema P432, puede encontrar rápidamente los equivalentes de Python de los módulos del conjunto generador. Lo único que tuvo que agregarse explícitamente fue la reducción de las variables a la dimensión dada: 20 bits para el acumulador de fase, 11 bits para el sumador de sobres y 12 bits para el sumador de votos. Esta restricción es necesaria para que la lógica de desbordamiento de estas variables funcione normalmente.
Los métodos para crear envolventes del amplificador
getADS y el
formulario getFADS filtran listas con valores de la amplitud de envolvente, de los cuales gen_samples toma valores al momento de presionar las teclas. Tienen un par de métodos
getR y
getFR en su empresa que forman la fase de atenuación de sobres. Toman el parámetro de nivel como entrada: el valor actual del nivel de envolvente, a partir del cual disminuirá a 0.
Las cuatro voces principales tienen la misma forma de envolvente que el Amplificador y el Filtro, pero si el Sobre tiene su propia envolvente para cada voz y comienza cuando se presiona una tecla, entonces para el filtro es común para todas las voces, comienza desde la primera pulsación, se reinicia después de la siguiente y dura hasta la última. soltando
Mira arribaDe acuerdo con el manual de instrucciones, P432 emite números de nota MIDI del 36 al 77 (en realidad 76) para las teclas del teclado del 1 al 41, respectivamente. Para no reinventar la rueda, decidí usar el rango 36-76 en el emulador como los números de la tecla presionada, por lo que necesitaba el método midi2freq, que convierte el número de tecla al valor de "Frecuencia", teniendo en cuenta el tono seleccionado.
El último par de métodos fueron
key_press (midi_note) y
key_release (midi_note), que formaron un diccionario de correspondencia de la voz con la frecuencia del tono fundamental, la fase y la posición actual de la envolvente.
El último método principal es
setprog (prog, clean = True), diseñado para seleccionar el tono activo.
Setprog carga la configuración del tono deseado y, si no se borra el indicador de limpieza, borra las variables internas. Si clean se establece en False, las variables internas no se restablecen, lo que le permite cambiar entre tonos durante la generación de sonido prácticamente sin clics u otros sonidos desagradables.
Para escribir las muestras generadas en el archivo WAV, se creó el método de utilidad write_wav basado en el módulo wave. Para cada muestra, el escalado se realiza para aumentar la amplitud y llevarlo a una forma firmada de 16 bits.
Estos métodos son suficientes para obtener un archivo wav con la grabación de unos segundos de cualquiera de los sonidos del sintetizador.
La forma de onda del timbre 00 es una sinusoide, por lo que en la salida obtenemos una sinusoide con una envolvente superpuesta.
Para escuchar
Un poco más interesante será la grabación del tono 14 con el unísono y el filtro activados.
Para escuchar
GUI
Un generador de sonido de consola es bueno, pero también quiero tocar en el teclado. Así que decidí hacer una GUI simple en Tkinter.
La interfaz fue influenciada por el P432 real con la adición de una leyenda del teclado, un botón de selección de entrada MIDI y la capacidad de apagar el filtro.
El botón "Midi In" aparecerá si tiene instalado el módulo "python-rtmidi". Después de presionarlo y seleccionar el dispositivo de entrada Midi, el programa activa una función de devolución de llamada que captura los eventos de Note-On, Note-Off y Program Change en los 16 canales midi. A través del cambio de programa, puede cambiar el número del tono del emulador activo.
Para interceptar las pulsaciones del teclado, use el
método Tkinter
bind ('<KeyPress') ,
bind ('<KeyRelease') , y luego en la función de devolución de llamada, el número de tecla se verifica con la lista permitida, se convierte en una nota midi y se
llama a los métodos
p432.key_press () ,
p432.key_release () . La intercepción se activa cuando se inicia el programa y se desactiva al final.
Para emitir sonido de transmisión, el módulo pyaudio se usa en modo sin bloqueo. Después de renderizar la interfaz, comienza en un subproceso de subprocesamiento separado y tkinter continúa funcionando principalmente. En la función de devolución de llamada, pyaudio pasa el número de muestras que se generarán y, a cambio, recibe muestras de gen_samples y un indicador de estado. Para reducir la latencia entre el evento de nota activada (presionando una tecla) y la aparición del sonido, se selecciona un búfer bastante pequeño: 200 muestras. Se establece mediante el parámetro frames_per_buffer del método open pyaudio.
La versión compilada de Pyinstall de P432_emulator para Windows se puede descargar de las
versiones .
Conclusión
En este artículo, los detalles del funcionamiento del filtro analógico en el nodo generador (y su implementación digital en el emulador), el nodo procesador, el efecto HOP y la interfaz MIDI casi no se revelan. Se hizo hincapié en el diseño de la parte digital de la unidad generadora, el método de almacenamiento de los parámetros de los timbres y su uso al crear el emulador.
Si el tema es de interés, planificaré un segundo artículo con un análisis del resto.
Además, si le parece que hay errores o imprecisiones en la descripción del funcionamiento de los nodos P432, escriba los comentarios.
El código fuente del proyecto, el firmware ROM, los diagramas y el manual de operación están disponibles en
github .
Referencias
- Ridiko L. DDS: Síntesis de frecuencia digital directa.
- Museo de Sintetizadores Soviéticos, Formante P432. www.ruskeys.net/base/form432.php
- Wikipedia Polyvox
- Instrumento de teclado electromusical "Formant P432". Manual de operación .
- Diagramas esquemáticos eléctricos del "Formante P432".
- Ajuste de la estabilidad de temperatura de Polyvox.