MIDI (continuação) General MIDI Arquivos MIDI Standard Geber Ramalho & Osman Gioia 1 General MIDI (GM) Problema Um instrumento (patch) é só um número.... Como garantir que uma seqüência (música) feita para um sintetizador vai soar com os instrumentos certos em outro? Solução: General MIDI System, Level 1 Formato e a configuração mínimos que o instrumento reprodutor deverá possuir (logotipo GM) Padrão que assegura portabilidade às seqüências pois define mapeamento entre canais, programas (instrumentos) e sons Geber Ramalho & Osman Gioia 2 General MIDI Especificações para os sintetizadores Mínimo de 24 vozes de polifonia alocadas dinamicamente Resposta multitimbral aos 16 canais MIDI Todas as vozes deverão responder à dinâmica O número de nota MIDI 60 deve corresponder à nota Do central do piano Cada canal deve responder aos controles de: » modulação, volume, estereofonia, expressão, sustentação, desativação de todos os controles e desativação de todas as notas Geber Ramalho & Osman Gioia 3 General MIDI Pré-alocação dos canais Canal 4: Melodia Canal 8: Harmonia Canal 10: Percussão (único realmente respeitado!!!) Percussão O diferentes sons de percussão são associados a números de nota MIDI específicos Geber Ramalho & Osman Gioia 4 Tabela de Percussão GM Nota MIDI 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 Nota Instrumento B1 C2 C# 2 D2 D# 2 E2 F2 F# 2 G2 G#2 A2 A# 2 B2 C3 C# 3 D3 D# 3 E3 F3 F# 3 G3 G# 3 A3 A# 3 Bumbo acústico Bumbo 1 Baqueta +aro Caixa acústica Palmas Caixa elétrica Surdo grave Contratempo fechado Surdo agudo Contratempo fechado Tom-tom grave Contratempo aberto Tom-tom médio-grave Tom-tom médio-agudo Prato batido Tom-tom agudo Prato condutor Prato chinês Centro do prato Pandeiro Prato espalmado Sino de vaca Prato batido 2 Chicote Geber Ramalho & Osman Gioia Nota MIDI 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 Nota Instrumento B3 C4 C# 4 D4 D# 4 E4 F4 F# 4 G4 G# 4 A4 A# 4 B4 C5 C# 5 D5 D# 5 E5 F5 F# 5 G5 G# 5 A5 Prato condutor 2 Bongô agudo Bongô grave Conga aguda abafada Conga aguda aberta Conga grave Tímbale agudo Tímbale grave Agogô agudo Agogô grave Cabaça Maracas Apito curto Apito longo Reco-reco curto Reco-reco longo Claves Bloco de madeira agudo Bloco de madeira grave Cuíca fechada Cuíca aberta Triângulo fechado Triângulo aberto 5 Especificações GM Pré-alocação dos timbres (programas/instrumentos) Números de Programa devem chamar os timbres especificados exceto no canal 10 (percussão) Atenção GM é só uma mapeamento de nomes... Não há garantia que 2 equipamentos tocando “program 1” (acoustic piano) vão soar igualmente... Depende da qualidade deles Geber Ramalho & Osman Gioia 6 Mapa de Timbres GM Geber Ramalho & Osman Gioia 7 Standard MIDI Files (SMF) Geber Ramalho & Osman Gioia 8 SMF: Histórico e Definição Motivação: incompatibilidade A especificação MIDI lidava com controle musical, não com armazenamento Anos depois da introdução do MIDI, cada aplicação usava formatos proprietários de arquivos de seqüências musicais Em 1988: Standard MIDI Files (SMF) Permitindo... Troca de dados seqüenciados entre diferentes programas Especialização dos programas (editores, seqüenciadores, impressão, composição,....) » mesmo os que usam formatos proprietários exportam e importam arquivos MIDI Troca de arquivos à distância (ex. Web) Geber Ramalho & Osman Gioia 9 SMF: Conceitos Básicos Trilha é o fluxo contendo informação temporal para cada evento (ex. notas) e meta-evento (ex. andamento, compasso) MIDI Arquivos MIDI podem conter uma ou mais trilhas Nomes de trilhas e outros textos também podem ser armazenados Formatos dos dados Sempre MSB LSB (Big-Endian format) » Lembrar que processadores Intel seguem padrão little-endian format! Geber Ramalho & Osman Gioia 10 SMF: Formato Formado por 2 tipos de bloco Cabeçalho: fornece as informações iniciais sobre o arquivo Trilhas: Contém o fluxo seqüencial de eventos MIDI separados em até 16 canais Sempre começa com um Bloco Cabeçalho e é seguido por um ou N Blocos de Trilha. Cada bloco é formado por Um rótulo com 4 caracteres: “MThd” e “MTrk” Seu tamanho do bloco (descrito em 32 bits, MSB LSB) Bytes de dados Rótulo Tamanho (32 bits) Bytes de Dados MThd Quantidade de dados do Cabeçalho Dados do Cabeçalho MTrk Quantidade de dados da Trilha Dados da Trilha Geber Ramalho & Osman Gioia 11 Bloco de Cabeçalho Contém informações sobre Formato, Número de Trilhas e Divisão Rótulo Tamanho (em bytes) Formato Número de trilhas Divisão (resolução) Geber Ramalho & Osman Gioia Valores Tamanho MThd 4 caracteres (4 Bytes) 00 00 00 06 4 Bytes 00 00 (Formato 0) 00 01 (Formato 1) 00 02 (Formato 2) 00 01 (p/ formato 0 e 2) 00 01 a FF FF(p/ formato 1) 0+15bits (ticks per beat) 1+15 bits (frames per second) 2 Bytes 2 Bytes 2 Bytes 12 Formatos Formato 0: single track Uma trilha multicanal Mapa de andamentos (tempo) na própria trilha Mais básico dos formatos (e historicamente o primeiro) Formato 1: multitrack Várias trilhas simultâneas com métrica de compasso e andamento iguais Primeira trilha contém o mapa de andamentos geral Formato 2: multisequence Várias trilhas independentes, cada uma com a sua própria métrica de compasso e andamento Pouquíssimo usado (nem todo equipamento dá suporte) Geber Ramalho & Osman Gioia 13 Bloco de Trilha Observações Igual independente do formato Os eventos são amazenados usando o running status Rótulo Tamanho (em bytes) Eventos Geber Ramalho & Osman Gioia Valores Tamanho MTrk 4 caracteres (4 Bytes) 00 00 00 00 - FF FF FF FF 4 Bytes Eventos, Meta-eventos e SysEx 14 Timestamps Cada mensagem MIDI em uma trilha está associada a um indexador temporal chamado de timestamp O início da seqüência corresponde ao tempo zero Timestamp (delta de tempo) mensurado em Clock Ticks = subdivisão de uma semínima e a menor subdivisão do tempo em MIDI Normalmente, um múltiplo de 2 e 3 (ex. 96) Indica ao programa quando executar os eventos (escalonamento) Valor entre 8 a 32 bits representando o lapso de tempo entre dois eventos consecutivos na mesma trilha » quanto tempo passou desde o último evento! » Não é uma medida absoluta, mas relativa! » exemploSMF.doc Geber Ramalho & Osman Gioia 15 Parêntese sobre o timestamp... A Posição temporal absoluta nos sequenciadores e editores adota formatos mais amigáveis MBT: Measure:Beat:Tick Representação métrica (compasso:tempo:ticks decorridos dentro do beat) 04:02:48 = 4o compasso, segundo tempo, metade do tempo caso tempo = 96 (semínima = 96 => 48 = colcheia) HMSF: Hour:Minute:Second:Frame Representação tempo real (hora:minuto:segundo:frames decorridos dentro de um segundo) Usado em sincronização de equipamentos: SMPTE (Society of Motion Picture and Television Engineers) e MTC (MIDI time code) Geber Ramalho & Osman Gioia 16 Eventos MIDI Evento MIDI (propriamente dito) É representado por qualquer mensagem com número de canal, com status corrente podendo ser utilizado » Já estudamos (Note On/Off, Pitch Bend, Program Change,...) Meta Evento Especificam vários tipos de informação úteis além das previstas nas mensagens MIDI normais Não é permitido o uso de status corrente Não é exigido o reconhecimento de todos os Meta Eventos por parte dos programas aplicativos Mensagem Exclusiva do Sistema (Sysex) Utilizada para especificar um fluxo de dados arbitrário e proprietário de cada fabricante Geber Ramalho & Osman Gioia 17 Meta Eventos Rótulo 0xFF Tipo 0 - 127 Tamanho Número de Bytes de Dados Dados Bytes de Dados Rótulo Meta Eventos sempre iniciam com o identificador 0xFF Tipo 14 tipos da tabela a seguir Tamanho Quantidade de bytes de dados armazenado em número com tamanho variável, se não existirem dados, Tamanho = 0 Dados Bytes de dados pertinentes ao tipo de evento em questão Geber Ramalho & Osman Gioia 18 Meta Eventos Tipo 0x00 0x01 0x02 0x03 Dados 2 bytes Variável Variável Variável Descrição Número de Seqüencia Evento Texto Direitos Autorais Nome da Seqüência ou Trilha 0x04 0x05 0x06 0x07 0x2F 0x51 0x54 0x58 Variável Variável Variável Variável 0 bytes 3 bytes Hora:Minuto:Segundo:Frames:Divisão Numerador:Denominador:Resolução: Fusas/Compasso Tom:Modo Variável Nome do Instrumento Letra Marcador de Seção Ponto de Cue Fim de Trilha Andamento SMPTE offset Compasso 0x59 0x7F Geber Ramalho & Osman Gioia Armadura de Clave Específico do Seqüenciador 19 Meta Eventos Número de Seqüência (MIDI Channel Prefix) Evento opcional que deve ocorrer no tempo zero de uma pista antes de qualquer evento MIDI Evento Texto (Text Event) Qualquer tipo de texto descritivo podendo ocorrer em qualquer momento ou trilha Direitos Autorais (Copyright Notice) Deve conter o formato padrão: , “ano”, “autor” Nome da Seqüência ou Trilha (Track Name) Quando estiver na primeira trilha especifica o nome da seqüência, caso contrário especifica o nome da trilha Nome único para cada trilha Geber Ramalho & Osman Gioia 20 Meta Eventos Nome do Instrumento (Instrument Name) Instrumento que executa a trilha Letra (Lyrics) Letra da canção, geralmente secionada em sílabas correspondendo aos tempos de início de cada evento nota Marcador de Seção (Marker) Deverá estar na primeira trilha e serve como guia de ensaio ou marcação de seção (refrão, ponte, parte A, etc.) Ponto de Cue (Cue Point) Texto descritivo de evento temporal multimídia Geber Ramalho & Osman Gioia 21 Meta Eventos Fim de Pista (End of Track) Evento obrigatório, deve aparecer como último evento de uma determinada trilha especificando o seu término. Andamento (Set Tempo) Andamento inicial ou mudança de andamento normalmente em microsegundos por semínima (beat) » Em um arquivo no formato 0, as mudanças de andamento estarão entremeadas aos outros eventos » Em um arquivo no formato 1, o mapa de tempos deverá estar na primeira trilha » Em um arquivo no formato 2 cada padrão independente deverá conter pelo menos um andamento inicial Se não houver andamento especificado é assumido o valor de 120 semínimas por minuto (bpm - beats per minute) Geber Ramalho & Osman Gioia 22 Meta Eventos Compasso (Time Signature) Formato (4 bytes) » Numerador:Denominador:Resolução:Fusas/Compasso » Numerador especifica o numerador do compasso » Denominador especifica o denominador do compasso em potência negativa de dois » Resolução especifica o número de pulsos MIDI por tempo » Fusas/Compasso especifica o número de fusas em um compasso Obedece às mesmas regras que o Andamento Se não for especificado é assumido o compasso 4/4 Geber Ramalho & Osman Gioia 23 Meta Eventos SMPTE offset Especifica o lapso de tempo a partir do qual a seqüência deve iniciar a execução Deverá estar no tempo zero da primeira trilha, e antes de qualquer evento MIDI A hora deverá estar codificada no formato SMPTE Armadura de Clave Formato (2 Bytes) » Tom:Modo » Tom especifica a tonalidade variando de -7 (sete bemóis - Dó b Maior ou La b menor) a +7 (sete sustenidos - Dó # Maior ou La # menor) com o valor 0 igual a Dó Maior ou La menor » Modo: 0 = Modo Maior e 1 = Modo menor Geber Ramalho & Osman Gioia 24 Meta Eventos Meta Evento Específico de Sequenciador Reservado a informações proprietárias de cada fabricante O primeiro byte de dados deverá conter o número de identificação do mesmo. Geber Ramalho & Osman Gioia 25