マイクからサウンドを取得するためのライブラリ(c ++、Win32、オープンソース)に関する推奨事項はありますか?
ありがとう
OpenAL [1]を見てみてください。やり過ぎかもしれませんが、必要に応じてマイクから録音できるはずです。Gamedev.net [2]にはかなり良い記事がいくつかありますが、マイクから録音する方法を教えてくれるものはありません。ただし、その答えはドキュメントで見つけることができるはずです。:) 幸運を、
[1] http://connect.creativelabs.com/openal/default.aspx
[2] http://www.gamedev.net/reference/articles/article2008.asp
PortAudio-ポータブルクロスプラットフォームオーディオAPI
PortAudioは、シンプルなコールバック関数を使用してサウンドを録音および/または再生するための非常にシンプルなAPIを提供します。
CodeProjectでいくつかのコードを見つけました(標準の警告:CodeProjectから取得したコードをすべて注意深く確認してください!便利ですが、そこにあるサンプルに恐ろしいバグが見つかることがよくあります!)。これにより、APIとその使用を開始する方法についての良い手がかりが得られるはずです。そこから、参照や関連トピックをGoogleで検索できます。
クロスプラットフォームが必要ない場合は、DirectShowが適切に機能します。オープンソースではありませんが、DirectShowライブラリを必要とするオープンソースプロジェクトを配布できると思います。
クロスプラットフォームのサポートが必要だとは言わないでください。クロスプラットフォームのサポートが必要ない場合は、waveAPIまたはDirectSoundを使用します。どちらもかなり簡単に使用できます。
私は過去にmci関数を使用して記録しました。申し訳ありませんが、これはマイクが録音入力として選択されていることを確認するものではありませんが、手動で選択すると、誰かが変更しない限りマイクは残ります。これはダイアログ内にあったので、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);