Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os aplicativos que usam blocos de dados para passar mensagens exclusivas do sistema (usando as funções midiOutLongMsg e midiInAddBuffer) e buffers de fluxo (usando a função midiStreamOut) devem continuamente fornecer blocos de dados ao driver do dispositivo até que a reprodução ou gravação seja concluída.
Mesmo que um único bloco de dados seja usado, um aplicativo deve ser capaz de determinar quando um driver de dispositivo é concluído com o bloco de dados para que ele possa liberar a memória associada ao bloco de dados e à estrutura do cabeçalho. Três métodos podem ser usados para determinar quando um driver de dispositivo é concluído com um bloco de dados:
- Especifique uma função de retorno de chamada para receber uma mensagem enviada pelo driver quando terminar com um bloco de dados. Para obter dados de entrada MIDI com carimbo de data/hora, você deve usar uma função de retorno de chamada.
- Utilize um retorno de chamada de evento (somente para saída).
- Utilize um callback de janela ou de thread para receber uma mensagem enviada pelo driver quando concluir um bloco de dados.
Se um aplicativo não obter um bloco de dados para o driver de dispositivo quando for necessário, uma lacuna audível na reprodução ou uma perda de informações gravadas recebidas pode ocorrer. No mínimo, um aplicativo deve usar um esquema de buffer duplo para ficar pelo menos um bloco de dados à frente do driver de dispositivo.
Usando uma função de retorno de chamada para processar mensagens de controlador
Você pode escrever sua própria função de retorno de chamada para processar mensagens enviadas pelo driver de dispositivo. Para usar uma função de retorno de chamada, especifique o sinalizador CALLBACK_FUNCTION no parâmetro dwFlags e o endereço da função de retorno de chamada no parâmetro dwCallback da função midiInOpen ou midiOutOpen.
As mensagens enviadas para uma função de retorno de chamada são semelhantes às mensagens enviadas para uma janela, exceto que têm dois parâmetros de palavra dupla em vez de um parâmetro inteiro não assinado e um parâmetro de palavra dupla. Para obter mais informações sobre essas mensagens, consulte Envio de mensagens System-Exclusive e Gestão da gravação MIDI.
Utilize uma das seguintes técnicas para passar dados de instância de uma aplicação para uma função de chamada de retorno.
- Utilize o parâmetro dwCallbackInstance da função que abre o driver de dispositivo.
- Use o dwUser membro da estrutura deMIDIHDRque identifica um bloco de dados que está sendo enviado para um driver de dispositivo MIDI.
Se você precisar de mais de 32 bits de dados de instância, passe um endereço de uma estrutura que contenha as informações adicionais.
Usando um retorno de chamada de evento para processar mensagens de driver
Para usar um retorno de chamada de evento, use a função CreateEvent para recuperar o identificador de um evento e especificar CALLBACK_EVENT na chamada para a função midiOutOpen.
Um retorno de chamada de evento é definido por qualquer coisa que possa causar um retorno de chamada de função. Ao contrário das funções de callback e dos callbacks de janela ou thread, os callbacks de eventos não recebem notificações específicas de fecho, conclusão ou abertura. Portanto, um aplicativo pode ter que verificar o status do processo que está aguardando depois que o evento ocorre.
Para obter mais informações sobre callbacks de eventos, consulte Usando um callback de evento para gerenciar a reprodução em cache.
Usando um retorno de chamada de janela ou thread para processar mensagens de driver
Para usar um retorno de chamada de janela, especifique o sinalizador de CALLBACK_WINDOW no parâmetro dwFlags e um identificador de janela na palavra de ordem baixa do parâmetro dwCallback do midiInOpen ou função midiOutOpen. As mensagens do driver serão enviadas para a função de procedimento da janela identificada pelo identificador em dwCallback.
Da mesma forma, para utilizar um callback de thread, deve especificar o sinalizador CALLBACK_THREAD e um identificador de thread na chamada para midiInOpen ou para midiOutOpen. Nesse caso, as mensagens serão postadas no thread especificado em vez de em uma janela.
As mensagens enviadas para um retorno de chamada de janela ou thread são específicas para o dispositivo MIDI usado. Para obter mais informações sobre essas mensagens, consulte Enviando mensagens System-Exclusive e Gerenciandode gravação MIDI.
Tópicos relacionados