Ver la versión completa : c64 reproductor musica digital 48khz
SplinterGU
10/01/2020, 17:25
https://www.youtube.com/watch?v=Q2Me-tpEI6w
https://www.youtube.com/watch?v=UYAf_awh5XA
https://www.youtube.com/watch?v=cKwLkNoySI4
https://www.youtube.com/watch?v=QemnwGRFZJM
fuente:
https://hackaday.com/2020/01/09/hifi-audio-on-the-commodore-64-48khz-yo/?fbclid=IwAR2ZWHysDvmYB4Mpl0nUtd6vUq0pGaVA7Ula8anu Gc6UPgtXAC1QQgEXgvI
http://brokenbytes.blogspot.com/2018/03/a-48khz-digital-music-player-for.html
Sr.Polilla
10/01/2020, 20:41
¿que brujería es esta?
fumaflow
11/01/2020, 23:32
Ojeen este bideo
https://www.youtube.com/watch?v=V0kq0yCTpNE
Aquí mas
https://www.youtube.com/watch?v=eAgwVvJwdnc
fumaflow
12/01/2020, 17:05
Más
https://www.youtube.com/watch?v=c6h5a8LqgoY
fumaflow se agradece el esfuerzo, pero lo que estás posteando tu y lo que se muestra en el primer mensaje tiene muy poco que ver. El mensaje original va de reproducción de audio digitalizado de calidad "alta" en hardware obsoleto y lo que has puesto tu va de modificar hardware antiguo para convertirlo en sintetizadores.
fumaflow
12/01/2020, 18:54
Yo soy a un ingeniero de sonido lo que Paquirrin a un físico cuántico
josepzin
12/01/2020, 20:27
¿que brujería es esta?
Cierto, ¿que brujería es esta?
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 :D
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 :D
josepzin
13/01/2020, 13:14
Y más con 64KB de espacio, el archivo de audio no cabe ni aun en MP3 :D
Ahora eso ya no es problema, memoria ilimitada gracias a los avances de la ingeniería biológica y cuántica.
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 :D
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 :D
Pero si el Imposible Mission (por poner un ejemplo) ya tenia samples de voces, aquí lo que tiene mérito es tocar el sample a 48Khz.
Pero si el Imposible Mission (por poner un ejemplo) ya tenia samples de voces, aquí lo que tiene mérito es tocar el sample a 48Khz.
Pues entonces depende del chip de sonido ese: si es capaz de generar sonidos a 48KHz, entonces es relativamente fácil (si se es capaz de ajustar su velocidad a esa frecuencia y enviar correctamente los datos, lo cual seguro que es más complejo de lo que parece).
En caso contrario, la alternativa es el generador de pulsos sinusoidales/cuadráticos/triangulares y modificar un canal en tiempo real para ir generando el valor necesario a cada ciclo... o lo mismo mezclando los tres o cuatro canales: los MP3 dan la información del sonido separado por frecuencias, y se pueden repartir, o sumar o... No sé, veo muchas posibilidades y ninguna especialmente sencilla sin conocimientos a fondo del HW y de sonido.
Ahora eso ya no es problema, memoria ilimitada gracias a los avances de la ingeniería biológica y cuántica.
Si, "cuánticas" ganas de que eso fuera cierto :D No vale usar HW moderno... ni emuladores con moderneces de esas :awesome:
No, ya en serio, no sé los mods que hay para hacer eso posible, pero tengo curiosidad :D (tiempo no).
josepzin
13/01/2020, 18:28
Quizás solo hace falta poner los datos en un cartucho muy grande y listo.
Cuando se toca un sample en un chip de sonido que no tiene canal PCM lo que se hace es tener una tabla para cada valor entre 0-255 del sample se traduce a una tabla donde se modifican el volumen de las voces, al menos en el Atari ST con el Yamaha se hace asi. El valor 0 seria los tres canales con el volumen a 0, el valor 255 los tres canales con volumen a 15, el resto de valores se deja como ejercicio XD
¿Como haces esto 48.000 veces por segundo en 6502 a 1Mhz?
Quizás solo hace falta poner los datos en un cartucho muy grande y listo.
¿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?
Cuando se toca un sample en un chip de sonido que no tiene canal PCM lo que se hace es tener una tabla para cada valor entre 0-255 del sample se traduce a una tabla donde se modifican el volumen de las voces, al menos en el Atari ST con el Yamaha se hace asi. El valor 0 seria los tres canales con el volumen a 0, el valor 255 los tres canales con volumen a 15, el resto de valores se deja como ejercicio XD
¿Como haces esto 48.000 veces por segundo en 6502 a 1Mhz?
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.
¿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.
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.
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.
josepzin
13/01/2020, 22:10
Ya ves que yo no estaba equivocado: cuantizacion > cuántico
SplinterGU
13/01/2020, 22:52
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 :D
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 :D
esos fragmentos de sonido son de 1MB cada uno... como dijo swapd, "bank switch"
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.
SplinterGU
13/01/2020, 23:25
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
¿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.
enkonsierto
14/01/2020, 09:29
drumpi being drumpi
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.
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?
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.
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é :D ¿Tiene algo que ver con los módulos de las series de Fourier?
¿Hay entrada de blog explicándolo?
Ya ves que yo no estaba equivocado: cuantizacion > cuántico
:quepalmo:
drumpi being drumpi
Yo intento entender, tu trolear... dicho desde el cariño, claro :D <- emoticono antiestress.
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-----
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.
.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: }
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.
.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.
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.
.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" :lol: 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.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.