MusicA – Tocando MIDI no MSX – Parte III

Continuando a série de artigos sobre musica no MSX, vou apresentar a vocês um software bem interessante que descobri em minha busca por uma maneira de converter MIDI para o MSX, estou falando do MusicAMSX Music Editor/Player.

Existe pouco registro sobre a autoria do MusicA na internet, porém analisando internamente os binários desse software, descobri que o mesmo pode ter sido feito na Holanda, antes de 1992, devido a strings encontradas com texto no idioma desse País e também devido a diversos samples possuir em seus comentários o ano de 1992 com textos em holandês.

A única certeza é que um dos Players presentes no disco do MusicA foi feito em 1996 pelo japonês, Keiichi Kuroda. O outro Player do MusicA parece ser de origem holandesa, porém não sei se é original do MusicA editor ou se foi adicionado ao pacote, mas com certeza o conjunto deve ter sido montado por algum entusiasta no decorrer dos anos. Infelizmente não há site oficial para nenhum desses softwares.

O pessoal da Nerlaska Studio, da Espanha e que faz softwares, principalmente games para diversas plataformas entre elas o MSX, desenvolveu um Editor baseado no MusicA, para Windows que na verdade é um plugin para o BlueMSX, onde o mesmo parece utilizar o MML do MSX-BASIC, através do comando PLAY.

Voltando ao MusicA, a característica mais interessante desse software é que ele suporta quase tudo o que existe em tecnologia de hardware musical para o MSX, ou seja, com o MusicA podemos ter as seguintes possibilidades sonoras:

  • 3 Canais de som PSG;
  • 9 Canais de som FM;
  • 5 Canais de som SCC;

.

Tudo isso totaliza incríveis 17 canais de sons, o que nos possibilita criar composições superiores a qualquer uma existente no MSX hoje, sem contar as que utilizam a MoonSound é claro.

Ou seja, exceto pela ausência de suporte a placas MoonSound-like, o MusicA suporta tudo o que já foi lançado em matéria de hardware para o MSX, o que o torna um dos mais bem sucedidos lançamentos em matéria de software musical para o MSX dos últimos anos e ainda devemos considerar o fato de que com o MusicA, podemos escrever musicas que utilizam apenas os 3 canais do PSG, ou seja, podemos compor e converter musicas MIDI para tocar em um MSX 1, sem a necessidade de alguma placa mais moderna.

O MusicA é composto por duas peças fundamentais para o nosso processo de conversão de MIDI para o MSX, que é o MML Editor e o BGM RePlayer.

Vamos falar a seguir sobre os dois modos de operação do MusicA.

MusicA MML Editor.

O modo de edição do MusicA se trata de um poderoso editor feito para quem está disposto a trilhar o caminho da construção e edição de composições diretamente em MML. Com ele você pode escrever comandos MML, como os descritos na parte 2 dessa série, e a partir daí executar e buscar erros nas músicas, ou até mesmo editar e corrigir imperfeições em trechos da composição.

O editor do MusicA grava o seu MML em um formato próprio (texto), com a extensão .MSD. Esse arquivo, assim como o MML gerado pelo 3MLEditor, é o código fonte que contém toda a música em formato MML, pronta para ser editada e executada no software.

Além disso,  é no editor que você tem acesso ao modo de compilação do MML para o formato BGM, que é aceito pelo KINROU5 BGM Replayer do MusicA.

Segue abaixo um exemplo de um arquivo MSD aceito pelo MusicA:

; MSD file generated by mml2msd compiler.
; CopyLeft (c) since 2011 by PlanetaMessenger.org.
;

;
; Channels definitions
;

FM1=C1,CH1
FM2=C1,CH2
FM3=C1,CH3
FM4=
FM5=
FM6=
FMR=
FM7=
FM8=
FM9=
PSG1=
PSG2=
PSG3=
SCC1=
SCC2=
SCC3=
SCC4=
SCC5=

;
; User custom MML definitions
;

C1=T200

;
; Channels MML content
;

CH1=T200V8>E16G+16C+16E16V10<A16>C+16V14<G+16>C+16<A16F+16E16A16>E16G+16C+16E16V10<A16>C+16V14<G+16>C+16<A16F+16E16A16R8A.
CH2=V14R1.R32C-16F+.F+32
CH3=V14R1.<F+16>D.D16

TIP

O arquivo MSD é dividido basicamente em duas seções:

  • Definição dos canais, organizados entre canais FM, PSG e SCC.
  • Definição das variáveis com o conteúdo MML a ser executado pelos canais.
MusicA - Editor

A imagem acima mostra a tela do editor do MusicA com um arquivo MSD, que é o formato MML padrão do MusicA, carregado e pronto para edição/execução.

Segue abaixo alguns atalhos de teclas aceitos pelo editor do MusicA:

  • F1 – Posiciona cursor no inicio do arquivo editado;
  • F2 – Posiciona cursor no final do arquivo editado;
  • F5 – Compila e executa o MML corrente no editor;
  • F3 – Pára execução do MML corrente no editor;
  • ESC – Aciona menu de opções do Editor (Manipulação de blocos de texto, opções de disco, configuração de canais);

.

Ao entrar nas opções de disco do menu principal (ESC -> D), temos as seguintes opções disponíveis:

  • ESC) QUIT – Volta ao Editor do MusicA;
  • 1) load MUSIC – Lê um arquivo MSD, que é o código fonte do MML, aceito pelo MusicA;
  • 2) load VOICE – Lê um arquivo de instrumentos do MusicA;
  • 3) save MUSIC – Salva arquivo (MSD) editado no momento;
  • 4) save VOICE – Salva arquivo de voz carregado no momento;
  • 5) save BGM – Compila o arquivo MSD e salva para o formato BGM (BackGround Music);

