Guten Morgen,
ich möchte in meiner Anwendung gewährleisten, dass eine bestimmte WAV-Ansage, welche über MMI abgespielt wird, auch wirkliuch gehört wird, auch wenn die Lautstärke auf Minimum steht. Es ist gewährleistet, dass der Wave-Kanal nicht auf 0 steht, aber die Masterlautstärke könnte auf 0 stehen. Mittels des MMI habe ich keine Möglichkeit gefunden, die Masterlautstärke zu ändern. Ich habe ein Beispiel in C gefunden, welches ich aber nicht schaffe, ins Xbase zu übertragen, da ich nicht weiß, wie die erforderlichen Strukturen erzeugt, bzw. konvertiert werden.
Im Voraus vielen Dank
Uli
Einstellen der Masterlautstärke des Mixers
Moderator: Moderatoren
-
- Rookie
- Beiträge: 13
- Registriert: Mi, 16. Jan 2008 10:44
- Wohnort: Schwäbisch Gmünd
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Einstellen der Masterlautstärke des Mixers
hi,
"wirkt" das "nur" auf den "WAV" Kanal oder auf den "Master" ?
und wenn "Master":volume = 0 oder "Master":mute = .T. ?
was für ein *.OCX nimmt du genau ?
... und wenn der User den "Strom" für seine "aktive" Boxen abgestellt hat ?
hm ...uli_soehnel hat geschrieben: ich möchte in meiner Anwendung gewährleisten, dass eine bestimmte WAV-Ansage, welche über MMI abgespielt wird, auch wirkliuch gehört wird, auch wenn die Lautstärke auf Minimum steht. Es ist gewährleistet, dass der Wave-Kanal nicht auf 0 steht, aber die Masterlautstärke könnte auf 0 stehen. Mittels des MMI habe ich keine Möglichkeit gefunden, die Masterlautstärke zu ändern. Ich habe ein Beispiel in C gefunden, welches ich aber nicht schaffe, ins Xbase zu übertragen, da ich nicht weiß, wie die erforderlichen Strukturen erzeugt, bzw. konvertiert werden.
Code: Alles auswählen
METHOD BDVideo:SetVolume(nLevel)
DEFAULT nLevel TO 100
IF nLevel < 0
nLevel := 0
ENDIF
IF nLevel > 100
nLevel := 100
ENDIF
::volume := nLevel
::error := mmSendString( "setaudio movie volume to "+ALLTRIM(STR(INT(nLevel*10))), @::Ret )
::getErrorString()
RETURN
und wenn "Master":volume = 0 oder "Master":mute = .T. ?
was für ein *.OCX nimmt du genau ?
... und wenn der User den "Strom" für seine "aktive" Boxen abgestellt hat ?
gruss by OHR
Jimmy
Jimmy
-
- Rookie
- Beiträge: 13
- Registriert: Mi, 16. Jan 2008 10:44
- Wohnort: Schwäbisch Gmünd
Re: Einstellen der Masterlautstärke des Mixers
Hallo Jimmy,
die Methode :setvolume ist für waveaudio nicht definiert, sondern hauptsächlich für digitale Medien, wie Videos.
Gruß Uli
die Methode :setvolume ist für waveaudio nicht definiert, sondern hauptsächlich für digitale Medien, wie Videos.
Gruß Uli
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Einstellen der Masterlautstärke des Mixers
hi,
http://msdn.microsoft.com/en-us/library ... S.85).aspx
da du nicht sagst welche *.OCX/DLL/API ist Hilfe schwer ... mein WMPlayer kann es mit einer der
Methoden.
die Methode gehört zu BDVideo wie es dort steht, aber es werden die MCI Commands verwendet.uli_soehnel hat geschrieben: die Methode :setvolume ist für waveaudio nicht definiert, sondern hauptsächlich für digitale Medien, wie Videos.
http://msdn.microsoft.com/en-us/library ... S.85).aspx
da du nicht sagst welche *.OCX/DLL/API ist Hilfe schwer ... mein WMPlayer kann es mit einer der
Methoden.
gruss by OHR
Jimmy
Jimmy
-
- Rookie
- Beiträge: 13
- Registriert: Mi, 16. Jan 2008 10:44
- Wohnort: Schwäbisch Gmünd
Re: Einstellen der Masterlautstärke des Mixers
Hallo Jimmy,
es gibt eine Funktion mixerSetControlDetails in der Winmm.dll. Mit dieser soll das gehen. Hier ein Beispiel in Delphi aus einem anderen Forum:
uses MMSystem;
const
MasterVolumeControl = 0;
MaxVolume = 65535;
MinVolume = 0; //
function _VolumeControl(Mixer: hMixerObj;
var Control: TMixerControl): MMResult;
var
Line : TMixerLine;
Controls : TMixerLineControls;
begin
ZeroMemory(@Line, SizeOf(Line));
Line.cbStruct := SizeOf(Line);
Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Result := mixerGetLineInfo(Mixer,
@Line,
MIXER_GETLINEINFOF_COMPONENTTYPE);
if Result = MMSYSERR_NOERROR then begin
ZeroMemory(@Controls, SizeOf(Controls));
Controls.cbStruct := SizeOf(Controls);
Controls.dwLineID := Line.dwLineID;
Controls.cControls := 1;
Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
Controls.cbmxctrl := SizeOf(Control);
Controls.pamxctrl := @Control;
Result := mixerGetLineControls(Mixer,
@Controls,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
end;
end;
procedure SetMasterVolume(Mixer: hMixerObj; Value: Word);
var
MasterVolume : TMixerControl;
Details : TMixerControlDetails;
UnsignedDetails : TMixerControlDetailsUnsigned;
Code : MMResult;
begin
Code := _VolumeControl(Mixer, MasterVolume);
if Code = MMSYSERR_NOERROR then begin
with Details do begin
cbStruct := SizeOf(Details);
dwControlID := MasterVolume.dwControlID;
cChannels := 1; // set all channels
cMultipleItems := 0;
cbDetails := SizeOf(UnsignedDetails);
paDetails := @UnsignedDetails;
end;
UnsignedDetails.dwValue := Value;
Code := mixerSetControlDetails(Mixer,
@Details,
MIXER_SETCONTROLDETAILSF_VALUE);
end;
if Code <> MMSYSERR_NOERROR then
raise Exception.CreateFmt('SetMasterVolume failure, '+
'multimedia system error #%d', [Code]);
end;
function GetMasterVolume(Mixer: hMixerObj): Word;
var
MasterVolume : TMixerControl;
Details : TMixerControlDetails;
UnsignedDetails : TMixerControlDetailsUnsigned;
Code : MMResult;
begin
Result := 0;
Code := _VolumeControl(Mixer, MasterVolume);
if Code = MMSYSERR_NOERROR then begin
with Details do begin
cbStruct := SizeOf(Details);
dwControlID := MasterVolume.dwControlID;
cChannels := 1; // set all channels
cMultipleItems := 0;
cbDetails := SizeOf(UnsignedDetails);
paDetails := @UnsignedDetails;
end;
Code := mixerGetControlDetails(Mixer,
@Details,
MIXER_GETCONTROLDETAILSF_VALUE);
Result := UnsignedDetails.dwValue;
end;
if Code <> MMSYSERR_NOERROR then
raise Exception.CreateFmt('GetMasterVolume failure, '+
'multimedia system error #%d', [Code]);
end;
procedure TFormX.Foo...
begin
// Set
SetMasterVolume(MasterVolumeControl, 0815); // MaxVolume => 65535
// Get
Caption := IntToStr( GetMasterVolume(MasterVolumeControl) );
end;
Wer kann das ins Xbase übertragen oder mir sagen wie es geht?
Gruß Uli
es gibt eine Funktion mixerSetControlDetails in der Winmm.dll. Mit dieser soll das gehen. Hier ein Beispiel in Delphi aus einem anderen Forum:
uses MMSystem;
const
MasterVolumeControl = 0;
MaxVolume = 65535;
MinVolume = 0; //
function _VolumeControl(Mixer: hMixerObj;
var Control: TMixerControl): MMResult;
var
Line : TMixerLine;
Controls : TMixerLineControls;
begin
ZeroMemory(@Line, SizeOf(Line));
Line.cbStruct := SizeOf(Line);
Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Result := mixerGetLineInfo(Mixer,
@Line,
MIXER_GETLINEINFOF_COMPONENTTYPE);
if Result = MMSYSERR_NOERROR then begin
ZeroMemory(@Controls, SizeOf(Controls));
Controls.cbStruct := SizeOf(Controls);
Controls.dwLineID := Line.dwLineID;
Controls.cControls := 1;
Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
Controls.cbmxctrl := SizeOf(Control);
Controls.pamxctrl := @Control;
Result := mixerGetLineControls(Mixer,
@Controls,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
end;
end;
procedure SetMasterVolume(Mixer: hMixerObj; Value: Word);
var
MasterVolume : TMixerControl;
Details : TMixerControlDetails;
UnsignedDetails : TMixerControlDetailsUnsigned;
Code : MMResult;
begin
Code := _VolumeControl(Mixer, MasterVolume);
if Code = MMSYSERR_NOERROR then begin
with Details do begin
cbStruct := SizeOf(Details);
dwControlID := MasterVolume.dwControlID;
cChannels := 1; // set all channels
cMultipleItems := 0;
cbDetails := SizeOf(UnsignedDetails);
paDetails := @UnsignedDetails;
end;
UnsignedDetails.dwValue := Value;
Code := mixerSetControlDetails(Mixer,
@Details,
MIXER_SETCONTROLDETAILSF_VALUE);
end;
if Code <> MMSYSERR_NOERROR then
raise Exception.CreateFmt('SetMasterVolume failure, '+
'multimedia system error #%d', [Code]);
end;
function GetMasterVolume(Mixer: hMixerObj): Word;
var
MasterVolume : TMixerControl;
Details : TMixerControlDetails;
UnsignedDetails : TMixerControlDetailsUnsigned;
Code : MMResult;
begin
Result := 0;
Code := _VolumeControl(Mixer, MasterVolume);
if Code = MMSYSERR_NOERROR then begin
with Details do begin
cbStruct := SizeOf(Details);
dwControlID := MasterVolume.dwControlID;
cChannels := 1; // set all channels
cMultipleItems := 0;
cbDetails := SizeOf(UnsignedDetails);
paDetails := @UnsignedDetails;
end;
Code := mixerGetControlDetails(Mixer,
@Details,
MIXER_GETCONTROLDETAILSF_VALUE);
Result := UnsignedDetails.dwValue;
end;
if Code <> MMSYSERR_NOERROR then
raise Exception.CreateFmt('GetMasterVolume failure, '+
'multimedia system error #%d', [Code]);
end;
procedure TFormX.Foo...
begin
// Set
SetMasterVolume(MasterVolumeControl, 0815); // MaxVolume => 65535
// Get
Caption := IntToStr( GetMasterVolume(MasterVolumeControl) );
end;
Wer kann das ins Xbase übertragen oder mir sagen wie es geht?
Gruß Uli
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Einstellen der Masterlautstärke des Mixers
hi,
http://support.microsoft.com/kb/178456könnte das richtige Sample sein.
nun verstehe ich, du willst den"Mixer" ansprechenuli_soehnel hat geschrieben: es gibt eine Funktion mixerSetControlDetails in der Winmm.dll. Mit dieser soll das gehen.
http://support.microsoft.com/kb/178456könnte das richtige Sample sein.
gruss by OHR
Jimmy
Jimmy