Emular el sonido

Emuladores y aplicaciones que ayudarán a la perpetuación del Spectrum y su software en el futuro

Moderador: Sir Cilve Sinclair

Responder
zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Emular el sonido

Mensaje por zx81 » Lun Oct 19, 2009 2:21 pm

Últimamente he vuelto a retomar el desarrollo del nuevo JaS, si es que aún se le puede llamar así, porque poco se le parece....

Hasta ahora la cosa no va mal. Respecto al Z80 emulo todo lo que he sabido que existía y pasa todos los tests existentes hasta la fecha: emulación de bits 3 y 5, del registro escondido MEMPTR, instrucciones no documentadas, tratamiento correcto de los prefijos repetidos, interrupciones con "retriggering", etc.

Respecto al Spectrum, de momento solo emulo el 48K, con emulación de la contended-memory, los efectos de alta resolución en la pantalla, efectos del borde, efecto "snow" y bus flotante. Algunos de los programas que he podido probar y que funcionan correctamente son: Aquaplane, Arkanoid, Beach Head II, Cobra, Dark Star, Overscan demo, Paperboy, Shock Megademo, Sidewize, Starion, The Sentinel, TV Game, Uridium y Vectron (suele ser el pack de programas con el que pruebo las modificaciones que hago).

Y ahora viene cuando la matan. Hay algo en lo que estoy a oscuras completamente, y en lo que me vendría bien una ayudita. Se trata de la emulación del altavoz del Spectrum. He hecho algunas pruebas pero, más que sonidos consigo ruido que lejanamente se parece a lo que sacaba nuestro querido Speccy. Y eso que aún no me he metido con el AY-3-8910!!!.

Ahora, en cada OUT al puerto #FE compruebo si han cambiado el bit 4 y llamo a un método de una clase llamada Audio que, en función del tiempo (en t-estados) que ha estado activo/desactivado el bit genero un número de frames que envío a la tarjeta de sonido. Para una frecuencia de 22050 hz, genero una muestra cada 157 t-estados transcurridos, la mitad de esas muestras con un valor positivo (32760) y la otra mitad con un valor negativo (-32760). Básicamente esa es la idea. Pero algo falla en mi lógica porque suena de una forma entre rematadamente mal y algo digno de la mejor película de terror.

Agradecería ideas, correcciones a mi método (que estoy seguro, es erróneo) y, si es posible, algún enlace a un documento que explique cómo conseguir lo que necesito hacer. Creo que me está quedando un emulador majo y sin sonido no pasará de ser algo "curioso".

Gracias a todos por adelantado
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: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Emular el sonido

Mensaje por zx81 » Mié Nov 04, 2009 9:26 am

Me contesto a mi mismo, un pelín decepcionado por la poca aportación del foro (¿cómo puede ser que de 40 lectores del mensaje nadie haya podido dar ni siquiera una pequeña idea o consejo?). Afortunadamente, y después de no pocos esfuerzos, el emulador tiene una emulación del altavoz bastante decente. Al final de la jugada, son solo unas 30 líneas de código efectivo (descontando el código necesario para abrir el dispositivo de sonido y demás parafernalia) pero que probablemente me hayan llevado más de 30 horas de trabajo real. Cierto es que partía con escaso bagaje cuando empecé el tema, pero el esfuerzo bien ha valido la pena. Entre otras cosas porque he aprendido bastantes cosas que no sabía. Y la satisfacción que produce ver que las cosas funcionan no es proporcional al número de líneas de código.

Para más adelante me queda otra montaña por escalar llamada "emulación del AY-3-8910", pero algunos problemas ya los tengo resueltos y espero que me cueste un poco menos de tiempo.

Otra cosa que quizá fuera positiva y con la que me he encontrado: hay mucha información acerca de cómo emular la Z80 y el propio Spectrum en general pero muy poca referente a cómo emular en concreto el altavoz. Quizá sería bueno escribir un documento donde explicara la forma de hacer ese tipo de cosas porque trabajar con la tarjeta de sonido es un mundo aparte.

Por otro lado, en algún momento tendré que plantearme liberar versiones beta o algo similar para que alguien más que yo (y el amigo vaporatorius del canal #spectrum del IRC-Hispano) pueda probarlo y contar como va. Aunque, visto el éxito previo, ya no sé qué pensar.

Saludos y, en cualquier caso, gracias a todos.
José Luis
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

Avatar de Usuario
Metalbrain
Freddy Hardest
Mensajes: 592
Registrado: Lun May 07, 2007 8:17 am
Ubicación: Sevilla
Contactar:

Re: Emular el sonido

Mensaje por Metalbrain » Mié Nov 04, 2009 9:44 am

Enhorabuena por el resultado obtenido.

Siento la falta de feedback, pero es que lo poco que se ya lo dije en este otro hilo, en el cual planteaste la pregunta, por lo que supuse que ya lo habías leído:
viewtopic.php?f=6&t=1173&p=14791#p14791

No creo que haya tanta gente por aquí que sepa sobre emulación de sonido.
SevenuP se escribe con u minúscula y P mayúscula.

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Emular el sonido

Mensaje por zx81 » Mié Nov 04, 2009 10:59 am

Metalbrain escribió:Enhorabuena por el resultado obtenido.

Siento la falta de feedback, pero es que lo poco que se ya lo dije en este otro hilo, en el cual planteaste la pregunta, por lo que supuse que ya lo habías leído:
viewtopic.php?f=6&t=1173&p=14791#p14791

No creo que haya tanta gente por aquí que sepa sobre emulación de sonido.


Releí ese hilo antes de preguntar de nuevo y, como ya advirtió na_th_an he tenido que leer cosas acerca de tratamiento digital de la señal donde, para variar, la gente se mete muy deprisa en FFT's y cosas así pero encuentras poco código claro con ejemplos concretos. Ha sido francamente didáctico. :)

Tampoco es fácil estudiar el código de Fuse, por poner un ejemplo, porque contiene mucho "ruido" (montones de líneas de código que se encargan de cosas relacionadas con el sonido pero no con la propia generación y hay que hacer un esfuerzo considerable para separar el grano de la paja). Y, en cualquier caso, hay muchos problemas que no son estrictamente la emulación y que despistan cuando haces las primeras pruebas y aquello suena de pena. Además, me he encontrado con diferencias considerables de funcionamiento dependiendo únicamente del driver de sonido utilizado. Y eso que aún no he probado el emulador bajo Win (ni tengo intención de hacer un esfuerzo especial porque funcione en Win donde ya hay emuladores de mayor calidad que el mío más que de sobra).

Otra cosa curiosa es que tampoco puedes hacer "maravillas" con la onda. Puedes si así lo deseas añadir un filtro FIR o IIR de tropecientos pasos y unirlos solidariamente a la junta de la trócola pero eso dejará de sonar a Spectrum. Incluso algunas melodías dejarán de sonar "bien" con solo un simplísimo filtro de solo 3 pasos. Hablo, por ejemplo, de la melodía de entrada del Agent X II o de la voz sintetizada del Cobra's Arc. La señal del altavoz del Spectrum es bestia y suavizarla la aleja de la realidad. Algunos programas varían el bit de sonido a una velocidad kafkiana, como por ejemplo el Arkanoid (que es todo un compendio de problemas de emulación de todo tipo que por sí solo merecería un mensaje en particular). El joío machacaladrillos varía el bit de sonido cada 48 t-estados, lo que ya de por sí es una proeza, porque solo el out ya tarda 12 t-estados sin tener contención de por medio. Hay que tener en cuenta que, a 48 kHz de velocidad de muestreo tienes una muestra cada 71,87 t-estados. Yo uso solo 22050 Hz de velocidad de muestreo y he hecho pruebas incluso con 8000 Hz.

Y aún ahora, funcionando razonablemente bien, tengo dudas acerca de si hay mejores maneras de hacer las cosas. Por ejemplo, nunca genero muestras con signo negativo. Las muestras oscilan entre el 0 y 32767, pero nunca bajan de cero. No estoy seguro de que eso sea correcto. Aún es más, probando cosas descubrí un efecto curioso, que no estoy convencido de si es aprovechable o no, pero que da proporciona un resultado "diferente". Se trata de algo tan simple como abrir la tarjeta de sonido en modo estéreo (cosa que no es el beeper, proclamo) y enviar al canal izquierdo solo muestras positivas como he descrito antes y al canal derecho la misma muestra pero en negativo. Proporciona un efecto pseudo-espacial muy particular que está por verse si es agradable o no.

En fin, que ya asumía yo que no era fácil ayudarme por varios motivos, pero de ahí a no decir ni palabra... :roll:
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

Avatar de Usuario
zxbruno
Freddy Hardest
Mensajes: 586
Registrado: Dom Jun 03, 2007 3:28 am
Ubicación: Anaheim, California, USA

Re: Emular el sonido

Mensaje por zxbruno » Jue Nov 05, 2009 7:20 am

No te desanimes. Hay personas que quizás puedan responder a algunas de tus preguntas, pero hay épocas del año en que andan más ocupados, etc. Yo trato de no meterme en asuntos que no entiendo. :p
Hay una sola cosa que me llamó la atención, lo que dijiste sobre el Cobra. Puede que esté equivocado, pero creo que SpecEmu es el unico emulador que emula bien eso. ¡Y al autor solo logró descubrir como hacerle hace pocos meses atrás!

Animo. También puedes hacer preguntas tecnicas aquí:

http://groups.google.com/group/es.comp. ... pics?hl=es

O en www.worldofspectrum.org/forums, pero en ingles. Los autores de los emuladores más usados hoy día siempre están ahí y sé que con mucho gusto responderían a tus preguntas.

Y si te gusta el irc puedes usar el Mirc y visitar el canal de Spin.
Si nunca has usado irc pero tienes el Firefox, es facil. Instala el add-on Chatzilla. Inicia el Chatzilla y haz "/attach irc.coldfront.net" y después "/join #spin". Ahí puedes hablar con personas que son expertos en detalles tecnicos y si visitas ese canal ahora mismo verás como están desarrollando una nueva versión del emulador Spin.

Saludos.

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Emular el sonido

Mensaje por zx81 » Jue Nov 05, 2009 10:28 am

No hombre, no me desanimo, solo me sorprendía de que nadie hubiera contestado ni poco ni nada. En cualquier caso, contestar es opcional no una obligación. :)

