Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 23.04.11 20:37 
Hallo!

Ich habe nach der Anleitung hier: forum.chip.de/java-d...inbinden-567376.html Soundeffekte in mein Programm eingebunden. Klappt auch, was mich aber stört, ist aber die kleine Pause, die vor dem Abspielen des Sounds (= dauert nur 1 Sekunde) entsteht.

Konkret ist es so, dass die Sound-Ausgabe die visuelle Ausgabe kurz blockiert, dann läuft alles wieder. Da hilft auch Application.ProcessMessages nichts.

Wie kann ich die Soundausgabe "flüssiger" machen?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.04.11 20:48 
Das dauert eben kurz die Ressource zu laden.

Besser geht das mit der Bass-DLL. ;-)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 23.04.11 22:03 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Das dauert eben kurz die Ressource zu laden.
Es sieht so aus, als ob man das in den Griff kriegt, wenn man gleich bei Programmstart eine Ressource lädt, egal, was, Hauptsache, eine Ressource wird geladen, kann auch "Stille" sein. Keine schöne Lösung, scheint aber zu klappen.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Besser geht das mit der Bass-DLL. ;-)
Danke dafür, werde mir das ansehen!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 27.04.11 06:41 
Weiss jemand, wie man mit mmsystem.pas die Lautstärke regelt oder überhaupt den Sound steuert? Die Beispiele, die ich bisher zur Lautstärke gegooglet habe, funktionierten bei mir nicht.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
FrEaKY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: Mi 27.04.11 06:49 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Weiss jemand, wie man mit mmsystem.pas die Lautstärke regelt oder überhaupt den Sound steuert? Die Beispiele, die ich bisher zur Lautstärke gegooglet habe, funktionierten bei mir nicht.

Ja. Mit der Multimedia API kannst du direkt die Amplitude der Headerpakete anpassen, die du an die Soundkarte schickst. Effekte hinzufügen, verzerren, was immer du willst. Und das ganz ohne eine DLL.
Allerdings ist das Low Level und dann wird nichts mehr mit "PlaySound" und du musst alles selbst schreiben. Das Ganze ist schon etwas umfangreicher. Aber wenn dich das interessiert kann ich es nur empfehlen.

Sonst bleibt wohl nur der Griff zur bass.dll oder fmod und wie sie alle heißen.

mfg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 27.04.11 07:05 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Weiss jemand, wie man mit mmsystem.pas die Lautstärke regelt oder überhaupt den Sound steuert? Die Beispiele, die ich bisher zur Lautstärke gegooglet habe, funktionierten bei mir nicht.
Im Zuge der starken Erweiterungen bei Windows Vista wurde auch die Sound API grundlegend überarbeitet. Ältere Beispiele werden also nicht mehr funktionieren, die z.B. versuchen eine Hardware direkt in der Lautstärke zu regeln.

Ab Vista ist das ganze virtualisiert, so dass man endlich nur noch die eigene Laufstärke regelt und nicht andere Programme dabei beeinträchtigt. Mit der bass.dll funktioniert das aber eigentlich problemlos. :nixweiss:
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 27.04.11 20:25 
Danke erstmal für die Tipps, aber alles selbst zu schreiben ist mir dann doch zu viel!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
markus5766h
Hält's aus hier
Beiträge: 11

XP, W7 Ult. 64-bit, Linux (als Rettung)
D7.0 Enterprise
BeitragVerfasst: Mi 27.04.11 20:44 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Weiss jemand, wie man mit mmsystem.pas die Lautstärke regelt oder überhaupt den Sound steuert? Die Beispiele, die ich bisher zur Lautstärke gegooglet habe, funktionierten bei mir nicht.


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
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 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;


. . . weitere Infos in der MMSystem-Unit

läuft auf XP
Vista - keine Ahnung, hab ich nie gehabt
Win7 - definitiv nein
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 27.04.11 21:40 
user profile iconmarkus5766h hat folgendes geschrieben Zum zitierten Posting springen:

läuft auf XP
Vista - keine Ahnung, hab ich nie gehabt
Win7 - definitiv nein

