AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Sound ausgabe 40 mal in der Sekunde
Thema durchsuchen
Ansicht
Themen-Optionen

Sound ausgabe 40 mal in der Sekunde

Ein Thema von Six · begonnen am 2. Jun 2005 · letzter Beitrag vom 29. Jun 2005
Antwort Antwort
Seite 4 von 4   « Erste     234   
Six

Registriert seit: 2. Jun 2005
42 Beiträge
 
#31

Re: Sound ausgabe 40 mal in der Sekunde

  Alt 26. Jun 2005, 20:41
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
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#32

Re: Sound ausgabe 40 mal in der Sekunde

  Alt 27. Jun 2005, 15:33
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.
Felix Alter
  Mit Zitat antworten Zitat
Six

Registriert seit: 2. Jun 2005
42 Beiträge
 
#33

Re: Sound ausgabe 40 mal in der Sekunde

  Alt 27. Jun 2005, 16:00
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


Six
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#34

Re: Sound ausgabe 40 mal in der Sekunde

  Alt 27. Jun 2005, 16:07
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
Felix Alter
  Mit Zitat antworten Zitat
Six

Registriert seit: 2. Jun 2005
42 Beiträge
 
#35

Re: Sound ausgabe 40 mal in der Sekunde

  Alt 28. Jun 2005, 00:03
Hi Falter,

Stimmt, hatte ich übersehen

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

Six
  Mit Zitat antworten Zitat
Six

Registriert seit: 2. Jun 2005
42 Beiträge
 
#36

Re: Sound ausgabe 40 mal in der Sekunde

  Alt 29. Jun 2005, 01:20
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz