Seite 1 von 2
DataSection - IncludeBinary "data.wav" in Datei
Verfasst: 05.07.2006 13:48
von kaitec
Hallo,
Ich habe folgenes Problem:
Also, wenn ich einen Sound aus dem Speicher laden will, kann er den Sound nicht laden!
Der Sound wird wie folgend gespeichert und geladen:
Speicher:
Code: Alles auswählen
DataSection
usic: IncludeBinary "ipasss.wav"
EndDataSection
Laden:
Das Problem ist jetzt, dass er den Sound nicht läd! Also hab ich mir gedacht ich speicher aus dem Speicher die Datei!
Also:
Mit der DatenSection wird die Datei bei compiliren gespeichert, so und nun soll er die Datei nach dem das Programm versendet ist die Datei wieder aus dem Programm raus in das Verzeichnis wo das Programm gerade läuf gespeichert werden!
Das Problem ist nur
wie speicher ich diese Datei aus dem Programm raus?
Wäre für schnell hilfe echt dankbar!
MfG
Kai
Verfasst: 05.07.2006 14:01
von #NULL
er kann den sound nicht abspielen? hast du denn einmal versucht den sound mit loadSound() zu ladem und abzuspielen? wenn das nicht geht, kann es auch an der bitrate liegen, oder der sound ist mono, ect. ...
//edit: (falls du dies in linux machst: in der hilfe steht bei playsound() für modus 1 [loop] "Nicht verfügbar unter Linux! ")
Verfasst: 05.07.2006 14:20
von ts-soft
Code: Alles auswählen
DataSection
Music: IncludeBinary "ipasss.wav"
MusicEnd:
EndDataSection
Procedure SaveMusic()
Protected FileID.l = CreateFile(#PB_Any, "ipasss.wav")
If FileID
WriteData(FileID, ?Music, ?MusicEnd - ?Music)
CloseFile(FileID)
ProcedureReturn #True
EndIf
EndProcedure
; Variante 1
If InitSound()
CatchSound(0, ?Music, ?MusicEnd - ?Music)
PlaySound(0, 1)
EndIf
; ; Variante 2
; If InitSound()
; If SaveMusic()
; LoadSound(0, "ipasss.wav")
; PlaySound(0, 1)
; EndIf
; EndIf
MessageRequester("","")
Ungetestet und für PB4, also evtl. kleine Anpassungen nötig oder Fehler
beseitigen.
Verfasst: 05.07.2006 14:50
von kaitec
Leider geht dieser Code unter PB 3,98 nicht!
bei:
Code: Alles auswählen
Procedure SaveMusic()
Protected FileID.l = CreateFile(#PB_Any, "ipasss.wav")
If FileID
WriteData(FileID, ?Music, ?MusicEnd - ?Music)
CloseFile(FileID)
ProcedureReturn #True
EndIf
EndProcedure
hat er einen Syntax error
Verfasst: 05.07.2006 14:55
von #NULL
bei WriteData() den ersten parameter weglassen (" FileID, ") [jedenfalls für 3.94]
Verfasst: 05.07.2006 15:06
von kaitec
Ja, aber den Syntax Error hat der doch bei der Zeile
Code: Alles auswählen
Protected FileID.l = CreateFile(#PB_Any, "ipasss.wav")
Verfasst: 05.07.2006 15:09
von ts-soft
dann lass das protected weg oder mach 2 zeilen draus.
aber beispiel 1 sollte funktionieren! (Zum Testen einfach die Procedure
SaveMusic auskommentieren)
Verfasst: 05.07.2006 15:17
von kaitec
ok.. geht...
aber ein problem gibs noch, er spielt den sound nicht! lol hehe! So ne scheise!
Also:
Code: Alles auswählen
; Variante 2
If InitSound()
;If SaveMusic()
CatchSound(0, ?Music)
;LoadSound(0, "ipasss.wav")
PlaySound(0, 1)
;EndIf
EndIf
Wenn das Programm bei PlaySound ist zeig mir der Debug an:
Error at line 45: #Sond object not initialized.
Was mach ich den als falsch?
Verfasst: 05.07.2006 15:22
von #NULL
das semikolon vor
loadsound() und
if savesound() und
end
muss weg, insofern der sound vorher korrekt gespeichert wurde
...
Code: Alles auswählen
DataSection
Music: IncludeBinary "ipasss.wav"
MusicEnd:
EndDataSection
Procedure SaveMusic()
FileID = CreateFile(#PB_Any, "ipasss.wav")
If FileID
WriteData( ?Music, ?MusicEnd - ?Music)
CloseFile(FileID)
ProcedureReturn #True
EndIf
EndProcedure
; Variante 2
If InitSound()
If SaveMusic()
LoadSound(0, "ipasss.wav")
PlaySound(0, 1)
EndIf
EndIf
MessageRequester("","")
das beispiel macht aber so nur bedingt sinn, da createfile hier ja die ursprüngliche datei, welche included wurde, gnadenlos ersetzt. und dann lädt. also vielleicht zwei verschiedene pfade verwenden.
Verfasst: 05.07.2006 15:27
von kaitec
nene... ich lade das mit CatchSound aus dem speicher, dass geht jetzt! aba ich weis nicht, wieso da noch der Error dirnnen ist
und mit deinem Code kommt der selbe Error