Lautstärke bei CDAudio

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
KinkMike
Beiträge: 39
Registriert: 03.11.2007 18:30
Kontaktdaten:

Lautstärke bei CDAudio

Beitrag von KinkMike »

Hallo, ich hätt da nochmal ne Frage zu dem Thema CDAudio:

Und zwar wollte ich wissen, wie man bei PB 3.30 die Lautstärke der CD einstellen kann, die man gerade abspielt.

Für Movies gibts ja MovieAudio, aber für CD habe ich jetzt noch nichts gefunden.

Wäre echt gut wenn mir jemand helfen könnte :)
Benutzeravatar
KinkMike
Beiträge: 39
Registriert: 03.11.2007 18:30
Kontaktdaten:

Beitrag von KinkMike »

Kann mir bei meinem Problem keiner helfen ? Gibts vielleicht ne andere Möglichkeit AudioCDs abzuspielen ohne PlayCDAudio() , so dass man die Lautstärke einstellen kann ?
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Das geht nicht mit PB Onboard-Mitteln. Die Lautstärke stellt der Endbenutzer normalerweise über den Mixer ein. Es geht sicher mit API, aber heute nicht mehr. Bild
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
KinkMike
Beiträge: 39
Registriert: 03.11.2007 18:30
Kontaktdaten:

Beitrag von KinkMike »

Mhh API könnte sein, ich hab da aber nur etwas mit AUX, MIDI und Wave gefunden :) Nur CDAudio habe ich bis jetzt noch nicht gesehen :(
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Zwei PB 4 API-Beispiele, um über den Mixer die Lautstärke zu ändern (wahrscheinlich müssen einige der in PB 4 schon vordefinierten Mixer-Strukturen in PB 3.3 noch definiert werden, die Konstante für CD-Audio heißt #MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC und hat den Wert 4101):
http://www.purebasic.fr/german/viewtopic.php?t=11600
http://www.purebasic.fr/english/viewtop ... 56&start=1
Benutzeravatar
KinkMike
Beiträge: 39
Registriert: 03.11.2007 18:30
Kontaktdaten:

Beitrag von KinkMike »

Ja, also erst mal Danke für dene schnelle antwort, nur kann ich irgentwie mit der Konstanten nichts anfangen, ich habe mir auch schon die 2 Beispiele durchgelesen, aber verstehen kann ich es nicht.

Gibts da nicht ne API Funktion, mit der man, wenn man die Konstante eingibt und dann noch die Lautstärke die man haben möchte die CD Volume verändern kann ?
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Ich habe versucht, das Beispiel von Remi anzupassen. Unter PB 4 kann ich damit die Lautstärke des CDAudio-Device abändern. Ich habe versucht, alle benutzten Strukturen und Konstanten für PB 3.3 zu definieren. Für PB 4 müssen daher die ersten 29 Zeilen auskommentiert werden, da sie in PB 4 schon automatisch vordefiniert sind.

Code: Alles auswählen

#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = 4101
#MIXERCONTROL_CONTROLTYPE_VOLUME = 1342373889
#MIXER_GETLINECONTROLSF_ONEBYTYPE = 2
#MIXER_GETLINEINFOF_COMPONENTTYPE = 3
#MIXER_SETCONTROLDETAILSF_VALUE = 0
#MIXER_LONG_NAME_CHARS = 64
#MIXER_SHORT_NAME_CHARS = 16
#MMSYSERR_NOERROR = 0

Structure MIXERCONTROLDETAILS
  cbStruct.l
  dwControlID.l
  cChannels.l
  item.l
  cbDetails.l
  paDetails.l
EndStructure

Structure MIXERLINECONTROLS
  cbStruct.l
  dwLineID.l
  StructureUnion
  dwControlID.l
  dwControlType.l
  EndStructureUnion
  cControls.l
  cbmxctrl.l
  pamxctrl.l
EndStructure

Structure MIXERCONTROL 
  cbStruct.l 
  dwControlID.l 
  dwControlType.l 
  fdwControl.l 
  cMultipleItems.l 
  szShortName.s{#MIXER_SHORT_NAME_CHARS} 
  szName.s{#MIXER_LONG_NAME_CHARS} 
  
  lMinimum.l 
  lMaximum.l 
  dwReserved.l[10] 
EndStructure 



Procedure GetVolumeControl(hmixer.l, componentType.l, ctrlType.l, *mxc.MIXERCONTROL) 
  Protected mxlc.MIXERLINECONTROLS, mxl.MIXERLINE 
  Protected hmem.l, rc.l, ret.l 
  
  mxl\cbStruct = SizeOf(mxl) 
  mxl\dwComponentType = componentType 
  
  rc = mixerGetLineInfo_(hmixer, mxl, #MIXER_GETLINEINFOF_COMPONENTTYPE) 
  If #MMSYSERR_NOERROR = rc 
    mxlc\cbStruct = SizeOf(mxlc) 
    mxlc\dwLineID = mxl\dwLineID 
    mxlc\dwControlType = ctrlType 
    mxlc\cControls = 1 
    mxlc\cbmxctrl = SizeOf(MIXERCONTROL) 
    
    hmem = GlobalAlloc_($40, SizeOf(MIXERCONTROL)) 
    mxlc\pamxctrl = GlobalLock_(hmem) 
    *mxc\cbStruct = SizeOf(MIXERCONTROL) ; oder sizeof)*mxc( ?? 
    
    
    rc = mixerGetLineControls_(hmixer, @mxlc, #MIXER_GETLINECONTROLSF_ONEBYTYPE) 
    If rc = #MMSYSERR_NOERROR 
      ret = #True 
      CopyMemory(mxlc\pamxctrl, *mxc, SizeOf(MIXERCONTROL)) 
    Else 
      ret = #False 
    EndIf 
    GlobalFree_(hmem) 
    ProcedureReturn ret 
  EndIf 
  ProcedureReturn #False 
EndProcedure 

Procedure SetVolumeControl(hmixer.l, *mxc.MIXERCONTROL, volume.l) 
  Protected mxcd.MIXERCONTROLDETAILS 
  Protected vol.MIXERCONTROLDETAILS_UNSIGNED 
  Protected hmem.l, rc.l 
  
  mxcd\item = 0 
  mxcd\dwControlID = *mxc\dwControlID 
  mxcd\cbStruct = SizeOf(mxcd) 
  mxcd\cbDetails = SizeOf(vol) 
  
  hmem = GlobalAlloc_($40, SizeOf(vol)) 
  mxcd\paDetails = GlobalLock_(hmem) 
  mxcd\cChannels = 1 
  vol\dwValue = volume 
  
  CopyMemory(@vol, mxcd\paDetails, SizeOf(vol)) 
  rc = mixerSetControlDetails_(hmixer, @mxcd, #MIXER_SETCONTROLDETAILSF_VALUE) 
  GlobalFree_(hmem) 
  If #MMSYSERR_NOERROR = rc 
    ProcedureReturn #True 
  Else 
    ProcedureReturn #False 
  EndIf 
EndProcedure 



Global hmixer.l, CDAudioCtrl.MIXERCONTROL
Global rc.l, ok.l 

rc = mixerOpen_(@hmixer, 0, 0, 0, 0) 
If rc <> #MMSYSERR_NOERROR 
  MessageRequester("shit", "Could not open the mixer!") 
  End 
EndIf 
  
If GetVolumeControl(hmixer, #MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC, #MIXERCONTROL_CONTROLTYPE_VOLUME, @CDAudioCtrl) 
  Debug "# "+CDAudioCtrl\szName+":" 
  Debug "Minimum: " + Str(CDAudioCtrl\lMinimum) 
  Debug "Maximum: " + Str(CDAudioCtrl\lMaximum) 
EndIf

If SetVolumeControl(hmixer, CDAudioCtrl, 20) 
  Debug "Set to 20" 
EndIf
Benutzeravatar
KinkMike
Beiträge: 39
Registriert: 03.11.2007 18:30
Kontaktdaten:

Beitrag von KinkMike »

Hi, danke für deine Antwort, nur zeigt PB bei mir immer an, dass die Struktur in Zeile 10 schon "declared" sein, und das er die struktur mixerline nicht findet, und Garbage to the end of the line in Zeile 38. Bei SizeOf() kommt immer , dass er eine Struktur erwartet.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Junge, Junge du bist ganz schön faul! :shock:

Was bedeuted denn "schon declared"? Richtig, gibts schon, also raus löschen. Die fehlende Struktur gibts hier:

Code: Alles auswählen

Structure MIXERLINE
	cbStruct.l
	dwDestination.l
	dwSource.l
	dwLineID.l
	fdwLine.l
	dwUser.l
	dwComponentType.l
	cChannels.l
	cConnections.l
	cControls.l
	szShortName.c[16]
	szName.c[64]
	Target.MIXERLINE_TARGET
EndStructure
Zuletzt geändert von Fluid Byte am 07.01.2008 19:22, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
KinkMike
Beiträge: 39
Registriert: 03.11.2007 18:30
Kontaktdaten:

Beitrag von KinkMike »

Mhh, geht irgentwie immer noch nicht wirklich :(

Gibts da nicht was einfacheres ? Vielleicht nen Code, der ca. 1-10 Zeilen hat ?
Antworten