Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249691 (11127)
  Suchen
 Zurück zur Übersicht
 AutorThema: WAV Dateien
Daniel
Datum:24.05.01 15:52 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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 Antwortenals Email verschicken (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