Sonido controlado por interrupciones IRQ

Invisible
Mensajes: 9
Registrado: 16 Ene 2017 16:35
Agradecimiento recibido: 4 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor Invisible » 16 Ene 2017 19:02

Último mensaje de la página anterior:

jltursan escribió:Welcome Simon!

Simon himself has developed 1-bit (PWM based) routines, doesnt fit the needs?, or are they too slow?.
Using this technique open the door to use Windows tools like Beepola :-)


1bit routines are far too slow here.... i did use beepola for the 1bit

with this player you can actually use 2 voices and use a PC based XM tracker.... (i have conversion routines)

i posted PSER a new (MUCH FASTER) routine for IRQ this afternoon.... hopefully he will be able to explain how it works in spanish (not my strong point)

/Simon :-)

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Sonido controlado por interrupciones IRQ

Mensajepor luiscoco » 16 Ene 2017 19:47

Yo recuerdo que también se pueden hacer 4 voces, aunque sonaba muy, extraño y monótono.
Hola Pser1 revise el fuente y por supuesto no lo entiendo todo, Necesitaría mas datos, a ver si puedes ayudarme,
Los Paterns son los datos a poner en el DAC (6 bits) y contendrían una forma de onda no? aunque los veo muy cambiantes.
Cuantos valores de estos puedes enviar al dac durante cada interrupción?
Las notas son ondas sinusoidales? o hay formas de onda complejas, instrumentos?

La idea es colocar en RAM la melodía a tocar a la vez que se juega, activar, digamos la duración y en el próximo INT se comenzaría a ejecutar parte de la música o efectos de sonido, (recuerda que puede haber efectos en medio de la música)

@Minter ciertamente es imposible usar las rutinas del basic, aunque @pser1, tal vez puedas usar algunas tablas de datos numéricos o formas de onda del PLAY

Avatar de Usuario
minter
Mensajes: 1427
Registrado: 22 Jul 2014 18:51
Agradecido : 655 veces
Agradecimiento recibido: 317 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor minter » 16 Ene 2017 20:26

luiscoco escribió:@Minter ciertamente es imposible usar las rutinas del basic, aunque @pser1, tal vez puedas usar algunas tablas de datos numéricos o formas de onda del PLAY

pser1 escribió:@minter,
me guardaré tu mensaje, pero la información de como utilizar el intérprete de Basic para producir sonidos
*NO* nos va a ayudar para nada ya que lo que necesitamos es un sistema gobernado por interrupciones


Bueno, efectivamente, no estaba en mente de nadie emplear el BASIC. A quedado bien claro que es un acaparador de CPU.
Simplemente intentaba pensar en alto para conocer como se comporta el Dragón con el sonido.
O bien desde el Basic, como elemento educativo. Y luego desde el programa ensamblador.
El pensar en alto, o escribir, al menos me permite compartir mis lagunas o equivocaciones. -nb

Ahora, un poco mas descansado, y en casa( y no en el curro, con una ventana oculta debajo de un excel... -507 ) Me doy cuenta de lo que había comentado no tenía mucho sentido.
Afortunadamente, Pere tiene una gran capacidad didáctica, y no escatima medios en ir explicando todos los pasos para los que somos analfabestias del 6809 -507

Volví a cometer el mismo fallo que con un SID. -banghead Efectivamente, un DAC tienes que darle los diferentes valores a lo largo del tiempo, para formar la onda.
Ha quedado estupendo explicado en tu post anterior, pser1! -thumbup
Ahora, que lo entienda, es otro percal!!! -grin

Invisible
Mensajes: 9
Registrado: 16 Ene 2017 16:35
Agradecimiento recibido: 4 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor Invisible » 16 Ene 2017 20:31

@luiscoco...

there is NO waveform shaping at all... the way it works, it provides a SAWTOOTH wave....

if you want to apply shaping, you can, but for every instruction you add, the slower it gets

/Simon :-)

Avatar de Usuario
pser1
Mensajes: 2015
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 184 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor pser1 » 17 Ene 2017 00:46

luiscoco escribió:Yo recuerdo que también se pueden hacer 4 voces, aunque sonaba muy, extraño y monótono.
Hola Pser1 revise el fuente y por supuesto no lo entiendo todo, Necesitaría mas datos, a ver si puedes ayudarme,
Los Paterns son los datos a poner en el DAC (6 bits) y contendrían una forma de onda no? aunque los veo muy cambiantes.
Cuantos valores de estos puedes enviar al dac durante cada interrupción?
Las notas son ondas sinusoidales? o hay formas de onda complejas, instrumentos?
La idea es colocar en RAM la melodía a tocar a la vez que se juega, activar, digamos la duración y en el próximo INT se
comenzaría a ejecutar parte de la música o efectos de sonido, (recuerda que puede haber efectos en medio de la música)

Hola Luis,
voy a ir por partes ...
- Hay programas que usan el 100% de la CPU y permiten usar cuatro y hasta cinco voces, por ejemplo Orchestra-90 y no suenan nada mal.
- Para una sola voz con envolventes y otros efectos, busca el programa Synther7, te gustará (100% de CPU)
- Las dudas que te surjan, expónlas aquí mismo así puede que se enganche mas gente!
Lo que en el fuente, Simon llama "Patterns" para mi son compases de una partitura que contiene pares de notas, una para cada canal de sonido
El DAC es un simple convertidor digital -> analógico, por lo tanto convierte el valor que pones en los 6 bits mas altos de $ff20
en un nivel de voltaje que se aplica a la salida de audio. Este nivel debe variar o no oirás nada de nada, la señal sonora es alterna
por lo que debe fluctuar entre un valor máximo y otro mínimo un número de veces por segundo, lo cual determina su frecuencia.
-La forma de onda generada por el programa que se limita a sumar una cantidad al valor anterior hasta desbordar y empezar de cero
nuevamente es una onda de rampa ascendente.
- En cada interrupción de linea (HS) se envía un valor por cada canal (sumados)
Tengo preparada una versión que permite entrar una canción empleando (casi) notación musical estándar:
C_3, Fs3 produce el Do de la octava 3 y el Fa sostenido (F#) de la misma octava, ya lo veréis cuando lo suba
De momento se queda en desarrollo pues he estado hablando con Simon y me ha pasado varias ideas que se
podrían aplicar para ir integrando el player a cualquier juego-programa que disponga de un bucle principal
como es el caso de Tiburón.
Sigue el hilo y ya iremos comentando cosas. Lo importante es conseguir algo que *NO* se coma demasiada CPU
y pueda estar sonando mientras el Jefe Brody se está moviendo ...
Jo, menudo ladrillo te he soltado, lo siento -507
saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Sonido controlado por interrupciones IRQ

Mensajepor luiscoco » 17 Ene 2017 01:37

Si,Si, lo se, lo del hardware coco me lo se, pensé que en una interrupción se podrían poner algunos valores ya veo que solo uno.
En música si ando mas fallo, y en entender el programa de Simon.

Ok estamos en que en cada interrupción se ponen apenas algún valor y se retorna, entonces hipotéticamente se puede tomar la info de un WAV con los datos reducidos en memoria notas y cualquier instrumento incluso voz, eso ya lo sabemos. por supuesto este no es el caso, tendríamos que tener un sample de cada instrumento no digo que mezclemos (que se podría ) sino como hacen los trakers, y solo 2 voces

Por cierto ya hablas visto el Traker coco.

Entonces si tenemos un sample digamos de 1K, según la nota, lo hacemos sonar mas o menos rápido y de ahí la frecuencia.

Se que no vamos por ahí, sino que las notas son predefinidas Diente de sierra, van subiendo y bajan abrupta mente, aunque se puede hacer de todo.

Te cuento que en mis tiempos mozos hice un reconocedor de voz para la coco, y pintaba la forma de onda en pantalla, la comprimía y la comparaba con fonemas, no se que se hizo. Así que no debe ser difícil hacer esto.

No se si voy por donde tu vas. pero seguiremos.


Expliquemos a la gente que lee esto y de paso trato de entender el programa

La forma de onda es SANTOOW wave como dice Simon, (Forma de onda diente de sierra).
No se como poner menor tamaño a las fotos (claro sin editarlas).

Imagen
Imagen
Desde Wikipedia: https://en.wikipedia.org/wiki/Sawtooth_wave


Falta MAS

gacaffe
Mensajes: 45
Registrado: 08 Dic 2015 18:32
Agradecido : 6 veces
Agradecimiento recibido: 6 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor gacaffe » 17 Ene 2017 17:36

Hola a todos,

Os resumo un par de cosas que hablé con SImon hace unos días.
1. Utilizar la IRQ con HS reduce la capacidad de la CPU aproximadamente al 50% (el uso de la pila utiliza 15+18=33 ciclos de reloj)
2. Con el D64 no se pueden usar las IRQs para generar música porque está durante 50 líneas sin generar interrupciones
3. Si no queremos que la música interaccione con el juego, no es necesario utilizar IRQs, ya que se pueden programar retardos directamente en el ASM. Simon tiene una demo que no usa IRQs.

Yo ahora estoy de retiro espiritual (es decir, tengo curro hasta morir). A mi vuelta me pongo con lo siguiente:
- DRAGON + ZX-UNO (Ron, va por ti)
- Pruebas para conseguir gráficos y música continua con D32 con la ayuda de Simon.

Un saludo

Gabriel

gacaffe
Mensajes: 45
Registrado: 08 Dic 2015 18:32
Agradecido : 6 veces
Agradecimiento recibido: 6 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor gacaffe » 17 Ene 2017 17:39

Invisible escribió:RIGHT...

Im Simon Jonassen

and ask me anything about IRQ sound or other mad stuff on the Dragon / CoCo

Hi Simon,

Good to see you around. As I told you, Ill be back in business in a few days.

Regards,

Gabriel

gacaffe
Mensajes: 45
Registrado: 08 Dic 2015 18:32
Agradecido : 6 veces
Agradecimiento recibido: 6 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor gacaffe » 17 Ene 2017 19:05

pser1 escribió:Buenas,
abro el hilo como comenté para no mezclar temas.

@gabriel
ya me dirás si te va bien comentar y/o hacer experimentos utilizando
este hilo o prefieres usar facebook ...

saludos
pere


Pere,

Genial el hilo. Como he comentado, estoy ahora a tope. Conociéndote, para cuando haga alguna prueba el player va a estar más que funcionando -rofl
Si necesitáis compositor... https://www.youtube.com/watch?v=Br9bRLdzAPk ;)

Un saludo,

Gabriel

gacaffe
Mensajes: 45
Registrado: 08 Dic 2015 18:32
Agradecido : 6 veces
Agradecimiento recibido: 6 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor gacaffe » 17 Ene 2017 19:18

Hola,
Tengo un par de comentarios respecto al volumen:
1. Si hay varios canales, la suma no debe superar el máximo permitido con 6 bits (63). El overflow produce un efecto muy feo en señales de audio, ya que la señal de audio debería subir, y en lugar de hacer esto da un salto muy brusco hacia abajo creando chasquidos. Si se detecta overflow y se satura el valor a 63, no hay chasquidos pero se produce un efecto de distorsión (y además hay que añadir instrucciones para saturar el dato). La solución para 2 canales es que la amplitud de las ondas no supere el valor 31.
2. Sería interesante que además de la frecuencias, se pudiese definir el volumen de cada canal. Para no complicar las cosas, digamos que se podían definir 4 rangos de la onda triangular: [0 7], [8 15], [16 23] y [24 31]. Con esto, no sólo se puede distinguir la melodía del acompañamiento, sino que se pueden hacer efectos tipo eco e incluso vibrato (aunque con 4 niveles, el vibrato sería muy tosco).

Bueno, ahí queda eso, que se supone que no tengo tiempo :)

