Autor | Thema: Auslesen der Lautstärke | | Datum:04.07.01 16:04 
(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
|
| | Datum:04.07.01 21:38 
(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
|
| | Datum: 06.07.01 21:25 
(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
|
|
|