.

Após a edição de sua partitura MML, é claro que você desejará gravar o resultado de seu trabalho, então o menu de disco será amplamente utilizado, inclusive para compilar o MML do editor para um arquivo BGM, que é o arquivo utilizado pelo BGM Replayer, o que é feito pela opção 5 do menu de discos.

Apesar do editor aparentar ser simples, se trata de uma excelente ferramenta para criação de melodias para o MSX, porém nada melhor do que compor com instrumentos musicais reais aliado a possibilidade de edição profissional através softwares existentes na plataforma PC, então acredito que a utilização do editor do MusicA, será util apenas para que o arquivo MSD, seja convertido para BGM para que possamos utilizá-lo no MSX-BASIC, caso você não queira utilizar nada em BASIC, poderá utilizar o editor do MusicA apenas como um Player de áudio 🙂 .

Mas se você quer mesmo é desenvolver alguma musica para utilizar fora do editor do MusicA, então você precisa conhecer as duas opções de BGM Replayers que estão presentes no pacote do MusicA.

KINROU5 BGM Replayer.

Bom, estamos avançando e conhecendo cada vez mais algumas ferramentas úteis no MSX (e fora dele) que nos  possibilita ter musica de qualidade nessa plataforma de computadores.

Já sabemos o que é MML, como conveter MIDI para um formato MML proprietário do software 3MLEditor, também sabemos sobre como utilizar MML no MSX através do comando PLAY do MSX-BASIC e também conhecemos o editor de MML, chamado MusicA, que é similar ao 3MLEditor, mas que trabalha com um formato próprietário, que é o MSD.

Sabemos também que o editor do MusicA pode compilar o formato próprio (MSD) e convertê-lo para o formato BGM, que é utilizado em muitos jogos de MSX.

Mas fica a pergunta no ar. Como utilizar esse “bendito” BGM no MSX-BASIC, principalmente em meus jogos e programas ?

Existem dois players presentes no pacote compactado do MusicA, que pode ser obtido nesse site aqui, cujo funcionamento vou explicar a seguir.

O primeiro player está na imagem de disco 720K chamada datafunk.dsk e ao inserir essa imagem no seu emulador ou gravá-la em disquete de 3/12” para utilização em um MSX real, você terá acesso aos arquivos binários do KINROU5 , bem como alguns arquivos em BASIC que servem como exemplo de utilização das músicas BGM presentes  também no disco.

Segue abaixo as informações sobre cada um desses módulos, bem como sobre as funcionalidades programáveis do KINROU5, via MSX-BASIC.

Arquivos do Kinrou5 BGM Player

 

FILES “*.*”

  • REPLAY.BIN, GBAS07.SYS, GBAS07.LDR, KINROU05.DRV –  Esses arquivos juntos compõe o Player que poderá ser utilizado pelos seus programas em MSX-BASIC;
  • *.MSD – São arquivos MML aceitos pelo MusicA Editor e não tem funcionalidade fora desse programa, ou seja, é apenas um arquivo texto comum com conteúdo MML;
  • *.BGM – São arquivos de musica aceitos pelo player;
  • AUTOEXEC.BAS, NTSCFUNK.BAS – Código MSX-BASIC com exemplos de utilização dos comandos do player;
  • DATAFUNK.FLP – Sem uso conhecido;

Segue abaixo um programa MSX-BASIC que coloca o player em ação:

MSX-BASIC source code

10 COLOR 15,1
20 CLEAR:DEFINT A-Z
30 BLOAD“gbas07.ldr”,R
40 CMD LOAD (“datafunk.bgm”)
50 CMD PLAY
60 CLS:RESTORE
70 PRINT “DataFunk  ”
80 PRINT
90 PRINT
100 PRINT
110 PRINT “FMPAC + PSG”
120 PRINT
130 PRINT
140 PRINT”  press q to stop”
150 IF INKEY$=“q” THEN 170
160 GOTO 150
170 CMD STOP
180 CMD
190 CLS

Preste atenção na linha 30, onde é carregado o player através do comando BLOAD “gbas07.ldr”,R. Não se esqueça que os demais binários do player, conforme descrito anteriormente, são necessários para o funcionamento do mesmo, pois o GBAS07.LDR, é quem carrega esses arquivos.

O restante do “truque” continua na linha 40, onde o player aproveitou a palavra reservada, CMD do MSX-BASIC, adicionou a rotina do player ali para que pudessemos, através do MSX-BASIC, comandar suas ações.

Abaixo eu deixo o texto retirado do MSX Technical Handbook e que descreve como implementar funções adicionais ao MSX-BASIC utilizando essa palavra reservada.

TIP (In English please)

4.3 Making New Commands

In MSX the reserved words “CMD” and “IPL” are currently unused and by changing the pointers to these words (FE0DH and FE03H) to jump to your own assembly language routine, new commands can be built.

Os parâmetros aceitos pelo player via CMD são os seguintes:

  • LOAD( “NOME_ARQ.BGM”) – Carrega um arquivo BGM para execução;
  • PLAY – Inicia a execução da música BGM;
  • STOP – Pára a execução da música BGM;

.

É bem simples assim e com um pouco de traquejo, podemos até fazer um programa que crie excelentes interfaces com o usuário.

REPLAY.BIN

