Pergunta

Sou músico e programador e gostaria de criar meu próprio programa para fazer música. Começarei com um aplicativo de console no C ++ antes de fazer uma GUI.

Sou novo no C/C ++ e sei como fazer um aplicativo básico de console e li sobre a API Win32.

Eu estava olhando para o MSDN para multimídia em aplicativos Win32 e encontrei muitas funções para MIDI: http://msdn.microsoft.com/en-us/library/dd798495(vs.85).aspx

Posso receber quantos dispositivos MIDI estão conectados dessa maneira:

#include <windows.h>
#include <iostream>
using namespace std;
int main() {
    cout << midiInGetNumDevs();
    cout << " MIDI devices connected" << endl;
    return 0;
}

Mas agora quero descobrir como esses dispositivos são chamados, com o midiInGetID função eu acho e um while ciclo. Alguém pode me ajudar com isso? A função requer um HMIDIIN Parâmetro e não sei como posso obter um, pois quase todas as funções MIDI usam esse parâmetro.

Eu sei que este não é o tópico mais óbvio, mas seria ótimo se alguém pudesse me ajudar.

Obrigado :)

Foi útil?

Solução

Para obter informações, você está ligando MIDIINGETDEVCAPS, com um primeiro parâmetro variando de 0 incluído para o resultado de midiInGetNumDevs excluído. Cada chamada preenche um Midiincaps Struct (você passa um ponteiro para a estrutura quando chama a função) com informações sobre o enésimo dispositivo. Para abrir um dispositivo e preencher o hmidiin necessário para outras chamadas, você liga midiinOpen com o número do dispositivo (novamente, 0 a N-1 incluído) como o segundo parâmetro.

O mesmo conceito se aplica a dispositivos de saída, exceto que os nomes têm Out ao invés de In (e para as estruturas OUT ao invés de IN).

Outras dicas

Ok, eu descobri. Eu não sabia midiInGetDevCaps Requer uma chamada para as propriedades específicas dele para retornar o nome do dispositivo.

Aqui está o meu código:

#include <windows.h>
#include <iostream>
using namespace std;
int main() {
    unsigned int devCount = midiInGetNumDevs();
    cout << devCount << " MIDI devices connected:" << endl;
    MIDIINCAPS inputCapabilities;
    for (unsigned int i = 0; i < devCount; i++) {
        midiInGetDevCaps(i, &inputCapabilities, sizeof(inputCapabilities));
        cout << "[" << i << "] " << inputCapabilities.szPname << endl;
    }
}

E obrigado pela sua ajuda!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top