![]() |
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 |
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:
Du musst den Pointer auf den Anfang deiner Daten übergeben, du übergibst aber einen Pointer auf das Ende!
GetMem(Ziel, ...)
for... begin ... inc(Ziel); end; SavePCMMemoryToFile(Ziel, ...); FALSCH:
Delphi-Quellcode:
RICHTIG:
GetMem(Data);
inc(Data); SavePCMMemoryToFile(Data);
Delphi-Quellcode:
Also genau das, wo du gestern gefragt hast, warum man es machen muss, hast du vergessen.
GetMem(Data);
Data2 := Data; inc(Data2); SavePCMMemoryToFile(Data); |
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:
Was um alles in der Welt läuft hier bloß schief :gruebel:
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); Six |
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:
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.
ziel2^ := Data^;
inc(Ziel2); ziel2^ := Data3^; inc(Ziel2); In diesem Fall ist die Zählrichtung egal. Mfg FAlter |
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:
Hmmm, woran könnte es denn noch liegen :gruebel:
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 Six |
Re: Sound ausgabe 40 mal in der Sekunde
Hier die entscheidende Stelle, für jeden, der es eventuell noch brauchen kann:
Delphi-Quellcode:
Nochmals vielen Dank an Falter!
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; Six |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr. |
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