Einzelnen Beitrag anzeigen

JanW

Registriert seit: 5. Jun 2009
8 Beiträge
 
Lazarus
 
#5

Re: GetMem verursacht Fehler

  Alt 24. Jun 2009, 08:32
Hab den Wavecode auskommentiert. Das einzige was da sowieso in Frage käme als Fehlerverursacher war "Move" (wenn es denn mein Fehler ist).
Scheint einwandfrei zu funktionieren.

Alte Zeile
Delphi-Quellcode:
      if RPos+16<= waveDataSize then ReadLength:=16;
      if RPos+16> waveDataSize then ReadLength:= (Rpos+16)-waveDataSize;
      
      DateiStream.Read(DataBlock16[0],readlength*2); // Fülle das DatenBlock Array

      Move(DataBlock16[0], waveData16[RPos], length(DataBlock16)*2); // Verschiebe den DatenBlock ins WaveData Array
So scheints zu gehen.
Delphi-Quellcode:
      if RPos+16<= waveDataSize then ReadLength:=16;
      if RPos+16> waveDataSize then ReadLength:= (Rpos+16)-waveDataSize;

      DateiStream.Read(DataBlock16[0],readlength*2); // Fülle das DatenBlock Array
      Move(DataBlock16[0], waveData16[RPos], ReadLength*2); // Verschiebe den DatenBlock ins WaveData Array
Gut, in dem Fall von dem DatenBlock hast du Recht hoika, da reicht ein statisches Array völlig aus. Habs auch umgestellt.
Ich versteh nicht ganz wieso der Fehler auftritt.

Length(DataBlock16) gibt doch die Anzahl der Elemente im Array zurück. Also 16 in meinem Fall.
Am Ende der Datei, beim allerletzen Block, wenn weniger als 16 SmallInts auszulesen sind ists einerseits klar beim alten Code, dass das DataBlock Array nicht ganz gefüllt ist. Logisch.

Nehmen wir an es gäbe noch 7 Einträge zu lesen, dann wäre ja nur 0-7 gefüllt, 8-15 hätte dann noch den Wert vom vorherigen Datenblock, richtig?
Das klingt als Audiostream warscheinlich scheisse (-> knacksen), sollte aber doch keine Zugriffsverletzung verursachen?
Ich lasse mir auch die PCM-Rohdaten anzeigen als Welle, und das funktioniert von Anfang bis Ende einwandfrei. Kein Fehler...

Normalerweise bin ich C# und VB.NET Benutzer, da ging sowas immer einwandfrei.. bin auf FPC weil ich Platformunabhängigkeit will und Delphi eben noch aus dem Informatikunterricht kenn (da haben wir aber nicht mehr als Ampelprogramme gemacht )

Kann mir jemand von euch erklären wieso gerade das dann bei getmem einen Fehler auslöst?

Gruß,
Jan
Jan
  Mit Zitat antworten Zitat