ミキサーの録音ソースを選択するには?

解決


sss  2004-05-04 10:24:54  No: 113015  IP: [192.*.*.*]

ミキサーAPIを使ってVB6で作成したアプリからサウンドカードの録音ソースを選択できる方法を探しています。
音量を制御する方法については方法がわかったのですが、録音コントロールのソース選択についてはサンプルも見つからず困っています。
次のサイトにDelphiでのサンプルがあるのですが、Delphiの知識がないため理解できません。
http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html
どなたかご教授ください。お願いいたします。

編集 削除
岡田 之仁  2004-05-06 11:58:10  No: 113016  IP: [192.*.*.*]

以前作成した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言語で行いましたので・・・

以上。

編集 削除
sss  2004-05-06 16:49:44  No: 113017  IP: [192.*.*.*]

岡田さん、レスをいただきありがとうございました。
ようやくなんとか動くものができたところでした。
悩んでいたのは、録音ソースの選択はほかのコントロールと違って
MIXER_GETCONTROLDETAILSF_LISTTEXT で取得されるタイプのもので、
かつ応答が構造体の配列に戻るため、どのようにして値を取得する
ことができるのかで困っていました。(このタイプのサンプルが
みつからなかったのです。)
解決法として、構造体のなかの文字列をバイト配列で置き換えること、
構造体へのポインタを得るのにIntelのサイトにあったapigid32.dll
のAddressFor関数を使うことによりうまくいきました。
どうもありがとうございました。

編集 削除