Música multicanal

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Re: Música multicanal

Notapor zx81 el Jue Ene 08, 2009 11:10 am

Lo que más difuso tengo respecto del Spectrum es, precisamente, relacionado con el sonido y los emuladores. No sé bien como emulan en sonido a partir de un solo bit de salida y generan con ello los valores apropiados para el sample que espera una tarjeta de sonido.

Si alguien lo sabe y me (nos) da una explicación, lo agradeceré enormemente.
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator
zx81
Freddy Hardest
 
Mensajes: 602
Registrado: Vie Dic 28, 2007 3:14 pm
Ubicación: Valencia

Re: Música multicanal

Notapor na_th_an el Jue Ene 08, 2009 11:20 am

El tema de la síntesis es complicado. No sé cómo lo harán en concreto los diferentes emuladores, pero se me ocurren un par de métodos. El más sencillo es remuestrear en tiempo real usando un buen filtrado.

Por ejemplo, tu tienes que el CPU emulado va generando la forma de onda. Dependiendo de la velocidad del sistema emulado, esta onda tendrá una frecuencia de muestreo determinada. Esta forma de onda es de 1 bit.

Lo que se hace es, al vuelo, remuestrear (de la misma forma que lo hace cualquier programa de edición de audio cuando remuestreas una onda, por ejemplo, si cargas un MP3 a 44100Hz en 16 bits y lo pasas a 11025Hz y 8 bits) de 1 bit sin signo a 16 bits con signo (multiplicando y restando para obtener el signo, símplemente) y de la frecuencia de muestreo generada a la configurada como salida (44100 Hz por ejemplo). Para explicarte el método me tengo que meter en matemáticas, la transformada de fourier, y un par de cosas más bastante aburridas :D
Avatar de Usuario
na_th_an
Nonamed
 
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Música multicanal

Notapor Metalbrain el Jue Ene 08, 2009 11:41 am

zx81 escribió:Lo que más difuso tengo respecto del Spectrum es, precisamente, relacionado con el sonido y los emuladores. No sé bien como emulan en sonido a partir de un solo bit de salida y generan con ello los valores apropiados para el sample que espera una tarjeta de sonido.

Si alguien lo sabe y me (nos) da una explicación, lo agradeceré enormemente.


¿Habeis visto el video de Gominolas? Aunque no se me ve, yo fui el que di la explicación de como es posible obtener valores intermedios aparte de los dos valores que se consiguen con un bit de resolución: la onda que se genera no es perfectamente cuadrada, ya que existe un cierto retardo al pasar del estado alto al bajo y viceversa, así que si vamos cambiando rápidamente entre el 1 y el 0, nos mantendremos en un valor intermedio sin llegar nunca del todo al 0 o al 1. Así, y controlando muy bien la temporización, manteniendo uno de los valores más tiempo que el otro cuando sea necesario irse hacia arriba o hacia abajo, podremos hacer lo que nos de la gana, obteniendo unos niveles de señal mucho más variados que si la onda de sonido fuese perfecta (aquí el retraso, que en principio es una desventaja, se transforma en una ventaja).

¿Como se puede emular esto del retraso? Pues la verdad es que no lo se exactamente, pero supongo que se podría mirar en el código de Fuse. Me parece que la técnica que comenta na_th_an es la que se usaba en los emuladores más antigüos, en los cuales hay cosas que suenan bien, pero las más complicadas que usan dos canales suenan petardeantes. En Fuse, el "Hi-Fi beeper" se añadió tan solo hace un año, en la versión 0.9.0 . En las instrucciones menciona que se mejora el sonido "by reducing aliasing noise", yo se lo que es el aliasing en las imágenes, así que solo puedo imaginar que en el sonido viene a ser lo mismo (los dientes de sierra que quedan muy cantosos), pero aplicado a la onda de sonido, osea, que como se emula el retardo y la onda ya no sale cuadrada, no se ve con dientes de sierra sino más suave. Pero lo mismo la estoy cagando, quien sabe. :mrgreen:
SevenuP se escribe con u minúscula y P mayúscula.
Avatar de Usuario
Metalbrain
Freddy Hardest
 
Mensajes: 588
Registrado: Lun May 07, 2007 8:17 am
Ubicación: Sevilla

Re: Música multicanal

Notapor na_th_an el Jue Ene 08, 2009 1:02 pm

Sip, el aliasing noise es justo eso que dices, los "dientes perfectos". Estos dientes producen ruido por el llamado fenómeno de Gibbs, ya que al descomponer la onda en una serie de fourier se da una ondulación creciente en el entorno cercano a los puntos de discontinuidad. Eso, al oído, suena a "ruido".
Avatar de Usuario
na_th_an
Nonamed
 
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Música multicanal

Notapor compiuter el Vie Ene 09, 2009 11:26 am

Este chico, nathan, parece sacado de la universidad de Ojayo. :D
P.P.Ojayo supiera tanto como tú.
Avatar de Usuario
compiuter
Sabreman
 
Mensajes: 337
Registrado: Vie May 18, 2007 9:00 pm
Ubicación: Palma de Mallorca

Re: Música multicanal

Notapor na_th_an el Sab Ene 10, 2009 1:13 am

Es la unión de dos hechos:

1.- Me encanta la música, escucharla, estudiarla, y hacerla.
2.- He ido suspendiendo sistemáticamente las asignaturas de cálculo infinitesimal toooodos los años. El año pasado terminé la carrera aprobando, precísamente, Cálculo Infinitesimal, una asignatura de 2º de Ingeniería Informática de la que me matriculé por primera vez en 1998 :lol: Todos estos tiestos los tengo muy recientes.

Además, mi proyecto de fin de Carrera, elaborado en 2004 junto con Phobeous, era precísamente un programa para diseñar de forma gráfica circuitos de procesado de sonido (con generadores de onda, tocadores de WAVs, DACs, ADCs, filtros, y hasta un simulador -que no emulador- de procesadores tipo DSP (no recuerdo cuales, no lo logro, algo de ADSP 100 o algo asín, son muy comunes pero no macuerdo) que contaban con dos entradas y dos salidas en plan streaming que había que programar en lenguaje de ensamblador y con los que se podía implementar de todo, por ejemplo filtros o efectos de modulación y envolventes), por lo que manejo bastante de estos tiestámenes :)
Avatar de Usuario
na_th_an
Nonamed
 
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Música multicanal

Notapor winston el Sab Ene 10, 2009 9:30 pm

Aquí están dos fotos que muestran cómo el Spectrum puede hacer una onda analógica.

Por primero, la onda que hace por BEEP, que tiene una amplitud que es aproximadamente 2.5V (BEEP 10,5). Aunque la onda fue de BEEP, no es precisamente una onda cuadrada:

Imagen

Aquí tenemos la onda por una rutina de PDM yo escribí en assembler. La frecuencia es similar, pero la amplitud es mas pequeña que la primera - aproximadamente 0.5V de amplitud:

Imagen

Por cierto la onda no es de una calidad buena ¡es muy ruidosa!
Tarjeta ethernet para el Spectrum - http://spectrum.alioth.net/doc

Debemos practicar un quirkafleeg
Avatar de Usuario
winston
Sabreman
 
Mensajes: 469
Registrado: Mar Ago 19, 2008 4:17 pm
Ubicación: Isla de Man

Re: Música multicanal

Notapor winston el Dom Ene 11, 2009 2:01 pm

Y aquí está el codigo fuente para la demostración:

Código: Seleccionar todo
   org 0x8000
        di
   ld c, 254   ; port
.loop
   ld hl, wave
.makewave
   ld a, (hl)   ; get delay value
   and a      ; zero?
   jp z, .loop
   ld b, a      ; delay count
   xor a      ; output zero
   out (c), a   ; out
.delay1   djnz .delay1   ; zero level delay
   inc hl
   ld b, (hl)
   cpl
   out (c), a   ; out
.delay2   djnz .delay2   ; and delay
   inc hl      ; next byte
   jp .makewave

wave
   DEFB 1,20,1,18,1,15,1,10,1,5,1,1,1,5,1,10,1,15,1,18,1,0


El DEFB contiene la forma de onda. Si cambiamos el DEFB:

Código: Seleccionar todo
   DEFB 1,20,1,18,2,15,3,10,4,5,5,1,4,5,3,10,2,15,1,18,1,18,1,18,1,6,6,6,6,6,6,6,6,1,10,1,20,1,10,1,5,1,1,0


...podemos crear la forma de onda como en este foto:

Imagen

con el sonido de una aspiradora :-)

Por fin, este DEFB hace una onda senoidal:

Código: Seleccionar todo
wave
   DEFB 1,20,1,20,1,20,2,19,3,18,5,15,10,10
   DEFB 15,5,18,3,19,2,20,1,20,1,20,1
   DEFB 19,2,18,3,15,5,10,10
   DEFB 5,15,3,18,2,19,0


Imagen
Tarjeta ethernet para el Spectrum - http://spectrum.alioth.net/doc

Debemos practicar un quirkafleeg
Avatar de Usuario
winston
Sabreman
 
Mensajes: 469
Registrado: Mar Ago 19, 2008 4:17 pm
Ubicación: Isla de Man

Re: Música multicanal

Notapor Rinconete el Dom Ene 11, 2009 5:51 pm

muy intersante Winston. Una pregunta, en qué punto colocas la sonda del osciloscopio ¿?
Avatar de Usuario
Rinconete
Jack The Nipper
 
Mensajes: 193
Registrado: Mar Oct 09, 2007 7:32 pm
Ubicación: Valladolid

Re: Música multicanal

Notapor winston el Lun Ene 12, 2009 5:49 pm

