ミキサーAPIを使ってVB6で作成したアプリからサウンドカードの録音ソースを選択できる方法を探しています。
音量を制御する方法については方法がわかったのですが、録音コントロールのソース選択についてはサンプルも見つからず困っています。
次のサイトにDelphiでのサンプルがあるのですが、Delphiの知識がないため理解できません。
http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html
どなたかご教授ください。お願いいたします。
以前作成したC言語のソースからですが・・・
私も当初は解らなかったので、英語版のSDKやDDKからサンプル
を探して、以下のようにしました。
//ミキサーがインストールされているか
if ( mixerGetNumDevs() == 0 ){
return( 1 );
}
//1つ目のミキサデバイスをオープンする
rc = mixerOpen( &hmx , nDevID , 0 , ( DWORD )NULL , MIXER_OBJECTF_MIXER );
if ( rc != MMSYSERR_NOERROR ){
return( 2 );
}
//メインのライン出力スピーカを探す
mxcaps.cDestinations = 0;
mixerGetDevCaps( nDevID , &mxcaps , sizeof( MIXERCAPS ) );
for ( uDest = 0 ; uDest < mxcaps.cDestinations ; uDest++ ){
r = 3;
mxl.cbStruct = sizeof( mxl );
mxl.dwDestination = uDest;
//ライン情報の取得
rc = mixerGetLineInfo( ( HMIXEROBJ )hmx , &mxl , MIXER_GETLINEINFOF_DESTINATION );
if ( rc != MMSYSERR_NOERROR ){
continue;
}
要は、ミキサーデバイスを開いて、デバイス数を取得し
その各々がどうなっているのかを、ひとつづつループし
ながら、探していき、該当のものに対し、制御を行った
と言う方法です。
お試し下さい。
※ VBでできるかについては不安があります。
C言語で行いましたので・・・
以上。
岡田さん、レスをいただきありがとうございました。
ようやくなんとか動くものができたところでした。
悩んでいたのは、録音ソースの選択はほかのコントロールと違って
MIXER_GETCONTROLDETAILSF_LISTTEXT で取得されるタイプのもので、
かつ応答が構造体の配列に戻るため、どのようにして値を取得する
ことができるのかで困っていました。(このタイプのサンプルが
みつからなかったのです。)
解決法として、構造体のなかの文字列をバイト配列で置き換えること、
構造体へのポインタを得るのにIntelのサイトにあったapigid32.dll
のAddressFor関数を使うことによりうまくいきました。
どうもありがとうございました。