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 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: 12.06.2005, 12:09    Titel: SOUND/PLAY Antworten mit Zitat

Funzen die Befehle gar nicht oder stehen sie nur noch nicht in der Befehlsreferenz drinnen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 12.06.2005, 12:24    Titel: Antworten mit Zitat

Also im Moment sind die Befehle direkt nicht verfügbar. Es gibt allerdings, wenn ich mich recht erinnere, ein paar Ersatzroutinen. Wenn dich das interessiert such ich die mal raus lächeln

Wenn du Sound haben willst, kannst du ja die WinAPI und der gleichen benutzen um WAVs usw abzuspielen.

Grüßle,
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
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 12.06.2005, 12:29    Titel: Antworten mit Zitat

WAV's abspielen geschockt !?
Wie, geht das über nen einfachen Befehl oder mus man ne Routine schreiben ?
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 12.06.2005, 12:35    Titel: Antworten mit Zitat

Ja, würd mich sehr interessieren. Ich krieg nur über PRINT CHR$(7) einen Ton raus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 12.06.2005, 13:09    Titel: Antworten mit Zitat

Siehe http://forum.qbasic.at/viewtopic.php?p=8336
Ein bisschen Arbeit könntet ihr euch ja mit dem Suchen auch mal machen... peinlich
_________________

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
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 12.06.2005, 14:27    Titel: Antworten mit Zitat

Das hab ich jetzt gefunden. Ich hab aber keinen Peil was ich da wo und wie verändern muss.
Code:

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _
  (lpszName As Any, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" _
  (ByVal lpModuleName As String) As Long

Private Const SND_ALIAS = &H10000 ' der angegebene Name muss ein Eintrag aus der 
' WIn.ini unter [Sounds] sein
Private Const SND_ALIAS_ID = &H110000 ' der angegebene Name muss ein Key aus der 
' Win.ini unter [Sounds] sein
Private Const SND_APPLICATION = &H80 ' der angegebene Name ist ein Ereignissound
Private Const SND_ASYNC = &H1 ' Stoppt die Wiedergabe aller Sounddateien, um diese abzuspielen
Private Const SND_FILENAME = &H20000 ' der angegebene Name ist ein Pfad zu einer
' Wave-Datei
Private Const SND_LOOP = &H8 ' wiederholt unendlich oft die Wiedergabe
Private Const SND_MEMORY = &H4 ' der angegebene Name ist ein Byte Array mit den 
' Wave-Datei-Daten
Private Const SND_NODEFAULT = &H2 ' spielt keinen Standardsound ab wenn die 
' angegebene Datei nicht gefunden wird
Private Const SND_NOSTOP = &H10 '  stoppt keine momentan laufenden Sounds
Private Const SND_NOWAIT = &H2000 ' wartet nicht auf das Beenden des laufenden Sounds
' um dann den angegebenen Sound abzuspielen
Private Const SND_PURGE = &H40 ' stoppt die unendliche Wiedergabe der Sounds, die mit 
' SND_LOOP eingeleitet wurde
Private Const SND_RESOURCE = &H40004 ' der angegebene Name ist der Name einer 
' Ressource in der sich die Wave-Datei befindet, hierfür muss hModule das
' Modul-Handle der Anwendung bekommen, die die Ressource besitzt
Private Const SND_SYNC = &H0 ' die Funktion kehrt erst nach Beenden der Wiedergabe 
' des Sounds zurück


' Tata direkt aus der Datei abspielen, ohne auf Beenden des Sounds zu warten
Private Sub Command1_Click()
  Dim Retval As Long

  ' spielt den Sound ab und bricht den Vorgang ab, wenn diese Funktion erneut 
  ' aufgerufen wird, bevor der Sound komplett abgespielt wurde
  Retval = PlaySound(ByVal "c:\windows\media\tada.wav", 0&, SND_ASYNC Or  _
  SND_FILENAME Or SND_NODEFAULT)
End Sub


' Tata aus einer Variable abspielen
Private Sub Command2_Click()
  Dim Retval As Long, FFile As Long, MemWav() As Byte

  ' öffnen der Datei und übertragen in MemWav
  FFile = FreeFile
  Open "c:\windows\media\tada.wav" For Binary As FFile
  ReDim MemWav(LOF(FFile))
  Get FFile, , MemWav()
  Close FFile

  ' abspielen von Tata aus dem Speicher und auf Beenden des Sounds warten
  Retval = PlaySound(MemWav(0), 0&, SND_MEMORY Or SND_NODEFAULT)
End Sub


' Tata aus der Ressource abspielen (funktioniert nicht in der IDE)
Private Sub Command3_Click()
  Dim Retval As Long, hModule As Long

  ' Modulhandle der Anwendung ermitteln
  hModule = GetModuleHandle(App.EXEName)

  ' Sound abspielen, aber bei erneutem Aufruf den momentan laufenden Sound 
  ' nicht abbrechen
  Retval = PlaySound(ByVal "Tata", hModule, SND_RESOURCE Or SND_NOSTOP Or  _
  SND_ASYNC Or SND_NODEFAULT)
  If Retval = 0 Then
    MsgBox "Das Programm wird in der IDE ausgeführt oder die Ressource mit  _
    dem Titel ""Tata"" wurde nicht gefunden.", vbInformation, "Achtung"
  End If
End Sub


' Tata anhand des systemweiten Alias Strings abspielen falls vorhanden (Tata ist in 
' der Regel der Sound der erklingt wenn Windows beendet wird.)
Private Sub Command4_Click()
  Dim Retval As Long

  ' spielt den Sound ab und bricht den Vorgang ab, wenn diese Funktion erneut 
  ' aufgerufen wird, bevor der Sound komplett abgespielt wurde
  Retval = PlaySound(ByVal "SystemExit", 0&, SND_ASYNC Or SND_APPLICATION Or SND_NODEFAULT)
End Sub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 12.06.2005, 14:41    Titel: Antworten mit Zitat

Hallo.

Dieser Code hier sollte einfacher sein: http://www.vbarchiv.net/archiv/tipp_502.html
Versuch ihn mal FB kompatibel zu bekommen. Bei Problemen meld dich noch mal.

Viele Grüße!
Sebastian


edit

Jubiläum! Der 1000. Beitrag! happy
_________________

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: 12.06.2005, 15:37    Titel: Antworten mit Zitat

Gratulation Sebi lächeln
_________________
» 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
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 12.06.2005, 17:46    Titel: Antworten mit Zitat

Feuerwerk ist ja schon mal ein Anfang, aber wann gibts die Party?

Sind die diversen Sound-Libs nicht wesentlich einfacher zu handlen, als Win-API-Sound?
Ich hab noch wenig erfahrung, aber alle BI's zu Sound-Libs haben den einen oder anderen Befehl wie "PlayWav" o.ä. Nur in der WinMM (Windows Multi Media) habe ich einen solchen Befehl noch nicht gesehen... vermutlich wegen der kurzen Zeit, in der ich mich mit den BI's auseinandergesetzt habe...
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

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

Den hat sie natürlich nicht. Du übergibst das, was die Lib machen soll ja auch als "Script", also kleine Befehlszeile. 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
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 13.06.2005, 15:04    Titel: Antworten mit Zitat

So ich check's voll net

Code:

' benötigte API-Deklaration
Private Declare Function mciSendString Lib "winmm.dll" _
  Alias "mciSendStringA" (ByVal lpszCommand As String, _
  ByVal lpszReturnString As String, _
  ByVal cchReturnLength As Long, _
  ByVal hwndCallback As Long) As Long
 
Private Declare Function GetShortPathName Lib "kernel32" _
  Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
  ByVal lpszShortPath As String, _
  ByVal cchBuffer As Long) As Long
