• 締切済み

Cでボリュームコントロールを制御する方法

困っていることがあるので皆さんに質問させてください。 C言語を用いてボリュームコントロールの「バランス」を操作したいと考えています。 右と左のスピーカーの音量バランスを設定するあのスライダーです。 その左右バランスを変更できるような方法(APIなど)をご存知ありませんでしょうか。 javaなら僕の要望にぴったり合ったAPIがあるようですが、同じようなものでCで使用できるものを探しています。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/sound/sampled/FloatControl.Type.html (このクラスのPANやBALANCEに相当するようなものがあればすばらしいのですが。。。) ご存知の方がいらっしゃればぜひ教えてください。お願いします。

みんなの回答

回答No.2

 こんばんは。  取り敢えず以下で出来ませんか。left, rightそれぞれ、0~127迄です。 static void SetMasterVolumeValance(int left, int right) { //ミキサデバイスを開く HMIXER hmx; ::mixerOpen(&hmx, 0, 0, 0, 0); //ライン情報 MIXERLINE mxl = {sizeof(mxl)}; mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; ::mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE); //マスターボリューム情報の取り出し MIXERCONTROL mxctrl = {sizeof(mxctrl)}; MIXERLINECONTROLS mxlctrl = {sizeof(mxlctrl), mxl.dwLineID, MIXERCONTROL_CONTROLTYPE_VOLUME, 1, sizeof(MIXERCONTROL), &mxctrl}; if(!::mixerGetLineControls((HMIXEROBJ) hmx, &mxlctrl, MIXER_GETLINECONTROLSF_ONEBYTYPE)) { if(MIXERCONTROL_CONTROLF_UNIFORM & mxctrl.fdwControl) { ::MessageBox(NULL, "error", "error", IDOK); return; } MIXERCONTROLDETAILS_UNSIGNED valances[2] = {0}; MIXERCONTROLDETAILS mxcd = {sizeof(mxcd), mxctrl.dwControlID, mxl.cChannels, NULL, sizeof MIXERCONTROLDETAILS_UNSIGNED, valances}; //::mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE); //左右ボリューム valances[0].dwValue = 65565.0f * (left / 127.0f); valances[1].dwValue = 65565.0f * (right/ 127.0f); ::mixerSetControlDetails((HMIXEROBJ)hmx, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE); } ::mixerClose(hmx); } int main() { SetMasterVolumeValance(32, 0); return 0; }

Gri
質問者

お礼

回答ありがとうございます。 コンパイルして実行してみたらちゃんとできました! ありがとうございます。 これを参考に勉強させていただきます。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html#4 バランスコントロールはないので自分で左右の音量を調節して実装するようです

Gri
質問者

お礼

回答ありがとうございます。 やはりそれ自体を直接触ることはできないんですね・・・ 教えていただいたサイトを参考にして、ボリューム変更プログラムを作ってみました。 MIXERCONTROL_CONTROLTYPE_VOLUMEを変更してマスターボリュームを変更させることはできましたが左右のスピーカ音量をそれぞれを調節するにはどうしたらいいかわからなくて困っています。 どうすればよいでしょうか・・・

関連するQ&A