Autor Beitrag
covel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: Mi 23.07.08 08:16 
Hallo,

ist es möglich die Lautstärke in zB. Winamp zuregulieren wenn jemand in zB. Teamspeak/Skype redet. Ich würde das am liebsten über ein extra Programm realisieren, weiß jedoch nicht ob bzw. wie das überhaupt möglich ist?!?!
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mi 23.07.08 09:35 
ich würde sagen dass ist ziemlich schwer zu machen, aber da gibt es vielleicht ein Plugin für
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mi 23.07.08 10:05 
Das ist möglich, wird allerdings schwer...
Du musst einfach, wie Windows das im Mixer macht, die Lautstärke von Teamspeak aus dem System lesen und wenn die dann halt... Ja, halt laut wird, dann machst du die Lautstärke von Winamp leise...

_________________
1405006117752879898543142606244511569936384000000000.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 478

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 23.07.08 10:11 
Ich kann mir nicht vorstellen, dass es da bei Teamspeak selbst keine Option oder ein Plugin für gibt, das das regelt. Das dürfte doch ein oft gewünschtes Feature sein. :gruebel:

Die Lautstärke von Winamp zu regeln ist kein Problem, dafür gibts hier Units in der Library oder den Open-Source-Units. Das Problem ist zu erkennen, wann bei Teamspeak was läuft.

_________________
We are, we were and will not be.
ene
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 779
Erhaltene Danke: 1

Vista, XP, W2K
Delphi, .Net, Deutsch und Englisch
BeitragVerfasst: Mi 23.07.08 10:18 
Wenn der Punkt grün wird ;) Die Events müsste es für TS und Skype geben, ist halt nur die Frage, ob man die von aussen abgreifen kann.

_________________
Wir, die guten Willens sind, geführt von Ahnungslosen, Versuchen für die Undankbaren das Unmögliche zu vollbringen.
Wir haben soviel mit so wenig so lange versucht, daß wir jetzt qualifiziert sind, fast alles mit Nichts zu bewerkstelligen.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 23.07.08 10:22 
es dürfte ein Teamspeak SDK geben igendwo im TS-Ordner auf deiner Festplatte. Da ist sogar ne .pas Datei dabei. Vielleicht kannst du mit dem was anfangen.

lg elundril

P.S.: Google einfach mal nach Teamspeak+API bzw Teamspeak+SDK. Da is was zu finden, auch wenn ich mir nur die erste seite angeschaut hab.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mi 23.07.08 10:29 
Jop, das SDK ist in Pascal, wahrscheinlich ist TS auch in Pascal geschrieben worden, weil es nur Pascal ist...
im Ordner client_sdk

so auf die schnelle finde ich keine Funktion, um dein Ziel zu erreichen, aber wird es sicher irgendwo geben... Wenigstens Programmierbar wird es sein ;)

_________________
1405006117752879898543142606244511569936384000000000.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 23.07.08 13:04 
Bei Skype ginge das eventuell über Skype4COM, hier gibt es einige Delphi-Beispiele: developer.skype.com/Docs/Skype4COM/Example

mfg
Coder
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Mi 23.07.08 14:57 
Mich würde so eine Software auch sehr interessieren.
Bei Google konnt ich sowas nicht finden.
Kannst ja bescheid sagen wenn du fortschritte machst :wink:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 23.07.08 16:16 
Ich muss einmal schauen wie das geht, aber es gibt dafür 100%ig schon was, weil ich das schon bei jemandem mitbekommen habe, dass das klappt. Wenn ich was sage, wird dort die Musik leise. (TeamSpeak)
covel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: Mi 23.07.08 17:08 
So,

ich auch noch mal intensiver gegooglet..und habe das Programm "TS Chatter" gefunden Link: download.teamspeak-e...ex.php?release_id=27



funktioniert einwandfrei...
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mi 23.07.08 20:34 
Also wenn du es mal selber schreibst, dann bau noch die Funktion ein, dass man nen Globalen Hook für eine beliebige Taste machen kann, auf die das dann auch reagiert, sprich, solange die gedrückt ist, musik leiser...

Wäre bei Counter Strike praktisch, da ich manchmal mit Musik zocke, wenn ich dann reden will, dann muss die leiser werden ;)

_________________
1405006117752879898543142606244511569936384000000000.
Coder
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Mi 23.07.08 21:59 
Und toll wärs auch wenns für den WMP gehen würde :wink:
Kein Bock umzusteigen
g1o2k4
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Mi 23.07.08 22:15 
wie man winamp steuert ist simpel, aber ich weiß nicht wie man teamspeak oder skype aktivität ausliest...

hatte mal ne winamp fernbedienung gebaut. hier ist etwas quelltext:

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:
const //////////////////// wird unten benutzt /////////////////////////
  WINAMP_BUTTON1   : integer = 40044// previous title
  WINAMP_BUTTON2   : integer = 40045// play
  WINAMP_BUTTON3   : integer = 40046// pause
  WINAMP_BUTTON4   : integer = 40047// stop
  WINAMP_BUTTON5   : integer = 40048// next title
  WINAMP_VOLUMEUP  : integer = 40058// volume up
  WINAMP_VOLUMEDOWN: integer = 40059// volume down
  IPC_GETLISTLENGTH : integer = 124;
  IPC_GETLISTPOS :integer = 125;
  IPC_GETPLAYLISTFILE : integer = 211;
  IPC_GETPLAYLISTTITLE : integer = 212;

  IPC_GET_SHUFFLE : integer = 250;
  IPC_GET_REPEAT : integer = 251;


/////////////////////////////Functions//////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function GetWinampTitel(data:Integer): String;
var hwndWinamp, TempHandle : THandle;
    dat2: array[0..500of Char;
    TrackPos: Integer;
    temp, MPointer: Cardinal;
begin
    // Prinzip ist fast immer dasselbe, daher nur einmal die Kommentare ;-)
    // Fenster suchen
    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp= 0 then
    begin  // Kein Erfolg
        result:=''
    end else
    begin  // Erfolg - Winamp-Fenster gefunden
        if data<0 then
          // ermittle die aktuelle Position in der Playlist
          TrackPos:= SendMessage(hwndWinamp,WM_USER,0 , IPC_GETLISTPOS)
        else
          // sonst nehme die übergebene zahl als tracknummer
          TrackPos:=data;

        // Tja nu, halt ein paar Nachrichten an Winamp senden, um an die Daten zu kommen ;-)
        MPointer:= SendMessage(hwndWinamp,WM_USER,TrackPos , IPC_GETPLAYLISTTITLE);
        // Diese Info möchte Winamp nicht direkt rausrücken  - da muss man was tricksen ;-)
        GetWindowThreadProcessId(hwndWinamp,TempHandle);
        hwndWinamp:= OpenProcess(PROCESS_ALL_ACCESS,False,TempHandle);
        ReadProcessMemory(hwndWinamp, Pointer(MPointer), @dat2,500,temp);
        // warum ausgerechnet 500 kann ich nicht sagen. Habe das so übernommen.
        // Kann sein, dass auch kleinere Werte funktionieren.
        CloseHandle(hwndWinamp);
        Result:= string(dat2);
    end;
end;

function GetWinampPlayListLength:integer;
var hwndWinamp:THandle;
begin
    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp= 0 then
    begin
        result:=-1
    end else
    begin
        result := SendMessage(hwndWinamp,WM_USER,0 , IPC_GETLISTLENGTH);
    end;
end;

function GetWinampFilename(data:Integer): String;
var hwndWinamp, TempHandle : THandle;
    dat2: array[0..500of Char;
    TrackPos: Integer;
    temp, MPointer: Cardinal;
begin
    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp= 0 then
    begin
        result:=''
    end else
    begin
        if data<0 then
          TrackPos:= SendMessage(hwndWinamp,WM_USER,0 , IPC_GETLISTPOS)
        else
          TrackPos:=data;

        MPointer:= SendMessage(hwndWinamp,WM_USER,TrackPos , IPC_GETPLAYLISTFILE);
        GetWindowThreadProcessId(hwndWinamp,TempHandle);
        hwndWinamp:= OpenProcess(PROCESS_ALL_ACCESS,False,TempHandle);
        ReadProcessMemory(hwndWinamp, Pointer(MPointer), @dat2,500,temp);
        CloseHandle(hwndWinamp);
        Result:= string(dat2);
    end;
end;

function GetWinampNextTitel:string;
var hwndWinamp, TempHandle : THandle;
    dat2: array[0..500of Char;
    TrackPos,maxpos: Integer;
    temp, MPointer: Cardinal;
begin
    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp= 0 then
    begin
        result:=''
    end else
    begin
        // Wenn Shuffle aktiviert ist, kann keine Aussage über den nächsten Titel getroffen werden
        if SendMessage(hwndWinamp,WM_USER,0 , IPC_GET_SHUFFLE)=1 then
            result:='N/A [random]'
        else
        begin
            TrackPos := SendMessage(hwndWinamp,WM_USER,0 , IPC_GETLISTPOS);
            maxpos   := SendMessage(hwndWinamp,WM_USER,0 , IPC_GETLISTLENGTH);
            if maxpos-1 > Trackpos then inc(TrackPos) // noch nicht am Ende der Liste
            else begin
                // am Ende der Liste
                if SendMessage(hwndWinamp,WM_USER,0 , IPC_GET_REPEAT)=1
                // ist Repeat auf ON? - Dann liefere den ersten Titel in der Liste
                then TrackPos:=0 else
                begin
                    // andernfalls: Ende der Liste, kein Repeat - kein nächstes Lied
                    result:='N/A [no repeat]';
                    exit;
                end;
            end;
            MPointer:= SendMessage(hwndWinamp,WM_USER,TrackPos , IPC_GETPLAYLISTTITLE);
            GetWindowThreadProcessId(hwndWinamp,TempHandle);
            hwndWinamp:= OpenProcess(PROCESS_ALL_ACCESS,False,TempHandle);
            ReadProcessMemory(hwndWinamp, Pointer(MPointer), @dat2,500,temp);
            CloseHandle(hwndWinamp);
            // Überprüfen: Existiert nächstes File überhaupt?
            if fileexists(GetWinampFilename(Trackpos)) then
                Result := string(dat2)
            else
                Result := 'N/A [File not found]';
                // andere Möglichkeit: Die Liste weiter durchgehen, um den nächsten gültigen Titel zu erhalten.
        end;
    end;
end;

function GetWinampPrevTitel:string;
var hwndWinamp, TempHandle : THandle;
    dat2: array[0..500of Char;
    TrackPos,maxpos: Integer;
    temp, MPointer: Cardinal;
begin
    // Genau wie "Next", nur umgedreht ;-)
    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp= 0 then
    begin
        result:=''
    end else
    begin
        if SendMessage(hwndWinamp,WM_USER,0 , IPC_GET_SHUFFLE)=1 then
            result:='N/A [random]'
        else
        begin
            TrackPos := SendMessage(hwndWinamp,WM_USER,0 , IPC_GETLISTPOS);
            maxpos   := SendMessage(hwndWinamp,WM_USER,0 , IPC_GETLISTLENGTH);
            if Trackpos > 0 then dec(TrackPos)
            else begin
                if SendMessage(hwndWinamp,WM_USER,0 , IPC_GET_REPEAT)=1
                then TrackPos:=maxpos-1 else
                begin
                    result:='N/A [no repeat]';
                    exit;
                end;
            end;
            MPointer:= SendMessage(hwndWinamp,WM_USER,TrackPos , IPC_GETPLAYLISTTITLE);
            GetWindowThreadProcessId(hwndWinamp,TempHandle);
            hwndWinamp:= OpenProcess(PROCESS_ALL_ACCESS,False,TempHandle);
            ReadProcessMemory(hwndWinamp, Pointer(MPointer), @dat2,500,temp);
            CloseHandle(hwndWinamp);
            if fileexists(GetWinampFilename(Trackpos)) then
                Result := string(dat2)
            else
                Result := 'N/A [File not found]';
        end;
    end;
end;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////




var i:integer;

  for i:=0 to GetWinampPlayListLength-1 do //Playlist
  begin
    listbox1.Items.Add(GetWinampFilename(i));
    listbox2.Items.Add(GetWinampTitel(i));
  end;



var hwndWinamp: THandle;

begin
  if Button3.Caption = 'Play' then // Play/Pause
  begin
    Button3.Caption := 'Pause';
    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_BUTTON2, 0);
  end;
  if Button3.Caption = 'Pause' then
  begin
    Button3.Caption := 'Play';
    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_BUTTON3, 0);
  end;
end;


    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_BUTTON1, 0);

    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_BUTTON4, 0);

    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_BUTTON5, 0);

    hwndWinamp:= FindWindow('Winamp v1.x',nil);                                      /// das sind die befehle die sich interessieren dürften
    if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_VolumeUP, 0);    /////////////////////////////

    hwndWinamp:= FindWindow('Winamp v1.x',nil);
    if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_VolumeDown, 0);  /////////////////////////////


ganz unten sind die befehle die für dich interessant sind. jetzt musst du nur noch skype und ts auslesen.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Do 24.07.08 11:16 
Da ich vorwiegend Skype benutze und es sowas dafür noch nicht zu geben scheint, wäre das optimal ;) Man könnte das Programm ja für mehrere Programme auslegen. (Winamp, WMP, TeamSpeak, Skype) vielleicht gibt es auch eine allgemeine Möglichkeit, herauszufinden, ob ein Programm gerade einen Sound ausgeben will und wenn ja wie laut dieser ist.

mfg
g1o2k4
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 493



BeitragVerfasst: Do 24.07.08 11:35 
bei vista kann man ja jedes einzelne programm in den soundoptionen regulieren.
falls du vista hast, würde ich mal bei msdn schaun obs spezielle api funktionen gibt, die dir die aktuelle lautstärke ausgeben. dann kannste z.b. alle 500ms mit nem timer die funktion aufrufen oder so.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 24.07.08 11:49 
Und was Teamspeak angeht müsste das über das SDK gehen. Da aber vermutlich bald eine neue Version herauskommt ist die Frage ob es noch lohnt für das alte viel zu machen. Aber bald ist ja relativ, die Ankündigung ist ja schon etwas älter^^.

// Edit: Ich sehe gerade, dass es bis TS3 wohl noch ein dreiviertel Jahr oder mehr hin ist.
whitef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 202
Erhaltene Danke: 1

Windows X
Delphi XE X
BeitragVerfasst: Mi 13.01.10 03:35 
dieser thread ist zwar etwas alt, aber ich wollte nur mal so erwähnen das bei Windows 7 diese Funktion integriert ist.
Ob man sie jetzt extra einschalten muss, weiss ich nicht mehr genau - hab halt wieder mein geliebtes vista mit der guten alten schnellstartleiste^^
Coder
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Mi 13.01.10 04:26 
user profile iconwhitef hat folgendes geschrieben Zum zitierten Posting springen:
hab halt wieder mein geliebtes vista mit der guten alten schnellstartleiste^^


stadt-bremerhaven.de...dows-7-reaktivieren/