• No se han encontrado resultados

Práctica 2: Sintetizador MIDI Diseño de Sistemas Basados en Microprocesadores

N/A
N/A
Protected

Academic year: 2021

Share "Práctica 2: Sintetizador MIDI Diseño de Sistemas Basados en Microprocesadores"

Copied!
16
0
0

Texto completo

(1)

Práctica 2: Sintetizador MIDI

Diseño de Sistemas Basados

en Microprocesadores

Néstor Angulo de Ugarte

3º de Ingeniería Informática 2º Cuatrimestre 2003-2004

(2)

Índice

Introducción………... 3

Protocolo MIDI……….… 4

1º Fase: Implementación del Protocolo…. 10 • 2º Fase: La tarjeta de Sonido……… 12

Conclusión………. 15

(3)

Introducción

M

IDI (siglas de Musical Instrument Digital Interface, o Interface Digital de Instrumentos de Música) es un estándar para el control de instrumentos de música y generación de sonido electrónico. Con un protocolo basado en el RS232 es capaz de tocar una nota o cambiar de instrumento remotamente con la generación de paquetes que se envía a dicho dispositivo y éste interpreta.

En esta práctica el objetivo era crear una interacción entre el PIC trainer y una tarjeta de sonido de forma que funcionaran como un instrumento MIDI. Con un teclado acoplado al PIC (el hexadecimal, por ejemplo) se podía tocar algo básico de música. El proyecto consta de dos fases. La implementación del protocolo y los datos en el PIC y la utilización del teclado hexadecimal y la fase hardware donde se conectará el PIC a la tarjeta de sonido para que ésta traduzca los paquetes MIDI a música por unos altavoces.

(4)

Protocolo MIDI

E

l protocolo MIDI es parecido al RS232 y tiene las siguientes características:

• La línea cuando está en reposo está a nivel alto (1)

• El StartBit da comienzo a la transferencia y es un 0

• Se mandan todos los bytes juntos, constituyendo un paquete, estando formados por 1 byte (8bits) de Status y 1 o 2 de datos, separados por StopBits y StartBits. Los Bytes de datos y de Status se diferencian en que el de Status comienza con un 1 y los demás con un 0.

• Una vez mandado un byte, se manda un StopBit, es decir, un 1. Si se va a mandar otro byte, perteneciente al paquete, se manda a continuación un StartBit y se manda el byte, terminado en un StopBit. Sino, la línea seguirá a uno, por lo que se tomará como estado de reposo y el paquete se habrá cerrado. El final del envío del paquete se reconoce porque se reciben dos StopBit juntos (11). Si se recibe un 1 y luego un 0 es que esperamos otro byte.

• El periodo de transferencia de un bit es de 32 µsg.

• Los Bytes se almacenan al revés debido a que se mandan los bits empezando por el LSB.

Status Data1 Data2

0 000 01001 1 00 0 1 1 1 1 00100 0 0 0 0 0 10 1

Bytetype bits (1-> Status, 0-> Data) Startbits

Stopbits

MIDI event bits MIDI channel bits

MIDI note bits

(5)

El Status Byte, se forma de dos partes:

• Canal para el cual va ser aplicable los datos (MIDI tiene 16 canales de instrumentos): son los 4 primeros bits. Nosotros siempre usaremos el primero, es decir, 0000. Channel number Channel binary number (4 bit) 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 10 1010 11 1011 12 1100 13 1101 14 1110 15 1111 • Evento:

o Descripción de los datos que se reciben. Define

que se va a hacer con lo que viene a continuación y si se espera 1 o 2 bytes de datos.

(6)

En la siguiente tabla están reflejados los posibles eventos para formar el Status byte:

Event number Event binary code (3 bit)

Event name Event

description MIDI pack contains

0 000 Note Off An key has been released - switch off its note. 3 bytes: Status byte

Data1 byte (Note number 0..127) Data2 byte

(Velocity 0..127) 1 001 Note On An key has

been pressed - switch on its note.

3 bytes: Status byte

Data1 byte (Note number 0..127) Data2 byte (Velocity 0..127) 2 010 Polyphonic Key Pressure (Aftertouch) An key has been slightly moved up or down after Note On event has been generated for this key - change its

velocity

3 bytes: Status byte

Data1 byte (Note number 0..127) Data2 byte (New velocity 0..127) 3 011 Control Change Change controller's value. 3 bytes: Status byte Data1 byte (Controller number 0..127)

Data2 byte (New value 0..127) 4 100 Program Change Change the patch (instrument) number. 2 bytes: Status byte Data1 byte (New patch number 0..127) 5 101 Channel pressure (Aftertouch) An key has been slightly moved up or down after 2 bytes: Status byte Data1 byte (New velocity 0..127)

(7)

Note On has been

generated for this key - change all notes velocity. 6 110 Pitch Wheel Change The pitch wheel position has changed - change new pitch value. 3 bytes: Status byte

Data1 byte (Least significant byte of new pitch value 0..127)

Data2 byte (Mist significant byte of new pitch value 0..127)

7 111 System Exclusive

Used for all things non-supported by MIDI messages 0..1. Different manufacturers use this different way. Commonly, self-made MIDI stuff doesn't support this message.

En nuestro caso, generaremos una nota con un Note On, acompañado con un Note Off para que no se quede sonando indefinidamente. Con el teclado hexadecimal tocaremos las notas y cambiaremos de instrumento mediante un Program Change (evento 4). Las posibilidades de instrumentos que tiene MIDI son 128, distribuidos en 16 familias donde cada familia contiene 8 instrumentos. Por ejemplo, se tiene la familia Piano donde sus 8 instrumentos hacen relación al piano:

Prog# Instrument Prog# Instrument

PIANO CHROMATIC PERCUSSION 1 Acoustic Grand 9 Celesta

2 Bright Acoustic 10 Glockenspiel 3 Electric Grand 11 Music Box 4 Honky-Tonk 12 Vibraphone 5 Electric Piano 1 13 Marimba 6 Electric Piano 2 14 Xylophone 7 Harpsichord 15 Tubular Bells 8 Clavinet 16 Dulcimer

(8)

ORGAN GUITAR

17 Drawbar Organ 25 Nylon String Guitar 18 Percussive Organ 26 Steel String Guitar 19 Rock Organ 27 Electric Jazz Guitar 20 Church Organ 28 Electric Clean Guitar 21 Reed Organ 29 Electric Muted Guitar 22 Accoridan 30 Overdriven Guitar 23 Harmonica 31 Distortion Guitar 24 Tango Accordian 32 Guitar Harmonics

BASS SOLO STRINGS 33 Acoustic Bass 41 Violin 34 Electric Bass(finger) 42 Viola 35 Electric Bass(pick) 43 Cello 36 Fretless Bass 44 Contrabass 37 Slap Bass 1 45 Tremolo Strings 38 Slap Bass 2 46 Pizzicato Strings 39 Synth Bass 1 47 Orchestral Strings 40 Synth Bass 2 48 Timpani

49 String Ensemble 1 57 Trumpet ENSEMBLE BRASS

50 String Ensemble 2 58 Trombone 51 SynthStrings 1 59 Tuba

52 SynthStrings 2 60 Muted Trumpet 53 Choir Aahs 61 French Horn 54 Voice Oohs 62 Brass Section 55 Synth Voice 63 SynthBrass 1 56 Orchestra Hit 64 SynthBrass 2

REED PIPE

65 Soprano Sax 73 Piccolo 66 Alto Sax 74 Flute 67 Tenor Sax 75 Recorder 68 Baritone Sax 76 Pan Flute 69 Oboe 77 Blown Bottle 70 English Horn 78 Skakuhachi 71 Bassoon 79 Whistle 72 Clarinet 80 Ocarina

SYNTH LEAD SYNTH PAD

81 Lead 1 (square) 89 Pad 1 (new age) 82 Lead 2 (sawtooth) 90 Pad 2 (warm) 83 Lead 3 (calliope) 91 Pad 3 (polysynth) 84 Lead 4 (chiff) 92 Pad 4 (choir) 85 Lead 5 (charang) 93 Pad 5 (bowed) 86 Lead 6 (voice) 94 Pad 6 (metallic) 87 Lead 7 (fifths) 95 Pad 7 (halo) 88 Lead 8 (bass+lead) 96 Pad 8 (sweep)

SYNTH EFFECTS ETHNIC

97 FX 1 (rain) 105 Sitar 98 FX 2 (soundtrack) 106 Banjo 99 FX 3 (crystal) 107 Shamisen 100 FX 4 (atmosphere) 108 Koto 101 FX 5 (brightness) 109 Kalimba 102 FX 6 (goblins) 110 Bagpipe 103 FX 7 (echoes) 111 Fiddle 104 FX 8 (sci-fi) 112 Shanai

(9)

PERCUSSIVE SOUND EFFECTS

113 Tinkle Bell 121 Guitar Fret Noise 114 Agogo 122 Breath Noise 115 Steel Drums 123 Seashore 116 Woodblock 124 Bird Tweet 117 Taiko Drum 125 Telephone Ring 118 Melodic Tom 126 Helicopter 119 Synth Drum 127 Applause 120 Reverse Cymbal 128 Gunshot

Distribuiremos el teclado de la siguiente manera:

• Las teclas del 0 a la D serán instrumentos,

• La E y la F cambiarán el instrumento. Yo he elegido el piano 1 (Acustic Grand) y la guitarra 25 (Nylon String Guitar).

1

2

3

4

5

F

6

7

8

C

0

A

B

E

D

9

Nota (NoteOn y NoteOff)

(10)

1º Fase: Implementación del Protocolo

E

