Frage zum partiellen catchen von Sound aus einer WAVE

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Kurzer
Beiträge: 1618
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Frage zum partiellen catchen von Sound aus einer WAVE

Beitrag von Kurzer »

Hallo,
beim Befehl Catchsound kann man ja eine optionale Länge angeben.

Code: Alles auswählen

CatchSound(#Sound, Speicheradresse [, Länge [, Flags]])
Ich hätte jetzt erwartet, daß ich mit den entsprechenden Werten bei Speicheradresse und Länge auch Teile aus einer großen WAV Datei catchen kann.

Leider funktioniert das nicht. Es wird trotzdem die gesamte Wave gecatched bzw. ein Fehler ausgeworfen. Bei OGG Sounds geht es noch eher als bei WAV (siehe Codebeispiel).
Im konkreten Fall habe ich eine Wave Datei mit verschiedenen Sounds, die ich einzeln catchen möchte.

(seperate Dateien für jeden Sound laden verbieten leider die contest-Regeln ;) )

Code: Alles auswählen

InitSound()
UseOGGSoundDecoder()

CatchSound(0, ?Music, 5000*2)
; WAV:Spielt alles ab statt nur die ersten 5000 Samples
; OGG:Spielt nur die ersten 5000 Samples ab, alles super
PlaySound(0)
Delay (2000)

CatchSound(1, ?Music+10000, 5000*2)
; WAV: Erzeugt einen Fehler "The specified #Sound is not inititalized"
; OGG: Erzeugt einen Fehler "The specified #Sound is not inititalized"
PlaySound(1)
Delay (2000)

End

DataSection
  Music: 
  IncludeBinary "D:\Sound.ogg"
  ;IncludeBinary "D:\Sound.wav"
EndDataSection
Hat jemand ne Idee wie man das hinbekommt?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Beitrag von Rokur »

CatchSound() ist nicht geeignet um Soundfiles zu schneiden. Der Befehl liest ab der angegebenen Speicheradresse, und wenn dort keine Headerdaten für ein unterstütztes Soundformat liegen, dann gibts nen Fehler.

Mit pb-eigenen Mitteln fällt mir da nichts ein, du könntest höchstens alle Sounds in einem Videoformat speichern und mit MovieSeek() usw. arbeiten, wäre aber wohl etwas unsauber.
WinXP 32 Bit, PureBasic 4.40 (x86)
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

Dann wäre da noch:

Alle Sound-Dateien in eine Datei zu packen.
Die Sound-Dateien direkt in die EXE einzubinden.
Die Sound-Dateien mit den einzelnen Headern zu einer Wave zusammenzusetzen und an die entsprechenden Header-Anfänge zu springen. Also Head1Daten1Head2Daten2...

Was Du darfst oder nicht, musst Du nun selbst wissen.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

Alternativ: PlayMovie() spielt auch Soundfiles. Da kannst Du mit MovieSeek() eine bestimmte Stelle abspielen. Aber das musst Du ausprobieren, und ich weiss nicht, ob man auch Dateien catchen kann.
Benutzeravatar
Kurzer
Beiträge: 1618
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Sven hat geschrieben:Die Sound-Dateien mit den einzelnen Headern zu einer Wave zusammenzusetzen und an die entsprechenden Header-Anfänge zu springen. Also Head1Daten1Head2Daten2...
:allright: :allright: :allright:
Klappt bestens mit Ogg. Vielen Dank.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Antworten