Para esta prueba, yo estaba usando la salida de sonido del Spectrum +3. Creo que las formas de ondas serán similares con el circuito de 48K beeper. Pero la salida "EAR" del Spectrum 48K lleva una señal que es muy diferente - debería hacer una foto.
Tarjeta ethernet para el Spectrum - http://spectrum.alioth.net/doc

Debemos practicar un quirkafleeg
Avatar de Usuario
winston
Sabreman
 
Mensajes: 469
Registrado: Mar Ago 19, 2008 4:17 pm
Ubicación: Isla de Man

Re: Música multicanal

Notapor Rinconete el Mar Ene 13, 2009 9:21 am

Es sólo curiosidad. Mirando el esquema del beeper en la patente de Sinclair (supongo que para el Spectrum 48k) deduzco que la impedancia inductiva/capacitiva necesaria para obtener valores "analógicos" proviene de la inductancia del altavoz (ref. 15) y de la red RC (refs. 18 y 19 en MIC y similares en EAR).

Patente del beeper (Computer input/output circuit) GB2119207

Me pregunto si desconectando el altavoz y la red RC, o sea, desoldando la patilla de la ULA se obtiene una onda bastante cuadrada. Supongo que sí, ya que esos transistores trabajan en conmutación y la impedancia de salida en A tiene pinta de ser bastante alta.

Por otro lado, entiendo que cualquier cosa que lleve un altavoz producirá ese comportamiento debido a la bobina del altavoz ¿?
Avatar de Usuario
Rinconete
Jack The Nipper
 
Mensajes: 193
Registrado: Mar Oct 09, 2007 7:32 pm
Ubicación: Valladolid

Re: Música multicanal

Notapor softhouse el Jue Jun 10, 2010 9:01 am

na_th_an escribió:Tienes el manual aquí -> http://softhouse.speccy.cz/docs/download/Orfeus_en.pdf
Puedes escuchar como suena, por ejemplo, en la versión 48K del Phantomasa 2 v2.0 -> http://cezgs.computeremuzone.com/ficha.php?id=18


Ahora tienes el manual aquí -> http://softhouse.speccy.cz/documents/do ... eus_en.pdf
Avatar de Usuario
softhouse
rst 0
 
Mensajes: 1
Registrado: Mie Jun 09, 2010 9:45 am

Re: Música multicanal

Notapor mcleod_ideafix el Vie Jun 11, 2010 7:10 pm

Lo que supongo que Winston ha implementado es modulación PWM. Es la forma típica de generar cualquier tipo de señal analógica partiendo de una salida que sólo puede tomar dos valores. Muchos circuitos sólo-digital implementan salidas analógicas de esta forma: sólo necesitas un pequeño filtro paso-baja a la salida para silenciar la componente de alta frecuencia.

Hace más de 15 años, cuando estaba haciendo el proyecto de fin de carrera de la diplomatura (un reproductor/editor de música en formato ProTracker (MOD) para PC's), me pidieron escribir un articulillo para un fanzine que estaba en sus comienzos: Playbyte (más de un sevillano por aquí seguro que la recuerda). SI encuentro el documento, lo paso por aquí... (dónde estará aquello??)
Web: ZX Projects | Twitter: @zxprojects
Avatar de Usuario
mcleod_ideafix
Johnny Jones
 
Mensajes: 3982
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera

Re: Música multicanal

Notapor zx81 el Sab Jun 12, 2010 4:19 pm

mcleod_ideafix escribió:Lo que supongo que Winston ha implementado es modulación PWM. Es la forma típica de generar cualquier tipo de señal analógica partiendo de una salida que sólo puede tomar dos valores. Muchos circuitos sólo-digital implementan salidas analógicas de esta forma: sólo necesitas un pequeño filtro paso-baja a la salida para silenciar la componente de alta frecuencia.


Después de mucho pelear con mi emulador, al final llegué a un resultado medianamente satisfactorio, aunque no usé ningún filtro de salida. Probé varios FIR e IIR, de diferente número pasos y, al final, lo quité todo porque en cuanto filtras un poco ya "no suena a Spectrum".

Al final, la emulación del beeper es menos complicada de lo que parecía al principio y quizá algún día merecería la pena que pusiera por escrito lo que intenté, lo que pasó y como lo hice finalmente, para que cuando llegue el alzheimer no pueda borrar lo que escribí en un papel aunque sea virtual... :D
Debido al fallo de un mecanismo, el lanzagranadas M203 se te podía disparar cuando menos lo esperaras, lo que te habría hecho bastante impopular entre lo que quedara de tu unidad.
Revista del ejército EE.UU. PS, agosto 1993.

Emulador JSpeccy
ZXBaremulator
zx81
Freddy Hardest
 
Mensajes: 602
Registrado: Vie Dic 28, 2007 3:14 pm
Ubicación: Valencia

Previo

Volver a Programación y nuevos desarrollos

¿Quién está conectado?

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