Habe XP, und es klappt auch - danke! Natürlich würde ich mein Programm gerne unabhängiger von der Windows-Version machen und daher auch Win7-kompatiblen Code verwenden. Werde mal googlen, auch wenn ich's nicht testen kann.

//Edit: Eine Alternative ist auch, aus dem Programm heraus den Windows-Lautstärkenregler zu öffnen, das wäre sogar besser, da das dann ja jedenfalls funktioniert!

Und da haben wir's ja auch schon:
ausblenden Delphi-Quelltext
1:
ShellExecute(Handle, nil'SNDVOL32.EXE''/t''', SW_SHOWNA);					

Frage: klappt dieser Aufruf auch unter Win7?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 27.04.11 22:06 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Habe XP, und es klappt auch - danke!
Ist aber meilenweit schlechter als eine Lautstärkeregelung mit der bass.dll selbst. Denn so regelst du die Lautstärke systemweit für das Gerät. Einer der größten Nervfaktoren unter XP damals...

Mit der bass.dll regelst du dagegen die Lautstärke direkt.

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Natürlich würde ich mein Programm gerne unabhängiger von der Windows-Version machen und daher auch Win7-kompatiblen Code verwenden.
Dort gibt es keine hardwarenahe Regelung für ein Gerät wie unter XP.

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Frage: klappt dieser Aufruf auch unter Win7?
Nein, denn du hast da ein 32 zu viel. Unter Windows 7 64-Bit lautet der Aufruf nur sndvol.exe. ;-)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 27.04.11 22:20 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Nein, denn du hast da ein 32 zu viel. Unter Windows 7 64-Bit lautet der Aufruf nur sndvol.exe. ;-)
Mit denselben Parametern /s (Lautstärkeregler in einem kleineren Fenster) und /t (Lautstärkeeinstellung ohne die anderen Funktionen)?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 27.04.11 22:25 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Nein, denn du hast da ein 32 zu viel. Unter Windows 7 64-Bit lautet der Aufruf nur sndvol.exe. ;-)
Mit denselben Parametern /s (Lautstärkeregler in einem kleineren Fenster) und /t (Lautstärkeeinstellung ohne die anderen Funktionen)?
Es gibt unter Windows 7 nur noch eine applikationsbezogene Regelung. Da gibt es nur ein Fenster dafür. Die Parameter werden ignoriert.

SndVolWin7
Einloggen, um Attachments anzusehen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 28.04.11 18:06 
Ok, danke euch!

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Mit der bass.dll regelst du dagegen die Lautstärke direkt.
Habe die bass.dll-Dateien in einen Delphi-Unterordner kopiert, den Pfad zur bass.dll hinzugefügt, trotzdem wurde die bass.dll nicht gefunden. Habe aber auch kein Delphi-Package oder Setup gefunden.

Ich habe das jetzt so gelöst, dass unter Win7 sndvol.exe aufgerufen wird, unter XP kann man die Lautstärke mit meinem Programm regeln. Zwar systemweit, aber für meine Zwecke hier reicht's!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 28.04.11 19:02 
Du kannst die bass.dll einfach in das Verzeichnis deiner Exe legen. Du musst dann die Soundausgabe aber auch damit machen, aber das macht vieles ohnehin viel einfacher.
markus5766h
Hält's aus hier
Beiträge: 11

XP, W7 Ult. 64-bit, Linux (als Rettung)
D7.0 Enterprise
BeitragVerfasst: Do 28.04.11 19:08 
zur Vervollständigung : Lautstärke regeln unter Win7 - TEndpointVolume

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
unit 'was auch immer . . .';

interface

uses
  . . . ActiveX, MMDeviceApi;

const 
  CLSID_TaskbarList: TGUID = '{56fdf344-fd6d-11d0-958a-006097c9a090}'
  IID_ITaskbarList:  TGUID = '{56FDF342-FD6D-11d0-958A-006097C9A090}'
  IID_ITaskbarList2: TGUID = '{602D4995-B13A-429b-A66E-1935E44F4317}'
  IID_ITaskbarList3: TGUID = '{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}';

