Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Sound ausgabe 40 mal in der Sekunde (https://www.delphipraxis.net/46914-sound-ausgabe-40-mal-der-sekunde.html)

Six 26. Jun 2005 19:41

Re: Sound ausgabe 40 mal in der Sekunde
 
Hi Falter,

Es funktioniert leider immer noch nicht. Die Exception, die ich bekomme ist übrigens eine Zugriffsverletzung. Ich bin hier langsam echt am verzweifeln :?

Wo liegt der Fehler?


Six

FAlter 27. Jun 2005 14:33

Re: Sound ausgabe 40 mal in der Sekunde
 
So genau hatte ich mir deinen Code gar niocht angesehen, du hattest noch einen Fehler drin:

Delphi-Quellcode:
GetMem(Ziel, ...)

for...
begin
  ...
  inc(Ziel);
end;

SavePCMMemoryToFile(Ziel, ...);
Du musst den Pointer auf den Anfang deiner Daten übergeben, du übergibst aber einen Pointer auf das Ende!

FALSCH:
Delphi-Quellcode:
GetMem(Data);
inc(Data);
SavePCMMemoryToFile(Data);
RICHTIG:
Delphi-Quellcode:
GetMem(Data);
Data2 := Data;
inc(Data2);
SavePCMMemoryToFile(Data);
Also genau das, wo du gestern gefragt hast, warum man es machen muss, hast du vergessen.

Six 27. Jun 2005 15:00

Re: Sound ausgabe 40 mal in der Sekunde
 
Hi Falter,

ich habe diese Möglichkeit auch breits ausprobiert, nur was dabei rumkommt, ist zwar eine Stereodatei, die jedoch nur halb so lang ist wie das Ausgangsmaterial und einen "verkrüppelten" Inhalt hat.

Also mein Code sieht dann mittlerweile so aus:

Delphi-Quellcode:
GetMem(Ziel, Size*2);
Ziel2:=Ziel;
for i := (Size div 2) -1 downto 0 do // Warum wird hier eigentlich nach unten gezählt?
begin
ziel^ := Data^;
inc(Ziel2);
ziel^ := Data3^;
inc(Ziel2);
end;
SavePCMMemoryToFile(Ziel, 'C:\Result.wav', FormatStereo, Size);
Was um alles in der Welt läuft hier bloß schief :gruebel:


Six

FAlter 27. Jun 2005 15:07

Re: Sound ausgabe 40 mal in der Sekunde
 
Hi,

Du solltest deinen Code vor dem Posten nochmal genau ansehen. Dann findest du solche Fehler bestimmt selbst.

Delphi-Quellcode:
ziel2^ := Data^;
inc(Ziel2);
ziel2^ := Data3^;
inc(Ziel2);
Zum nach unten Zählen: Wenn du die Codeoptimierung an hast, würde der Compiler eh den Code für nach unten zählen generieren, weil es schneller ist, mit null zu Vergleichen, als mit was-auch-immer-bei-der-Berechnung-rauskommt.
In diesem Fall ist die Zählrichtung egal.

Mfg
FAlter

Six 27. Jun 2005 23:03

Re: Sound ausgabe 40 mal in der Sekunde
 
Hi Falter,

Stimmt, hatte ich übersehen :oops:

Leider ist die erzeugte Datei einfach Leer (die anderen beiden Dateien werden richtig erstellt!)

Mit "Leer" meine ich, es wird eine Stereodatei erstellt, die die richtige Länge hat (Size*2), jedoch keine Informationen enthält.

Delphi-Quellcode:
GetMem(Ziel, Size*2);
Ziel2:=Ziel;
for i := (Size div 2) -1 downto 0 do
begin
ziel2^ := Data^;
inc(Ziel2);
ziel2^ := Data3^;
inc(Ziel2);
end;
SavePCMMemoryToFile(Ziel, 'C:\Result.wav', FormatStereo, Size*2); // *2 hinzugefügt
SavePCMMemoryToFile(Data, 'C:\Test2.wav', Format, Size);          // Datei Mit Signal
SavePCMMemoryToFile(Data3, 'C:\Test3.wav', Format, Size);         // Datei mit SinusTon
Hmmm, woran könnte es denn noch liegen :gruebel:

Six

Six 29. Jun 2005 00:20

Re: Sound ausgabe 40 mal in der Sekunde
 
Hier die entscheidende Stelle, für jeden, der es eventuell noch brauchen kann:

Delphi-Quellcode:
      GetMem(Ziel, Size * 2);
        Ziel2 := Ziel;
        Data2 := Data;
        Data4 := Data3;

        for i := (Size div 2) - 1 downto 0 do
        begin
          ziel2^ := Data2^;
          Inc(Ziel2);
          inc(Data2);
          ziel2^ := Data4^;
          Inc(Ziel2);
          inc(Data4);
        end;
Nochmals vielen Dank an Falter!

Six


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz