Car-PC.info

Developer - Wie regelt Ihr die Lautstärken

philipp_c - Mo 07 Feb, 2005 01:30
Titel: Wie regelt Ihr die Lautstärken
Wie regelt Ihr in euren CarPC Programmen die Lautstärke? Ich habe bisher nur das hier gefunden:

Code:

//---------------------------------------------------------------------------
// Funktion SetWaveVolumePercent() setzt die aktuelle Lautstärke des
// rechten oder des linken Lautsprechers in Prozent von der max. Lautstärke.
// Übergabeparameter: dlValue = die neue Lautstärke in % von der max. möglichen,
// blLeft = false für den rechten und true für den linken Lautsprecher
//---------------------------------------------------------------------------
bool SetWaveVolumePercent(double dlValue, bool blLeft)
{
  unsigned long ulCurrentVolume = 0;
  if(dlValue < 0.0) dlValue = 0.0;
  else if(dlValue > 100.0) dlValue = 100.0;
  if(waveOutGetVolume(0, (LPDWORD) &ulCurrentVolume) == MMSYSERR_NOERROR)
  {
    WORD ilNewVolume = int(double(65535.0)/100.0*dlValue);
    if(blLeft) ulCurrentVolume = ulCurrentVolume & 0xFFFF0000 | ilNewVolume;
    else ulCurrentVolume = ulCurrentVolume & 0x0000FFFF | ilNewVolume*0x10000;
    return waveOutSetVolume(0, ulCurrentVolume) == MMSYSERR_NOERROR;
  }
  else return false;
}


Ich programmiere wie man sieht übrigens in C++

Das regelt jetzt ja aber nur die Wave Lautstärke, wie bekomme ich denn die Master, CD, und Line-In Lautstärke gereglt?

Vielen Dank schonmal
Philipp
motroxx - Di 08 Feb, 2005 21:51
Titel:
puh, von c++ habe ich leider absolut keine ahnung...
aber schaue mal auf planet-source-code.com
-> ist echt ne super adresse für sowas...
bisher regle ich nur die viedeo und audio sound-lautstärke...
philipp_c - Di 08 Feb, 2005 22:13
Titel:
Ja Vielen Dank ich suche mal dort. Ja im moment Regel ich wie gesagt auch die Wave Lautstärke ist für MP3 und Video ja auch ok. Würde aber gern Master regeln können (habe direkt ne Endstufe an der Soundkarte) und außerdem hab ich das Radio an CD-IN und das Telefon an LIne-In
Shadowrun - Di 08 Feb, 2005 22:49
Titel:
schon mal mach winapi funktionen gesucht.
geh auf die ms seite undd durchstöbr mal da das msdn. unter volume oder mastervolume findet sich da bestimmt was
Fabse - Sa 19 Feb, 2005 18:46
Titel:
ok ich zeig euch, wie ich es mache:

erstmal habe ich ein c++ dll-projekt. das enthält die klasse AlexFMixer, die man an verschiedenen stellen im netz findet. zuerst wollte ich die klasse selbst in .net übersetzen (ich arbeite mit c#). aber das war dann doch zu viel interop und zu viel aufwand und da dachte ich, baue ich eine win32dll mit den funktionen und dann nur noch einen wrapper in .net. Die Dateien vom alexfmixer hänge ich an.

dann hab ich in der win32dll noch folgendes:

Code:
extern "C" VOLUME_API int GetMasterVolume(void);
extern "C" VOLUME_API void SetMasterVolume(int);
extern "C" VOLUME_API void SetMasterMute(bool Mute);
extern "C" VOLUME_API bool GetMasterMute(void);


und hier mit body:
Code:
VOLUME_API int GetMasterVolume(void)
{
   CAlexfMixer mixer(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,
      NO_SOURCE, MIXERCONTROL_CONTROLTYPE_VOLUME);
   if (!mixer.IsOk())
      return -1;
   return mixer.GetControlValue();
}

VOLUME_API void SetMasterVolume(int vol)
{
   CAlexfMixer mixer(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,
      NO_SOURCE, MIXERCONTROL_CONTROLTYPE_VOLUME);
   if (!mixer.IsOk())
      return;
   mixer.SetControlValue(vol);
   return;
}

VOLUME_API void SetMasterMute(bool Mute)
{
   CAlexfMixer mixer(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,
      NO_SOURCE, MIXERCONTROL_CONTROLTYPE_MUTE );
   if (Mute)
   {
      mixer.Off();
   }
   else
   {
      mixer.On();
   }
}

VOLUME_API bool GetMasterMute(void)
{
   CAlexfMixer mixer(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,
      NO_SOURCE, MIXERCONTROL_CONTROLTYPE_MUTE );
   if (mixer.GetControlValue() != 0)
   {
      return true;
   }
   else
   {
      return false;
   }
}


das war auch schon der schwere teil. jetzt hab ich in meiner assembly dann folgendes:

Code:
      [DllImport("volume.w32.dll")]
      public static extern System.UInt16 GetMasterVolume();

      [DllImport("volume.w32.dll")]
      public static extern void SetMasterVolume(System.UInt16 val);

      [DllImport("volume.w32.dll")]
      public static extern bool GetMasterMute();

      [DllImport("volume.w32.dll")]
      public static extern void SetMasterMute(bool mute);


und das wars. so geht es wunderbar. um nicht mehr als nötig an dlls mit mir rumzuschleppen wird die win32-dll als recource in die assembly eingefügt beim kompilieren und erst beim ersten ausführen "entpackt"

die attachments enthalten nur die sourcen, keine vollständigen projekte, aber wer bisschen nen plan hat und das wirklich braucht, der bekommt es auch hin!
Fabse - Sa 19 Feb, 2005 18:48
Titel:
so nu hab ich aber auch ne frage: mein surround mixer von meiner audigy 2 hat so einen netten kleinen bass-regler und den möchte ich bei mir gerne einbauen, einer ne idee ?
Konrad - So 27 Feb, 2005 13:21
Titel:
Ums mal einzuwerfen: wenn mal einer von euch ein Proggi schreibt, womit man Bässe und Höhen regeln kann, und das Touchscreen-freundlich, dann her damit Very Happy.
Scyn - Fr 08 Sep, 2006 08:31
Titel:
Um den Thread zu vervollständigen :
Hab zwar nix für Bässe usw,
aber für Master und Mute.

ftp://ftp.sac.sk/pub/sac/sound/volum.zip
philipp_c - Fr 08 Sep, 2006 14:29
Titel:
Wo ist denn der Sozrce dazu?

Gruß Philipp
Shaker - Fr 12 März, 2010 15:40
Titel:
Habe auch noch was. Ich habe das mal entwickelt, bevor ich einen USB Lautstärke-Regler hatte und bevor ich cPOS kannte. Verwenden werde ich es aber trotz allem, weil
a) es schneller geht als über cPOS (Slider) und
b) ich auch ohne cPOS die Lautstärke des PC regeln möchte und auch per USB Regler sehen möchte, was passiert Smile

http://freeware.satria.de/TouchVolume/index.php

Freeware ja, OpenSource nein. Verwendet hab ich u.A. das hier:
http://www.dreamincode.net/forums/index.php?showtopic=45693
Alle Zeiten sind GMT + 1 Stunde
Powered by phpBB2 Plus and Kostenloses Forum based on phpBB