Existem vários trackers PSG para MSX, uns melhores, outros nem tanto, o SEE é um tracker intermediário, com uma interface bem espartana e um tanto confusa, mas foi escolhido para este post por conta do replayer, amplamente documentado, inclusive seu formato de arquivo. Além do mais, os efeitos criados pelo SEE podem facilmente ser executados no MSX-BASIC por meio do NestorBasic.
Abaixo, uma captura de tela da interface principal do editor:
O programa é dividido em duas áreas, os comandos na parte superior, e o editor na inferior. Abaixo, listo as principais funções, bem como as teclas de atalho, tendo assim um mini guia de referência, em seguida detalho as operações e comandos.
Para navegar no Menu superior, use as teclas cursoras para navegação e as teclas <RETURN> e <SPACE> para seleção.
- New –> Inicia um novo banco de sons.
- Preferences –> Apenas muda a palheta de cores da tela e o banco de caracteres.
- DiskOp –> Acesso ao gerenciador de arquivos do SEE.
- Quit –> Encerra o programa
- Play SFX –> Executa o efeito selecionado
- Play SFX visual –> Idem ao anterior, mas uma barra de acompanhamento circula entre os padrões
- Stop noise –> Silencia o PSG, caso alguma frequência esteja sendo tocada interruptamente
- Play status –> Indica se está sendo executado, ou não, algum efeito no momento
- Sound FX nr –> Indica qual o efeito que está selecionado para reprodução
- Start patt: –> Indica, dentro do efeito escolhido pela opção anterior, qual o padrão de inicio para o player.
- Last SFX nr –> Indica qual é o último efeito disponível no banco atual
- Quant –> Indica a quantidade de padrões a pular em cada operação de edição
- Poly –> Incrementa em 1 o padrão corrente a cada edição
- Edit –> Indica/Inicia a edição dos padrões na tela inferior
- Block –> Indica qual e o bloco selecionado no editor
- Help me! –> Lista as teclas de operação
- About –> Tela informativa do programa
- Max Volume –> Indica qual será o volume máximo do banco de efeitos
- Printer –> Não está implementada até a versão corrente (3.10b)
Entrando em Edit, vamos para o modo de edição de padrões, onde temos, na ordem:
- PAT –> Número do padrão
- Event –> Evento associado a esta linha/padrão
- Snd #1, #2, #3 –> Os canais de som A, B e C respectivamente, neste campo, informamos o período
- Rus #1, #2, #3 –> Mesma coisa para ruídos, periodo a ser usado em cada canal, embora, na prática o PSG permita apenas uma frequência
- Vol #1, #2, #3 –> Volume de cada canal, A, B ou C
- Wave / Time –> Forma do envelope a ser usado e o período do mesmo.
Para a edição, pode-se usar as setas para navegar livremente entre os campos e as linhas, como uma planilha. Todos os valores devem ser informados em Hexadecimal, atentando para o fato de que o período, nos canais A, B ou C não deve ser quebrado em LSB e HSB, pois o SEE usa diretamente o valor total combinado. Lembre-se que para usar envelope, devemos colocar 16 no registrador de volume, no caso do SEE, o volume deve ser preenchido com W, já que são aceitos apenas 0 a F, além de W, como entrada.
Para apagar um campo, basta usar BackSpace, já para apagar a linha toda, use Delete. Caso queira inserir uma linha, pressione Insert.
Teclas de atalho
Tela Principal
- F1 –> Executa o efeito selecionado
- F6 –> Idem mas visualmente mostra cada padrão sendo executado
- F2 –> Seleciona um efeito pelo número
- F3 –> Indica qual o padrão de início de execução
- F4 –> Limpa o banco corrente, iniciando um novo
- F5 –> Entra no gerenciador de arquivos
- F7 –> Muda o campo Quant
- F8 –> Muda o campo Poly
- F9 –> Posiciona no novo Efeito e padrão de início (busca automaticamente) nos campos Sound FX nr e Start patt
- F10 –> Abre a tela de preferências do sistema
- Select –> Muda a frequência entre 50 e 60 Hz
- Stop –> Interrompe a execução do efeito corrente
- [+] –> Aumenta o campo Sound FX
- [-] -> Diminui o campo Sound FX
Menu
- Setas Cursoras –> Move o cursor entre as opções
- Space ou Return –> Confirma a opção selecionada
- Home –> Vai para o início da tela
- Graphic –> Chaveia entre o menu e atela de edição
Tela de edição
- Setas Cursoras –> Move o cursor entre os campos e linhas
- Home –> Vai para o padrão 0
- Return –> Vai para o padrão 0, campo Event
- Esc ou Graphic –> Volta para o menu principal
- BackSpace –> Apaga o campo atual
- Delete –> Apaga o padrão atual
- Insert –> Insere um novo padrão
- [Q] –> Seta o campo Quant
- [P] –> Permite ir para um padrão específico a ser informado
- 0-9 / A-F –> Muda os dados do campo
- Shift + Home –> Vai para o primeiro padrão do efeito corrente
- Shift + Backspace –> Limpa o padrão corrente
- Shift + Delete –> Idem Delete, mas muda o cursor para o padrão anterior
- Shift + Insert –> Idem Insert, mas mantém o cursor no padrão atual
- Shift + U –> Aumenta o campo anterior
- Shift + D –> Abaixa o campo anterior
- Shift + W –> Seta o volume em Wave para usar com envelopes
- Ctrl + Home –> Idem Shift + Home
- Ctrl + E –> Vai para o campo de Evento
- Ctrl + S –> Vai para o primeiro campo Snd
- Ctrl + R –> Vai para o primeiro campo Rus
- Ctrl + V –> Vai para o primeiro campo Vol
- Ctrl + W –> Vai para o campo Wave / time
- Ctrl + Q –> Seta o campo Quant
- Ctrl + P –> Seta o padrão
- Code + S –> Seta o início de um bloco
- Code + E –> Seta o final de um bloco
- Code + G –> Vai para o primeiro padrão do bloco
- Code + C –> Copia o bloco para a posição corrente
- Code + M –> Substitui a posição corrente pelo bloco
- Code + BackSpace –> Apaga o bloco
- Code + Space –> Remove as marcas de bloco
Gerenciador de Disco
- Setas Cursoras –> Move entre as opções
- Space ou Return –> Confirma a opção selecionada
- Home –> Vai para o início da tela
- Esc ou F5 –> Volta para o menu principal
- [+] –> Incrementa o número do efeito para opções de merge
- [-] -> Decrementa o efeito da mesma maneira
Operação básica
O SEE é um tracker que permite definir num mesmo arquivo, vários efeitos, facilitando assim o replayer, pois você carrega um arquivo e vai executando os efeitos chamando os mesmos pelo número. Estes efeitos, são gerados por padrões, sendo que cada padrão corresponde a uma linha da tela de edição, perceba que estas linhas são numeradas. Outro aspecto a ser percebido, é que o Tracker executa cada padrão numa fração de tempo constante, o que pode dificultar, inicialmente, o entendimento do programa, mas, depois de entender como o mecanismo funciona, existe a recompensa do tracker poder tocar independente do programa, o que é muito útil no dia a dia.
Vou apresentar a operação básica, tendo em vista a explanação dada anteriormente para o sistema do PSG, mostrando as principais operações, e no final, um detalhamento do que é possível fazer/editar.
Para começar, o SEE usa o mesmo método que nos para a população dos registros do PSG, com uma pequena diferença, os registros 0/1 , 2/3 e 4/5 são informados diretamente em 12 bits, indo de &H000 a &HFFF, não sendo necessário dividir os mesmos em Byte Baixo e Alto.
Vamos tocar a famosa Lá Central, 440Hz, usando o SEE. Revisando o que foi falado para o comando SOUND acima, vemos que a frequência de 440Hz corresponde à um período de &H0FE (já convertendo para hexa decimal), para tocar esta frequência no canal A, com o volume em 15 (&HF), faça o seguinte:
- Execute o programa “seev3_10.bas”
- Selecione NEW no menu para iniciarmos um banco novo
- Pressione Graphic para ir à tela de edição
- Vamos esquecer o canal event por hora, com o cursor, mude o campo para Snd#1
- Informe o valor do período, 0FE
- Vá até o campo Vol #1, infrome o valor F
- Use as setas cursoras e posicione o cursor na linha de baixo, vá até o campo Event e pressione E (end)
- Pressione Graphic ou Esc, vá até o campo Sound Fx nr, pressione Space e informe 01
- Vá até o campo Start patt, pressione Space e informe 000
- Vá até a opção Play SFX, selecionando-a
Veja que a nota e tocada, e assim como no exercício do comando sound, o PSG continua tocando sem parar a nota, perceba também que o campo Play Status fica em ON. Vá até a opção Stop Noise e a selecione.
Se for usado Play SFX visual, o PSG interrompe a execução após o final do efeito, faça um teste. Estranho não? Também deve ser percebido que, neste modo, o cursor do padrão corrente, acompanha os comandos da tela, permitindo visualmente encontrar algo.
Vamos agora, adicionar mais um efeito, tocando a mesma nota, uma oitava acima (880 Hz, isto será explicado em outros posts, pelas contas, 880hz dá um período de &H07E)
- Pressione novamente Graphic e vá para a tela de edição, com os cursores, posicione no padrão 002, logo abaixo do end
- Informe 07E no campo snd#1, e no campo vol#1, informe F
- No próximo padrão, 003, informe E (end) novamente no campo Evento
- Pressione F6, veja que o SEE executa o mesmo efeito que antes, ou seja, o 01, e interrompe o processo.
- Para tocarmos o efeito 02, podemos ir ao menu e mudar Sound Fx para 02 e Start patt para 002
- Ou, podemos usar o atalho F9 (pressiona apenas uma vez), veja que ele muda os campos automaticamente
- Após mudar os campos, pressione F6 novamente, veja que agora o efeito 2 foi tocado.
Bom, temos um banco de efeitos com duas sequências, vamos salvar isso num arquivo SEE.
- Vá a opção DiskOp (ou pressione F5)
- No campo Fname, informe EFEITOS
- Em seguida, acione a opção Save SEE file
Gerenciamento de Disco
Vamos aproveitar para explorar mais o gerenciador de arquivos, onde temos as seguintes opções
- Drive –> Informa o drive corrente
- Pack –> Sem uso, já que nesta versão o arquivo SEE ainda não é compactado
- Format disk –> Formata o disco corrente
- Exit –> Retorna para o menu principal
- Dir .SEE files –> Apresenta, na parte de baixo da tela, uma lista dos arquivos SEE existentes no disco/diretório corrente
- Fname –> Mostra/Edita o nome do arquivo
- Load SEE file –> Carrega para a memória o arquivo selecionado
- Save SEE file –> Salva o banco de efeitos no arquivo selecionado
- Dir .SFX file –> Mostra os arquivos SFX (que contém apenas um efeito, e não um banco)
- Fname –> Idem ao Fname do SEE, mas apenas para SFX
- Merge –> Junta um efeito de um arquivo SFX em um banco na memória
- Save one SFX –> Salva apenas um efeito em um arquivo SFX
Vamos carregar o arquivo EFEITOS
Vá até a opção Dir .SEE files
- O programa mostra a lista de arquivos, e seleciona o primeiro, com as setas pode-se navegar entre os arquivos para escolher o correto
- Após posicionar, pressione <RETIURN> ou <SPACE>, veja que o campo Fname é preenchido de acordo
- Vá até a opcao Load SEE file e a execute (Space), o programa pede confirmação e carrega o arquivo
- Se tudo estiver Ok, uma mensagem de No errors irá aparecer, veja a linha que divide o menu e a lista de arquivos, além de informações sobre o disco, no último campo, mostra quantos efeitos este arquivo possui (SFX), 02 no caso do nosso arquivo
- Volte para a tela principal (Esc ou F5)
Operações com blocos
Voltando para a tela principal, inicie um novo efeito, agora vamos executar 3 frequências distintas em sequência, mas vamos repetir este conjunto 4x.
Vá para a tela de edição, vamos usar apenas o canal A novamente, vamos também colocar volumes distintos.
- Iniciando no padrão 000, informe 0FE em Snd#1 e F em Vol#1
- Ainda mantendo Snd#1 e Vol#1, informe no padrão 001, 07E e D, e no padrão 002, 100 e B
- Volte para o padrão 000, pressione Code + S para iniciar um bloco
- Vá ao padrão 002 e pressione Code + E para terminar o bloco
- Coloque o cursor em 003 e pressione Code +C, veja que o bloco foi copiado para os padrões 003 a 005
- Repita o item anterior, copiando o bloco nos padrões 006 e 009
- Finalmente no padrão 00C, informe E (end) no campo event
- Volte ao menu, ajuste os campos necessários e toque este efeito
A copia de blocos ajuda em muito a edição dos padrões de som. Agora vamos para um exemplo mais completo, explorando os outros canais e alguns recursos a mais do editor, mas ainda não vamos explorar o campo event, nem o campo wave/time.
- Crie um novo efeito, vamos usar a frequência 880 Hz (&h07E no período), entao no padrão 000, informe 07E em snd#1, e 9 em vol#1
- No padrão 001, informe o mesmo período em snd#1, mas em vol#1, pressione Shift+U e em seguida 1 (u:1)
- Copie esta linha para os padrões 002 e 003
- Em 004 (sempre mantendo o mesmo período em snd#1, até o final deste texto), mude vol#1 para d:0 (Shift+D e em seguida 0)
- Em 005 (veja nota acima) informe d:1
- Em 006, informe d:0
- Copie o padrão 006 para 007, 008 e 009
- Em 00A, informe d:2
- Em 00B, informe d:0
- Em 00C, informe u:5
- Em 00D, informe u:0
- Finalmente em 00E, informe no campo event E (end)
- Ajuste Sound FX nr e Start patt para o primeiro padrão/efeito
Abaixo temos duas cópias de tela para deixar mais claro como deve ficar o SEE após a edição sugerida acima.
Execute o efeito… percebeu? pode ter sido um pouco rápido, então, tente executar mais algumas vezes. Tocamos a mesma nota e ficamos variando o volume ao longo dos padrões, com U aumentamos o volume, e com D diminuimos o mesmo, o outro parâmetro informa o quanto aumentar ou diminuir, sendo que quando informamos 0, instruímos o SEE para manter o volume anterior. Isto permite criar alguns efeitos diferentes sem usar os envelopes padrões do PSG, mais para frente neste mesmo artigo, vamos criar uns efeitos mais consistentes usando esta técnica (para entender um pouco melhor, leia no MSX Música o cápitulo 6, principalmente os itens 6.1 e 6.2.
Eventos
Vamos finalmente trabalhar um pouco com o campo “event”. O efeito criado no exemplo anterior, é executado de maneira muito rápida, vamos colocar então, um pequeno delay em cada padrão. Existem duas maneiras de fazer isso, uma usando o evento HLT e outra usando o TMP.
HLT aguarda o tempo determinado em seu parâmetro (0 a F) antes de executar o padrão ao qual ele está sendo utilizado.
TMP define qual o tempo de execução de cada padrão, uma vez definido, se mantém para todos os padrões subsequentes.
Faça um teste, vá até o padrão 000, no campo event, informe T:4 (tempo = 4) e execute novamente o efeito. Veja que agora, cada padrão é executado de maneira um pouco mais lenta, veja que apenas informamos o padrão no inicio e o mesmo se mantém até o final do efeito. Podemos colocar em qualquer ponto, bem como podemos colocar mais de um tempo por efeito, e podemos retornar ao tempo padrão, usando T:0. No padrão 005, informe T:0, no padrão 008 informe T:F, execute e veja as diferenças no andamento do efeito.
Agora crie um novo efeito, informe 200 como período do padrão 000, volume F e evento vazio, em 001, informe 100 no período, volume F, e no evento, informe H:F (hlt), não se esqueça de finalizar o efeito com E (end), execute e perceba exatamente o resultado da instrução HLT. O padrão 000 é executado, em seguida, o HLT pede para o player aguardar por um tempo antes de executar o padrão, veja que o período 200 é sustentado, após este tempo, o padrão 001 executa o período 100 e encerra o programa imediatamente.
Aqui cabe uma pequena explicação, cada evento é executado num tempo definido, este tempo, nada mais é que o v_blank, que ocorre a cada 1/60 segundos (ou 1/50 nos micros europeus), ou seja, cada evento/nota/padrão e executado neste período de tempo pela interrupção do sistema, o parâmetro informado em HLT ou TMP, simplesmente informa quantos v_blanks devem ser executados (ou aguardados) antes do próximo passo.
O campo event, ainda conta com outras funções, sendo uma das mais úteis, o comando FOR/NEXT. Funciona de maneira análoga ao FOR/NEXT do MSX-BASIC, ou seja, executa os padrões compreendidos entre o FOR e o NEXT por uma quantidade de vezes especificada no parâmetro. O comando FOR aceita como parâmetro a quantidade de interações (de 0 a F) e permite aninhar até 4 laços, aumentando o poder de fogo da instrução.
Vamos a um exemplo:
- Crie um novo efeito, no padrão 000, informe F:2 (for) em evento, &H25F em snd#1, 8 em vol#1
- Em sequência nos próximos padrões, informe (respectivamente em snd#1 e vol#1): &H200,9 ; &H35F,A ; &H490,A ; &H363,A ; &H400,A ; &H490,A
- No padrão 007, informe em event H:2 (hlt), &H340 em snd#1 e A em vol#1
- Em sequência nos próximos padrões, informe (respectivamente em snd#1 e vol#1): &H500,A ; &H4A9,A ; &H600,A ; &H330,A ; &H260,A
- No padrão 00D, informe em event N (next), em snd#1 &H490 e em vol#1, 8
- Encerre em 00E com E (end), ajuste os campos para execução e execute visualmente o efeito
Percebeu? Os padrões entre 000 e 00E são executados 2 vezes (caso esteja rápido para acompanhar, use o event T (tmp) em algum ponto de dúvida para ver melhor.
Existem ainda mais 2 comandos para o campo event, embora, não os ache úteis, são os comandos START e RERUN, que funcionam da seguinte maneira: Você escolhe um padrão qualquer e coloca no campo event START, em seguida insere outros padrões, e termina o bloco com um padrão que contenha o eveno RERUN, os padrões compreendidos entre estes dois comandos, serão executados infinitamente. Sem um comando IF ou GOTO, não encontrei muita utilidade para o mesmo.
Parâmetros D e U
Em um efeito anterior, utilizamos o controle de volume para criar uma espécie de efeito, para tanto usamos os comandos D e U para reduzir e ampliar o volume de acordo com o parâmetro fornecido. Estes sub-comandos D e U, podem ser utilizados em outros campos do SEE, não apenas no volume, notoriamente, você os pode utilizar nos campos SND e RUS, aumentando ou diminuindo assim o período dos canais (lembre-se que o período de RUS é menor (0 a 31 em decimal) então, o campo aceita apenas um número entre este período. Lembre-se apenas, que por se tratar do período, U aumenta o mesmo, ou seja, reduz a frequência, criando sons mais graves, e D tem o efeito inverso, criando frequências mais agudas.
Faça um exemplo simples:
- No padrão 000, informe T:F (tmp), em snd#1 informe 500, em vol#1 informe F.
- Em 001, informe d:050 em snd#1 e F em vol#1, em seguida, usando as funções de bloco, copie este padrão nos padrões de 002 a 008.
- Em 009, informe u:050 em snd#1, mantendo ainda F em vol#1, usando novamente as funções de bloco, copie o mesmo nos padrões de 00A a 010
- Finalmente, encerre o efeito em 011 com E (end)
Execute visualmente e veja o que ocorre, aumentamos e diminuirmos a frequência a cada padrão.
Canais de ruído
Programar um ruído, é muito similar a programar um evento sonoro, com a diferença que estamos tratando do canal de ruído do PSG, o SEE se encarrega de mixar os canais adequados, e podemos programar o período do ruído respeitando seus limites (&H00 a &H19).
Vamos começar com um exemplo bem básico:
- Crie um novo banco de efeitos
- Em 000, informe T:F no campo de evento, 12 em rus#1 e F em vol#1
- Em 001, novamente informe 12 em rus#1 e F em vol#1
- Finalmente em 003 encerre o efeito (end)
Execute o efeito e perceba que temos algo similar ao que fizemos com o comando SOUND no início deste artigo.
Para mixar ruídos e notas no mesmo canal, basta informar o campo snd juntamente com o campo rus correspondente, faça um teste, no exemplo anterior, no campo snd#1 nos padrões 000 e 001, informe 200 como período e execute o efeito novamente, veja a diferença.
Você pode usar o ruído apenas num canal, ou mixar em qualquer outro canal (até mesmo nos três canais), bastando preencher os campos snd e rus de acordo com o desejado, a programação do misturador é feita automaticamente. Lembre-se que você também pode usar os parâmetros U e D nos campos rus. O único porém, é que a frequência, caso utilize o ruído em mais de um canal, deve ser a mesma, respeitando os limites do PSG (o programa se ajusta automaticamente)
Envoltórias
O See tem suporte aos formatos de envoltórias do PSG. Infelizmente tal recurso não é muito prático de ser usado na ferramenta, devido à forma como a mesma efetua o replayer do som, eu vasculhei vários arquivos de efeitos do SEE (tanto da Fuzzy Logic quanto outros), e não achei nenhum exemplo concreto de como usá-las, pelo que percebi, a grande maioria prefere se utilizar do controle de volume diretamente, e não das envoltórias diretamente. Independente disso, existem algumas opções para seu uso que vou listar aqui, assim que descobrir mais detalhes, incremento este post.
Lembrando que para usar um envelope no PSG, devemos colocar no registrador de volume do canal, o valor 16, no registrador 13 o tipo do envelope, e nos registradores 11 e 12, o período que o controle de volume será ativo. No SEE, o processo é parecido, bastando informar a nota ou ruído nos canais SND ou RUS apropriados ao seu efeito, e nos controles VOL, informar W (Wave / time), isto abre os campos Wave e Time para serem preenchidos, onde Wave é o tipo do envelope (como no registro 13) e Time e o período do controle (registros 11 e 12).
Vamos a um pequeno exemplo, usando o envelope 10 (veja o comando sound) com um período de &H300
- No padrão 000, informe Tmp:F
- Em 001, informe For:F, em snd#1 &H90, em vol#1 Wave.
- Ainda em 001, no campo wave, informe &HA e no campo time, informe &H300
- No padrão 002, informe Next
- E em 003, informe End
Execute o efeito e veja o que ocorre, perceba que o efeito não é tão bom, sendo que quando usamos o SOUND e controlamos o tempo diretamente, temos efeitos melhores no MSX-BASIC. Não consegui entender exatamente como usar esta função, visto que, quando muda de padrão, muda o comportamento, anulando o envelope anterior, o único jeito de contornar superficialmente, é usando TMP, HLT e FOR. Mas sinceramente, usando controle de volume, conseguimos reproduzir os envelopes de maneira satisfatória, e ainda nos permite ir além.
Este tópico será ampliado assim que obtiver mais informações (o manual também não é claro quanto ao uso do campo Wave, inclusive existe até um comentário que o recurso seria excluído numa versão futura).