Karoshi MSX Community
06 de Julio de 2021, 12:21:13 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: 1 [2]
  Imprimir  
Autor Tema: solicitando vuestra ayuda ( PT3+ayFX )  (Leído 12001 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Metalbrain
Karoshi Fan
**
Mensajes: 92


Z80jutsushi


« Respuesta #15 : 02 de Septiembre de 2011, 08:47:46 am »

Yo directamente a 60Hz no hago nada el sexto frame, ni copio ni envío valores al chip de sonido ni nada... creo que el mismo chip recuerda perfectamente lo del frame anterior.  Wink
En línea
SapphiRe_MSX
Visitante
« Respuesta #16 : 02 de Septiembre de 2011, 09:45:46 am »

Yo directamente a 60Hz no hago nada el sexto frame, ni copio ni envío valores al chip de sonido ni nada... creo que el mismo chip recuerda perfectamente lo del frame anterior.  Wink

Cierto, pero el problema es que si usas el ayFX, que sobreescribe los valores generados por el PT3, entonces sí que tienes que restaurar los valores del quinto frame. Si no se hace así y se está reproduciendo un fx justo en ese momento, se pierde no sólo el canal que toque, sino el canal anterior, ya que habría sido modificado por el ayFX en el frame anterior.

Otra cosa es que también pases de generar el frame del ayFX en el sexto frame, lo cual es perfectamente válido.
En línea
Iggy Rock
Visitante
« Respuesta #17 : 02 de Septiembre de 2011, 11:41:16 am »

... Exacto. Para evitar cortes debidos a SFX (50/60Hz) yo veo más fácil usar un buffer de registros secundarios. En el primario escribe el PT3 player, en el secundario se copian estos registros y se sobreescriben los del ayFX. El registro secundario se vuelca al PSG por la rutina R_OUT que es lo que parece que hace SapphiRe en el código que ha pegado.

« Última modificación: 02 de Septiembre de 2011, 11:54:40 am por Iggy Rock » En línea
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #18 : 02 de Septiembre de 2011, 11:51:38 am »

Repetir el 5º campo es el metodo habitual de conversion de video de PAL a NTSC, así que algo de correcto tendrá.
En línea

sempre fun un valente corredor
SapphiRe_MSX
Visitante
« Respuesta #19 : 02 de Septiembre de 2011, 12:07:22 pm »

... Exacto. Para evitar cortes debidos a SFX (50/60Hz) yo veo más fácil usar un buffer de registros secundarios. En el primario escribe el PT3 player, en el secundario se copian estos registros y se sobreescriben los del ayFX. El registro secundario se vuelca al PSG por la rutina R_OUT que es lo que parece que hace SapphiRe en el código que ha pegado.

Básicamente... lo que hago es (en NTSC) guardar una copia de los registros producidos por el pt3 y en lugar de generar el sexto frame, restauro el quinto para que el ayFX los guarrindonguee si así considera.

Por cierto, me gusta tu tagline xDDD

Repetir el 5º campo es el metodo habitual de conversion de video de PAL a NTSC, así que algo de correcto tendrá.

Desde luego no hemos descubierto la rueda, no... Tongue
En línea
nenefranz
Karoshi Fan
**
Mensajes: 67



« Respuesta #20 : 02 de Septiembre de 2011, 12:41:53 pm »


Citar
Es decir, la rutina de inicialización de la música mira si estamos a 50 o 60 hz, activando una serie de variables en RAM. Luego, la rutina de playeo lo primero que mira es si está activo el pt3 o no. Si no lo está, llama al mute y vuelve. Si lo está, dependiendo de si estamos a 50hz o 60hz ya actúa. A 50hz genera todos los frames, pero a 60hz genera 5 frames y si llega el sexto, copia el contenido del quinto (para poder sobreescribir los valores después con el ayFX).

Básicamente es lo que comenté en el blog hace dos años: http://z80st.auic.es/blog.php?page=2009/09/pt3-60hz.html

Ups llego dos años tarde!!! Tongue .. no sabía que este tema ya estaba explicado!!!

Muy interesante todo ... en resumen: el sexto frame es igual al quinto (en caso de maquina 60Hz).
Maneras de proceder:
- en el sexto frame no enviar datos al PSG (esto sólo será válido si tanto el PT3 como ayFX se intentan sincronizar a 50/60Hz)
- en el quinto frame hace copia de los valores de los registros y durante el sexto frame "escupir" estos datos (esta versión servirá aunque el ayFX no se intente sincronizar)


Citar
Cita de: e_sedes en Hoy a las 12:51:38
   
Citar
   Repetir el 5º campo es el metodo habitual de conversion de video de PAL a NTSC, así que algo de correcto tendrá.
   
Desde luego no hemos descubierto la rueda, no...
pues debía ser yo el único que no sabía lo de la conversión PAL->NTSC!!! Tongue

En línea
phsoft
Karoshi Fan
**
Mensajes: 68



WWW
« Respuesta #21 : 03 de Septiembre de 2011, 01:40:02 pm »

buenas, neng, ya está de vuelta vuestra peor pesadilla Griel

he subido un ejemplo funcional que es tu código mezclado con el de sapphire -en su blog- para que pt3 reproduzca a 50-60mhz detectando la velocidad con el bios id (ya que es codigo para msx1). con diferentes máquinas de bluemsx la cosa parece funcionar que es una puñetera y rotunda maravilla Grin
http://phsoft.vecindiario.es/ftp/play_50_60.zip

luego vuelvo con alguna última cuestión sobre el tema, pichorras, que hay que comer también!!!

saludos,
- paco

bueno, diría que esta es la última edición de pruebas (por mi parte) a falta de refinamientos vip o delicatessens, como que metalbrain se dejara caer un unpack de su msx-o-mizer para asMSX Joe o que alguien añadiese soporte al PT3 para un apagado suave de la musica (en varias frames, reduciendo el volumen paulatinamente, pej). menudencias así Griel y nada, esta prueba solo añade tracks comprimidas en rom (con bitbuster 1.2) que se corren desde ram previa la descompresion, claro, con el unpack que dejó pitpan en los snippets.. y bueno, idem para el banco de ayFX, un stop cachoburro para el timer y no sé si algo más, no creo
http://phsoft.vecindiario.es/ftp/play_50_60_packed.zip
el modulo inicial es demo_replayer.asm
saludos y gracias a todos, pichorras
- paco
« Última modificación: 03 de Septiembre de 2011, 06:19:36 pm por phsoft » En línea
SapphiRe_MSX
Visitante
« Respuesta #22 : 03 de Septiembre de 2011, 11:31:02 pm »

o que alguien añadiese soporte al PT3 para un apagado suave de la musica (en varias frames, reduciendo el volumen paulatinamente, pej)

El tema es que eso ya lo tengo yo hecho, que alguien me lo pidió hace tiempo. El problema es que plantea un problema gordo cuando hay envolventes por hardware. El volumen de los canales se puede controlar si no hay envolventes por hardware, pero con éstas, es imposible controlarlo y no funciona el fade de la música.

No obstante, si no vas a usar PT3 con envolventes, me lo dices, busco el código y lo pongo por aquí.
En línea
phsoft
Karoshi Fan
**
Mensajes: 68



WWW
« Respuesta #23 : 04 de Septiembre de 2011, 11:49:08 am »

cof cof.. esto es un poco embarasing cof.. no sé cómo decirlo...
pero hombre, qué demonios es una envolvente?!.. y por hardware!?... 
tu que me quieres matar de un susto? Tongue

en serio: si no es mucha molestia y das con él, pues pon el enlace. por mi parte me comprometo a subir alguna prueba funcional (siempre que logre hacerlo funcionar, se entiende) de la gramola con este añadido. desconozco si el músico usará ese tipo de efectos o no. pienso que lo haga o no siempre agradecerá, supongo, el disponer de múltiples opciones

en fin, que gracias por el tiempo y la info en cualquier caso, pichorra

saludos,
- paco
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #24 : 04 de Septiembre de 2011, 12:42:29 pm »

Las envolventes por hardware son una de las características de nuestro PSG: el propio procesador puede modular la amplitud de un canal con una serie de patrones predefinidos y de acuerdo con una frecuencia que se le indique. Si en el registro de volumen de un canal pones el valor 16, por ejemplo, el volumen de ese canal se controlará por la envolvente por hardware establecida por el PSG. El problema es siempre el mismo: la envolvente es única, no puedes tener distintas envolventes en distintos canales.

El problema que apunta Sap es que la frecuencia de las envolventes se establece de forma absoluta, y evidentemente, no hay más opciones que recalcularla si quieres que te suene igual a 50 y 60Hz, tarea bastante desagradable en un Z80, ya que tienes que multiplicar y/o dividir enteros y esperar que el error sea poco y todo encaje. En la práctica NO se hace.

Por eso precisamente en mi obscenamente obsoleto Karoshi's Caruso no se da soporte a envolventes por hardware: para que todo funcione igual a 50 o 60 Hz.

Échale un vistazo al MSX RED BOOK y te explicarán eso de las envolventes, aunque debería estar en cualquier manual de MSX-BASIC. Son los registros 11, 12 y 13 del PSG los que controlan frecuencia y forma.
En línea
SapphiRe_MSX
Visitante
« Respuesta #25 : 04 de Septiembre de 2011, 05:59:02 pm »

El problema que apunta Sap es que la frecuencia de las envolventes se establece de forma absoluta, y evidentemente, no hay más opciones que recalcularla si quieres que te suene igual a 50 y 60Hz, tarea bastante desagradable en un Z80, ya que tienes que multiplicar y/o dividir enteros y esperar que el error sea poco y todo encaje. En la práctica NO se hace.

No. Lo que yo digo es que el volumen máximo de la envolvente es, precisamente, el volumen máximo del PSG. Es decir, que no se puede limitar el volumen de una envolvente por hardware.

El tema de las envolventes a 50hz y 60hz, al replicar el quinto frame musical como el sexto en NTSC apenas si se nota. De hecho, la mayor parte de las músicas del QBIQS (creo que todas salvo la de los créditos) usan envolventes por hard y no se nota si se reproducen a 60hz.
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #26 : 05 de Septiembre de 2011, 07:14:47 am »

Explicado queda. Efectivamente, con envolventes por hardware difícilmente se puede hacer un fade-in o un fade-out.
En línea
phsoft
Karoshi Fan
**
Mensajes: 68



WWW
« Respuesta #27 : 12 de Septiembre de 2011, 03:13:10 pm »

gracias por las explicaciones, ñores

en realidad mis preocupaciones en el uso del ayFX+PT3 son bastante más simples que esto de las envolventes. en cuanto pueda subiré un ejemplo pero os pongo en situación con este escenario (que correría sobre el player que hemos subido en los ejemplos anteriores),

- pantalla de inicio del juego con su press space to play
- music_timer_on rulando con banco de efectos ayFX cargado
- al pulsar espacio al tumtum se reproduce -unas frames sobre otras- el efecto de sonido indicado

con "unas frames sobre otras" quiero decir que se pisan una reproducción y otra de(l mismo) sonido ya que, en principio, el ejemplo está hecho en basto y no hay retardo en la pulsación de dos space keys. para evitar esto lo que vengo haciendo es chequear ayFX_PRIORITY hasta que marque 255, que es, entiendo, cuando ha terminado un efecto de sonido (se reprodujeron todas sus frames), lo que de hecho funciona en el escenario indicado. ahora bien,

es correcto? cómo lo veis? opciones?...

pensemos, pej, que forzar un gran retardo en la pulsación de la tecla puede servir para este escenario pero ni parece muy elegante ni servirá para otros escenarios

el tema podría ser cómo determinar si ha terminado por completo un efecto de sonido (reproducido con ayFX), cómo detener en seco el efecto de sonido que se está reproduciendo, lanzar otro y esperar a que termine por completo (el segundo) para continuar (con el anterior), etc. pensad por ejemplo en el caso del juego que estoy realizando, donde un psj se desplaza por las pantallas con música de fondo (tracks de PT3) y sonido de pasos (efecto de ayFX) y que, en determinadas circunstancias, debe "cortar de raiz" el efecto de los pasos para reproducir (y por completo, una sola vez) otro efecto de sonido, por ejemplo el de la recogida o uso de un determinado item

y nada, que éste es el tipo de dudas que me surgen, como os decía, en mis pruebas para integrar el player de los ejemplos con el código del juego que vengo realizando

saludos,
- paco

ejemplo del escenario 1
http://phsoft.vecindiario.es/ftp/ayfx_ejemplo1.zip
« Última modificación: 12 de Septiembre de 2011, 07:41:37 pm por phsoft » En línea
SapphiRe_MSX
Visitante
« Respuesta #28 : 13 de Septiembre de 2011, 11:33:26 am »

el tema podría ser cómo determinar si ha terminado por completo un efecto de sonido (reproducido con ayFX), cómo detener en seco el efecto de sonido que se está reproduciendo, lanzar otro y esperar a que termine por completo (el segundo) para continuar (con el anterior), etc. pensad por ejemplo en el caso del juego que estoy realizando, donde un psj se desplaza por las pantallas con música de fondo (tracks de PT3) y sonido de pasos (efecto de ayFX) y que, en determinadas circunstancias, debe "cortar de raiz" el efecto de los pasos para reproducir (y por completo, una sola vez) otro efecto de sonido, por ejemplo el de la recogida o uso de un determinado item

Para eso están las prioridades. Si lanzas un efecto con menor prioridad, no suena, pero si lo lanzas con mayor prioridad si. Así pues, los pasos deberían tener poca prioridad y de esa forma cualquier otro efecto sonaría antes que ellos.

Supongo que lo de saber si se ha terminado un efecto es para poner un paso detrás de otro, ¿verdad? Puedes consultar la variable ayFX_PRIORITY, que si tiene el bit 7 a 1 significa que no hay un efecto reproduciéndose. Pero si inicias un efecto con la misma prioridad que otro que ya se esté reproduciendo, lo machacará... Wink

Lo mejor es que los efectos de pasos se lancen a intervalos regulares un poco mayores que su propia duración, de esa forma no tendrás ningún problema.
« Última modificación: 13 de Septiembre de 2011, 11:36:41 am por SapphiRe » En línea
phsoft
Karoshi Fan
**
Mensajes: 68



WWW
« Respuesta #29 : 13 de Septiembre de 2011, 04:26:03 pm »

ok, entendido lo de las prioridades. menor valor en c = mayor prioridad:

- coger ferrari, c=3, alta prioridad! urgentísimo!
- ir caminando.. nooooo... c=8, baja prioridad

lo estaba haciendo justo al séver Smiley

ayFX_PRIORITY.. bue, esto lo estaba chequeando a saco con un 255 como un sol, que creo viene en el ayFX_END. se agradece lo del bit 7

Citar
Lo mejor es que los efectos de pasos se lancen a intervalos

entendido.. señor, sí, señor!
caminaremos a intervalos regulares, señor!
cómo no se me habrá ocurrido antes! X...-DDD

fuera coñas ya funciona bte bien sincronizado aunque sea en plan compadre, y teniendo en cuenta que el queco va atodalahooostia (que parece un usain bold al que le han robado la cartera), ya que no están todas las rutinas de detección/recogida de bichos, la música, el coro de bailaoras, etc. claro, conforme se añadan cosas pues surgirán nuevas peguillas y habrá que hacerlo como bien dices. ok, gracias, campeón

saludos,
- paco
En línea
Páginas: 1 [2]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!