Pular para conteúdo

6.2 Configurando Midi🔗

Introdução🔗

Esta seção trata do uso dos players FoxDot para sequenciar eventos musicais usando um dispositivo MIDI externo. Isso requer as versões mais atualizadas do FoxDot e do SuperCollider "FoxDot Quark". Você pode saber mais sobre como manter-se atualizado aqui.

Enviando mensagens para um dispositivo MIDI🔗

A primeira coisa a fazer é conectar seu computador ao dispositivo MIDI e certificar-se de que os drivers corretos estão instalados – isso geralmente acontece automaticamente, mas nem sempre. Em seguida, certifique-se de que o SuperCollider pode "ver" o dispositivo. Para fazer isso, abra o SuperCollider e execute esta linha de código:

FoxDot.midi

Você deverá ver uma mensagem no "post window" semelhante a esta:

MIDI: device 0 2 -1202759152  (Microsoft GS Wavetable Synth)
MIDI: device 1 3 -1202759144  (USB2.0-MIDI)
MIDI Sources:
    MIDIEndPoint("USB2.0-MIDI", "USB2.0-MIDI")
MIDI Destinations:
    MIDIEndPoint("Microsoft GS Wavetable Synth", "Microsoft GS Wavetable Synth")
    MIDIEndPoint("USB2.0-MIDI", "USB2.0-MIDI")
-> MIDIClient

Caso contrário, consulte a documentação do SuperCollider sobre MIDIClient. Esta é uma lista dos dispositivos MIDI para os quais o SuperCollider (e o FoxDot) podem enviar mensagens. No Windows (como no exemplo acima), o primeiro dispositivo é o sintetizador MIDI interno da Microsoft para Windows e o segundo é um dispositivo externo conectado por USB (eles podem ter nomes diferentes, dependendo do dispositivo e da conexão). Por padrão, o FoxDot enviará mensagens para o primeiro destino MIDI ("Microsoft GS Wavetable Synth" neste exemplo), mas você pode selecionar um dispositivo diferente executando o mesmo código, mas com o índice do dispositivo preferido entre colchetes. Portanto, para selecionar o dispositivo "USB2.0-MIDI", você executaria:

FoxDot.midi(1)

Agora você pode enviar mensagens para o seu dispositivo MIDI a partir do FoxDot! Para fazer isso, você precisa usar o sintetizador MidiOut. Ele funciona da mesma forma que um sintetizador normal, mas envia mensagens de nota e amplitude para um dispositivo MIDI, por exemplo:

p1 >> MidiOut([0,1,2,3,4,5], dur=PDur(3,8), amp=[1,1/2,1/2]).every(6, "stutter", 4, dur=3, oct=6)

Você pode especificar o canal MIDI como faria com qualquer outro atributo, por exemplo, usando channel=1, cujo padrão é 0.

p1 >> MidiOut([0,1,2,3], channel=1)

Observe: Tenha cuidado ao repetir a mesma nota com a mesma duração; se um evento MIDI note-on for acionado um pouco antes do MIDI note-off do evento anterior, ele será interrompido pelo note-off. Esse é um bug conhecido e está sendo investigado.

Sincronização de mensagens MIDI e mensagens FoxDot🔗

Se você estiver usando o FoxDot e seu dispositivo MIDI, poderá notar que os eventos de som não estão sincronizados. Para corrigir isso, você precisa definir manualmente o Clock.midi_nudge = valor, que adiciona um atraso às mensagens MIDI. Aqui está um exemplo de código para ajudar a sincronizar as mensagens:

p1 >> MidiOut([0,4])

p2 >> play("x * ")

# O valor geralmente fica entre 0.15 e 0.25
Clock.midi_nudge = 0.2

Quando os sons estiverem sincronizados, eles permanecerão sincronizados até a próxima vez que você iniciar o FoxDot, então, lembre-se desse valor!