l programa que he desarrollado, prueba.asm, hace uso de uno ya implementado, llamado leetecla.asm del que recibo el código en binario de la tecla pulsada (0, 1, 2... F). Según ese número, y mediante unas tablas, organizo un paquete MIDI. Del 0 a la D son notas y la E y la F son cambios de instrumento. Una vez que tengo organizados los paquetes a mandar en tres Bytes (Statusb, Dato1, Dato2), llamo a otro programa implementado por mi, EnviaDato.asm, cuya misión es mandar dichos bytes por la puerta A, ya que la Puerta B la utiliza el programa leetecla.asm, cumpliendo las temporizaciones de 32 µsg por cada bit, ya que cada instrucción utiliza 1 µsg menos las de salto(call, return, decfsz, btfsz… etc), que utilizan 2.

Por ello el flujo del programa sería este:

Teclado Leetecla.asm prueba.asm Código binario de tecla Tablas con bytes MIDI

EnvioDato.asm Línea MIDI

2 o 3 bytes

En estos programas utilizo código reubicable, por lo que uso code en vez de org, los registros especiales ya están declarados, etc.

(11)

La línea MIDI, por donde se trasnsmiten los bits es el 4º bit de la PuertaA:

Puerta A Puerta B

Ésta es la linea MIDI

Esto implica que antes de mandar los datos, se deben tratar; se rotan a la izquierda 3 lugares.

01100101

LSB Bit que se manda

00101011

LSB

Una vez finalizado el programa, y comprobado con el osciloscopio que se mandan los paquetes y con la temporización adecuada, pasamos a la 2º fase.

(12)

2º Fase: La tarjeta de Sonido

En esta última fase, se procede al conectado del PIC con el puerto MIDI/Juegos de una tarjeta de sonido cualquiera. Hay que tener en cuenta que la señal recibida por la tarjeta de sonido debe ser TTL, es decir, cumplir el siguiente estándar:

El puerto de MIDI, o de Joystick, como también se le conoce, tiene la siguiente forma y descripción:

Picture PinDescription

1+5v

2X button for joystick A

3X potentiometer for joystick A

4Ground 5Ground

6Y potentiometer for joystick A 7Y button for joystick A

8+5v

9+5v

10X button for joystick B

11X potentiometer for joystick B

12MIDI out

13Y potentiometer for joystick B 14Y button for joystick B

15MIDI In

Marcadas en negrita están las líneas de interés. Realmente, en nuestro proyecto sólo haremos uso de 4 de esas líneas, según el siguiente esquema:

(13)

donde la tierra iría conectada a los pins 13, 4 y 5, y la línea MIDI, a la que se le acopla una resistencia en serie de 220 Ω, al pin 15. El suplemento de corriente es opcional y solo se usa si el controlador MIDI tiene menos de 10-20 mA de corriente. No es nuestro caso.

Tras terminar el conexionado, pasamos a comprobar que los paquetes se envían y se reciben bien, utilizando el programa MIDIkey, que envío con esta memoria. Dicho programa debemos configurar lo para que muestre en la consola los paquetes que recibe:

(14)

De esta manera, cuando se pulse alguna de las teclas del teclado hexadecimal, deberían aparecer datos en la consola del estilo de NoteOn y NoteOff en el caso de las teclas del 0 a la D, y Program Change en el caso de la E y la F. Los datos de la izquierda del programa son para el envío de paquetes a un dispositivo MIDI externo, obviamente no los utilizaremos porque nosotros solo los queremos recibir.

Lo que queda ya es sólo crearse un programita que interprete lo que le llega por el puerto MIDI y lo reproduzca por los altavoces. Dichos programas existen en la red y son muy numerosos.

(15)

Conclusiones

É

ste proyecto recibe el nombre de sintetizador MIDI, aunque muy básico. Con más tiempo, se podría acoplar un teclado de verdad, con las octavas que se quieran, al PIC, de tal forma que cuando se pulse una tecla, se mande un código de tecla al PIC y éste haga lo que hasta ahora ha hecho, traducirlo a paquetes MIDI y enviarlos para una posterior interpretación la tarjeta de sonido. Mediante los botones del teclado hexadecimal se podrían cambiar las diferentes configuraciones. Hay que tener en cuenta que MIDI nos da muchísimo juego con la cantidad de configuraciones que tiene. No solo los instrumentos, sino también el tiempo que sostiene una nota, la velocidad, la presión de la tecla, polifonía, instrumentos propios, los 16 canales que pueden reproducirse a la vez formando una orquesta de 16 posibles instrumentos musicales, incluso voz, y muchas caracteríscas más.

En este proyecto, aparte de haber aprendido ese mundo aparte de la música electrónica con MIDI, me he dado cuenta la grandísima utilidad de los microcontroladores como el PIC16f84. Realmente me ha abierto muchas puertas y me gusta el tema. Es terriblemente interesante y atractivo la cantidad de cosas que se pueden hacer con una “cucaracha” de apenas unos centímetros.

(16)

Bibliografía

• Apuntes de clase

• Manuales del pic16f84

• Manuales del pic trainer

• MPLAB de Microchip • Microsoft Office 2003 • MIDIkey • Internet: o http://www.audiomulch.com/midipic/ o http://www.geocities.com/JDPetkov/ o http://www.borg.com/%7Ejglatt/

Referencias

Documento similar