Seite 2 von 3

Re: PB5.30 geht.... PB5.50 bringt Fehler !

Verfasst: 22.11.2016 13:27
von RSBasic
@Bisonte & @ts-soft
Stimmt, ihr habt recht. :mrgreen:

Re: PB5.30 geht.... PB5.50 bringt Fehler !

Verfasst: 22.11.2016 13:55
von Then
Sorry, bin zu dämlich....

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)  
   EndIf
läuft nicht :o WARUM ???

Re: PB5.30 geht.... PB5.50 bringt Fehler !

Verfasst: 22.11.2016 13:58
von RSBasic
Du hast noch 4 weitere ReadCharacter(). Dort musst du auch explizit #PB_Ascii angeben.

Re: PB5.30 geht.... PB5.50 bringt Fehler !

Verfasst: 22.11.2016 14:07
von Then
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 ??

Re: PB5.30 geht.... PB5.50 bringt Fehler !

Verfasst: 22.11.2016 14:10
von RSBasic
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 ??
Ja, weil die Version 5.50 standardmäßig nur noch Unicode ist. ASCII wurde entfernt:
Changelog hat geschrieben:- Removed: ASCII mode for internal PureBasic string representation, PureBasic is now unicode only.

Re: PB5.30 geht.... PB5.50 bringt Fehler !

Verfasst: 22.11.2016 14:17
von Then
... dennoch läuft der Code nicht und bringt andere Fehler :oops:

könnt ihr den Code nicht mal testen und lauffähig machen ? :cry:

Re: PB5.30 geht.... PB5.50 bringt Fehler !

Verfasst: 22.11.2016 18:13
von alter Mann
ich schätze mal

Code: Alles auswählen

,#PB_Ascii
an der falschen Stelle

Code: Alles auswählen

riff$+Chr(ReadCharacter(0),#PB_Ascii) ; FALSCH

Code: Alles auswählen

riff$+Chr(ReadCharacter(0,#PB_Ascii)) ; RICHTIG

Re: PB5.30 geht.... PB5.50 bringt Fehler !

Verfasst: 22.11.2016 19:52
von Bisonte
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 ....

Re: PB5.30 geht.... PB5.50 bringt Fehler !

Verfasst: 23.11.2016 19:19
von DarkSoul
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) :twisted:

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. :shock:

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:
data_length=ReadCharacter(0 ,#PB_Ascii)
Der Datenlängeneintrag ist 4 Byte groß. Das wäre Long. Du ließt aber nur das erste Byte.

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 !

Verfasst: 24.11.2016 21:55
von Then
Wie schon geschrieben, benutze NUR ich das Programm für meine Haussteuerung und da kommt kein MP3 als WAV ... :shock: 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 :cry:

__________________________________________________
Domain angepasst
24.11.2016
RSBasic