Respecto al Cobra's Arc el único "pero" compartido con otros programas como Sidewize y Robin of the Wood, es que el volumen es muy bajo, pero si le das matarile a los altavoces la voz sintetizada se entiende perfectamente. No he probado el SpecEmu porque es un emulador que funciona en un sistema que no uso, pero lo intentaré a ver como suena comparado con el mío.

Suelo andar por el canal #spectrum del Hispano y por el canal #spin de Coldfront. Alguna vez te he visto por allí y al pobre Dunny lamentarse de no saber si seguir con el Spin por la cantidad de bugs que le habías comunicado... :D

Además, gracias a Woodster (Mark Woodmass) pude resolver determinados problemas que tenía mi emulador, con el Arkanoid por ejemplo o con los timings de las interrupciones y me ha pasado muchos tests de diferentes cosas para comprobar si lo hacía bien, además de tener el único test exhaustivo del registro escondido MEMPTR. Y, no es por comparar, pero es todo lo contrario al señor Kendall, amable en el trato y dispuesto a ayudar. En general, está bien el canal y es imprescindible si estás, como yo, liado con un emulador. Diría que están todos los imprescindibles del "negocio". :)
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

Gandulf
Nonamed
Mensajes: 1067
Registrado: Lun May 07, 2007 10:06 pm

Re: Emular el sonido

Mensaje por Gandulf » Jue Nov 05, 2009 10:53 am

En el canal #spectrum de Hispano no hay nada de nada, yo entro a veces para ver si se cuece algo pero no se comenta nada. ¿Entra gente de por aquí??