O outro player é o REPLAY.BIN que está presente no disco principal do MusicA (musica.dsk) possibilita, assim como o KINROU5, a integração com o MSX-BASIC. Segue abaixo um código MSX-BASIC, retirado do próprio pacote do MusicA (LOADMUS.BAS), que poderá ser utilizado como exemplo de utilização desse player.

MSX-BASIC source code

10 CLEAR 200,&HA5B6 : DEFINT A-Z : DIM A(1)
20 BLOAD“REPLAY.BIN”:BLOAD“KNIGHT.BGM”
30
40 DEFUSR0=&HCE00:‘ Init muziekdata
50 DEFUSR1=&HCE03:‘ Start muziek (a=usr(xx):xx=adres muziek)
60 DEFUSR2=&HCE06:‘ Stop muziek
70 DEFUSR3=&HCE09:‘ Fade controller (a=usr(xx):xx=volume)
80 DEFUSR4=&HCE0C:‘ PSG kanalen aan/uit?? (a=usr(xx):xx=kanalen keuze)
90
100 RESTORE190:FOR A=&HAFF7 TO &HAFFF:READ F : POKE A,F : NEXTA
110 A=USR0(0):A=USR3(4)
120 A(0)=0
130 A(1)=&HA5B7: ‘ Beginadres muziekstuk
140 A=USR1(VARPTR(A(0)))
150 FOR W=0 TO 8:A=USR3(PEEK(&HAFF7+W)):FOR P = 1 TO 60 : NEXT P : NEXT W : ‘FADE IN
160 FOR W=8 TO 0 STEP -1 : A=USR3(PEEK(&HAFF7+W)):FOR P=1 TO 60 : NEXT P : NEXT W : ‘FADE OUT
170 PRINT“A=USR2(0) ‘Stopt de muziek” : END
180 ‘ Data fade in
190 DATA 4,5,6,2,13,3,12,14,15

Ao contrário da facilidade do código MSX-BASIC do KINROU5, o REPLAY.BIN é um pouco mais complicado de se programar, porém existe a vantagem dos efeitos FADE ON/OFF.

Na linha 20 BLOAD“REPLAY.BIN”:BLOAD“KNIGHT.BGM”, temos a carga do binário do REPLAY.BIN juntamente com o arquivo de música, KINGHT.BGM.

A partir daí, as linhas 40 até 80, definem as rotinas desse Replayer, com as possibilidades de PLAY (linha 50), STOP (linha 60), controladores de Fade On/Off ( linha 70).

Esse replayer é bastante poderoso porém existe um ponto de instabilidade que causa o travamento da máquina e ocorre quando você tenta carregar outra musica no replayer sem parar a música que está em execução, ou seja, certifique-se de chamar a rotina que pára a música, no caso do exemplo acima com a chamada a USR2(0), antes de carregar outra música.

Conclusão

Estamos no fim da terceira parte dessa série de artigos sobre música no MSX e já temos compreensão de grande parte do processo de transporte de uma música MIDI para o MSX, porém faltou uma peça aí no meio do caminho que é um procedimento para transformar arquivos em formato MML, gerados pelo 3MLEditor, para os arquivos MSD suportados pelo MusicA para enfim convertê-los em BGM e acessá-los pelo MSX-BASIC ou qualquer outro software que suporte esse formato.

O último artigo da série irá explicar sobre o  compilador de linha de comando que desenvolvi, denominado mml2msd, e que é capaz de converter arquivos MML para MSD, aplicando diversos filtros de conversão em cima do MML original, afim de que o MML final (MSD), seja compreensível pelo MusicA, uma vez que o MML aceito por esse software não é 100% compatível com o gerado pelo 3MLEditor.

Bom, vou ficando por aqui e brevemente estarei liberando o último artigo da série, sobre música no MSX.

Aguardem as novidades e, repetindo as sábias palavras do jovem mestre intergaláctico, o ET Bilu, principalmente que busquem conhecimento 🙂 .

[]’s

PopolonY2k

Referências na internet

MusicA Tools
http://www.nerlaska.com/msx/musica.html

MusicA – Download
http://woolyss.com/chipmusic/chipmusic-mml/MuSICA.zip

MML Resources
http://woolyss.com/chipmusic-mml.php

Nerlaska Studio
http://www.nerlaska.com

Konami SCC
http://en.wikipedia.org/wiki/Konami_SCC

MoonSound Wikipedia
http://en.wikipedia.org/wiki/Moonsound

MusicA – Tocando MIDI no MSX – Parte II
http://www.popolony2k.com.br/?p=742

Takamichi’s Konami and other MSX Music Resources
http://www.msxnet.org/gtinter/konamuus.htm

Print Friendly, PDF & Email

MusicA – Tocando MIDI no MSX – Parte II

Conforme prometido no post anterior, vamos começar a destrinchar o processo de conversão de MIDI para algo que MSX consiga tocar.

Para quem não sabe, MIDI (Musical Instrument Digital Interface) é um padrão de comunicação entre instrumentos musicais e que permite o intercambio de informações entre dispositivos musicais eletrônicos, sejam esses diferentes entre sí ou até mesmo de fabricantes diferentes.

Vou reproduzir abaixo o texto da Wikipedia que descreve com exatidão sobre o MIDI e sua origem.

Diferentemente de outros formatos (como o formato WAV e MP3), um arquivo MIDI não contém o áudio propriamente dito, e sim as instruções para produzi-lo, ou seja, é basicamente uma partitura digitalizada. Essas instruções definem os instrumentos, notas, timbres, ritmos, efeitos e outras características que serão utilizadas por um sintetizador para a geração dos eventos musicais.

