Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 17.06.2005, 21:51 Titel: |
|
|
ES FUNZT!!!
|
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 18.06.2005, 19:55 Titel: |
|
|
So hab mir das jetzt mal genauer angeguckt.
Stimmt es, dass das Programm die wav.-Datei übergibt und damit fertig ist?
Und sobald man das Programm schließt gibt es den Befehl, die Wiedergabe zu stoppen?
Wie kann ich z.b einbauen, dass das Programm stoppt, wenn das Lied abgespielt wurde? |
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 20.06.2005, 19:21 Titel: |
|
|
keine idee? |
|
Nach oben |
|
|
Mecki Igel
Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
Verfasst am: 20.06.2005, 19:36 Titel: |
|
|
hm, vielleicht gibts nen Weg das direkt rauszufinden - ansonsten kannst du natürlich einfach schreiben Code: | 'Nach dem Befehl zum Starten der WAV
SpieltSeit! = TIMER | und danach im Hauptprogramm eine Abfrage nach dem Schema Code: | IF TIMER-SpieltSeit!>90 THEN ?"Lied wurde gespielt":END | Das würde dann aktiv werden, wenn 90 Sekunden vorbei sind.
Mecki _________________ » Yodl.de: So sucht man gestern.
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 20.06.2005, 21:31 Titel: |
|
|
Hallo.
Ja, man kann die Spielzeit eines Liedes über die WinAPI herausfinden. Das ermöglicht es, wenn man beim asynchronen Abspielen bleiben will, eine bestimmte Aktion nach Abspielen durchzuführen.
Meckis Lösung tut's aber genauso, wenn man nicht stets verschiedene Lieder spielen will. Wenn Interesse besteht, dann suche ich die API zur Längenermittlung mal raus.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 21.06.2005, 22:30 Titel: |
|
|
Das ist ja voll einfach mit FreeBasic einen sound über die winapi abzuspielen. Ich hab das ausgestestet und bin erstaunt. Ich hätte Interessa an der Längenermitllung via winapi. Wenn du Zeit hättest, könntest du das dann bitte machen???
Damit kann man auch voll die langen echo efekte machen. Ich hab den unteren teil davon in ner next for schleife mit sleep 100 eingebaut. Damit hat man ein gutes(witziges) echo. Hab dazu eine Frage:
Code: |
Dim resultat As Integer
for i%= 1 to 3
sleep 100
select case i%
case 1
nummer$="soundnr1"
case 2
nummer$="soundnr2"
case 3
nummer$="soundnr3"
end select
resultat = WAVEPlay("c:\freebas\freebasic\test.wav",nummer$)
If resultat = -1 Then
Print "Abspielen erfolgreich!"
Else
Print "Fehler!"
End If
next i%
|
Ich wollte das zuerst mit nummer$="soundnr"+STR$(i%) machen. Das klappt aber nicht weil nummer$ dann so aussieht: "soundnr 1" Also mit einem Leerzeichen dazwischen. Kann man das unterdrücken??
Mfg
Michael
P.S.: Wie kann man sich sogut mit Winapis auskennen?? Ich kenn da nichts von |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 21.06.2005, 22:40 Titel: |
|
|
Hallo.
Schreib anstelle von nur STR$() mal das:
Code: | L% = 123
PRINT "Kein Leerzeichen! --->"; LTRIM$(STR$(L%)); "<" |
Ich hab dir mal die API Konstruktion für das Ermitteln der Länge eines Sounds rausgesucht:
Code: | Function GetWavLength(strFileName As String) As Long
Dim strBuffer As String
Dim lRet As Long
Dim sReturn As String
strBuffer = Space$(255)
lRet = GetShortPathName(strFileName, strBuffer, Len(strBuffer))
If lRet <> 0 Then
strFileName = Rtrim$(strBuffer)
End If
mciSendString "open " + strFileName +" type WaveAudio alias wavaudio", 0, 0, 0
sReturn = Space$(256)
lRet = mciSendString("status wavaudio length", sReturn, Len(sReturn), 0&)
mciSendString "close wavaudio", 0, 0, 0
GetWavLength = Val(sReturn)
End Function |
Probier das mal aus. Die FUNCTION GetShortPathName ist ja schon beim Abspielcode mit drin.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 21.06.2005, 22:49 Titel: |
|
|
THX!!!
Ich kanns wohl noch nicht testen. Hab Freebasic auf nem anderen Pc. Muss das noch brennen. Ich schreib dann morgen mal, obs klappt. nochmal THX!!
Mfg
Michael |
|
Nach oben |
|
|
Mecki Igel
Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Mecki Igel
Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 22.06.2005, 14:41 Titel: |
|
|
Ich spreche vom code. Diskette nicht, da ich immer sehr viele Daten von einem Pc zum anderen befördern will. Mit disketten hab ich auch schlechte erfahrungen. Usb stick könnte ich auch nehemn, der wird dann allerdings sehr schnell voll, da ich die daten die von einem zum anderen Pc gehen behalten möchte, sodass ich da immer drauf zugreifen kann. Bald bekomme ich WLAN, dann geht das alles über netzwerk. Ich teste das gleich erst. Mein Buder ist am anderen PC.
Mfg
Michael |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 22.06.2005, 19:51 Titel: |
|
|
Danke. Beide Sachen klappen.RESPEKT!! Ich war nur zuerst irritiert, da die Länge ja in Millisec zurückgegeben wird. Klappt aber perfekt. Kann man eine gestoppte wavefile auch wieder weiterlaufenlassen(so wie pause und dann weiter), oder wird die dann komplett gestoppt?? Falls das nicht klappt. Kann man denn eine Wavefile bei einer bestimmten position anfangen??? Dann könnte man ja einfach die bereits verstrichene Zeit messen.
Mfg
Michael
EDIT: Habs selbst rausgefunden. Hab auch ein name vereinfacht:
Code: |
Sub WAVEClose(sAlias As String)
mciSendString "stop " + sAlias, 0, 0, 0
mciSendString "close " + sAlias, 0, 0, 0
end sub
sub WAVEPause(sAlias as string)
mciSendString "stop " + sAlias, 0, 0, 0
end sub
sub WAVEWeiter(sAlias as string)
mciSendString "play " + sAlias, 0, 0, 0
end sub
'
'das letzte sub hab ich nicht getestet
sub WAVEPosition(sAlias as string)
position = 200
mciSendString "play " + sAlias+ " from"+position, 0, 0, 0
end sub
|
Somit wären alle Fragen beantwortet. Danke an alle.
EDIT:
@Sebastian: Hast du eine Liste der wichtigsten winapis?? Dann setzt ich mich damit mal auseinander. Ich häte nämlich noch so 20 Fragen zu allen möglichen WINAPIs. Ich hab mal gegoogelt aber nichts brauchbares gefunden. Falls du eine Liste hast: |
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 22.06.2005, 22:07 Titel: |
|
|
Danke noop.(noop hört sich irgendwie abwertend an.)
Das ist genau das, was ich gesucht hab. THX
Mfg
Michael |
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 22.06.2005, 22:12 Titel: |
|
|
Ich hab mir den nick genommen also...
Soll zwar von noob kommen, ich mein das aber nicht ernst.
|
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 23.06.2005, 15:25 Titel: |
|
|
Ich hab mir jetzt nochmal ein paar WINAPIs angegckt, ich blick aber nicht gaz durch. http://www.vbarchiv.net/vbapi/auxSetVolume.php damit kann man die lautstärke regeln. Bei mir kommt da aber ein fehler (geraet 0 nicht erkannt). Ich hab den code auch fast genau nach freebasic übertragen. Ich hab MsgBox nach print umbenannt und private declare nach declare. gerät hab ich aber auch nach geraet umbenannt. Daran kanns aber nicht liegen, oder??
Mfg
Michael
EDIT:
Code: |
dim volume(0 to 1)
Private Declare Function auxSetVolume Lib "winmm.dll" _
(ByVal uDeviceID As Long, _
ByVal dwVolume As Long) As Long
Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, _
Source As Any, ByVal Length As Long)
Const MMSYSERR_NOERROR = 0
Const MMSYSERR_BASE = 0
Const MMSYSERR_BADDEVICEID = (MMSYSERR_BASE + 2)
PRINT "Die Lautstärke wird jetzt auf 0% geschaltet", vbInformation, _
"Stumm schalten"
Volume(0) = 0 'Linker Kanal = ganz leise
Volume(1) = 0 'Rechter Kanal = ganz leise
Call CopyMemory(AuxSetVol, Volume(0), Len(Volume(0)) * 2)
Retval = auxSetVolume(Gerät, AuxSetVol)
If Retval = MMSYSERR_BADDEVICEID Then _
PRINT "Gerät " ; Gerät ; " wurde nicht gefunden" |
so hab ich das jetzt |
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 24.06.2005, 22:23 Titel: |
|
|
Zu deinem Problem kann ich leider nichts sagen. Würd ich auch gerne wissen.
Aber wie hast du das jetzt mit der Zeitrückgabe gemacht hast versteh ich nicht.
Wenn ich ihn bei mir einfüge und die Subs auf deklariere kann(oder besser weiß ich nicht) ich nicht drauf zugreifen.
Was genau muss ich da machen? |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 25.06.2005, 19:33 Titel: |
|
|
Ich arbeite gerade an nem waveplayer. Der kann auch dateien direkt abspielen, wenn man den dateityp damit verknüpft. Ich wollte da dann auch lautstäreke,pause,stopp,etc einbauen. Die Zeitrückgabe hab ich aber auch nicht. Das brauche ich auch nicht. Ich arbeite da mit timer und wenn die datei auf pause steht, dann wird der startzeit, die zeit in der das lied pausiert war, zugerechnet. Das geht aber mit WINAPIs einfacher. Ich kann die aber noch nicht umschreiben. Da blick ich nicht ganz durch.
Mfg
Michael |
|
Nach oben |
|
|
|