' WAVE-File abspielen
Public Function WAVE_Play(ByVal sFile As String, _
  ByVal sAlias As String) As Boolean
 
  Dim bResult As Boolean
 
  ' Dateinamen in DOS 8.3 Format, da z.B. Sonderzeichen
  ' wie Leerzeichen Probleme machen
  Dim sBuffer As String
  Dim lResult As Long
 
  sBuffer = Space$(255)
  lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))
 
  If lResult <> 0 Then
    sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)
 
    ' MCI öffnen
    If mciSendString("open " & sFile & _
      " type WaveAudio alias " & sAlias, 0, 0, 0) = 0 Then
 
      ' WAVE abspielen
      mciSendString "play " & sAlias & " from 0", 0, 0, 0
    End If
  End If
 
  WAVE_Play = bResult
End Function
' Wiedergabe stoppen und MCI schließen
Public Sub WAVE_Stop(ByVal sAlias As String)
  mciSendString "stop " & sAlias, 0, 0, 0
  mciSendString "close " & sAlias, 0, 0, 0
End Sub


Erstemal dachte ich mir, dass ich Private Declare zu Declare umwandel.
hat er auch angenommen. Aber die ganzen if frgaen. Da weiß ich nicht was ich wie umwandeln muss.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 13.06.2005, 15:25    Titel: Antworten mit Zitat

Hallo.

Mit dem DECLARE hast du das schon vollkommen richtig gemacht. Die IF-Fragen an sich sind auch in Ordnung, aber dabei solltest du beachten, dass man in VB das &-Zeichen verwendet, um Variablen zu koppeln.
Aus b$ = "Testzahl: " & wasanderes$ wird in FreeBasic b$ = "Testzahl: "+wasanderes$. Bei Zahlen sind da noch ein paar andere Kleinigkeiten zu beachten.

Aus deinem Code würde also
Code:
Function WAVEPlay(ByVal sFile As String, ByVal sAlias As String) As Integer
  Dim bResult As Integer
  Dim sBuffer As String
  Dim lResult As Long
  sBuffer = Space$(255)
  lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))
  If lResult <> 0 Then
    sFile = Left$(sBuffer, InStr(sBuffer, CHR$(0)) - 1)
    If mciSendString("open " + sFile + " type WaveAudio alias " + sAlias, 0, 0, 0) = 0 Then
      mciSendString "play " + sAlias + " from 0", 0, 0, 0
    End If
  End If
  WAVEPlay = bResult
End Function

Sub WAVEStop(ByVal sAlias As String)
  mciSendString "stop " + sAlias, 0, 0, 0
  mciSendString "close " + sAlias, 0, 0, 0
End Sub


Ich hab jetzt einfach den von dir geposteten Code übernommen und überarbeitet. Vielleicht hast du da schon Fehler drin gehabt, aber wenn dein Code der richtige VB-Code war, dann sollte's jetzt so gehen. Natürlich oben die DECLAREs nicht vergessen.

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
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 16.06.2005, 17:18    Titel: Antworten mit Zitat

danke. Ja der code war eigentlich nur von der website kopiert.
Ich hab ihn extra nicht verändert damit ich nichts falsch verändere.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 16.06.2005, 17:42    Titel: Antworten mit Zitat

Hat's also geklappt? 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
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 16.06.2005, 17:45    Titel: Antworten mit Zitat

Weiß noch nicht. Werd es morgen posten. War krank und durft nicht an den PC bis heute.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 17.06.2005, 18:42    Titel: Antworten mit Zitat

Code:

' benötigte API-Deklaration
Declare Function mciSendString Lib "winmm.dll" _
  Alias "mciSendStringA" (ByVal lpszCommand As String, _
  ByVal lpszReturnString As String, _
  ByVal cchReturnLength As Long, _
  ByVal hwndCallback As Long) As Long
 
Declare Function GetShortPathName Lib "kernel32" _
  Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
  ByVal lpszShortPath As String, _
  ByVal cchBuffer As Long) As Long
' WAVE-File abspielen