Até a década de 70, a comunicação entre instrumentos musicais era algo impraticável. Foi quando um grupo de fabricantes (os mais conhecidos da época) desenvolveu o padrão MIDI (Musical Instrument Digital Interface). Este padrão permite o envio de mensagens de controle entre instrumentos eletrônicos digitais ou analógicos, e é, portanto, uma representação de eventos e não de som digitalizado.

A escolha pelo MIDI foi justamente pelo fato do mesmo ser um padrão bem estabelecido e respeitado por todos os fabricantes de instrumentos musicais e também pelo fato de existir diversos softwares para PC capazes de editar, manipular e aperfeiçoar um trabalho em MIDI, pois a excelência desses softwares para PC ajudam a garantir a qualidade de execução do MIDI em qualquer plataforma, incluindo o MSX, que é carente de softwares desse tipo.

No universo MSX é conhecido que no MSX Turbo-R A1GT, a última versão de MSX lançada, existe a capacidade de manipulação de MIDI, ou seja, esse computador é um dispositivo MIDI-Compatible, podendo se comunicar com instrumentos musicais externos e executar musicas MIDI, através de extensões em seu hardware, além de  uma ROM com extensões em software para utilização de toda capacidade MIDI desse computador.

OBS: Como desejamos desenvolver softwares que rodem a partir da plataforma MSX 2.0, esse MSX (Turbo-R A1GT) não pode ser considerado como base, apesar das capacidades e facilidades que o mesmo possui para gerenciar e se comunicar com dispositivos MIDI.

Mas um MSX 2.0 é capaz de tocar MIDI ?

Bom, eu tenho conhecimento de alguns softwares que são reconhecidos por tocar  e possibilitar a edição de MIDI diretamente no MSX, sem alguma conversão (???), como é o caso do Meridian, porém na prática os altos requisitos de hardware para a utilização do mesmo (512Kb Memory Mapper) o torna inviável para a maioria das máquinas  padrão (64Kb RAM), sem contar a impossibilidade de utilização pelo MSX-BASIC.

O que fazer então para que possamos usufruir do poder do MIDI no PC e transporta-lo ao MSX ?

A primeira coisa é estabelecer os requisitos mínimos de nossa plataforma para que, a partir daí, possamos começar a estudar essa plataforma e buscar soluções para esse ambiente conhecido.

Vamos à lista de requisitos mínimos da plataforma desejada:

  1. MSX 2.0;
  2. 64Kb RAM;
  3. Possibilidade de utilização de placas de som FM-PAC;
  4. Possibilidade de utilização de instrumentos modernos para composição das músicas;
  5. Possibilidade de edição da composição, podendo ajustar possíveis imperfeições;
  6. Possibilidade de execução das composições no MSX-BASIC;
  7. Possibilidade de transporte das composições para o MSX;

.

Bom, os itens 1 e 2 são básicos e não necessitam de maiores explicações, ou seja, é um requisito obrigatório pois queremos desenvolver algo para MSX 2.0 com 64Kb e não existe mais possibilidade de discussão sobre esses pontos.

O item 3 também é uma possibilidade muito interessante, embora não obrigatória.

O ítem 4 também é um fato consumado, pois se quisermos qualidade profissional nas composições, então devemos contemplar a possibilidade para utilização de equipamentos profissionais e para isso nada melhor do que a utilização de um protocolo bem estabelecido e aceito por todos os instrumentos, que possuem capacidade de comunicação com o mundo externo, que é o protocolo MIDI.

No item 5, mais um motivo para utilização do MIDI, pois o mesmo possui uma riqueza de softwares para PC, que possibilitam sua edição e aperfeiçoamento nessa plataforma.

Quanto aos itens 6 e 7……….ops……..

Enquanto perambulavamos pelo mundo dos instrumentos músicias e também no mundo dos PC‘s estava tudo perfeito, pois esses sistemas possuem riqueza de softwares musicais, porém ao entrar no mundo musical da plataforma  MSX, percebemos um universo desconhecido a ser explorado e desenvolvido.

MSX – Um universo musical desconhecido ?

Já conhecemos muito bem os requisitos mínimos de nossa plataforma, resta agora conhecer mais profundamente essa plataforma e uma das coisas que sabemos de imediato é que, tirando o Turbo-R A1GT, os MSX anteriores não possuem extensões MIDI builtin.

Até existem placas MIDI para um MSX anterior ao Turbo-R A1GT, porém são raras e certamente é um limitador para as nossas ambições de conquista do mundo 🙂 , logo estão fora de cogitação.

Como  resolver esse impasse ?

Bom, existem duas maneiras para resolver esse problema.

  1. A primeira é implementar o protocolo MIDI nós mesmos para os MSX anteriores ao Turbo R A1GT;
  2. Aprofundar um pouco mais nas estruturas internas do MSX afim de buscar alguma coisa “pronta“.

.

A primeira opção é linda para qualquer programador que adora desenvolver protocolos, como é o meu caso, porém nesse caso não posso me esquecer de que estou no meio de um desenvolvimento de um game e que os resultados do desenvolvimento devem ser menos demorados possíveis, para que não possamos perder o “pique“, por isso, pelo menos por enquanto, eu descartei essa possibilidade.

Só nos resta então analisar a segunda opção.….

….e é o que exatamente vamos começar a destrinchar.