Un saludo,

Gabriel

Avatar de Usuario
pser1
Mensajes: 2015
Registrado: 08 Dic 2012 18:34
Agradecido : 198 veces
Agradecimiento recibido: 184 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor pser1 » 17 Ene 2017 20:33

gacaffe escribió:Hola,
Tengo un par de comentarios respecto al volumen:
1. Si hay varios canales, la suma no debe superar el máximo permitido con 6 bits (63). El overflow produce un efecto muy feo en señales de audio, ya que la señal de audio debería subir, y en lugar de hacer esto da un salto muy brusco hacia abajo creando chasquidos. Si se detecta overflow y se satura el valor a 63, no hay chasquidos pero se produce un efecto de distorsión (y además hay que añadir instrucciones para saturar el dato). La solución para 2 canales es que la amplitud de las ondas no supere el valor 31.
2. Sería interesante que además de la frecuencias, se pudiese definir el volumen de cada canal. Para no complicar las cosas, digamos que se podían definir 4 rangos de la onda triangular: [0 7], [8 15], [16 23] y [24 31]. Con esto, no sólo se puede distinguir la melodía del acompañamiento, sino que se pueden hacer efectos tipo eco e incluso vibrato (aunque con 4 niveles, el vibrato sería muy tosco).
Bueno, ahí queda eso, que se supone que no tengo tiempo :)
Un saludo,
Gabriel

Hola Gabriel,
Es imposible que superes el valor máximo para el DAC, el valor lo has de poner en $ff20 y el DAC utiliza los bits 2-3-4-5-6-7
pasando de los dos bits bajos 0-1 que se usan para otras cosas. Como un byte solo pude contener valores de 0-255 pues
el DAC veria valores desde 4 hasta 252 (hay que olvidarse de los 2 mas bajos)
Espero que puedas probar en algún momento el fuente que te pasó Simon o el que subiré yo mañana (o pasado mañana),
que es distinto (más eficiente) aplicando los trucos que me ha estado comentando él hoy mismo
Así verás que el player ha de ser muy corto (sobre 58 ciclos) para mezclar dos canales y enviarlos al DAC
Esto no da tiempo ni para estornudar ... como para soñar con aplicar efectos
En un player independiente, usando el 100% de CPU se pueden hacer muchas cosas, pero el player para un juego
es (debe ser) muy espartano!
Seguimos en contacto
saludos
pere

gacaffe
Mensajes: 45
Registrado: 08 Dic 2015 18:32
Agradecido : 6 veces
Agradecimiento recibido: 6 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor gacaffe » 17 Ene 2017 20:45

Pere,

Me refiero a que si sumas los canales y el resultado supera el valor máximo del DAC (63<<2=252) se genera un número fuera de rango y luego al pasarlo a 6 bits el número es erróneo. Por ejemplo, si un canal está a 61 y el otro a 3, la suma da 65. Al pasarlo a 6 bits se convierte en 1. Un número muy alto se convierte en un número muy bajo y esto puede producir el chasquido que comento.

Lo de complicar un poco más el player, ya me imaginaba que no iba a ser posible :(

Ya miraré el código cuando lo pongas. Al final Simon sólo me pasó el código sin IRQ.

Un saludo,

Gabriel

Avatar de Usuario
Silicebit
Mensajes: 1332
Registrado: 16 May 2011 21:13
Ubicación: La buhardilla del silicio.
Agradecido : 32 veces
Agradecimiento recibido: 83 veces
Contactar:

Re: Sonido controlado por interrupciones IRQ

Mensajepor Silicebit » 17 Ene 2017 21:03

Para un DAC os desaconsejo usar las IRQs, para chips como el SID o el AY-3-8910 puede valer, ya que los osciladores internos de dichos chips realizan todo el trabajo de creación de la onda, la CPU sólo se dedica a cambiar la frecuencia (nota), de dichos osciladores. Sin embargo en un DAC, es la CPU la que debe crear la onda entera, y eso implica la transferencia de mucho datos por segundo.

Eso no quiere decir que no se puedan hacer más cosas mientras se está reproduciendo una musiquilla. Fijaos en este vídeo de un CoCo3, mientras está reproduciendo la canción, está representando un osciloscopio y varias barras de nivel.

https://www.youtube.com/watch?v=49uB068i3ZU

¿Oís el error o ruido de cuantificación? ;-)
El 6809 es el Rolls-Royce de los 8bits, el 6502 es el Mercedes, y el Z80 el SEAT 850. Sorry, but... I think different. :-P -0r1c -m3s3x -t4nd1 -cbmja YouTube

Avatar de Usuario
Silicebit
Mensajes: 1332
Registrado: 16 May 2011 21:13
Ubicación: La buhardilla del silicio.
Agradecido : 32 veces
Agradecimiento recibido: 83 veces
Contactar:

Re: Sonido controlado por interrupciones IRQ

Mensajepor Silicebit » 17 Ene 2017 21:18

Vale, ya he visto la putada, que la frecuencia de trabajo del 6809 en el Dragon 32 no llega al megahercio, pero si un 6510 que tampoco llega al megahercio es capaz de hacer esto (ojo, es sonido digitalizado)... ¿Por qué no un 6809?

https://www.youtube.com/watch?v=ZMioAPZcays
El 6809 es el Rolls-Royce de los 8bits, el 6502 es el Mercedes, y el Z80 el SEAT 850. Sorry, but... I think different. :-P -0r1c -m3s3x -t4nd1 -cbmja YouTube

Avatar de Usuario
minter
Mensajes: 1427
Registrado: 22 Jul 2014 18:51
Agradecido : 655 veces
Agradecimiento recibido: 317 veces

Re: Sonido controlado por interrupciones IRQ

Mensajepor minter » 17 Ene 2017 22:50

Silicebit escribió:Vale, ya he visto la putada, que la frecuencia de trabajo del 6809 en el Dragon 32 no llega al megahercio, pero si un 6510 que tampoco llega al megahercio es capaz de hacer esto (ojo, es sonido digitalizado)... ¿Por qué no un 6809?


Te acaba de pasar lo mismo que a mí anteriormente. Mezclé conceptos y micros. Desde que leo RW, tengo la cabeza como un laberinto. -banghead
En el SID únicamente hay que decirle la frecuencia, la forma de onda, el volumen y otras cosas... y ya tienes un sonido o una nota. Así, de golpe, sin anestesia ni nada.
El mismo genera las ondas, como un sintetizador.

En el Dragón, para generar la onda, al ser un DAC, tienes que "hacerla o dibujarla" dando diferentes niveles de tensión al DAC (bueno, diciendo que tensión tiene que sacar)

En el SID para sacar una onda de 1 khz, solo tienes que darle el valor de 1Khz, forma de onda (triangular, por ejemplo), etc etc...
En el DAC (Dragon), por ejemplo, una triangular, tienes que darle 0, luego 10, luego 20...30....40...50...40... 30...20...0... Y otra vez para arriba, y todo eso respetando que se repita para que sea a 1kHz. Es decir, hacer esos cambios cada 0,001 segundos por forma de onda y multiplicarlo por el muestreo que quieres realizar de la forma de onda.

Al commodore, a su 6010, con enviar unos pocos parámetros al SID, ya tienes generado un sonido.
Al Dragón tienes que dar continuamente instrucciones al DAC de la PIA 1 para que saque un sonido.

Y la suerte es que en el commodore está todo muy mascado. En Dragón es un autentico desafío. -nb

Pdt: por cierto, con el muestreo que pongo de ejemplo, no sería posible mediante la utilización de scanlines a esa frecuencia. Es solo un ejemplo. Como comenta Pere, tenemos unas limitaciones de muestreo y frecuencia.
Nichols, Nyquist y Black son colegas de la pandilla del parque. -507

Avatar de Usuario
Silicebit
Mensajes: 1332
Registrado: 16 May 2011 21:13
Ubicación: La buhardilla del silicio.
Agradecido : 32 veces
Agradecimiento recibido: 83 veces
Contactar:

Re: Sonido controlado por interrupciones IRQ

Mensajepor Silicebit » 18 Ene 2017 11:08

minter escribió:En el SID únicamente hay que decirle la frecuencia, la forma de onda, el volumen y otras cosas... y ya tienes un sonido o una nota. Así, de golpe, sin anestesia ni nada.
El mismo genera las ondas, como un sintetizador.


Ya, pero en el segundo ejemplo que he puesto, al SID no lo hacen funcionar de manera normal, si no como un DAC, por eso he puesto lo de "(ojo, es sonido digitalizado)". ;-) En la demo comentan que lo han hecho de tal manera que aún disponen de ciclos de procesador para hacer alguna que otra virguería en pantalla. ¡¡Y eso es un 6510 a menos de un megahercio!! -shock
El 6809 es el Rolls-Royce de los 8bits, el 6502 es el Mercedes, y el Z80 el SEAT 850. Sorry, but... I think different. :-P -0r1c -m3s3x -t4nd1 -cbmja YouTube

Avatar de Usuario
luiscoco
Mensajes: 2328
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 30 veces
Agradecimiento recibido: 44 veces
Contactar:

Re: Sonido controlado por interrupciones IRQ

Mensajepor luiscoco » 18 Ene 2017 13:34

Interesante, usar un SID como DAC, no sabia que se podía, claro que pierde mucho, yo compre la C64 mas que nada por el SID.

Entonces para nuestro tema, si las interrupciones no están perfectamente espaciadas, y muy cortas entre ellas, o hay rutinas o zonas sin interrupciones se notara en la música.

gacaffe escribió:2. Con el D64 no se pueden usar las IRQs para generar música porque está durante 50 líneas sin generar interrupciones

Una cosa que no entendí es porque la 64k no genera interrupciones?

Con respecto a los limites de DAC, Si como dice @peser1 fisicamente es imposible pasarse, solo hay que prevenir los bits bajos, creo recordar que ponen a imprimir si esta conectada y encendida una impresora.
Pero el se refiere en el ambito musical de como se oye, si baja de golpe se oye chasquido, y si se mantiene a tope se nota distorsión, por eso recomienda bajarlos a 32, yo no estoy de acuerdo, perdería mucho volumen, la suma de los dos canales es en realidad un promedio no una suma lineal.

Otra cosa que no entendí es porque usan esa forma de onda y no senosoidal?, se oye mejor?, no se mucho del tema?.
También se puede usar cualquiera, una forma de guitarra, pianola, sinte, y otras, la musica sonaria como de ese instrumento, claro cortillas, no muy largas, o sea samples cortos.


Volver a “Software Dragon”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado