Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249577 (11013)
  Suchen
 Zurück zur Übersicht
 AutorThema: Auslesen der Lautstärke
Kathrin Köhler
Datum:04.07.01 16:04 Antwortenals Email verschicken (Kathy008@freenet.de) 


Nochmal Hallo.

Ich möchte nicht den Wert des Lautstärke Reglers erfahren, sonder wenn ich ne CD oder Wav oder Mp3 abspiele, möchte ich den Wert der ausgegebenen Lautstäre haben. Brauch man zbs. für nen VU-Meter, oder zum anzeigen des höchste Ausschlages...

Also nochmal Cu'i


Andreas Miethe
Datum:04.07.01 21:38 Antwortenals Email verschicken (andreas@andreas-miethe.de) 


Hallo Kathrin,

ist zwar noch nicht so ganz fertig, aber vielleicht kannst Du damit ja schon was anfangen.

Gruss
Andreas

'###################################################################
'WAVEMeter und MIDIMeter
'Spitzenwerte von WAVE oder MIDI auslesen.
'Andreas Miethe * Bielefeld *Juli 2001
'Einzelheiten sind in der MMedia.hlp nachzulesen !
'###################################################################
'
DEF SetProgressRange(3) SendMessage(&(1),$0401,0,MakeLong(&(2),&(3)))
DEF SetProgressPos(2) SendMessage(&(1),$0402,&(2),0)
DEF MakeLong(2) Or(&(1),Mul(&(2),$10000))

DEF mixerGetID(3) ! "winmm","mixerGetID"
DEF mixerOpen(5) ! "winmm","mixerOpen"
DEF mixerClose(1) ! "winmm","mixerClose"
DEF mixerGetLineInfo(3) ! "winmm","mixerGetLineInfoA"
DEF mixerGetLineControls(3) ! "winmm","mixerGetLineControlsA"
DEF mixerGetControlDetails(3) ! "winmm","mixerGetControlDetailsA"

DEF &MIXER_OBJECTF_WAVEOUT $010000000
DEF &MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT $01008
DEF &MIXER_GETLINEINFOF_COMPONENTTYPE $03
DEF &MIXERCONTROL_CONTROLTYPE_PEAKMETER $010020001
DEF &MIXER_GETLINECONTROLSF_ONEBYTYPE $02
DEF &MIXER_GETCONTROLDETAILSF_VALUE 0
DEF &MIXERLINE_COMPONENTTYPE_DST_WAVEIN $07

DEF &MIXER_OBJECTF_MIDIOUT $030000000
DEF &MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER $01004

Declare MixerLine#,MixerLineControls#,MixerControl#
Declare MixerControlDetailsSigned#,MixerControlDetails#
Dim Mixerline#,168
Dim MixerLineControls#,24
Dim MixerControl#,148
Dim MixerControlDetailsSigned#,8
Dim MixerControlDetails#,24

Declare MixID&,HMixer&
Declare a&,b&

Proc Mixer_Start
'Mixer-Start
Parameters WaveMidi%
'Par 1 = 0 WAVE-Kanal wird abgefragt
'Par 1 = 1 MIDI-Kanal wird abgefragt
If mixerGetID(0,Addr(MixID&),&MIXER_OBJECTF_WAVEOUT) <> 0
@Messagebox("Kein Mixer vorhanden","Meldung",64)
Ende% = 1
endif

If WaveMidi% = 0 'Wave
If mixerOpen(Addr(HMixer&),MixID&,0,0,&MIXER_OBJECTF_WAVEOUT) = 0
Long Mixerline#,0 = 168'Strukturgrösse
Long Mixerline#,24 = &MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
Else
@Messagebox("Keine MixerID verfügbar","Meldung",64)
Ende% = 1
Endif
else 'Midi
If mixerOpen(Addr(HMixer&),MixID&,0,0,&MIXER_OBJECTF_MIDIOUT) = 0
Long Mixerline#,0 = 168'Strukturgrösse
Long Mixerline#,24 = &MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER
Else
@Messagebox("Keine MixerID verfügbar","Meldung",64)
Ende% = 1
Endif
Endif

If mixerGetLineInfo(HMixer&,Mixerline#,&MIXER_GETLINEINFOF_COMPONENTTYPE) = 0
Long MixerlineControls#,0 = 24
Long MixerlineControls#,4 = Long(Mixerline#,12)
Long MixerlineControls#,8 = &MIXERCONTROL_CONTROLTYPE_PEAKMETER
Long MixerlineControls#,12 = 1
Long MixerlineControls#,16 = 148
Long MixerlineControls#,20 = MixerControl#
Else
@Messagebox("Mixer-Fehler !","Meldung",64)
Ende% = 1
Endif
If mixerGetLineControls(HMixer&,MixerlineControls#,&MIXER_GETLINECONTROLSF_ONEBYTYPE) = 0
Long MixerControlDetails#,0 = 24
Long MixerControlDetails#,4 = Long(MixerControl#,4)
Long MixerControlDetails#,8 = Long(Mixerline#,28)
Long MixerControlDetails#,12 = 0
Long MixerControlDetails#,16 = 4
Long MixerControlDetails#,20 = MixerControlDetailsSigned#
Else
@Messagebox("Keine Mixerdaten verfügbar","Meldung",64)
Ende% = 1
Endif
EndProc

'Mixer-Update
Proc Mixer_Update
Parameters P1&,P2&
Declare LPeak&,RPeak&
mixerGetControlDetails(HMixer&,MixerControlDetails#,&MIXER_GETCONTROLDETAILSF_VALUE)
LPeak& = ABS(Long(MixerControlDetailsSigned#,0))
RPeak& = ABS(Long(MixerControlDetailsSigned#,4))
Locate 0,0
SetProgressPos(P1&,LPeak&)'Position setzen
SetProgressPos(P2&,RPeak&)'Position setzen
EndProc

Proc CreateProgressBar
Parameters hw&,x%,y%,w%,h%,id&,s%
Declare h&,s&
Let s&=$50000000
Case Gt(h%,w%): Let s&=Add(s&,4)
Case s%: Let s&=Add(s&,1)
Let h&=Control("msctls_progress32","",s&,x%,y%,w%,h%,hw&,id&,%hinstance)
Return h&
EndProc

Declare P1&,P2&,Button&
Declare Ende%
cls
CreateProgressBar %hwnd,30,130,232,10,2000,0
Let P1&=&(0)
CreateProgressBar %hwnd,30,141,232,10,2001,0
Let P2&=&(0)
Let Button& = @CreateButton(%hwnd,"Ende",100,10,80,24)

'Peak von 0 - max 32768
SetProgressRange(P1&,0,32786)
SetProgressRange(P2&,0,32768)

Mixer_Start 0
SetTimer 10
Whilenot ende%
If %wmTimer
Mixer_Update P1&,P2&'Progress 1 und Progress 2
endif
If GetFocus(Button&)
Ende% = 1
Endif
endwhile

Waitinput
mixerClose(HMixer&)
Dispose Mixerline#
Dispose MixerLineControls#
Dispose MixerControl#
KillTimer
End



Kathrin Köhler
Datum: 06.07.01 21:25 Antwortenals Email verschicken (Kathy008@freenet.de) 


Dank dir für das Progi, kommt aber mit folgender zeile net klar:
If mixerGetID(0,Addr(MixID&),&MIXER_OBJECTF_WAVEOUT) <> 0

denke mal mit dem ADDR kommt er nett klar.
Kommt die Meldung "Falscher Parametertyp: 0"

Ich hab V 6.5 vieleicht liegs daran....
Vieleicht haste ja noch ne Idee......

Danke und cu'i


 Zurück zur Übersicht