Me lembro que na década de 80 eu lia aquele manual do HotBit de cabo a rabo em busca de informações técnicas e principalmente para aprender mais sobre a capacidade gráfica do MSX.

Não foram poucas as vezes que também digitei diversos exemplos sobre os comandos voltados para sons e músicas,  SOUND e PLAY do MSX-BASIC, pois eu adorava a capacidade sonora do MSX, principalmente os efeitos de percussão (bateria) que poderiam ser conseguidos pelo PSG dessa máquina, até comecei a fazer uma bateria eletrônica utilizando as portas de joystick dessa máquina, lá pelos anos de 1992, mas isso já é uma outra história.

O comando SOUND, no manual de BASIC do HotBit, era descrito superficialmente, sendo que um detalhamento de suas características estavam melhor descritas no Manual do Usuário do HotBit, por isso nunca me interessei em me aprofundar nesse comando, apesar de saber, na época, que se tratava de um comando poderoso e que você poderia escrever dados diretamente nos registradores do PSG e com isso obter um controle maior sobre o processador de som do MSX.

Já o comando PLAY era tratado pelo mesmo manual de uma maneira menos superficial, descrevendo em detalhes a Macro Linguagem Musical aceita pelo comando para compor uma música utilizando toda uma sintaxe simples baseada em letras, números e simbolos para descrever as notas musicais e compor a partitura que o MSX irá executar.

Macro Linguagem Musical, ……hummmm………..

Foi só continuar pesquisando sobre a tal Macro Linguagem Musical do MSX para chegar ao termo original, Music Macro Language, ou apenas MML.

MML – Music Macro Language

A Music Macro Language, ou MML, é originária dos interpretadores BASIC da Microsoft, bastante comuns e populares no final da década de 70 e durante toda a década de 80 e meados de 90.

A MML consiste de uma linguagem musical de alto  nível, onde as notas musicais são descritas por letras, sendo elas A, B, C, D, E, F, G que correspondem às notas Dó, Ré, Mi, Fá, Sol, Lá e , respectivamente.

A partir daí você tem uma série de macro instruções que utilizados em conjunto, formam a partitura utilizada pelo computador na execução de uma musica.

Segue abaixo a descrição de alguns comandos MML:

  • A até G – Especifica as notas músicais, que correspondem de até , em um teclado ou piano real;
  • T<n> – Especifica o tempo da música, em batidas por minuto, por exemplo T28, especifica o tempo de 28 BPM para um determinado canal;
  • < > – Utilizados para avançar uma oitava (>), ou voltar uma oitava (<) no teclado musical virtual do MSX;
  • @<n> – Especifica o instrumento a ser utilizado pelo canal de execução. Ex: @10;
  • V<n> – Especifica o volume de um canal. Ex: V15;

.

Esses comandos são repassados, via MSX-BASIC, ao processador de áudio do computador através de strings no comando PLAY.

MSX-BASIC code:

10 A$=“T10V15ABCDEFG”
20 PLAY A$

Dessa forma podemos, com facilidade, especificar partituras completas que serão executadas por um computador que entende MML.

O MSX é um dos melhores computadores de 8 bits, e também o mais mal aproveitado, no quesito software musical, pois o mesmo possui diversas extensões de hardware, padronizadas e não padronizadas, que são capazes de estender a capacidade desse computador podendo fazer frente, pelo menos no hardware, aos computadores atuais.

Se considerarmos um computador MSX 2.0, equipado com uma placa FM-PAC interna ou externa, contamos aí com um belo dispositivo, capaz de gerenciar até 9 canais simultâneos e ainda MIDI Compatible, pelo menos na questão de hardware.

Gerenciar 9 canais simultâneos, requer um pouco mais de traquejo tanto por parte do hardware, quanto pelo programador porém utilizando a MML é possível diminuir essa complexidade consideravelmente.

Vejamos por exemplo o caso de uma música com 5 canais simultâneos em MML:

MSX-BASIC code

10 DIM A$(5)
20 CALL MUSIC(0,0,1,1,1,1,1,1,1) : REM *** 9 Canais para som, sem percussão
30 A$(1) = “ABCDEF”
40 A$(2) = “GFDEC”
50 A$(3) = “GGGGG”
60 A$(4) = “ABABAB”
70 A$(5) = “DEDEDEDE”
80 PLAY #3, A$(1), A$(2), A$(3), A$(4), A$(5)

Ou seja, podemos fazer excelentes melodias em MSX-BASIC, desde que cada canal não tenha mais do que 255 caracteres na string MML, limite esse da capacidade de uma string do MSX-BASIC.

Com todas essas informações descobri que MML é muito utilizada na composição de músicas para NES e Super NES, sendo utilizada até os dias de hoje por grupos que ainda desenvolvem jogos para essas plataformas e existe ainda um ferramental grandioso que auxilia os músicos na criação de composições para games desenvolvidos para essas plataformas, o que faz do MML muito popular no Japão.

WARNING:

Em minhas pesquisas encontrei muito material para NES e Super NES e descobri também que por não se tratar de um padrão de facto, os códigos MML não são obrigatoriamente compatíveis entre as diversas plataformas e algumas vezes nem entre softwares em uma mesma plataforma.

Precisamos agora arrumar um jeito de converter um arquivo MIDI para MML, para que assim possamos cumprir a meta 6 de nossos requisitos mínimos, que é a possibilidade de execução da composição via MSX-BASIC, conforme citado anteriormente.

Após pesquisar a internet inteira 🙂 em busca de um software com essa capacidade, eu estava chegando a conclusão de que eu teria que implementar um Player que entendesse pelo menos o protocolo MIDI e quem sabe no futuro tentar uma conversão de General MIDI, para MML. Inclusive já estava estudando novamente o livro Maximum MIDI que adquiri em 2000, justamente quando eu estava cogitando, naquela época, enfim, concluir a minha bateria eletrônica de 1992, mas isso é outra história.

Nesse momento encontrei em um site japonês, não poderia ser diferente, parte da solução para o problema da conversão de MIDI para MML, o 3MLEditor, ou apenas 3MLE.

3ML Editor

Esse editor é simplesmente fenomenal para o que precisamos, pois ele é capaz de importar MIDI e salvar em um formato próprio, que é na verdade um arquivo texto que contém os canais juntamente com comandos MML.

3MLE - 3MLEditor

Segue abaixo um exemplo de um MML gerado pelo 3MLE:

[Settings]
Title =
Source =
TimeBase = 32
TimeSignatureNN = 4
TimeSignatureDD = 4
Instrument1 = 128
Instrument2 = 128
Instrument3 = 128
TrackName1 = Track1
TrackName2 = Track2
TrackName3 = Track3

[Channel1]
//Ý’聄MIDIÝ’聄DLS‚‰¹Ž¿„
//ƒ}ƒrƒmƒM‚ÌMP3ƒtƒHƒ‹ƒ_“à‚Ì
//MSXspirit.dls‚ðŽw’肵‚Ä‚­‚¾‚³‚¢

//Ž©ì‚Æ‹U‚ç‚È‚¢•”„‚ç‚È‚¢‚Å‚­‚¾‚³‚¢
//ƒ}ƒrƒmƒM“à‚ł̉‰‘t‚Í‚²Ž©—R‚É

//‡}—pƒƒgƒ«ƒRƒsƒy‚Å
//MML@v15aaa>a
//http://cure.chu.jp

//Œ·ŠyŠíƒŠƒ…[ƒg„§

t200v8
>e16g+16c+16e16v10<a16>c+16v14<g+16>c+16<a16f+16e16a16

>e16g+16c+16e16v10<a16>c+16v14<g+16>c+16<a16f+16e16a16r8a.
[Channel2]
v14r1.r32c-16f+.&f+32
[Channel3]
v14r1.<f+16>d.&d16

Apesar de, aparentemente, o arquivo acima ainda ser complexo, quem conhece um pouco de MML sabe identificar o conteúdo MML no mesmo, bem como os canais para tentar extrair alguma coisa,  e principalmente quem conhece o protocolo MIDI internamente sabe que esse arquivo MML acima é muito mais amigavel do que qualquer MIDI e seus timers, eventos, sysex, etc etc etc….

Uma das coisas que aprendi nesse intervalo de tempo em que estou escrevendo ferramentas para manipular MML, foi como identificar o MML gerado pelo 3MLE e uma das primeiras coisas que ele faz é configurar o tempo da melodia para todos os canais e na maioria das vezes esse tempo está no primeiro canal e deve ser sempre setado em todos os canais, nesse caso T200.

Segue abaixo um exemplo de uma conversão manual, para o MSX-BASIC, desse arquivo MML gerado pelo 3MLE:

MSX-BASIC code:

10 CLS
20 REM
30 REM ******* MML definition ********
40 REM
50 DIM A$(2)
60 T$=“t200” : REM *** Tempo de todos os canais ***
70 A$(1)=“v8>e16g+16c+16e16v10<a16>c+16v14<g+16>c+16<a16f+16e16a16”
80 A$(2)=“>e16g+16c+16e16v10<a16>c+16v14<g+16>c+16<a16f+16e16a16r8a.”
90 B$=“v14r1.r32c-16f+.&f+32”
100 C$=“v14r1.<f+16>d.&d16”
110 REM
120 REM **** Start play MML ****
130 REM
140 PLAY #2,T$, T$, T$
150 PLAY #2,A$(1)+A$(2),B$,C$

Essa é a forma mais simples de converter um MML gerado pelo 3MLE, para o MSX-BASIC, porém nem tudo são flores pois existem algumas restrições, conforme citarei abaixo, e outras que citarei nos artigos seguintes:

  1. Devido a limitação de 255 bytes por linha no MSX-BASIC, é impossível escrever um canal inteiro com musicas MML que ultrapassam esse limite, devendo o programador escrever rotinas para bufferização de comandos MML, por canal e em MSX-BASIC;
  2. O MML gerado pelo 3MLE tem um bom nível de compatibilidade com o MML do MSX-BASIC, porém há restrições em alguns comandos e por isso desenvolvi um compilador, que será apresentado no último artigo, que corrige essas inconsistências gerando um MML 100% compatível com o MSX.
  3. Alto grau de complexidade para desenvolver um player, codificado em MSX-BASIC, utilizável em outros projetos;

.

Bom, vou finalizando a parte 2 dessa série de artigos que estou escrevendo sobre musica  no MSX. No próximo artigo escreverei sobre uma outra peça bem interessante que descobri no universo MML que estamos desbravando, que é um editor chamado MusicA e que também entende MML, sendo esse capaz de compilar um MML para o famoso formato, BGM, amplamente utilizado em jogos no MSX.

Por fim, no ultimo capítulo da série vou apresentar o compilador que automatiza a conversão e compatibiliza possíveis códigos MML inválidos para o utilização no MusicA.

Fique antenado….já, já tem mais.

[]’s

PopolonY2k

Referências na internet

Meridian – MIDI editor/player para MSX.

http://www.opl4.nl/

MML – Music Macro Language

http://en.wikipedia.org/wiki/Music_Macro_Language

Protocolo MIDI

http://pt.wikipedia.org/wiki/MIDI

Projeto MSX Livros – O maior acervo de livros escaneados para MSX da internet.

http://msxlivros.blogspot.com/

Maximum MIDI Toolkit

http://www.maxmidi.com/

3MLEditor (3MLE)

http://3ml.jp//

MSX Music Editor/Player

http://www.nerlaska.com/msx/musica.html

  1. Possibilidade de utilização via MSX-BASIC;
Print Friendly, PDF & Email

MusicA – Tocando MIDI no MSX – Parte I

Não preciso nem citar as diversas fontes de estudos que demonstram que a música é capaz de transformar o “estado de espírito” das pessoas, isso é um fato e principalmente um fato que comprovamos em nossos diversos anos de jogatinas no MSX pois existem jogos excelentes cuja trilha sonora ou é pífia ou inexistente e com isso os mesmos passam despercebidos pela maioria dos usuários dessas máquinas.

Já outros são lembrados e cultuados até os dias de hoje, é o caso de games como Penguin Adventure, Snatcher/SD Snatcher, Fray, a série Xak, a série Nemesis/Gradius, a série Aleste dentre outros que, para mim, tiveram grande parte de seu sucesso creditado a suas trilhas sonoras e serei mais ousado ainda, 50% do sucesso desses clássicos deveria ser creditado a essas trilhas sonoras.

Isso pode ser percebido através da importância que as produtoras de games da época davam à suas produções sonoras tanto que existiam, já naquela época, equipes de compositores dedicados a seus games, diferente de muitos dos pioneiros da produção de games que trabalhavam apenas a parte de técnicas de programação, ou a parte gráfica, deixando a parte sonora resumida a blip’s e blop’s.

E exemplo mais conhecido é da famosa produtora de games para o MSX e para outras plataformas até os dias de hoje, a Konami, que possuia já na década de 80 uma equipe de músicos especializada nas músicas de seus títulos, denominada Konami Kukeiha Club, que foi a equipe responsável pela maioria das músicas dos games lançados pela Konami na maioria das plataformas em que a produtora lançava seus títulos naquela época.

O assunto, produção musical, é tão sério que o sucesso do departamento musical da Konami inspirou a criação de um outro grupo, o Kuheika Club, formados por membros da Konami Kukeiha Club (Chiptune) e que tocavam muitas das musicas compostas por eles mesmos para os games da Konami mas com instrumentação real. Algumas piratohouses brasileiras da época vendiam fitas cassete, com os trabalhos da Kuheka Club, que pelo que me parece eram lançados pela própria Konami em CD no Japão, eu mesmo adquirir alguns cassetes (ou apenas K7) dessas piratohouses lá por 1989/1990.

A realidade do MSX no Brasil

…após o término de sua fabricação no cenário nacional, principalmente na parte de software, é quase tão ruim quanto na época de ouro do MSX, pois poderíamos ter feito muito mais coisas do que fizemos.

Felizmente os True Hackers na parte de hardware ainda continuaram ativos e produzindo inovações em hardware para MSX, dentre eles cito Ricardo Oazem (Tecnobytes) e Ademir Carchano (ACVS), o que nos dá uma sobrevida na parte de hardware.

Na parte de software devemos considerar que na decada de 80 o fator falta de conhecimento pesava bastante, pois a própria micro-informática ainda engatinhava naquela época, mas o tempo mudou e as pessoas engajadas no universo MSX na época, e que detém um maior conhecimento hoje, talvez não queiram mais saber de ouvir falar em MSX, nem pelo saudosismo.

Nesse cenário obscuro percebemos que fazer ferramentas para MSX é um terreno fértil aqui no Brasil e o MSX é um plataforma excelente para exercitarmos boas práticas para desenvolver produtos que tenham muitos recursos de software com poucos recursos de hardware, o que é exatamente a praia daqueles que desejam se aventurar em desenvolvimento para sistemas embarcados.

Apesar de estarmos muito atrasados nesse cenário do universo MSX, nunca é tarde para começar e foi por isso que lancei o projeto Old Skool Tech no Sourceforge.net, que é onde estou recuperando os fontes de alguns softwares que fiz para MSX na década de 80/90, bem como para deixar ali registrado todo e qualquer novo desenvolvimento realizado, a partir daqui, para o MSX e outras plataformas antigas.

Musica no MSX

Voltando ao foco sobre musica no MSX, vale ressaltar que um MSX original (MSX 1) é dotado de capacidades sonoras bem avançadas, não só para a época mas também nos dias atuais, haja vista trabalhos realizados por grupos especializados em fazer músicas para computadores antigos (MSX, ZX Spectrum, Commodore 64, …). Esse tipo de música é conhecida por Chiptune e existem alguns grupos que se destacam nesse cenário, como 8BitPeople.

A grande maioria desses computadores antigos, exceto o C64 que tinha o SID 6581, tinham como seu processador de áudio o chip da General Instruments, o AY-3-8910, que possui 3 canais de som, porém o MSX possui algumas vantagens pois possui extensões padronizadas como o MSX-MUSIC com chips FM OPPL YM2413 e algumas outras mais interessantes ainda como a MoonSound com o seu impressionante YMF278 OPL4 e todo esse conjunto, acredito eu que, transforma o MSX na melhor plataforma sonora de 8 bits existente.

