お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"ボリューム(音量)を変える"

この発言に対し以下のコメントが寄せられています
#00871 河邦 正 さん RE:ボリューム(音量)を変える【訂正】

Title: ボリューム(音量)を変える  ダブルクリックで出る音量コントロールの WAVE ボリュームだけなら、 uses MMSystem; auxSetVolume(uDeviceID: UINT; dwVolume: DWORD); または、 MediaPlayer に MCIWNDM_SETVOLUME // WM_USER + 110 を送付 で変更できます。全体のボリューム調整はちょっと面倒です。 いや、MCIコマンドの達人なら簡単かも知れません。でも私は MCIコマ ンドにうといんで...^^;) // 全体のボリュームを変える例です { SetVolume: ミキサーのミックス済みボリュームを設定します。 MixerID: ミキサーのID(mixerGetNumDevs を参照) DstID: ミックス済ラインの番号(mixerGetDevCaps を参照) Value: ボリューム、0 〜 65535 } function SetVolume(MixerID, DstID: Integer; Value: WORD): Boolean; var mmr: MMRESULT; DstLine: TMixerLine; MixerLineControls: TMixerLineControls; MixerCtrl: TMixerControl; MixerCtrlDetails: TMixerControlDetails; i: Integer; Volumes: Pointer; begin ZeroMemory(@DstLine, sizeof(DstLine)); with DstLine do begin cbStruct := 1024; dwDestination := DstID; end; mmr := mixerGetLineInfo(MixerID, @DstLine, MIXER_GETLINEINFOF_DESTINATION or MIXER_OBJECTF_MIXER); if mmr = MMSYSERR_NOERROR then begin ZeroMemory(@MixerLineControls, sizeof(MixerLineControls)); with MixerLineControls do begin cbStruct := sizeof(TMixerLineControls); cbmxctrl := sizeof(TMixerControl); dwLineID := DstLine.dwLineID; dwControlType := MIXERCONTROL_CT_CLASS_FADER or MIXERCONTROL_CONTROLTYPE_VOLUME; pamxctrl := @MixerCtrl; cControls := 1; end; ZeroMemory(@MixerCtrl, sizeof(MixerCtrl)); with MixerCtrl do cbStruct := sizeof(TMIXERCONTROL); mmr := mixerGetLineControls(MixerID, @MixerLineControls, MIXER_GETLINECONTROLSF_ONEBYTYPE or MIXER_OBJECTF_MIXER); if mmr = MMSYSERR_NOERROR then begin ZeroMemory(@MixerCtrlDetails, sizeof(MixerCtrlDetails)); with MixerCtrlDetails do begin cbStruct := sizeof(TMIXERCONTROLDETAILS); dwControlID := MixerCtrl.dwControlID; cChannels := DstLine.cChannels; cbDetails := sizeof(TMIXERCONTROLDETAILSUNSIGNED); GetMem(Volumes, cChannels * sizeof(DWORD)); try paDetails := Volumes; for i := 0 to cChannels - 1 do PDWORD(Integer(Volumes) + sizeof(DWORD) * i)^ := value; mmr := mixerSetControlDetails(MixerID, @MixerCtrlDetails, MIXER_OBJECTF_MIXER or MIXER_SETCONTROLDETAILSF_VALUE); finally FreeMem(Volumes); end; end; end else; // ERROR of 'mixerGetLineControls' end else; // ERROR of 'mixerGetLineInfo' Result := mmr = MMSYSERR_NOERROR; end; // TrackBar に合わせてボリュームを変える場合 procedure TForm1.TrackBar1Change(Sender: TObject); begin with TrackBar1 do begin { サウンドカード1枚差しのスピーカー音量なら、 MixerID = 0 DstID = 0 でほぼ問題ないです。 でも、金を取るソフトを書く場合はちゃんと設定しましょう! } if not SetVolume(0, 0, Position * $ffff div Max) then ShowMessage('ボリューム設定に失敗しました'); end; end; 1998/04/20、河邦 正(GCC02240@niftyserve.or.jp) Original document by 河邦 正 氏 ID:(GCC02240)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum