Domanda

c'è qualche raccomandazione per una libreria (c ++, Win32, open source) per ottenere l'audio da un microfono?

Grazie

È stato utile?

Soluzione

Prova a dare un'occhiata a OpenAL [1] potrebbe essere eccessivo, ma dovrebbe essere in grado di registrare dal microfono come desideri. Esistono alcuni articoli abbastanza interessanti al riguardo su Gamedev.net [2] anche se temo che nessuno di loro ti dica come registrare da un microfono. Dovresti comunque essere in grado di trovare la risposta nella documentazione. :) buona fortuna,


[1] http://connect.creativelabs.com/openal/default.aspx

[2] http://www.gamedev.net/reference/articles/ article2008.asp

Altri suggerimenti

PortAudio - API audio multipiattaforma portatile

  

PortAudio fornisce un'API molto semplice   per la registrazione e / o la riproduzione del suono   utilizzando una semplice funzione di richiamata.

Ho trovato del codice su CodeProject (avviso standard: per favore rivedere attentamente ogni bit di codice che prendi da CodeProject! È utile, ma spesso trovo bug orribili nei campioni che ci arrivo!). Questo dovrebbe darti una buona idea delle API e di come iniziare a usarle. Da lì puoi consultare Google per riferimenti e argomenti correlati.

  • WaveInOpen - Questa è una funzione che apre un dispositivo di input wave.
  • WaveInPrepareHeader: prepara un buffer dei record con questa funzione.
  • WaveInAddBuffer - Aggiunge un buffer da registrare.
  • WaveInStart: utilizzato per inizia a registrare.
  • WaveInClose - Chiude un dispositivo di input wave.

Se non hai bisogno di più piattaforme, DirectShow funziona bene. Sebbene non sia open source, credo che tu possa distribuire progetti open source che richiedono le librerie DirectShow.

Non dici che hai bisogno del supporto multipiattaforma, se il supporto multipiattaforma non è necessario, userei le API wave o DirectSound - entrambi sono abbastanza semplici da usare.

Ho usato le funzioni mci per registrare in passato. Siamo spiacenti, questo non dimostra che il microfono sia selezionato come input di registrazione, ma una volta selezionato manualmente, rimarrà a meno che qualcuno non lo cambi. Questo è stato in una finestra di dialogo, quindi ecco da dove proviene la maniglia di Windows.

#define ALIAS "mci_alias"

char mci_command[100];
char ReturnString[300];
int mci_error;

// open the device
sprintf(mci_command, "open new type waveaudio alias %s", ALIAS);
mci_err = mciSendString(mci_command, ReturnString, sizeof(ReturnString), m_hWnd);

// set the time format  
sprintf(mci_command,"set %s time format ms", ALIAS);    // just set time format
mci_err = mciSendString(mci_command, ReturnString, sizeof(ReturnString), m_hWnd);

// start the record. specify notifications with a MM_MCINOTIFY message)
sprintf(mci_command, "record %s notify", ALIAS);
mci_err = mciSendString(mci_command, ReturnString, sizeof(ReturnString), m_hWnd);

// wait for a stop button, or an error to occur

sprintf(mci_command,"stop %s", ALIAS);
mci_err = mciSendString(mci_command, ReturnString, sizeof(ReturnString), m_hWnd);

// save the file
sprintf(mci_command, "save %s %s", ALIAS, m_filename);
mci_err = mciSendString(mci_command, ReturnString, sizeof(ReturnString), m_hWnd);

sprintf(mci_command,"stop %s", ALIAS);
mci_err = mciSendString(mci_command, ReturnString, sizeof(ReturnString), m_hWnd);


// close the device
sprintf(mci_command,"close %s", ALIAS);
mci_err = mciSendString(mci_command, ReturnString, sizeof(ReturnString), m_hWnd);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top