Porém, nenhuma dessas peças de hardware tem valor se não houver nada para controla-las, principalmente senão existir uma forma de reprograma-las a medida que nossas necessidades aumentam e é no momento que chegamos nessa encruzilhada que percebemos que o MSX no cenário internacional está bem servido de grupos que desenvolvem ou desenvolveram ferramentas que tiram proveito ao máximo dessa excelente plataforma, como é o exemplo de grupos como Bandwagon, TeddyWareZ, The New Image (TNI), dentre outros diversos.

A maioria desses demos nasceu devido a algum incentivo externo recebido e que disparou o desenvolvimento dos mesmos. No caso dos demos da Bandwagon, é conhecido que esse grupo participou de diversas competições de demos de 1Kb a 8Kb, competindo com diversas plataformas  diferentes e venceu a grande maioria (senão todas), ou seja, o incentivo era a competição.

Recentemente após algumas discussões no Orkut, surgiu a idéia de desenvolver um jogo para MSX 2.0, que utilizasse a capacidade gráfica e sonora dessas máquinas, incluindo a possibilidade de tocar musicas FM-based (FM-Pac, FM-Stereo, ….). A discussão em torno dessa idéia foi crescendo e  o desenvolvimento atualmente é mantido na comunidade do Orkut, MSX-Brasil, com discussões sobre o andamento do projeto aqui nessa thread.

Esse era o incentivo necessário para se desenvolver alguma coisa para o MSX, aqui no Brasil, que estava faltando e o suficiente para eu perceber que diversas técnicas e ferramentas poderão sair daí, dentre elas:

  1. Técnicas de manipulação de gráficos;
  2. Ferramentas gráficas;
  3. Técnicas para execução de musicas em dispositivos com recursos limitados;
  4. Ferramentas musicais;
  5. Técnicas de desenvolvimento para dispositivos com recursos limitados;
  6. Ferramentas de compactação de dados.
  7. Técnicas de otimização de sistemas para dispositivos com recursos limitados;

.

Ou seja, tem muita tecnologia que poderá ser desenvolvida com o incentivo desse projeto e digo mais…..já começou a ser desenvolvida e com resultados.

O primeiro resultado positivo foi o processo de conversão de músicas MIDI e que agora podem ser convertidas e tocadas no MSX, e é exatamente sobre isso que estarei escrevendo os próximos 3 artigos dessa série de 4 artigos.

Vou explicar sobre os softwares utilizados no PC e que futuramente tentarei desenvolver para PC e MSX, bem como sobre o compilador que  já  desenvolvi para PC e que é utilizado no processo de conversão. Por fim, o processo final de conversão que é feito no MSX bem como a utilização de um Replayer para MSX que executa a música convertida.

Fiquem antenados e espero que a partir daí surjam novos softwares para MSX ou até mesmo ferramentas de apoio feitas para PC e que possibilitem a utilização extrema do hardware do MSX.

[]’s
PopolonY2k

Referências na internet.

Blip, blop for the masses.

http://www.chiptune.com/

Comunidade MSX Brasil no Orkut.

http://www.orkut.com.br/Main#Community?cmm=98375914

Print Friendly, PDF & Email

Old Skool Tech – Novo projeto no SourceForge.net

Fuçando os meus disquetes de MSX para ver se achava alguma coisa interessante e também para ver se os jogos funcionavam após 20 anos, tive a grata surpresa de encontrar um software que eu estava desenvolvendo em 1995, chamado MSXDD, ou MSX Disk Doctor.

A idéia do MSXDD era ser um conjunto de ferramentas utilitárias para manipulação, edição, correção, formatação, copia, ….e etc, de discos. O software está escrito todinho em Turbo Pascal, com rotinas Inline em Z80 ASM.

Após essa grata surpresa decidi abrir um novo projeto, que entra para a minha lista de projetos Open Source como os que estão aí na seção Local Network no lado direito da página. O projeto é o Old Skool Tech, que será um repositório com todos os softwares que eu fiz e que vou fazer para plataformas antigas, aka MSX, AMIGA, Commodore 64, Atari, etc…, tudo liberado sob a licensa GPLv3.

Já adicionei os 3 primeiros módulos da biblioteca base que foi desenvolvida para dar suporte ao  desenvolvimento do MSXDD, que na época já contava com um editor hexadecimal de arquivos e setores. Infelizmente não avancei no desenvolvimento de tudo o que eu queria para o MSXDD, porém nunca é tarde para recomeçar.

Os módulos já liberados são:

  1. MSXDOS.PAS – Biblioteca de funções de baixo nível para manipulação de rotinas internas do MSXDOS, arquivos, DPB (Disk Parameter Block), leitura e gravação de setores, etc…
  2. MEMORY.PAS – Helper functions para manipulação de memória;
  3. DOSTEST1.PAS – Programa de teste da MSXDOS.PAS (Mostra conteúdo do DPB de um disco);

.

Segue o link para o código que já está no SVN do projeto. Não postei todo o código das bibliotecas e também do core do MSXDD porque os comentários do programa estão em português e desejo traduzir tudo para o Inglês, bem como fazer algumas otimizações de código e por enquanto só os 3 módulos que estão lá no SVN.

http://oldskooltech.svn.sourceforge.net/viewvc/oldskooltech/msx/trunk/msxdos/pascal/

Com certeza muitos outros projetos que desejo iniciar para micros antigos terão seus códigos liberados nesse repositório no SourceForge.net.

Bom, é isso aí.

Inté.

PopolonY2k

Print Friendly, PDF & Email