User Tag List

Página 2 de 2 PrimerPrimer 12
Resultados 16 al 28 de 28

Tema: c64 reproductor musica digital 48khz

  1. #16

    Fecha de ingreso
    Sep 2006
    Mensajes
    5,019
    Mencionado
    27 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    709
    Agradecer Thanks Received 
    655
    Thanked in
    Agradecido 489 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Drumpi Ver mensaje
    ¿Y cómo mapeas las direcciones de memoria que se pasan del ancho del bus de datos? Bueno, no sé de cuántos bits es el bus de datos del C64 para los cartuchos, pero un fichero de audio los sobrepasa seguro ¿se divide la dirección de memoria en dos o tres y se envían secuencialmente, y el HW interno del cartucho se encarga de recomponer el valor final?
    Bank switch.

    Cita Iniciado por Drumpi Ver mensaje
    Bueno, creo haber entendido que los chips de sonido PCM disponen de un pequeño buffer de datos, o en su defecto, un chip DMA o algo similar que le suministra los datos directamente desde la RAM... pero vamos, con 1MHz puede enviar 48000 datos por segundo si los registros son suficientemente rápidos.
    Me preocupa más que el chip PCM sea capaz de emitir 48000 valores por segundo, ya que de no poder, hay que recurrir a lo que digo de los generadores de ondas, que como dijo Fourier, toda señal se puede descomponer en una suma de sinusoides.
    Si, cierto pero el SID no tiene canal de DMA, es el 6502 el que le manda los datos al SID.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  2. #17

    Fecha de ingreso
    Sep 2006
    Mensajes
    5,019
    Mencionado
    27 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    709
    Agradecer Thanks Received 
    655
    Thanked in
    Agradecido 489 veces en [ARG:2 UNDEFINED] posts
    PD: en la entrada del blog lo describe bastante bien, yo pensaba que usaba un cartucho con mas memoria pero es de 1MB y usa cuantizacion vectorial para la compresión del audio.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  3. #18

    Fecha de ingreso
    Nov 2005
    Ubicación
    Excartagenero
    Mensajes
    18,872
    Mencionado
    204 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3,384
    Agradecer Thanks Received 
    2,765
    Thanked in
    Agradecido 1,876 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    1
    Ya ves que yo no estaba equivocado: cuantizacion > cuántico

  4. #19

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,597
    Mencionado
    58 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    792
    Agradecer Thanks Received 
    420
    Thanked in
    Agradecido 294 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Drumpi Ver mensaje
    Sólo por confirmarlo: el chip del C64 era capaz de generar ondas sonoras cuadradas, sinusoidales y triangulares en 3 canales ¿no?
    De ser así, me imagino cómo sería posible, pero ni de lejos me imagino cómo se podría implementar en dicho ordenador. Y más con 64KB de espacio, el archivo de audio no cabe ni aun en MP3
    Salvando la calidad del altavoz del ordenador ¿en la máquina real suena así?
    A quien se le diga esto hace 25 años, no se lo cree
    esos fragmentos de sonido son de 1MB cada uno... como dijo swapd, "bank switch"
    ...

  5. #20

    Fecha de ingreso
    Sep 2006
    Mensajes
    5,019
    Mencionado
    27 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    709
    Agradecer Thanks Received 
    655
    Thanked in
    Agradecido 489 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por SplinterGU Ver mensaje
    esos fragmentos de sonido son de 1MB cada uno... como dijo swapd, "bank switch"
    No, en total es 1MB, cada banco es de 16KB teniendo 64 bancos en total (16KB*64 = 1MB). El primer 1KB de cada banco es el "libro de códigos" de los siguientes 15KB, si usasen un único "libro de códigos" para todo el sample la calidad seria mucho peor.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  6. #21

    Fecha de ingreso
    Jul 2009
    Mensajes
    8,597
    Mencionado
    58 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    792
    Agradecer Thanks Received 
    420
    Thanked in
    Agradecido 294 veces en [ARG:2 UNDEFINED] posts
    @swapd0 iba a poner "creo"... igual no me referia a que cada banco tenga 1mb, sino a que cada una de esas canciones que suenan son 1mb... (cada uno de los videos es una musica de 1mb), eso creo que es lo que lei... tendria que releer...

    de hecho... mira... dice 1mb el tamaño de cada archivo...

    https://youtu.be/QemnwGRFZJM?t=84

    a los 84 segundos
    Última edición por SplinterGU; 14/01/2020 a las 00:27
    ...

  7. #22

    Fecha de ingreso
    Apr 2003
    Ubicación
    HACAPULCO (MEHICO)
    Mensajes
    60,275
    Mencionado
    119 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    356
    Agradecer Thanks Received 
    3,014
    Thanked in
    Agradecido 1,872 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    24
    Cita Iniciado por Drumpi Ver mensaje
    ¿Y cómo mapeas las direcciones de memoria que se pasan del ancho del bus de datos? Bueno, no sé de cuántos bits es el bus de datos del C64 para los cartuchos, pero un fichero de audio los sobrepasa seguro ¿se divide la dirección de memoria en dos o tres y se envían secuencialmente, y el HW interno del cartucho se encarga de recomponer el valor final?
    nunca has oido hablar de los llamados "mappers" de memoria en consolas? Ademas de para varias cosas servian para hacer bank switching.
    Última edición por dj syto; 14/01/2020 a las 04:27

  8. #23

    Fecha de ingreso
    Aug 2003
    Mensajes
    14,416
    Mencionado
    46 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    116
    Agradecer Thanks Received 
    276
    Thanked in
    Agradecido 180 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    1
    drumpi being drumpi

  9. #24

    Fecha de ingreso
    Sep 2006
    Mensajes
    5,019
    Mencionado
    27 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    709
    Agradecer Thanks Received 
    655
    Thanked in
    Agradecido 489 veces en [ARG:2 UNDEFINED] posts
    Bus de datos 8bits, bus de direcciones 16bits.

    Cualquier cacharro de 8 bits que accede a mas de 64KB de memoria (da igual que sea RAM o ROM) lleva algún tipo de mapeo de memoria.
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  10. #25

    Fecha de ingreso
    Sep 2005
    Mensajes
    11,315
    Mencionado
    161 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    220
    Agradecer Thanks Received 
    534
    Thanked in
    Agradecido 371 veces en [ARG:2 UNDEFINED] posts
    Sí, ya sé lo del bank switching, pero es algo que no he terminado de entender.
    Me explico: con 16bits podemos direccionar 64KB de memoria. Para direccionar 16KB necesitamos 14bits, y si usamos 64 bancos, aun necesitamos 6 bits más, por lo tanto necesitamos un total de 20bits... sin contar con las direcciones del resto del HW mapeado (el chip de sonido, el puerto EXT... todo tiene una dirección de memoria para acceder).

    ¿Entiendo que el cartucho con el mapper tiene algún tipo de lógica programable, al que se le dice "activa el banco $xxxxxx" antes de empezar a pedirle datos de memoria? ¿O se le manda algún comando (8 bits por el bus de datos) cuyos dos primeros bits indican el cambio de banco, y los otros 6 bits el banco a activar?

    Cita Iniciado por swapd0 Ver mensaje
    Si, cierto pero el SID no tiene canal de DMA, es el 6502 el que le manda los datos al SID.
    Pues entonces sí que lo veo complicado hacerlo por ahí... aunque claro, estamos olvidando que el usar 48KHz es por el tema de muestreo (el doble de la frecuencia máxima a muestrear), realmente el oído no capta sonidos por encima de 22KHz, y es capaz de reconocer notas hasta bastante menos que eso, por lo que quizás sí que es posible que a 1MHz se pueda enviar información a suficiente velocidad, pero es una hipótesis. Como digo, creo más plausible crear el sonido en los generadores sinusoidales de sonido, sumar los tres canales y usar el cambio de frecuencias de forma dinámica para crear ondas sonoras más complejas.

    Cita Iniciado por swapd0 Ver mensaje
    PD: en la entrada del blog lo describe bastante bien, yo pensaba que usaba un cartucho con mas memoria pero es de 1MB y usa cuantizacion vectorial para la compresión del audio.
    Lo de cuantización vectorial ya va más allá de lo que sé ¿Tiene algo que ver con los módulos de las series de Fourier?
    ¿Hay entrada de blog explicándolo?

    Cita Iniciado por josepzin Ver mensaje
    Ya ves que yo no estaba equivocado: cuantizacion > cuántico


    Cita Iniciado por enkonsierto Ver mensaje
    drumpi being drumpi
    Yo intento entender, tu trolear... dicho desde el cariño, claro <- emoticono antiestress.
    PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
    PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%

  11. #26

    Fecha de ingreso
    Sep 2006
    Mensajes
    5,019
    Mencionado
    27 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    709
    Agradecer Thanks Received 
    655
    Thanked in
    Agradecido 489 veces en [ARG:2 UNDEFINED] posts
    El bank switch es mucho mas simple. Por poner un ejemplo real, la Atari 7800 de la dirección $8000 a la $c000 (16KB) se mapean al cartucho y hay un mapper que si escribes en cualquiera de esas direcciones como es ROM y no tiene sentido lo interpreta como un cambio de banco. El valor escrito se usa como la parte alta de la dirección de memoria, por ejemplo 14bits son (16kB), si coges el byte de cambio de banco entero y no solo una parte, al final tendrás 8+14=22bits de direcciones, por lo que podrías acceder hasta 4MB.

    Lo de la cualtizacion vectorial es bastante simple, sobretodo descomprimir el compresor es un poco mas puñetero. Al final lo que tienes en este caso son 256 vectores con 4 valores, representarían un minisample, esto es lo que se llama el "libro de códigos". Para descomprimir lees un byte y escribes los 4 valores que le corresponden mirando el libro de códigos.

    -----Actualizado-----

    Cita Iniciado por Drumpi Ver mensaje
    Pues entonces sí que lo veo complicado hacerlo por ahí... aunque claro, estamos olvidando que el usar 48KHz es por el tema de muestreo (el doble de la frecuencia máxima a muestrear), realmente el oído no capta sonidos por encima de 22KHz, y es capaz de reconocer notas hasta bastante menos que eso, por lo que quizás sí que es posible que a 1MHz se pueda enviar información a suficiente velocidad, pero es una hipótesis. Como digo, creo más plausible crear el sonido en los generadores sinusoidales de sonido, sumar los tres canales y usar el cambio de frecuencias de forma dinámica para crear ondas sonoras más complejas.
    Pero si en la entrada del blog tienes el código y todo.
    Código:
    .for (var i=0; i<61; i++)                   {  
           l:                nop                 
           sample:           ldx $8300 + i*$100  
                             ldy $8000,x  
                             lda sidtable,y   
                             sta $d418      
                             inc sample +1        
                             bit $ea              
                             ldy $8100,x           
                             lda sidtable,y   
                             sta $d418
                             sty $d020           
                             ldy $8200,x          
                             lda ($fb),y         //like lda sidtable,y but a cycle more  
                             ldy sample + 1               
                             sta $d418
                             bne l                
                             jmp nextblock+1       
            .align 64  
            nextblock:   }  
    No es lo mismo tener diez años de experiencia, que tener un año de experiencia diez veces.

  12. Los siguientes 2 usuarios agradecen a swapd0 este post:

    Drumpi (14/01/2020), josepzin (14/01/2020)

  13. #27

    Fecha de ingreso
    Apr 2003
    Ubicación
    HACAPULCO (MEHICO)
    Mensajes
    60,275
    Mencionado
    119 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    356
    Agradecer Thanks Received 
    3,014
    Thanked in
    Agradecido 1,872 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    24
    Cita Iniciado por swapd0 Ver mensaje
    El bank switch es mucho mas simple. Por poner un ejemplo real, la Atari 7800 de la dirección $8000 a la $c000 (16KB) se mapean al cartucho y hay un mapper que si escribes en cualquiera de esas direcciones como es ROM y no tiene sentido lo interpreta como un cambio de banco. El valor escrito se usa como la parte alta de la dirección de memoria, por ejemplo 14bits son (16kB), si coges el byte de cambio de banco entero y no solo una parte, al final tendrás 8+14=22bits de direcciones, por lo que podrías acceder hasta 4MB.

    Lo de la cualtizacion vectorial es bastante simple, sobretodo descomprimir el compresor es un poco mas puñetero. Al final lo que tienes en este caso son 256 vectores con 4 valores, representarían un minisample, esto es lo que se llama el "libro de códigos". Para descomprimir lees un byte y escribes los 4 valores que le corresponden mirando el libro de códigos.

    -----Actualizado-----


    Pero si en la entrada del blog tienes el código y todo.
    Código:
    .for (var i=0; i<61; i++)                   {  
           l:                nop                 
           sample:           ldx $8300 + i*$100  
                             ldy $8000,x  
                             lda sidtable,y   
                             sta $d418      
                             inc sample +1        
                             bit $ea              
                             ldy $8100,x           
                             lda sidtable,y   
                             sta $d418
                             sty $d020           
                             ldy $8200,x          
                             lda ($fb),y         //like lda sidtable,y but a cycle more  
                             ldy sample + 1               
                             sta $d418
                             bne l                
                             jmp nextblock+1       
            .align 64  
            nextblock:   }  
    cuanto sabes.

  14. #28

    Fecha de ingreso
    Sep 2005
    Mensajes
    11,315
    Mencionado
    161 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    220
    Agradecer Thanks Received 
    534
    Thanked in
    Agradecido 371 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por swapd0 Ver mensaje
    El bank switch es mucho mas simple. Por poner un ejemplo real, la Atari 7800 de la dirección $8000 a la $c000 (16KB) se mapean al cartucho y hay un mapper que si escribes en cualquiera de esas direcciones como es ROM y no tiene sentido lo interpreta como un cambio de banco. El valor escrito se usa como la parte alta de la dirección de memoria, por ejemplo 14bits son (16kB), si coges el byte de cambio de banco entero y no solo una parte, al final tendrás 8+14=22bits de direcciones, por lo que podrías acceder hasta 4MB.

    Lo de la cualtizacion vectorial es bastante simple, sobretodo descomprimir el compresor es un poco mas puñetero. Al final lo que tienes en este caso son 256 vectores con 4 valores, representarían un minisample, esto es lo que se llama el "libro de códigos". Para descomprimir lees un byte y escribes los 4 valores que le corresponden mirando el libro de códigos.

    -----Actualizado-----


    Pero si en la entrada del blog tienes el código y todo.
    Código:
    .for (var i=0; i<61; i++)                   {  
           l:                nop                 
           sample:           ldx $8300 + i*$100  
                             ldy $8000,x  
                             lda sidtable,y   
                             sta $d418      
                             inc sample +1        
                             bit $ea              
                             ldy $8100,x           
                             lda sidtable,y   
                             sta $d418
                             sty $d020           
                             ldy $8200,x          
                             lda ($fb),y         //like lda sidtable,y but a cycle more  
                             ldy sample + 1               
                             sta $d418
                             bne l                
                             jmp nextblock+1       
            .align 64  
            nextblock:   }  
    Ajá. Gracias por decirme cómo funciona lo del bank switching.

    Lo de la cuantización vectorial creía que iría más por lo que decía de Fourier, ya que dicha serie se puede transformar en "vectores" Veo que es algo más sencillo y que al final se obtienen directamente los valores de los samples.
    Como digo, no había visto el blog. Tengo mi ASM un poco oxidado, y tendría que mirar el mapeo de memoria del C64 para entenderlo bien, pero es una lectura interesante .

    Gracias por tus respuestas.
    PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
    PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%

Página 2 de 2 PrimerPrimer 12

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •