Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249691 (11127)

| Suchen
| Zurück zur Übersicht

Autor | Thema: WAV Dateien
Daniel
| Datum:24.05.01 15:52 (privat@daniel-hecken.de) |
Hallo, kann man irgendwie die Länge einer WAV Datei ermitteln, ohne Sie mit @MCISEND$ zu öffnen, und dann mit dem gleichen Befehl die Länge in mm:ss zu ermitteln. In meinen Programm wird in einer Listbox alle WAV Dateien angezeigt, und dann soll im eingabefeld die Länge der WAV angezeigt werden. Das klappt auch schon recht gut über den MCISEND Befehl. Nur wenn man jetzt die Letzte ( Z.B.: mit den Pfeiltasten) hoch und runter fährt ist die Anzeige etwas träge. Kann man das schnell macher, evtl. ohne MCI SEND mfg Daniel PS.: Meine Version Profan 7.e
Jörg Sellmeyer
| Datum:24.05.01 16:31 (joerse@gmx.de) |
Hallo Daniel, Ich mache das ganze auch über mcisend und zwar so:
    declare Waveinfo#
    struct wInfo  = Name$(256),Kanäle%,einheit$(12),länge&,größe&,samples&,position&
    dim Waveinfo#,wInfo

    Proc WAVEöffnen
    	parameters wavefile$
    	@MCISend$("open " + wavefile$ + " type waveaudio alias WAVEDat")
    EndProc

    proc WAVEspielen
    	parameters wavefile$,startpunkt&,mseconds&,fehler%
    	declare s$
    	@MCISend$("open " + wavefile$ + " type waveaudio alias WAVEDat")
    	if %pcount = 1
    		@MCISend$("play WAVEDat")  'Datei spielen
    	elseif mseconds& > 0
    		s$="PLAY WAVEDat FROM " + str$(startpunkt&) + " TO " + str$(int(startpunkt& + mseconds&))
    		@MCISend$(s$)
    	endif
    	fehler%=%MCIError
    	case fehler% > 0:wavefile$="Fehler beim Abspielen von " + wavefile$ + " : " + @Str$ (fehler%)
    	return wavefile$
    endproc

    proc WAVEstop
    	@MCISend$("close WAVEDat") '... schließen
    	return %MCIError
    EndProc

    Proc WAVEaufnehmen
    	parameters Wavename$,mseconds&
    	declare mciBefehl$
    	mciBefehl$="open new type waveaudio alias NEWWAVE"

    	@MCISend$(mciBefehl$)

    	mciBefehl$="set NEWWAVE time format milliseconds"
    	@MCISend$(mciBefehl$)

    	mciBefehl$="record NEWWAVE from 0 to " + str$(mseconds&) + " wait"
    	@MCISend$(mciBefehl$)

    	mciBefehl$="save NEWWAVE " + Wavename$
    	if len(Wavename$)
    		@MCISend$(mciBefehl$)
    	endif
    	@MCISend$("close NEWWAVE") '... schließen
    EndProc

    Proc WaveChangeTimeFormat
    	parameters wavefile$,form$
    	if lower$(form$)="m"
    		form$="MILLISECONDS"
    	elseif lower$(form$)="b"
    		form$="BYTES"
    	endif
    	declare returnwert$,mciBefehl$
    	mciBefehl$="open " + wavefile$ + " type waveaudio alias WAVEDat"
    	@MCISend$(mciBefehl$)
    	@MCISend$("set WAVEDat time format " + form$)
    	@MCISend$("close WAVEDat")
    Endproc

    Proc WaveInfo
    	parameters wavefile$
    	declare returnwert$,mciBefehl$,einheit$
    	declare länge$
    	mciBefehl$="open " + wavefile$ + " type waveaudio alias WAVEDat"
    	returnwert$=@MCISend$(mciBefehl$)
    	with Waveinfo#
    		einheit$=.einheit$
    		.name$=""
    		.einheit$=""

    		.name$=@MCISend$("INFO WAVEDat FILE")
    		.Kanäle%=val(@MCISend$("STATUS WAVEDat CHANNELS"))

    		.einheit$=@MCISend$("STATUS WAVEDat TIME FORMAT")
    		.länge&=val(@MCISend$("STATUS WAVEDat LENGTH"))

    		@MCISend$("set WAVEDat time format BYTES")
    		.größe&=val(@MCISend$("STATUS WAVEDat LENGTH"))
    		@MCISend$("set WAVEDat time format SAMPLES")
    		.samples&=@Val (@MCISend$("STATUS WAVEDat samplespersec"))
    		@MCISend$("set WAVEDat time format " + einheit$)		@MCISend$("set WAVEDat time format " + .einheit$)
    		.position&=val(@MCISend$("STATUS WAVEDat POSITION"))
    	endwith
    	@MCISend$("close WAVEDat") '... schließen

    	return returnwert$
    Endproc

    Proc EndWave
    dispose Waveinfo#
    EndProc

    Proc test
    declare datei$
    datei$=loadfile$("Wavedatei auswählen","*.WAV")
    case datei$="":Return
    Cls
    WaveInfo datei$
    with Waveinfo#
    	print .name$
    	print .Kanäle%,if(.Kanäle%=1,"Mono","Stereo")
    	print .einheit$
    	print str$(.länge& \ 60000),"Minuten",str$(mod((.länge& \1000),60)) + " Sekunden",
    	print mod(.länge&,100),"hSekunden"
    	print .größe& / 1024 + " Kb"
    	print .samples&,"Samples"
    	print .position&
    endwith
    WaitInput
    EndWave
    Endproc

    test
Vielleicht hilft's Dir Jörg
Thorsten
| Datum: 26.05.01 08:26 (galaxy@mrk-soft.de) |
Vieleicht ne Anregung: Beim ersten einlesen der Wavs ermittel die Zeit mit MCISend. Speichere den WAV-Namen und die Speilzeit in einem Speicher zwischen. Wenn du nun in der Listbox den Eintrag anklikst, bzw mit den Cursortasten veränderst, lese nun die Werte aus dem Speicherbereich aus und zeige diese an. Thorsten

| Zurück zur Übersicht