Stimmt, ihr habt recht.
PB5.30 geht.... PB5.50 bringt Fehler !
Re: PB5.30 geht.... PB5.50 bringt Fehler !
@Bisonte & @ts-soft
Stimmt, ihr habt recht.
Stimmt, ihr habt recht.
Re: PB5.30 geht.... PB5.50 bringt Fehler !
Sorry, bin zu dämlich....
läuft nicht
WARUM ???
Code: Alles auswählen
wav_datei$="D:\Haussteuerung\1.wav"
If ReadFile(0,wav_datei$ )
riff$=""
For i=1 To 4
riff$+Chr(ReadCharacter(0))
Next
gr=ReadLong(0)
wave$=""
For i=1 To 4
wave$+Chr(ReadCharacter(0))
Next
fmt$=""
For i=1 To 4
fmt$+Chr(ReadCharacter(0))
Next
fmt_length=ReadLong(0)
format_tag=ReadWord(0)
channels=ReadWord(0)
sample_rate=ReadCharacter(0 ,#PB_Ascii)
bytes_per_second=ReadCharacter(0 ,#PB_Ascii)
block_align=ReadWord(0)
bits_per_sample=ReadWord(0)
dat$=""
For i=1 To 4
dat$+Chr(ReadCharacter(0))
Next
data_length=ReadCharacter(0 ,#PB_Ascii)
*buffer=AllocateMemory(data_length)
ReadData(0, *buffer, data_length)
CloseFile(0)
EndIfPB 6.10LTs / Windows 11 64Bit 25H2
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Re: PB5.30 geht.... PB5.50 bringt Fehler !
Du hast noch 4 weitere ReadCharacter(). Dort musst du auch explizit #PB_Ascii angeben.
Re: PB5.30 geht.... PB5.50 bringt Fehler !
dann kommt aber wieder ein anderer Fehler :
[13:02:37] Executable gestartet.
[13:02:37] [ERROR] Zeile: 28
[13:02:37] [ERROR] AllocateMemory(): Kann keinen Speicherbereich mit der Größe 0 allokieren.
[13:02:54] Das Programm wurde beendet.
[13:02:58] [COMPILER] Zeile 5: Chr(): Falsche Zahl an Parametern.
In der Hilfe steht, dass man bei Compiler-Optionen das Häkchen bei Unicode rausnehmen kann, dieser Eintrag steht ja gar nicht in den Optionen mehr drin ??
[13:02:37] Executable gestartet.
[13:02:37] [ERROR] Zeile: 28
[13:02:37] [ERROR] AllocateMemory(): Kann keinen Speicherbereich mit der Größe 0 allokieren.
[13:02:54] Das Programm wurde beendet.
[13:02:58] [COMPILER] Zeile 5: Chr(): Falsche Zahl an Parametern.
In der Hilfe steht, dass man bei Compiler-Optionen das Häkchen bei Unicode rausnehmen kann, dieser Eintrag steht ja gar nicht in den Optionen mehr drin ??
PB 6.10LTs / Windows 11 64Bit 25H2
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Re: PB5.30 geht.... PB5.50 bringt Fehler !
Ja, weil die Version 5.50 standardmäßig nur noch Unicode ist. ASCII wurde entfernt:Then hat geschrieben:In der Hilfe steht, dass man bei Compiler-Optionen das Häkchen bei Unicode rausnehmen kann, dieser Eintrag steht ja gar nicht in den Optionen mehr drin ??
Changelog hat geschrieben:- Removed: ASCII mode for internal PureBasic string representation, PureBasic is now unicode only.
Re: PB5.30 geht.... PB5.50 bringt Fehler !
... dennoch läuft der Code nicht und bringt andere Fehler
könnt ihr den Code nicht mal testen und lauffähig machen ?
könnt ihr den Code nicht mal testen und lauffähig machen ?
PB 6.10LTs / Windows 11 64Bit 25H2
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
- alter Mann
- Beiträge: 201
- Registriert: 29.08.2008 09:13
- Wohnort: hinterm Mond
Re: PB5.30 geht.... PB5.50 bringt Fehler !
ich schätze mal
an der falschen Stelle
Code: Alles auswählen
,#PB_AsciiCode: Alles auswählen
riff$+Chr(ReadCharacter(0),#PB_Ascii) ; FALSCHCode: Alles auswählen
riff$+Chr(ReadCharacter(0,#PB_Ascii)) ; RICHTIGWin11 64Bit / PB 6.0
Re: PB5.30 geht.... PB5.50 bringt Fehler !
Du hast da auch noch mehr als nur EIN ReadCharacter() drin stehen.
Du gehst ja davon aus, dass dein Chunk an bestimmten Positionen bestimmte Werte enthält.
Im Ascii wäre nach einlesen des riff$ der Zeiger an 5. Position... Bei Unicode ist der schon um einige Ecken weiter..
Daher muss JEDER ReadCharacter() Aufruf mit dem ASCII Flag benutzt werden...
Und wenn wir das für dich lauffähig machen... dann lernt man doch nix.
Und beim nächstenmal, wenn du wieder vor so einem Problem stehst, weisst du dann nicht Warum/Wieso/Weshalb...
und wieder du das selber hinbiegen kannst ....
Du gehst ja davon aus, dass dein Chunk an bestimmten Positionen bestimmte Werte enthält.
Im Ascii wäre nach einlesen des riff$ der Zeiger an 5. Position... Bei Unicode ist der schon um einige Ecken weiter..
Daher muss JEDER ReadCharacter() Aufruf mit dem ASCII Flag benutzt werden...
Und wenn wir das für dich lauffähig machen... dann lernt man doch nix.
Und beim nächstenmal, wenn du wieder vor so einem Problem stehst, weisst du dann nicht Warum/Wieso/Weshalb...
und wieder du das selber hinbiegen kannst ....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: PB5.30 geht.... PB5.50 bringt Fehler !
Du liest stumpf eine Datei aus, ohne zu überprüfen, ob du überhaupt richtig liegst.
Das ist zum Scheitern verurteilt, wie du gerade bemerkt hast.
Du solltest unbedingt überprüfen, ob die gelesenen Daten überhaupt gültig sind. (Allerspätestens, wenn der AllocateMemory kommt)
Was würde passieren, wenn jemand eine .mp3 nimmt, die in .wav umbenennt und die in dein Programm lädt? Im blödesten Fall AllocateMemory(wasLongMaxValueHergibt)
Was würde passieren, wenn der Block mit den Wave-Daten 0 Byte oder 20GB groß ist?
RIFF WAVE ist ohnehin nur ein Container. Neben unkomprimiertem PCM (das es auch in allen möglichen Bittiefen und Sampleraten gibt) kann da auch ADPCM, A-Law, MP3, OGG usw. drinstecken. Berücksichtigst du das?
Warum überhaupt sperrige Wave-Dateien für eine Lichtsteuerung? Die Datenmengen empfinde ich als übertrieben. Was willst du z.B. mit einer Lampe, die zum 3000Hz-Ton flackert? Das könnte man gar nicht sehen.
Wäre es nicht besser, mit einer Sequenz zu arbeiten, wie: "halbdunkel -> 1s warten -> werde langsam hell -> 5s warten -> gehe aus....und nochmal von vorne"? Oder mit Funktionsgeneratoren?
Zu deinem Problem:
Gleiche mal hiermit ab:
http://soundfile.sapp.org/doc/WaveFormat/
Du musst die verschiedenen Datentypen der Struktur im Header schon genau einhalten, sonst wird das nichts.
Und sowieso immer prüfen, prüfen, prüfen.... und mit Fehlermeldung den Lesevorgang abbrechen, wenn was nicht gültig ist. Manche Wave-Dateien haben z.B. noch einen Block Metadaten zwischen "fmt" und "data" oder auch am Ende nach dem "data"-Block.
Gerade mit RIFF WAVE hast du dir ein Format ausgesucht, wo theoretisch ALLES drin stecken kann. Man könnte da sogar Bilder oder Texte reinstopfen, wenn man wollte. Manche Programme können das sogar lesen und zeigen das Bild, wenn in den vermeintlichen PCM-Daten auf einmal ein kompletter JPEG-Header kommt.
Ansonsten ist ein HEX-Editor für sowas ganz hilfreich, weil man dann ein "lebendes Beispiel" vor Augen hat.
Das ist zum Scheitern verurteilt, wie du gerade bemerkt hast.
Du solltest unbedingt überprüfen, ob die gelesenen Daten überhaupt gültig sind. (Allerspätestens, wenn der AllocateMemory kommt)
Was würde passieren, wenn jemand eine .mp3 nimmt, die in .wav umbenennt und die in dein Programm lädt? Im blödesten Fall AllocateMemory(wasLongMaxValueHergibt)
Was würde passieren, wenn der Block mit den Wave-Daten 0 Byte oder 20GB groß ist?
RIFF WAVE ist ohnehin nur ein Container. Neben unkomprimiertem PCM (das es auch in allen möglichen Bittiefen und Sampleraten gibt) kann da auch ADPCM, A-Law, MP3, OGG usw. drinstecken. Berücksichtigst du das?
Warum überhaupt sperrige Wave-Dateien für eine Lichtsteuerung? Die Datenmengen empfinde ich als übertrieben. Was willst du z.B. mit einer Lampe, die zum 3000Hz-Ton flackert? Das könnte man gar nicht sehen.
Wäre es nicht besser, mit einer Sequenz zu arbeiten, wie: "halbdunkel -> 1s warten -> werde langsam hell -> 5s warten -> gehe aus....und nochmal von vorne"? Oder mit Funktionsgeneratoren?
Zu deinem Problem:
Der Datenlängeneintrag ist 4 Byte groß. Das wäre Long. Du ließt aber nur das erste Byte.data_length=ReadCharacter(0 ,#PB_Ascii)
Gleiche mal hiermit ab:
http://soundfile.sapp.org/doc/WaveFormat/
Du musst die verschiedenen Datentypen der Struktur im Header schon genau einhalten, sonst wird das nichts.
Und sowieso immer prüfen, prüfen, prüfen.... und mit Fehlermeldung den Lesevorgang abbrechen, wenn was nicht gültig ist. Manche Wave-Dateien haben z.B. noch einen Block Metadaten zwischen "fmt" und "data" oder auch am Ende nach dem "data"-Block.
Gerade mit RIFF WAVE hast du dir ein Format ausgesucht, wo theoretisch ALLES drin stecken kann. Man könnte da sogar Bilder oder Texte reinstopfen, wenn man wollte. Manche Programme können das sogar lesen und zeigen das Bild, wenn in den vermeintlichen PCM-Daten auf einmal ein kompletter JPEG-Header kommt.
Ansonsten ist ein HEX-Editor für sowas ganz hilfreich, weil man dann ein "lebendes Beispiel" vor Augen hat.

Re: PB5.30 geht.... PB5.50 bringt Fehler !
Wie schon geschrieben, benutze NUR ich das Programm für meine Haussteuerung und da kommt kein MP3 als WAV ...
Es gibt da kein Wenn... dann...
Das mit dem Stumpf auslesen gebe ich mal weiter an Captain_Hesse, denn von dem habe ich den Code aus diesem Forum :
http://purebasic.fr/german/viewtopic.ph ... v+grafisch
Aber dann schreibe ich lieber im 5.30 weiter.... immer diese Veränderungen und nix läuft mehr
__________________________________________________
Domain angepasst
24.11.2016
RSBasic
Das mit dem Stumpf auslesen gebe ich mal weiter an Captain_Hesse, denn von dem habe ich den Code aus diesem Forum :
http://purebasic.fr/german/viewtopic.ph ... v+grafisch
Aber dann schreibe ich lieber im 5.30 weiter.... immer diese Veränderungen und nix läuft mehr
__________________________________________________
Domain angepasst
24.11.2016
RSBasic
PB 6.10LTs / Windows 11 64Bit 25H2
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !

