Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

SOUND/PLAY
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 17.06.2005, 20:51    Titel: Antworten mit Zitat

vor Freude klatschen Daumen rauf! Yahooo!!!!
ES FUNZT!!!
vor Freude klatschen Daumen rauf! Yahooo!!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 18.06.2005, 18:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 20.06.2005, 18:21    Titel: Antworten mit Zitat

keine idee?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 20.06.2005, 18:36    Titel: Antworten mit Zitat

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. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 20.06.2005, 20:31    Titel: Antworten mit Zitat

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
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 21.06.2005, 21:30    Titel: Antworten mit Zitat

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 durchgeknallt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 21.06.2005, 21:40    Titel: Antworten mit Zitat

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. lächeln Die FUNCTION GetShortPathName ist ja schon beim Abspielcode mit drin. zwinkern

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 21.06.2005, 21:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 21.06.2005, 22:10    Titel: Antworten mit Zitat

Brennen? Wie wärs mit Diskette oder USB-Stick..
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 22.06.2005, 13:25    Titel: Antworten mit Zitat

Mecki, Mecki, eine normale Diskette fasst 1,38 MB - viel zu wenig für FB... zwinkern
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 22.06.2005, 13:27    Titel: Antworten mit Zitat

Pft, ich dachte, er spricht vom Code hier happy
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 22.06.2005, 13:28    Titel: Antworten mit Zitat

Kann auch sein. lächeln
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 22.06.2005, 13:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 22.06.2005, 18:51    Titel: Antworten mit Zitat

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: Daumen rauf!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 22.06.2005, 20:16    Titel: Antworten mit Zitat

http://www.codingcrew.de/programmierung/win32hlp.php
http://www.vbarchiv.net/vbapi/_all.php
http://winprog.org/tutorial/
Die Links kenne ich. Kannste ja mal angucken.
So kann jetzt auch mal den Code ausprobieren. Ich hoff er funzt bei mir auch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 22.06.2005, 21:07    Titel: Antworten mit Zitat

Danke noop.(noop hört sich irgendwie abwertend an.)
Das ist genau das, was ich gesucht hab. THX

Mfg
Michael
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 22.06.2005, 21:12    Titel: Antworten mit Zitat

Ich hab mir den nick genommen also...
Soll zwar von noob kommen, ich mein das aber nicht ernst.
Zunge rausstrecken Zunge rausstrecken Zunge rausstrecken
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 23.06.2005, 14:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 24.06.2005, 21:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 25.06.2005, 18:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz