206 17: S O N I D O Y M U S I C A El sistema sonoro del Amiga esta capacitado para generar efec tos sonoros en estereofonia, imposibles de oir hace tan solo unos pocos años. Los resultados son impresionantes incluso a traves del altavoz de tu televisor, pero si conectas tu Amiga a un equi- po Hi-Fi, los sonidos pueden hacer temblar la habitacion!! Como podras imaginarte, AMOS ha evolucionado mucho desde aquel viejo comando BEEP. De hecho, hemos conseguido aportar todo cuan- to necesitas para incorporar increibles efectos sonoros a tus pro pios programas. Todos los comandos sonoros de AMOS se ejecutan in dependientemente de tu programa Basic. Asi tus "bandas sonoras" podran sonar continuamente, sin afectar lo mas minimo la calidad general del programa. Los 'samples' o tonos pueden crearse usando alguno de los dife rentes accesorios disponibles en el mercado, y pueden ser oidos con la simple instruccion SAMPLAY. Cada "sample" puede ejecutarse a diferentes velocidades, y pueden repetirse infinidad de veces, siendo incluso posible tocar un "sample" como si fuera una nota musical. La musica puede tomarse de otros programas como SONIX, SOUND- TRACKER o GMC. El sistema musical de AMOS es inteligente y te per mitira sin el menor esfuerzo combinar "samples" y musica por el mismo canal de sonido, sin riesgo de interferencias. Cada cancion puede incorporar hasta 256 instrumentos separados el unico limite para el numero de canciones es la cantidad de me- moria disponible. Al objeto de ahorrar el maximo posible de memo- ria, todos los tonos se construyen con un cierto numero de patro- nes separados. Asi cuando se crea un patron, lo podras incorporar a cualquier parte de tu musica usando tan solo un par de bytes. Definiendo solo algunas teclas-patron, podras ademas crear doce- nas de diferentes melodias sin demasiado consumo de memoria. La principal ventaja del sistema sonoro AMOS, es sin embargo, que se puede ampliar. Asi toda la fuente de codigos se encuentra en el disco de datas para examinar o cambiar. Asi nunca te queda- ras 'colgado' con los futuros desarrollos del Amiga. 207 Efectos sonoros simples BOOM (genera un sonido ruidoso parecido a una explosion) BOOM Usa este comando para producir el apropiado efecto sonoro estereo en tus programas. Tradicionalmente, este tipo de "ruido blanco" ha sido bastante dificil de reproducir en el Amiga, sin embargo, AMOS usa un habil sistema de interrupciones que produce un efecto muy real de explosion. Ejemplo: Boom: Print "You're dead!" SHOOT (crea un sonido parecido al disparo de un arma) SHOOT Este comando genera un simple disparo. Como BOOM, SHOOT no detie- ne de ningun modo la ejecucion de tu programa. De este modo, si estas disparando varias veces, deberias añadir un pequeño retraso utilizando el comando WAIT: Shoot: Wait 6: Shoot: Print "You're dead!" BELL (efecto sonoro de campana) BELL ¡f¿ Este comando reproduce un tono puro con frecuencia "F". Este para metro establece el tono de la nota, desde 1 (muy bajo) hasta 96 (muy alto). Canales de sonido ================= El Hardware del Amiga podra, sin el menor esfuerzo, tocar has- ta 4 sonidos simultaneamente. Esto te permitira añadir atractivos armonicos a tus efectos sonoros. Cada sonido puede salir por una de las 4 VOICES numeradas de 0 a 3. Puedes imaginarte esas voces como instrumentos separados que pueden tocar independientemente su propia secuencia de notas, sam ples o musica. Las 4 voces se combinan internamente para generar el sonido final que oiras a traves del sistema de megafonia. Los comandos sonoros de AMOS podran tocar tus canciones usando el ordenamiento de voces que prefieras. Todos estos comandos usan una forma estandard de entrada para cada voz. Asi se le asigna a cada voz un BIT, en el parametro VOICE, como sigue: 208 BIT 0 = Voice 0 BIT 1 = Voice 1 BIT 2 = Voice 2 BIT 3 = Voice 3 Para activar las voces deseadas, coloca el apropiado BIT a 1. He aqui una lista de los valores mas frecuentes para hacer las co sas un poco mas faciles: Valor Voz usada Efecto ----- --------- ------ 15 0,1,2,3 Usa las 4 voces 9 0,3 Salida por el altavoz izquierdo 8 3 6 2,4 Salida por el altavoz derecho 4 2 2 1 1 0 Para poder comprobar esto y a la vez hacer justicia al Amiga, prueba a conectar tu ordenador con un equipo Hi-Fi. La mayoria de los televisores no son capaces de reproducir la totalidad de soni dos que pueden generarse por el Hardware del Amiga. VOLUME (cambia el volumen de sonoridad) VOLUME ¡v,¿ intensity Este comando cambia el volumen de los sonidos que esten siendo reproducidos por uno o mas canales de sonido. "INTENSITY" se refiere a la intensidad o fuerza de este sonido que normalmente puede oscilar desde 0 (silencio) hasta 63 (maxi- mo). Por defecto, el volumen se coloca a la misma intensidad para todos los canales disponibles. El nuevo volumen se usara para to- dos los futuros efectos sonoros, incluyendose tambien la musica. El parametro "V" te permite cambiar el volumen de cada voz in- dependientemente. V ahora indica que combinacion de voces sera re gulada. Esta segunda opcion se usa solo para los efectos sonoros. No tiene efecto sobre cualquier musica que toques. Las voces se seleccionan mediante un mapa-BIT en su formato estandard, en don- de cada BIT representa el status de un simple canal de sonido. Si el BIT se pone a 1, entonces el volumen de esta voz se cambiara, de otro modo no se afectara. Ejemplo: Volume %0001,63: Boom : Wait 100 Volume %1110,10: Boom : Wait 50 Play 40,0 : Wait 30 Volume 50 : Play 40,0 209 Sonido por samples Si tienes que generar todos los efectos sonoros que necesitas, directamente desde tu ordenador, tendras que prepararte para una tarea imposible. En la practica, a menudo es mucho mas facil to- mar un sonido real desde una fuente externa, como un cassette, y convertirlo en una lista de numeros que pueda ser contenido en la memoria de tu ordenador. Cada numero representa el volumen de un sample particular del sonido. Si se reproducen rapidamente esos sones o "samples" por los chips del Amiga, se podra conseguir un impresionante y realis ta sonido. Esta tecnica conforma la base de los efectos sonoros por samples en la mayoria de los modernos juegos de ordenador. Si deseas crear tus propios samples, estaras obligado a adqui- rir un equipo complementario conocido como "Sampleador" o Cartu- chos de Samples. Pese a que dichos cartuchos son excelentes, en realidad no son esenciales. AMOS Basic esta perfectamente dotado para reproducir cualquier sample, sin la necesidad de adquirir costosos equipos complementarios. Actualmente existen cientos de efectos sonoros disponibles en el dominio publico, capaces de reproducir la mayoria de los efec- tos sonoros que requieren tus programas. Hemos incluido tambien, una seleccion de utiles samples en el disco de datas de AMOS para que vayas experimentando con ellos. SAM PLAY (reproduce un sample desde un banco de samples) SAM PLAY s SAM PLAY v,s SAM PLAY v,s,f Esta instruccion reproduce un sample directamente desde tu siste ma de altavoz. Todos los samples se almacenan habitualmente en el banco 5, pero esto puede ser libremente alterado usando el coman- do SAM BANK. "S" es el numero del banco de samples que va a ser reproducido No existe limite de samples a almacenar en un banco, salvo la me- moria disponible. Si deseas usar tus propios samples con esta ins truccion, necesitaras incorporarlos en el banco de memoria AMOS. Encontraras mas detalles al final de esta seccion. "V" es un mapa-BIT que contiene una lista de las voces que va a usar tu sample. Como es habitual, existe un BIT para cada voz. Para activar dicha voz basta con poner a 1 su BIT correspondiente "F" contiene la velocidad de reproduccion de tu sample, medido en Hertzios. Esto especifica el numero de samples que deben tocar se en cada segundo. Las velocidades habituales para samples osci- lan desde 4.000, para ruidos como explosiones, hasta 10.000 para efectos reconocibles como voz humana. Cambiando esta frecuencia de reproduccion, podras facilmente ajustar el tono de tu sonido con un amplio margen. Asi, un simple sample puede usarse para ge- nerar docenas de diferentes sonidos. Ejemplo: 210 Load "AMOS_DATA:Samples/Sample_Demo.abk" For S=1 to 11 Locate 0,0 : ? "Playing sample ";S Sam Play S Locate 0,24 : Centre"":Wait Key:Cline Next S Wait Key Sam Play 1,11 : Wait 5 : Sam Play 2,11 Wait Key Sam Play 1,1,2000 Wait Key Sam Play 1,1,15000 Una mas amplia demostracion de este comando lo podras encon- trar en el ejemplo 17.1. SAM BANK (cambia el actual banco) SAM BANK n Asigna un nuevo banco de memoria para usar por tus samples. Todas las instrucciones SAM PLAY futuras tomaran sus sonidos directamen te de este banco. Es posible explotar esta caracteristica para contener varios juegos completos de samples, uno al lado del otro. SAM RAW (toca un sample de memoria) SAM RAW voice,address,length, frequency Toca un aspero sample almacenado en cualquier parte de la memoria del Amiga. "VOICE" es un modelo-BIT en su formato estandard que especifica la lista de voces que usara tu sample. Cada BIT de es- te modelo selecciona un simple canal de sonido. "ADDRESS" contiene la direccion del sample. Normalmente, se refiere a una zona de los bancos de memoria de AMOS. "LENGTH" con tiene la longitud del sample que deseas tocar. "FREQUENCY" indica la velocidad del sample a usar en la reproduccion (medida en sam- ples por segundo o Hertzios). Esta puede ser muy diferente a la frecuencia original en la que fue grabado el sample. SAM RAW te permite tocar estandard samples de Amiga directamen te desde tu altavoz, sin necesidad de crear un banco especial de memoria (ver Creacion de un banco de samples). Es ahora solo cuestion tuya el manejar esos samples en memoria, e introducir los parametros manualmente. SAM RAW es ideal para revisar los fi- cheros de tus discos. Usa BLOAD para cargar un fichero en un ban- co y luego usa SAM RAW para tocar las datas. Con suerte consegui- ras muchos e interesantes sonidos. Ejemplos: Reserve As Work 10,55000 Bload "Samples/Samples.abk",start(10) Sam Raw 15,start(10),length(10),10000 211 SAM LOOP (repite un sample) SAM LOOP ON/OFF Este comando informa a AMOS Basic que todos los siguientes sam- ples se repetiran continuamente. Ejemplos: Load "AMOS_DATA:Samples/Sampledemo.abk" Sam Loop On For S=1 to 11 Locate 0,0: Print "Tocando el sample ";S Sam Play S Locate 0,24: Centre "":Wait Key:Cline Next S Sam Loop Off Este efecto de repeticion puede desactivarse con una simple llamada al comando SAM LOOP OFF. 1- Creando un banco de samples Si pretendes utilizar tus propios samples mediante SAM PLAY, primero necesitaras cargarlos en un banco de memoria. Esto puede lograrse con el programa SAMMAKER suministrado con el disco de datas AMOS. En el start-up, SAMMAKER aparece como un selector estandard de ficheros AMOS. Introduce el nombre del fichero del primer sample a almacenar en el nuevo banco, y pulsa RETURN. Si AMOS no encon- trara la frecuencia de sampling, tendras que introducirlo direc- tamente. No supone un problema que cometas un error en este caso, ya que podras volver a tocar tus samples a la velocidad adecuada. Despues de un pequeño retraso, se te solicitara otro sample para instalar en el banco. Cuando termines con los samples teclea SAVE en el fichero selector para grabar tus samples al disco. Se te solicitara de nuevo el nombre del fichero destino de tu nuevo banco. Esto puede introducirse con AMOS Basic con el comando LOAD como sigue: Load "Sample.abk" Load "Sample.abk",6 : Rem Carga un sample en el banco 6 Musica ====== El sistema de musica AMOS te permite añadir facilmente un fon- do musical para tus programas. La musica puede ser creada desde una variedad de fuentes, incluyendo GMC, SOUNDTRACKER o SONIX. Al objeto de convertir esas musicas al formato especial AMOS, necesitaras usar uno de los programas traductores incluidos en el disco de datas AMOS. La musica GMC tendria que haber sido salvada usando el icono SAVE DATA, de esta forma se copia tanto la musica como las definiciones de los instrumentos en un solo fichero. 212 MUSIC (toca una pieza de musica) MUSIC n El comando MUSIC comienza a tocar una pieza musical del banco de musica (pt 3). Esta musica sera tocada independientemente de tu programa Basic, sin afectarlo en lo mas minimo. Normalmente, es posible almacenar varias canciones completas en el mismo banco. A cada composicion se le asigna su propio nume ro de musica. La unica excepcion a esta regla es la musica creada con GMC, que solo permite colocar una cancion por cada banco. Por ejemplo: Load "MUSIC/Musicdemo.abk" Music 1 El sistema musical AMOS es inteligente, y suspendera automatica- mente cualquier sonido en el canal actual. Cuando el sonido haya finalizado, tu tono comenzara a tocar desde su posicion previa. Hasta 3 tonos separados pueden comenzar a la vez. Cada nuevo co- mando musical detiene la actual cancion, y coloca su estatus en una pila. Una vez la cancion haya concluido, la vieja musica co- menzara desde donde se dejo. MUSIC STOP (detiene una simple seccion de musica) MUSIC STOP Detiene la reproduccion de la actual pieza musical. Si otra musi- ca es activada, esta se resetea inmediatamente. MUSIC OFF (desactiva todas las musicas) MUSIC OFF Este comando desactiva la musica por completo. Al objeto de poder tocar de nuevo, necesitaras ejecutar la original serie de instruc ciones MUSIC de nuevo. TEMPO (Cambia la velocidad de un sample) TEMPO s Este comando modifica la velocidad en la que un tono esta siendo reproducido con el comando MUSIC. "S" es la nueva velocidad, y os cila entre 1 (muy lenta) hasta 100 (muy rapida). No todos los ins trumentos pueden tocarse a este maximo de velocidad. El limite practico esta alrededor de 50. Para una demostracion, coloca el disco de datas AMOS en el drive y teclea: Load "AMOS_DATA:Music/Musicdemo.abk" Music 1 Tempo 35 Tempo 5 213 Ten en cuenta que la musica creada con GMC a menudo contiene etiquetas que directamente establecen el TEMPO. Esas etiquetas anulan el tempo establecido por AMOS. Por tanto no es aconsejable usarla en tu propia musica. MVOLUME (establece el volumen de una pieza musical) MVOLUME n Cambia el volumen de toda la pieza musical de intensidad n (0-63) VOICE (activa una o mas voces de una pieza musical) VOICE mask Activa una o mas voces de una musica independientemente. De forma habitual, cada voz contiene su propia melodia que sera combinada en salida (altavoces) para generar la musica normal. "MASK" es una mascara-BIT en el formato normal AMOS que especi fica que voces deseas tocar. Cada BIT representa el estado de una voz en la musica. Si se pone a 1, la voz sera representada, de otro modo no se usara en absoluto. Load "AMOS_DATA:Music/Musicdemo.abk" Music 1 For V=0 to 15 Locate 0,0: Print "Voice ";v Voice V Wait 100 Next V Direct Voice %0001: Rem activa voz 0 Voice %0010: Rem activa voz 1 Voice %1001: Rem activa voces 3 y 0 Voice %1111: Rem activa voz 4 = VUMETER (volume-metro) s=VUMETER(v) Esta funcion chequea la voz V y devuelve el volumen de la nota ac tual que esta siendo tocada por tu musica. "S" es un valor de in- tensidad que oscila entre 0 y 63. "V" es el numero de una voz sim ple que va a ser comprobada (0-3). Usando esta funcion, podras hacer danzar a tus sprites una pie za de musica!! Carga el ejemplo 17.2 para una demostracion. Ten en cuenta que tambien una version de AMAL de esta instruc- cion te permitira crear VU-metros utilizando interrupciones. Vea- se el comando VU para mas informacion. 214 1- Tocando una nota PLAY (toca una nota) PLAY ¡voice,¿ pitch,delay Este comando toca una simple nota a traves del altavoz de tu tele visor o equipo de Hi-FI. "PITCH" establece el tono de este sonido que puede oscilar desde 0 (bajo) hasta 96 (alto). Mejor que usar un numero arbitrario, cada tono debe equivaler o estar en rela- cion con una nota musical que en ingles se definen como A, B, C, D, E, F, G (equivalen a Do, Re, Mi, ...). Esto lo podras comprobar en la siguiente tabla: Octava ------------------------------------------ 0 1 2 3 4 5 6 7 Nota Tono ---- ------------------------------------------ C 1 13 25 37 49 61 73 85 C# 2 14 26 38 50 62 74 86 D 3 15 27 39 51 63 75 87 D# 4 16 28 40 52 64 76 88 E 5 17 29 41 53 65 77 89 F 6 18 30 42 54 66 78 90 F# 7 19 31 43 55 67 79 91 G 8 20 32 44 56 68 80 92 G# 9 21 33 45 57 69 81 93 A 10 22 34 46 58 70 82 94 A# 11 23 35 47 59 71 83 95 B 12 24 36 48 60 72 84 96 Como podras observar las notas van ciclando cada 12 tonos. Es- te ciclo es conocido con el nombre de OCTAVA. El parametro de voz opcional te permite tocar tus notas con cualquier combinacion de las 4 voces del Amiga, que como siempre se descompone en un ya conocido mapa-BIT con el siguiente formato Bit Voz --- --- 0 0 Activando un BIT a 1 se tocara la voz equi 1 1 valente. "DELAY" establece la longitud de la 2 2 la pausa entre el comando PLAY y la siguien- 3 3 te instruccion Basic. Esto te permite tocar cada nota antes de que comience la proxima. Un "delay" 0 inicia la nota e inmediatamente salta a la proxima instruccion Basic. Tocando varias notas, una tras otra, podras facilmente generar algunos efectos armonicos muy atractivos. Por ejemplo: 215 Play 1,40,0: Play 2,50,0 Wait Key Play 1,40,15: Play 2,50,15 Do T=Rnd(96): V=Rnd(15): Play V,T,3 Loop PLAY no se limita tan solo a las notas puras. Sino que tambien es posible asignarle complejas ondas al generador de sonido, usan do los potentes comandos WAVE y NOISE. 2- Formas de onda y envolvente SET WAVE (define una forma de onda) SET WAVE wave,shape$ Esta instruccion te ofrece la posibilidad de definir tus propios instrumentos para utilizar con la instruccion PLAY de AMOS Basic. El sonido de tu instrumento dependera del tipo de onda contenido en la memoria del Amiga, en donde existe una "plantilla" que se repite hasta conseguir la nota final. "WAVE" es el numero de la forma de onda que deseas definir. Los valores permitidos van desde 2 en adelante. Esto es debido a que 0 y 1 ya estan preinstalados. La onda 0 contiene un modelo de sonido aleatorio para la produccion de efectos de explosion, mien tras que la onda 1 es una suave onda que genera tonos puros usa- dos para la instruccion PLAY. Los tipos de onda se establecen en una lista de hasta 256 nume ros que se introducen mediante el parametro "SHAPE$". Ahora mira el diagrama siguiente: ONDA +--------------------------------------- TRIANGULO ONDA +--------------------------------------- SINUSOIDAL ONDAS +--------------------------------------- COMPLEJAS 216 Cada numero representa la intensidad de una seccion individual de la forma de onda. Esto es equivalente a la altura de un solo punto en el diagrama. Los valores posibles para la intensidad van desde -128 a 127. Puesto que las cadenas AMOS solo admiten cifras positivas (0-255), necesitaras convertir los valores negativos a un formato especial interno antes de usarlos. El valor deseado se puede calcular simplemente añadiendo 256 a los numeros negativos de tu lista. He aqui un programa que demuestra como la onda triangular del diagrama previo puede ser creada mediante AMOS Basic: S$="" For I= -128 to 127 X=I : If X<0 then Add X,256 S$=S$+CHR$(x) Next I Set Wave 2,S$ Antes de tocar tu forma de onda, tienes que informar a AMOS que canales se asignaran a tu onda. Esto puede lograrse usando el comando WAVE. Añade la siguiente linea a la rutina previa: Wave 2 to 15: For S=10 to 60: Play S,10: Next S La mejor forma de reproducir el efecto de un instrumento real consiste en combinar varias ondas conjuntamente. Un ejemplo de una de esas ondas se puede apreciar en el diagrama anterior (onda compleja). Añadiendo varias ondas conjuntamente, con puntos de inicio di- ferentes y separados, se consiguen dichos efectos. Esto consigue los armonicos suaves necesarios para tocar tus notas. He aqui un ejemplo: SHAPE$="": Degree For S=0 to 255 V=INT((Sin(S)/2+Sin(S*2+45)/4)*128)+127 SHAPE$=SHAPE$+CHR$(V) Next S Set Wave 2,Shape$: Wave 2 to 15 For N=10 to 60: Play N,10: Next N WAVE (asigna una onda a uno o mas canales de sonido) WAVE asigna un numero de onda "W" a uno o mas canales de sonido. "V" contiene un mapa-BIT en el formato estandard. Si un bit de ese mapa se pone a 1, entonces la voz apropiada sera utilizada por PLAY, de otro modo no se afecta en absoluto. Por defecto, la onda 0 se reserva para el canal de ruido y la onda 1 contiene una onda sinusoidal. He aqui algunos ejemplos: 217 Wave 0 to %0001 Play 1,40,0 Wave 0 to %1100 Play 20,10 Wave 1 to %1111 Play 60,0 NOISE (asigna una onda de ruido a un canal) NOISE to voices Aplica un efecto de ruido blanco (onda 0) a la voz seleccionada. Carga el ejemplo 17.3 para una demostracion. "voices" es un estandard modelo-BIT. Los primeros 4 Bits repre sentan las 4 voces posibles, comenzando desde 0. NOISE es equiva- lente al comando WAVE 0 to voices. Ejemplos: Noise to 15 Play 60,0 Play 30,0 DEL WAVE (borra una onda) DEL WAVE n Borra una onda previamente definida mediante SET WAVE. "N" es el numero de la onda y comienza en 2. Es imposible borrar las ondas prefabricadas (noise y sine, 0 y 1) con esta instruccion. Despues que la onda haya sido eliminada, todas las voces se resetearan a la onda estandard (sine), onda 1 u onda por defecto. SAMPLE (asigna un sample a una onda) SAMPLE n to voices Esta es la version mas potente de todos los comandos de onda. Va a asignar un sample almacenado en un banco de samples a la onda actual. El comando PLAY podra ahora tomar un instrumento directa mente del banco de samples y reproducir un sonido. Load "Samples/Sample1.abk" Sample 1 to 15 For I=20 to 50 Play I,50 Next I Como es habitual, "VOICES" te permite seleccionar entre varias vo ces para ser afectadas por esta instruccion, mediante un clasico mapa-BIT.