SoloCodigo

Programación General => Delphi => Mensaje iniciado por: rodrigoshoto en Domingo 29 de Agosto de 2004, 21:47

Título: Sonido Y Delphi
Publicado por: rodrigoshoto en Domingo 29 de Agosto de 2004, 21:47
Hola, necesito ayuda... quiero saber como controlar el volumen del sistema desde delphi... osea bajar o subir el volumen... dar balance... gracias desde ya...
Título: Re: Sonido Y Delphi
Publicado por: makio en Miércoles 1 de Septiembre de 2004, 01:46
Lo que puedes hacer es lo siguiente, ya sea mostar dispositivos de sonidoy audio que se encuentra en panel de control o mostrar lo que es el volumen general, esto se hace asi:

dispositivos de sonidoy audio:

para este debes de poner ShellApi en los uses:

winNT
ShellExecute(Application.MainForm.Handle,nil,Pchar('c:\windows\system32\rundll32.exe'),Pchar('shell32.dll,Control_RunDLL mmsys.cpl,,0'),nil,SW_SHOW);

win9x
ShellExecute(Application.MainForm.Handle,nil,Pchar('c:\windows\rundll32.exe'),Pchar('shell32.dll,Control_RunDLL mmsys.cpl,,0'),nil,SW_SHOW);

y para mostrar lo que es el volumen general:

WinExec('SNDVOL32.EXE',SW_SHOWNORMAL);

Espero que te sea de ayuda. :D
Título: Re: Sonido Y Delphi
Publicado por: Amilius en Miércoles 1 de Septiembre de 2004, 18:57
Este procedure modifica el volumen para midi. ;)

Código: Text
  1.  
  2. implementation
  3. uses mmSystem,registry,sysutils;
  4.  
  5. ....
  6.  
  7. procedure VolumenMidi(VOLUMEN_MIDI_R, VOLUMEN_MIDI_L:integer);
  8. var MidiOutPutDev:string;
  9.     amt,MidiOutputDevid,t:integer;
  10.     MidiCap:TMIDIOUTCAPS;
  11. begin
  12.   with TRegistry.Create do
  13.   begin
  14.     RootKey := HKEY_CURRENT_USER;
  15.     OpenKey('Software\Microsoft\Windows\CurrentVersion\Multimedia\MIDIMap', false);
  16.     if ValueExists('CurrentInstrument') then
  17.       MidiOutPutDev := ReadString('CurrentInstrument');
  18.     free;
  19.   end;
  20.   amt := MidiOutGetNumDevs;
  21.   MidiOutputDevid := - 1;
  22.   for t := 0 to amt-1 do
  23.   begin
  24.     MidiOutGetDevCaps(t, @Midicap, Sizeof(Midicap));
  25.     if StrPas(@MidiCap.szPName)= MidiOutPutDev then
  26.       MidiOutputDevid := t;
  27.   end;
  28.   midiOutSetVolume(MidiOutputDevid, (VOLUMEN_MIDI_R shl 16) + VOLUMEN_MIDI_L);
  29. end;
  30.  
  31.  
Título: Re: Sonido Y Delphi
Publicado por: Amilius en Miércoles 1 de Septiembre de 2004, 19:20
Mmmm, el código anterior no funciona en XP o es por la mugre tarjeta de sonido de mi nueva máquina, en nada comparable al chip YAMAHA para midis de mi antigua computadora.  :(

Esto modificara el volumen de TODOS los dispositivos midi, claro que casi siempre sólo tendrán 1 habilitado. Error si no pudo fijar el volumen de al menos 1 dispositivo.

Código: Text
  1.  
  2. function VolumenMidi(Volumen_Midi_L,Volumen_Midi_R:integer):boolean;
  3. var  NroDispositivos,i:integer;
  4. begin
  5.   NroDispositivos:=MidiOutGetNumDevs;
  6.   result:=false;
  7.   for i := 0 to NroDispositivos-1 do
  8.     result:=result or (midiOutSetVolume(i, (VOLUMEN_MIDI_R shl 16) + VOLUMEN_MIDI_L)=MMSYSERR_NOERROR);
  9. end;
  10.  
  11.