En cuanto a lo del sonido, nunca he programado un emulador. Inicié hace unos 4 años un emulador de spectrum pero lo abandonara cuando estaba terminando la emulación del Z80, porque decidí programar algún juego para spectrum en lugar de emuladores, ya que spectaculator me parece un gran emulador, y hay otros también buenos, el mio sería una mera anécdota ya que no le dedicaría tanto tiempo como los creadores de estos emuladores; por lo tanto una vez habías logrado generar el sonido pero con mala calidad, no podía ayudarte con nada que no supieras ya.

Personalmente si pongo una duda o una cuestión, prefiero que no se conteste nada a que se conteste algo simplemente por hacerlo :) , pero bueno, es cosa de mi carácter. Por ejemplo este post que acabo de poner, que realmente no aporta nada a tus preguntas y bien podría no haberlo puesto. Aprovecho para animarte y a que lo publiques, ya que aunque la emulación esté incompleta, si el audio 48K está logrado interesará a muchos. A mi por ejemplo si te decides a hacer un port a Windows.
Un saludo,

Gandulf

zx81
Freddy Hardest
Mensajes: 619
Registrado: Vie Dic 28, 2007 2:14 pm
Ubicación: Valencia
Contactar:

Re: Emular el sonido

Mensaje por zx81 » Jue Nov 05, 2009 12:48 pm

Yo suelo entrar al canal #spectrum del Hispano, ya que el de irc.speccy.org parece definitivamente finiquitado. Cierto es que entra poca gente y se habla aún menos, pero bueno, al menos ahí he coincidido con alguien que sí entra y hemos charlado algún ratillo.

El emu que estoy programando es un "fork" (por llamarlo de alguna forma) del emulador JaS http://www.speccy.org/jas/. Al estar programado en Java funcionará en cualquier sistema operativo que lo soporte. Lo único que sucede con Win es que ni siquiera he probado a ejecutarlo en él. Ya estuve mirando en su momento con un programa de ejemplo que ejecutaba algo cada 20 ms y, mientras en Solaris y Linux funcionaba bien, en Win era un despiporre absoluto porque las cosas que hace el Win con los timers son para contarlos en una película de terror. Pero amos, que no tiene nada el emulador que impida funcionar en Win.

Lo de que el sonido esté bien conseguido o no ya es otro tema que debe quedar a la opinión de terceros. :)
Pero vamos, si quieres que te envíe el emulador y unos cuantos SNA para que pruebes (de momento solo cargo ficheros con esa extensión) dime donde de lo envío y verás que rápido lo tienes. Lo único que necesitas es una VM Java versión 1.6 que puedes descargar de Sun. Por cierto, que por lo que me han dicho, no funciona con el invento infernal ese del GCJ.
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

Avatar de Usuario
zxbruno
Freddy Hardest
Mensajes: 586
Registrado: Dom Jun 03, 2007 3:28 am
Ubicación: Anaheim, California, USA

Re: Emular el sonido

Mensaje por zxbruno » Jue Nov 05, 2009 3:11 pm

zx81 escribió:Suelo andar por el canal #spectrum del Hispano y por el canal #spin de Coldfront. Alguna vez te he visto por allí y al pobre Dunny lamentarse de no saber si seguir con el Spin por la cantidad de bugs que le habías comunicado... :D


Ahh, no sabía que habías estado ahí, hehe. :D Saludos.

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

Re: Emular el sonido

Mensaje por winston » Jue Nov 05, 2009 7:23 pm

Excelente. Un otro canal de IRC en que puedo estar sin hacer nada :-)
Tarjeta ethernet para el Spectrum - http://spectrum.alioth.net/doc

Debemos practicar un quirkafleeg

Avatar de Usuario
zxbruno
Freddy Hardest
Mensajes: 586
Registrado: Dom Jun 03, 2007 3:28 am
Ubicación: Anaheim, California, USA

Re: Emular el sonido

Mensaje por zxbruno » Jue Nov 05, 2009 7:36 pm

Winston, estamos esperando que visites #spin a traves del Spectranet. ;)

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 25 invitados