PDA

View Full Version : تنظیم ولوم های صدا?



houshmand
جمعه 18 مهر 1382, 19:04 عصر
برای اینکه تمام ولوم ها را تنظیم بکنیم چه باید کرد

این کد کار نمی کند چرا؟ :cry:


var
i,count:integer;
begin
count:=auxGetNumDevs;
for i:=0 to count do
auxSetVolume(i,$ffffffff);
end;

و چگونه می توان یک ولوم را از حالت mute خارج کرد?


با تشکر

مهدی کرامتی
جمعه 18 مهر 1382, 19:53 عصر
procedure GetVOLUME(var volL, volR: Word);
var
hWO: HWAVEOUT;
waveF: TWAVEFORMATEX;
vol: DWORD;
begin
volL:= 0;
volR:= 0;
// init TWAVEFORMATEX
FillChar(waveF, SizeOf(waveF), 0);
// open WaveMapper = std output of playSOUND
waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
// get VOLUME
waveOutGetVOLUME(hWO, @vol);
volL:= vol and $FFFF;
volR:= vol shr 16;
waveOutClose(hWO);
end;


procedure SetVOLUME(const volL, volR: Word);
var
hWO: HWAVEOUT;
waveF: TWAVEFORMATEX;
vol: DWORD;
begin
// init TWAVEFORMATEX
FillChar(waveF, SizeOf(waveF), 0);
// open WaveMapper = std output of playSOUND
waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
vol:= volL + volR shl 16;
// set VOLUME
waveOutSetVOLUME(hWO, vol);
waveOutClose(hWO);
end;

houshmand
سه شنبه 22 مهر 1382, 21:59 عصر
باتشکر از آقای کرامتی
من که از این توابع چیزی نفهمیدم :roll:
و آنها هم جواب نمی دهند حداقل روی کامپیوتر من! :cry:
ولی اگر بخواهیم ولوم Wave را عوض کنیم
به راحتی می توان

waveOutSetVOLUME(0, vol);
و برای بدست آوردن مقدار آن

waveOutGetVOLUME(0, @vol);
//********************
ولی من دنبال این هستم که چگونه دیگر ولوم ها را عوض کنیم مثلاُ
Master Out
midi
....
و یا کلاُ چگونه همه ولوم ها را باهم عوض کنیم
و چگونه یک ولوم را از حالت Mute خارج کنیم؟
:cry: :cry: :cry:

houshmand
شنبه 03 آبان 1382, 21:45 عصر
:cry: :?:

Kambiz
یک شنبه 04 آبان 1382, 00:02 صبح
تو Win32 Programmer's Reference بگرد دنبال Audio Mixer Reference.

Mashatan
یک شنبه 04 آبان 1382, 00:17 صبح
دقیقا همانطوری که کامبیز گفت بدنیال Audio Mixer Reference باید بگردی.

بزرگترین منبع برای اینجور چیزا MSDN هست
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_mixergetlineinfo.asp

اینجا رو هم ببین !
http://www.swissdelphicenter.ch/torry/showcode.php?id=1204

اینم کدش با یکم تحقیق میتونی کامل ترش کنی ،



Uses MMSystem
function GetControl(Mixer: HMIXER; ComponentType, CtrlType: Longint; var MXC: TMixerControl): Boolean;
var
MXL: TMixerLine;
MXLC: TMixerLineControls;
begin
Result := False;
FillChar(MXL, SizeOf(TMixerLine), 0);
mxl.cbStruct := SizeOf(TMixerLine);
mxl.dwComponentType := ComponentType;
if mixerGetLineInfo(Mixer, @MXL, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR then
begin
with MXLC do
begin
cbStruct := SizeOf(TMixerLineControls);
dwLineID := mxl.dwLineID;
dwControlType := CtrlType;
cControls := 1;
cbmxctrl := SizeOf(TMixerLine);
pamxctrl := @MXC;
pamxctrl^.cbStruct := SizeOf(TMixerControl);
end;
Result := mixerGetLineControls(Mixer, @MXLC, MIXER_GETLINECONTROLSF_ONEBYTYPE) = MMSYSERR_NOERROR;
end;
end;

function SetControlVolume(Mixer: HMIXER; MXC: TMixerControl; Volume: Longint): Boolean;
var
MXCD: TMixerControlDetails;
vol: TMixerControlDetails_Unsigned;
begin
FillChar(MXCD, SizeOf(MXCD), 0);
with MXCD do
begin
cbStruct := SizeOf(TMixerControlDetails);
dwControlID := mxc.dwControlID;
cbDetails := SizeOf(TMixerControlDetails_Unsigned);
paDetails := @vol;
cMultipleItems := 0;
cChannels := 1;
end;
vol.dwValue := Volume;
Result := mixerSetControlDetails(Mixer, @MXCD, MIXER_SETCONTROLDETAILSF_VALUE) = MMSYSERR_NOERROR;
end;

//An example how to mute and unmute some control:

function MuteControl(ComponentType: Longint): Boolean;
var
MixerHandle: HMIXER;
VolCtrl: TMixerControl;
MCD: TMixerControlDetails;
Details: array [0..30] of Integer;
begin
mixerOpen(@MixerHandle, 0, 0, 0, 0);
FillChar(VolCtrl, SizeOf(VolCtrl), 0);
if GetControlVolume(MixerHandle, ComponentType,
cbDetails := SizeOf(Integer);
paDetails := @Details;
{by control MIXERCONTROL_CONTROLTYPE_MUTE has Details[0] value 0 - unmuted or 1 - muted
by control MIXERCONTROL_CONTROLTYPE_VOLUME has Details[0] value of left speaker and Details[1]
of right speaker}
end;
mixerGetControlDetails(MixerHandle, @MCD, MIXER_GETCONTROLDETAILSF_VALUE);

SetControlVolume(MixerHandle, VolCtrl, Integer(not Boolean(Details[0])));
end;
mixerClose(MixerHandle);
end;