type 
  TBPF =   (TBPF_NOPROGRESS = 0,
           TBPF_INDETERMINATE = 1,
           TBPF_NORMAL = 2,
           TBPF_ERROR = 4,
           TBPF_PAUSED = 8);
  TBATF =  (TBATF_USEMDITHUMBNAIL = 1,
           TBATF_USEMDILIVEPREVIEW = 2);

   ITaskbarList = interface(IUnknown)
      ['{56FDF342-FD6D-11d0-958A-006097C9A090}']
      function HrInit : HResult; stdcall;
      function AddTab(hWndOwner : HWND) : HResult; stdcall;
      function DeleteTab(hWndOwner : HWND) : HResult; stdcall;
      function ActivateTab(hWndOwner : HWND) : HResult; stdcall;
      function SetActiveAlt(hWndOwner : HWND) : HResult; stdcall;
   end{ ITaskbarList }

  ITaskbarList2 = interface(ITaskbarList)
    ['{602D4995-B13A-429b-A66E-1935E44F4317}']
    function MarkFullscreenWindow(wnd : HWND; fFullscreen : bool) : HResult; stdcall;
  end;

  ITaskbarList3 = interface (ITaskbarList2)
  ['{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}']
    function SetProgressValue (hWnd: HWND; ullCompleted: int64; ullTotal: int64): HResult; stdcall;
    function SetProgressState (hWnd: HWND; tbpFlags: TBPF): HResult; stdcall;
    function RegisterTab (hwndTab: HWND; hwndMDI: HWND): HResult; stdcall;
    function UnregisterTab (hwndTab: HWND): HResult; stdcall;
    function SetTabOrder (hwndTab: HWND; hwndInsertBefore: HWND): HResult; stdcall;
    function SetTabActive (hwndTab: HWND; hwndMDI: HWND; tbatFlags: TBATF): HResult; stdcall;
    function ThumbBarAddButtons (hWnd: HWND; cButtons: integer; pButtons: pointer): HResult; stdcall;
    function ThumbBarUpdateButtons (hWnd: HWND; cButtons: cardinal; pButtons: pointer): HResult; stdcall;
    function ThumbBarSetImageList (hWnd: HWND; himl: pointer): HResult; stdcall;
    function SetOverlayIcon (hWnd: HWND; hIcon: HICON; pszDescription: PWideChar): HResult; stdcall;
    function SetThumbnailTooltip (hWnd: HWND; pszTip: PWideChar): HResult; stdcall;
    function SetThumbnailClip (hWnd: HWND; prcClip: PRect): HResult; stdcall;
  end;

type
    TForm1 = class(TForm)


    procedure cbMasterMuteClick(Sender: TObject);
    procedure FormShow(Sender: TObject);

    procedure SetMasterVolume;
    procedure SetChannelsVolume;
    procedure SetChannelsFlagVolume;

   private
    { Private-Deklarationen }
                FTaskBarList : ITaskbarList3;

  public
    { Public-Deklarationen }
  end;

type
 TepVolEvents = Procedure(f:byte) of object;


var
  Form1: TForm1;
  endpointVolume    : IAudioEndpointVolume = nil;
  deviceEnumerator  : IMMDeviceEnumerator;
  defaultDevice     : IMMDevice;
  pProps            : IPropertyStore;
  epVolEvents       : TepVolEvents;
  VolumeLevel       : Single;
  OldVolume         : Single;


implementation

{$R *.dfm}

var
  ChannelCnt               : Cardinal;
  ChannelLeft,ChannelRight : Single;
  VolMaster                : Single;
  VolMute                  : Bool;
  Percent                  : Integer;
  ChannelFlag              : Boolean;


procedure TForm1.FormCreate(Sender: TObject);
var
  i : Integer;
begin
  FTaskBarList := CreateComObject(CLSID_TaskbarList)  as  ITaskbarList3;
  ChannelFlag := False;

  CoCreateInstance(CLASS_IMMDeviceEnumerator, nil, CLSCTX_INPROC_SERVER, IID_IMMDeviceEnumerator, deviceEnumerator);
end;

procedure TForm1.cbMasterMuteClick(Sender: TObject);
begin

  if cbMasterMute.Checked then
    begin

      if endpointVolume = nil then Exit;
      VolumeLevel := 0;
      endpointVolume.SetMasterVolumeLevelScalar(VolumeLevel, nil);
      FTaskBarList.SetProgressState(Application.handle, TBPF_Indeterminate);
    end
      else
        begin
          if endpointVolume = nil then Exit;
          if not ChannelFlag then
            begin // not ChannelFlag
              VolumeLevel := OldVolume;
              endpointVolume.SetMasterVolumeLevelScalar(VolumeLevel, nil);
            end
              else  // ChannelFlag
                begin
                  SetChannelsFlagVolume;
                end;

        end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  if deviceEnumerator = nil then begin ShowMessage('NIL'); Exit; end;
  deviceEnumerator.GetDefaultAudioEndpoint(eRender, eConsole, defaultDevice);
  if defaultDevice <> nil then defaultDevice.Activate(IID_IAudioEndpointVolume, CLSCTX_INPROC_SERVER, nil, endpointVolume);
  endpointVolume.GetChannelCount(ChannelCnt);
  endpointVolume.GetMasterVolumeLevelScalar(VolMaster);
  VolumeLevel := VolMaster;
  endpointVolume.GetChannelVolumeLevelScalar(0,ChannelLeft);
  endpointVolume.GetChannelVolumeLevelScalar(1,ChannelRight);
  vLeft  := ChannelLeft;
  vRight := ChannelRight;
  endpointVolume.GetMute(VolMute);
  if VolMute=True then cbMasterMute.Checked := True else cbMasterMute.Checked := False;
  lbMaster.Caption := Format('%1.3f', [VolMaster]);

  Percent := Round(VolumeLevel * 100);
  // FTaskBarList.SetProgressState(Application.handle, TBPF_Normal);
  case Round(VolumeLevel * 1000of
   0 .. 749    : FTaskBarList.SetProgressState(Application.handle, TBPF_Normal);
   750 .. 1001 : FTaskBarList.SetProgressState(Application.handle, TBPF_Error);
  end// end case of
  FTaskBarList.SetProgressValue(Application.handle, Percent, 100);
end;


procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if reg1 then
    begin
      if imgRegler1.Top > 20 then imgRegler1.Top := imgRegler1.Top - wheel;
      VolumeLevel := ( (200 - (imgRegler1.Top - 20)) / 200);
      SetMasterVolume;
    end;
  if reg2 or reg3 then
    begin
      if reg2 then
        if imgLeft.Top > 20 then imgLeft.Top := imgLeft.Top - wheel;
      if reg3 then
        if imgRight.Top > 20 then imgRight.Top := imgRight.Top - wheel;

      vLeft    := ( (200 - (imgLeft.Top - 20)) / 200);
      vRight   := ( (200 - (imgRight.Top - 20)) / 200);
      SetChannelsVolume;
    end;
end;

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if reg1 then
    begin
      if imgRegler1.Top < 220 then imgRegler1.Top := imgRegler1.Top + wheel;
      VolumeLevel := ( (200 - (imgRegler1.Top - 20)) / 200);
      SetMasterVolume;
    end;
  if reg2 or reg3 then
    begin
      if reg2 then
        if imgLeft.Top < 220 then imgLeft.Top := imgLeft.Top + wheel;
      if reg3 then
        if imgRight.Top < 220 then imgRight.Top := imgRight.Top + wheel;

      vLeft  := ( (200 - (imgLeft.Top - 20)) / 200);
      vRight := ( (200 - (imgRight.Top - 20)) / 200);
      SetChannelsVolume;
    end;
end;

procedure TForm1.SetMasterVolume;
begin
  if endpointVolume = nil then Exit;
  cbMasterMute.Checked := False;
  OldVolume   := VolumeLevel;
  OldLeft  := vLeft;
  OldRight := vRight;
  endpointVolume.SetMasterVolumeLevelScalar(VolumeLevel, nil);
  lbMaster.Caption := Format('%1.3f', [VolumeLevel]);

end;

procedure TForm1.SetChannelsVolume;
begin
  if endpointVolume = nil
    then Exit;

  endpointVolume.SetChannelVolumeLevelScalar(0, vLeft, nil);
  endpointVolume.SetChannelVolumeLevelScalar(1, vRight, nil);
  lbLeft.Caption  := Format('%1.3f', [vLeft * 1]);
  lbRight.Caption := Format('%1.3f', [vRight * 1]);
  SetMasterVolume;
end;

procedure TForm1.SetChannelsFlagVolume;
begin
  if endpointVolume = nil
    then Exit;

  endpointVolume.SetChannelVolumeLevelScalar(0, OldLeft, nil);
  endpointVolume.SetChannelVolumeLevelScalar(1, OldRight, nil);
  lbLeft.Caption  := Format('%1.3f', [OldLeft * 1]);
  lbRight.Caption := Format('%1.3f', [OldRight * 1]);
  //SetMasterVolume;
end;


ich habe seinerzeit die Lautstärkeregelung per Mouse-Wheel vorgenommen, lässt sich aber
für die eigene Verwendung ändern.
Die Deklarationen und Funktionen zu TTaskbar ... werden nicht unbedingt benötigt.
Einloggen, um Attachments anzusehen!
markus5766h
Hält's aus hier
Beiträge: 11

XP, W7 Ult. 64-bit, Linux (als Rettung)
D7.0 Enterprise
BeitragVerfasst: Do 28.04.11 19:20 
[quote="user profile icongalagher"(639296)]
Habe XP, und es klappt auch - danke! Natürlich würde ich mein Programm gerne unabhängiger von der Windows-Version machen und daher auch Win7-kompatiblen Code verwenden. Werde mal googlen, auch wenn ich's nicht testen kann.
[quote]

eine Funktion die auf XP und Win7 funktioniert wirst Du nicht finden -
2 Möglichkeiten
1) Version abfragen und entsprechende Funktionen nutzen
2) bass.dll benutzen und nur die eigene Quelle regeln
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 28.04.11 21:44 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Besser geht das mit der Bass-DLL. ;-)
Habe mir das heruntergeladen und ins Projekt eingebunden. Und es funktioniert - natürlich - nicht. :autsch:

In der Hilfe steht:
Zitat:
BASS_ChannelSetAttribute(
DWORD handle,
BASS_ATTRIB_VOL,
float volume
);


Parameters
handle The channel handle.
volume The volume level... 0 (silent) to 1 (full).

Ich habe also die Hilfe weiter befragt und auch etwas gefunden, aber das klappt auch nicht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  ch: HCHANNEL; ch := BASS_SampleGetChannel(0, False);
begin
  BASS_ChannelSetAttribute(ch, BASS_ATTRIB_PAN, 0);  //welcher Wert, 0, 1, oder egal?
  BASS_ChannelSetAttribute(ch, BASS_ATTRIB_VOL, 100);  //welcher Wert?

Ich habe keine Ahnung, welche Werte da rein sollen. Ich will doch nur lauter oder leiser machen!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 28.04.11 21:53 
Du hast es doch selbst zitiert: :gruebel:
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
volume The volume level... 0 (silent) to 1 (full).
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 28.04.11 22:29 
Ok, wenn es denn wirklich so schwierig für dich ist... im Anhang liegt ein komplettes ganz simples Beispiel. Einfach mit dem Button eine MP3 auswählen.

Simpler Player mit Lautstärkeregelung (zip, 655.04 KB)
Einloggen, um Attachments anzusehen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 29.04.11 16:48 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Ok, wenn es denn wirklich so schwierig für dich ist...
Danke, das funktioniert, aber ich glaube, wir reden da aneinander vorbei: Ich möchte nicht die Lautstärke für eine bestimmte Sounddatei ändern, sondern für beliebige viele Klangeffekte, die in meine exe-Datei als Ressource eingebunden sind und die ich bei Bedarf mit SndPlaySound lade.

Der Aufruf BASS_SetVolume bewirkt in meinem Programm gar nichts. Und wenn ich keine externe Sounddatei lade, was ist dann das Handle in BASS_ChannelPlay?

Ich bin nicht unwillig, selbst etwas zu tun, habe aber im Moment keine Idee! Welche Funktionen von bass.pas muss ich verwenden, wenn ich die Lautstärke nur für mein Programm ändern will?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!