Seite 2 von 2

Verfasst: 07.01.2008 19:25
von Fluid Byte
KinkMike hat geschrieben:Mhh, geht irgentwie immer noch nicht wirklich :(
Ich liebe solche detaillierten Fehlerbeschreibungen...
KinkMike hat geschrieben:Gibts da nicht was einfacheres ? Vielleicht nen Code, der ca. 1-10 Zeilen hat ?
Glaubst wir posten den Kram hier zum Spaß? :freak:

Verfasst: 08.01.2008 13:35
von KinkMike
Die Fehlerbeschreibung:

Code: Alles auswählen

Structure MIXERCONTROLDETAILS
=> This Structure is already declared

genauso bei

Code: Alles auswählen

Structure MIXERLINECONTROLS
Garbage to the end of the line

Code: Alles auswählen

szShortName.s{#MIXER_SHORT_NAME_CHARS}
ebenso bei

Code: Alles auswählen

szName.s{#MIXER_LONG_NAME_CHARS}

In Zeile 31 : Structure not found : MIXERLINE

Code: Alles auswählen

Protected mxlc.MIXERLINECONTROLS, mxl.MIXERLINE
this value dont have a structure

Code: Alles auswählen

  mxl\cbStruct = SizeOf(mxl)
  mxl\dwComponentType = componentType

Naja und ich denke eigentlich nicht dass ihr das hier nur um Spaß postet! Könnte ja trotzdem sein, dass es da was einfacheres gibt, ich kenn mich damit nicht so gut aus^^.
Aber trotzdem Danke für dein Bemühen

Verfasst: 08.01.2008 14:25
von Kiffi
KinkMike hat geschrieben:Gibts da nicht was einfacheres ?

Code: Alles auswählen

RunProgram("sndvol32.exe")
Grüße ... Kiffi

Verfasst: 08.01.2008 15:07
von KinkMike
Ahh ok, thx Kiffi, so gehts auch :)
is zwar vllt etwas umständlich, aber ich glaubt ich mach das so ;)

Verfasst: 09.01.2008 12:40
von Shardik
KinkMike,
vielen Dank für die detaillierteren Fehlermeldungen. Da ich PB 3.3 nicht besitze, kann ich nur an Hand der Fehlermeldungen vermuten, was in PB 3.3 an Strukturen noch nicht vordefiniert ist oder welche Anweisungen erst in späteren Versionen hinzugekommen sind.

Daher noch einmal ein neuer Versuch:
Ich habe das Beispiel von KarLKoX aus dem oben zitierten Link einmal modifiziert und versucht an PB 3.3 anzupassen, indem ich alle SizeOf()-Anweisungen (die in PB 3.3 offensichtlich noch nicht existierten) gegen die tatsächliche Strukturgröße ausgetauscht und alle Definitionen von Strings fester Länge, z.B. szName{}, gegen ein Byte-Array der gleichen Länge ersetzt habe. Außerdem habe ich die in PB 3.3 offensichtlich noch nicht definierten Strukturen MIXERLINE und MIXERLINE_TARGET definiert. Für die Benutzung unter PB 4 können die Zeilen 1-35 gelöscht weren. Dann ist der Code-Umfang auch nicht mehr so groß... :wink:

Code: Alles auswählen

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

Structure MIXERLINE_TARGET
  dwType.l
  dwDeviceID.l
  wMid.w
  wPid.w
  vDriverVersion.l
  szPname.B[32]
EndStructure

Structure MIXERLINE
  cbStruct.l
  dwDestination.l
  dwSource.l
  dwLineID.l
  fdwLine.l
  dwUser.l
  dwComponentType.l
  cChannels.l
  cConnections.l
  cControls.l
  szShortName.B[16]
  szName.B[64]
  Target.MIXERLINE_TARGET
EndStructure

Structure MIXERCONTROL 
  cbStruct.l 
  dwControlID.l 
  dwControlType.l 
  fdwControl.l 
  cMultipleItems.l 
  szShortName.B[#MIXER_SHORT_NAME_CHARS] 
  szName.B[#MIXER_LONG_NAME_CHARS]
  lMinimum.l 
  lMaximum.l 
  reserved.l[10] 
EndStructure 


Procedure MIXER_setVolume(Type.l, NewVolume.l) 
  ml.MIXERLINE
  mlc.MIXERLINECONTROLS
  mc.MIXERCONTROL
  mcd.MIXERCONTROLDETAILS
  mcdu.MIXERCONTROLDETAILS_UNSIGNED 

  result = mixerOpen_(@hMixer, 0, 0, 0, #MIXER_OBJECTF_HMIXER) 
  If result = #MMSYSERR_NOERROR 
    ml\cbStruct        = 168
    ml\dwComponentType = Type 
    result = mixerGetLineInfo_(hMixer, @ml, #MIXER_GETLINEINFOF_COMPONENTTYPE) 
    If result = #MMSYSERR_NOERROR 
      mlc\cbStruct      = 24
      mlc\dwLineID      = ml\dwLineID 
      mlc\dwControlType = #MIXERCONTROL_CONTROLTYPE_VOLUME 
      mlc\cControls     = 1 
      mlc\pamxctrl      = @mc 
      mlc\cbmxctrl      = 148 
      result = mixerGetLineControls_(hMixer, @mlc, #MIXER_GETLINECONTROLSF_ONEBYTYPE) 
      If result = #MMSYSERR_NOERROR 
        mcdu\dwValue    = NewVolume 
        mcd\cbStruct    = 24 
        mcd\dwControlID = mc\dwControlID 
        mcd\paDetails   = @mcdu 
        mcd\cbDetails   = 4 
        mcd\cChannels   = 1 
        result = mixerSetControlDetails_(hMixer, @mcd, #MIXER_SETCONTROLDETAILSF_VALUE) 
        If result = #MMSYSERR_NOERROR 
          ProcedureReturn 1 
        Else 
          ProcedureReturn 0 
        EndIf 
      EndIf 
    EndIf 
  EndIf 
EndProcedure 


NewVolume.L = 5000

If MIXER_setVolume(#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC, NewVolume)
  Debug "Neue AudioCD-Lautstärke: " + Str(NewVolume)
EndIf

Verfasst: 09.01.2008 15:52
von Thomas
Ich habs unter PB 3.3 ausprobiert ...

Code: Alles auswählen

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

Structure MIXERLINE_TARGET
  dwType.l
  dwDeviceID.l
  wMid.w
  wPid.w
  vDriverVersion.l
  szPname.b[32]
EndStructure

Structure MIXERLINE
  cbStruct.l
  dwDestination.l
  dwSource.l
  dwLineID.l
  fdwLine.l
  dwUser.l
  dwComponentType.l
  cChannels.l
  cConnections.l
  cControls.l
  szShortName.b[16]
  szName.b[64]
  Target.MIXERLINE_TARGET
EndStructure

Structure MIXERCONTROL
  cbStruct.l
  dwControlID.l
  dwControlType.l
  fdwControl.l
  cMultipleItems.l
  szShortName.b[#MIXER_SHORT_NAME_CHARS]
  szName.b[#MIXER_LONG_NAME_CHARS]
  lMinimum.l
  lMaximum.l
  reserved.l[10]
EndStructure


Procedure MIXER_setVolume(Type.l, NewVolume.l)
  ml.MIXERLINE
  mlc.MIXERLINECONTROLS
  mc.MIXERCONTROL
  mcd.MIXERCONTROLDETAILS
  mcdu.MIXERCONTROLDETAILS_UNSIGNED

  result = mixerOpen_(@hMixer, 0, 0, 0, #MIXER_OBJECTF_HMIXER)
  If result = #MMSYSERR_NOERROR
    ml\cbStruct        = 168
    ml\dwComponentType = Type
    result = mixerGetLineInfo_(hMixer, @ml, #MIXER_GETLINEINFOF_COMPONENTTYPE)
    If result = #MMSYSERR_NOERROR
      mlc\cbStruct      = 24
      mlc\dwLineID      = ml\dwLineID
      mlc\dwControlType = #MIXERCONTROL_CONTROLTYPE_VOLUME
      mlc\cControls     = 1
      mlc\pamxctrl      = @mc
      mlc\cbmxctrl      = 148
      result = mixerGetLineControls_(hMixer, @mlc, #MIXER_GETLINECONTROLSF_ONEBYTYPE)
      If result = #MMSYSERR_NOERROR
        mcdu\dwValue    = NewVolume
        mcd\cbStruct    = 24
        mcd\dwControlID = mc\dwControlID
        mcd\paDetails   = @mcdu
        mcd\cbDetails   = 4
        mcd\cChannels   = 1
        result = mixerSetControlDetails_(hMixer, @mcd, #MIXER_SETCONTROLDETAILSF_VALUE)
        If result = #MMSYSERR_NOERROR
          ProcedureReturn 1
        Else
          ProcedureReturn 0
        EndIf
      EndIf
    EndIf
  EndIf
EndProcedure


NewVolume.l = 50000 ;alle Werte von 0 bis 65535

If MIXER_setVolume(#MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC, NewVolume)
  Debug "Neue AudioCD-Lautstärke: " + Str(NewVolume)
EndIf

End
so funktionierts! :allright:

Verfasst: 09.01.2008 19:51
von Shardik
Thomas hat geschrieben: Ich habs unter PB 3.3 ausprobiert ...
Thomas, Danke schön, daß Du meinen Code unter PB 3.3 getestet hast. Aber warum hast Du eigentlich meinen ganzen Code noch einmal neu eingestellt? Die einzigen Deiner Änderungen, die ich mit dem guten alten DOS-Befehl fc beim Vergleichen entdeckt habe, bestehen darin, daß Du die Byte-Deklarationen von .B in .b abgeändert hast (Ist dies wirklich nötig in PB 3.3?), eine End-Anweisung ans Ende gepackt hast (lief es sonst nicht in PB 3.3?) und die NewVolume-Einstellung von 5000 auf 50000 abgeändert hast mit einem Kommentar, daß die Werte von 0 bis 65535 erlaubt sind. Eine kurze Erläuterung Deiner (wirklich nötigen?) Änderungen wäre nicht schlecht gewesen... :roll:

Verfasst: 10.01.2008 07:26
von Thomas
ob ich jetzt die 'nderungen, oder den ganzen Code poste ist doch egal ...

Und das Ändern von "B" nach"b" war tatsächlich nötig (hat mich auch gewundert).