CAP 8 Introduccion al DMA de sonido.A los que ya dominan el tema, quiero que comprendan que la cantidad de burradas que puedan aparecer son para intentar explicar conceptos, sobre todo al principio. De la misma forma que explicabamos que es un bitmap o un sprite, tenemos que explicar que es un sonido para el amiga.
Imaginad el desplazamiento del cono de un altavoz:
Tenemos un punto maximo de expansion, un punto maximo de compresion y un punto central donde descansa el cono. Pues el amiga tiene un byte para guardar esa "posicion".
Cuando alguien habla de samplear a 8/16/24.... bits, es el numero de bits que tienes para guardar la posicion del altavoz.
Si tenemos un byte, podemos usar el 0 como punto "neutral" y usar +-127 para los puntos maximos de desplazamiento. ¿Se entiende?
Eso es lo que se llama sampleo "signed", el centro es 0 y el SIGNO nos dice el movimiento.
Otros cacharros usan "unsigned" donde todos los valores son positivos y el 0 es el mas bajo.
Ya conocemos dos palabros para identificar nuestras muestras de audio, 8 bits y signed.
Para que el altavoz suene, no podemos mandarle un valor (voltaje) y punto,tenemos que ir suministrandole esos "bytes" con cierto ritmo para que mueva el aire.
Aqui entra el valor tiempo.
En Rojo tienes el "supuesto" sonido, lo entrecomillo porque lo que realmente tenemos es la aproximacion que nos dan los puntos azules. Trabajamos en digital/discreto.
Aqui hay dos formas de medir el tiempo,una cuando creas el sample y otra cuando lo reproduces.
Crear samples:
Si acortamos el espacio entre puntos, tenemos una señal mas rica, pero hay que gastar muchos puntos. Eso se llama frecuencia de muestreo.
Cuando oyes "el sample es de 8 bits 11Khz", quiere decir que cada segundo tiene 11.000 muestras de 1 byte.
Reproducir samples:
Si acortamos el tiempo entre puntos, el sample suena mas agudo y si lo alargo, se vuelve grave. Eso se llama "periodo" en el chipset de amiga.
Si los dos tiempos coinciden, el sonido sale tal cual. Si cambiamos, el sonido se modifica.
Quizá me estoy enrollando como una persiana, pero quiero que quede medio claro que la frecuencia y el periodo estan relacionados pero no son lo mismo.
Vale, ya sabemos que el sonido necesita un puñado de bytes y un "periodo" con el que procesar esos bytes. ¿algo mas?
Sí, para que los altavoces no funcionen siempre a tope, un control de volumen estaria bien.
Estas 4 cosas tienen su registros:
AUDxLCHAUDxLENAUDxVOLAUDxPERNo se necesita (casi) nada mas para lanzar un sample via DMA.
No creo que haya dudas hasta aqui.
El puntero para el sample es facil. Lo hemos hecho con bitplanes, sprites....
LEN es la longitud en words del sample,lo pide en words porque por el canal del DMA van a salir 2 bytes.
El volumen simplemente es un word con valor 0-64.
Lo complicado es el periodo.
En teoria es el tiempo/velocidad a la procesas las muestras (bytes).
El problema es que el tiempo lo lleva la señal de video y puede darse el caso de que necesites una frecuencia X para lo que sea y solo puedas usar una aproximacion".
Seguro que muchos musicos/coders te pueden dar ejemplos.
Seguro de que estais cansados de esta imagen, pero es que el amiga se resume en esto:
Esto es lo que repite el DMA del amiga una y otra vez.
Vamos a simplificarlo por colores:
refrescamos la memoria DRAM en
ROJOtiempo para disco en
AMARILLOtiempo para audio en
VERDEtiempo para sprites en
AZULtiempo para bitplanes en
VIOLETA¿Que pasa si lo superponemos a una linea de un monitor ?
La colocacion de los eventos es aproximada, pero os podeis hacer una idea.
A lo mejor asi se ve mas facil tambien el data fetching de los bitplanes.
Si tenemos 312 lineas por pantalla PAL, son 312 slots para nuestro sample.
Si tenemos 50 pantallas por segundo son 312*50 = 15.600 slots
Cada slot es un word, asi que son 2 bytes. 15.600*2= 31.200 bytes(muestras) por segundo
Esa seria la frecuencia maxima teorica, el problema es que realmente no se pueden usar todos esos slots, porque el chipset te "roba" algunos para su propio funcionamiento.
El maximo usable son +-28.800Khz.
Si queremos lanzar un sample con una frecuencia de muestreo X, sacamos la calculadora.
El chipset PAL corre a 3.546895Mhz y yo necesito X Khz
periodo=Velocidad de video/velocidad del sampleo
Si el resto es 0, de lujo. Si no, correrá a la frecuencia mas aproximada.
Ejemplo:
Me bajo un sample 8 bit signed 11,025Khz. ¿Que periodo necesito?
periodo = 3546895/11025 = 321
¿Se entiende?
Por ahora SOLAMENTE quiero que quede claro lo que es un sample y las 4 cosas que necesita saber el amiga antes de lanzarlo.