Function WAVEPlay(ByVal sFile As String, ByVal sAlias As String) As Integer
  Dim bResult As Integer
  Dim sBuffer As String
  Dim lResult As Long
  sBuffer = Space$(255)
  lResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))
  If lResult <> 0 Then
    sFile = Left$(sBuffer, InStr(sBuffer, CHR$(0)) - 1)
    If mciSendString("open " + sFile + " type WaveAudio alias " + sAlias, 0, 0, 0) = 0 Then
      mciSendString "play " + sAlias + " from 0", 0, 0, 0
    End If
  End If
  WAVEPlay = bResult
End Function

Sub WAVEStop(ByVal sAlias As String)
  mciSendString "stop " + sAlias, 0, 0, 0
  mciSendString "close " + sAlias, 0, 0, 0
End Sub

Funktioniert, bloß wie spiel ich jetzt ein Lied ab? Normal sind da doch Anweisungen wie OPEN FILE$ FOR BINARY. hier ja nicht irgendwie.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 17.06.2005, 19:04    Titel: Antworten mit Zitat

Hallo.

Diese Routinen stecken doch schon in den API "Libs" drin. Stell dir diese Dinge, die du da deklariert hast, wie eine große Lib mit vielen Subs und Functions vor. lächeln

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
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 17.06.2005, 19:27    Titel: Antworten mit Zitat

verwundert
Und was heißt das für mich? Wie kann ich jetzt eine wav abspielen?
Muss ich das irgendwie an die Unction übergeben? und wenn wie?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 17.06.2005, 19:36    Titel: Antworten mit Zitat

Hallo.

Ich hab den Code noch mal ein wenig vereinfacht; er funktioniert und sollte leicht verständlich sein. lächeln
Code:
Declare Function mciSendString Lib "winmm.dll" _
  Alias "mciSendStringA" (ByVal lpszCommand As String, _
  ByVal lpszReturnString As String, _
  ByVal cchReturnLength As Long, _
  ByVal hwndCallback As Long) As Long
Declare Function GetShortPathName Lib "kernel32" _
  Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _
  ByVal lpszShortPath As String, _
  ByVal cchBuffer As Long) As Long

Function WAVEPlay(sFile As String, sAlias As String) As Integer
  Dim sBuffer As String
  Dim lResult As Long
  Dim sf AS STRING
  sf = Space$(255)
  sBuffer = Space$(255)
  sf = sFile
  lResult = GetShortPathName(sf, sBuffer, Len(sBuffer))
  If lResult <> 0 Then
    sBuffer = RTRIM$(sBuffer)
    Print "Spiele Sound: "; sBuffer
    If mciSendString("open " + sBuffer + " type WaveAudio alias " + sAlias, 0, 0, 0) = 0 Then
      mciSendString "play " + sAlias + " from 0", 0, 0, 0
      WAVEPlay = -1
      Exit Function
    End If
  End If
  WAVEPlay = 0
End Function

Sub WAVEStop(sAlias As String)
  mciSendString "stop " + sAlias, 0, 0, 0
  mciSendString "close " + sAlias, 0, 0, 0
End Sub

'Dieser FreeBasic Code spielt einen WAV Sound ganz einfach über die WinAPI ab.
'Jeder Sound bekommt eine individuelle Kennung zugeordnet. Über diese Kennung, im Beispiel
'»fbsound« kann das Abspielen des Sounds auch unterbrochen werden. Dazu dient die Sub
'WAVEStop, der diese Kennung als Argument übergeben wird.
'Viel Spaß mit dem Code! Sebastian Steiner, sebastian_steiner[ätt]gmx.de

Dim resultat As Integer
resultat = WAVEPlay("c:\freebas\freebasic\test.wav","soundnr1")
If resultat = -1 Then
 Print "Abspielen erfolgreich!"
Else
 Print "Fehler!"
End If
SLEEP
END


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
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 17.06.2005, 19:52    Titel: Antworten mit Zitat

Danke. Das sieht schon leichter aus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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 1, 2, 3  Weiter
Seite 1 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