DataSection - IncludeBinary "data.wav" in Datei

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

DataSection - IncludeBinary "data.wav" in Datei

Beitrag 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:

Code: Alles auswählen

  If CatchSound(0, ?usic)
    PlaySound(0,1)
endif

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
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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! ")
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

Beitrag 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
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

bei WriteData() den ersten parameter weglassen (" FileID, ") [jedenfalls für 3.94]
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

Beitrag 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")
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

Beitrag 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?
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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.
Zuletzt geändert von #NULL am 05.07.2006 15:29, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

Beitrag 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
Antworten