Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

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

Re: Sound ausgabe 40 mal in der Sekunde

  Alt 26. Jun 2005, 18:30
Hi,

Zitat von Six:
Leider bekomme ich bei der Verwendung dieses Codes eine nichtssagende Fehlermeldung und ich glaube auch nicht, dass ich damit zwei Monospuren zu einer Stereodatei zusammenfügen kann, richtig? Ich denke du dachtest, ich wollte zwei Mono- oder Stereosounds mischen. Wie kann ich also zwei Monosounds zu einem Stereosound zusammenmischen?
Nein, eigentlich habe ich dich richtig verstanden, aber wie gesagt, das war ein ungetesteter, schnell ohne Delphi-IDE dahergetippter Beispielcode...

Wie genau geht denn die nichtssagende Fehlermeldung, evtl. Exception-Klasse, wo tritt er auf?

Zitat:
Und noch eine andere Sache ist mir aufgefallen, die ich nicht verstehe: diese Data2:=Data Geschichte... Was ist der Zweck des ganzen, warum kann man nicht einfach direkt mit Data arbeiten? Und dann wird nur noch mit data2 gearbeitet und am ende steht das Ergebnis dann doch wieder in data?! Habe ich da irgendwo eine zweite Zuweisung am Ende übersehen, oder wie geht das (Ich hoffe du verstehst, was ich meine ).
Der Zweck ist folgender:

Zitat von RAM:
Addr: Word
Addr+2: Word
Nehmen wir an, dein Pointer Data hat den Inhalt Addr. Bei der Verarbeitung weist du dem signed Word (in Delphi: Smallint) an dieser Stelle einen Wert zu (Data^ := xyz und setzt den Pointer an die nächste Stelle (inc(Data)), zwei Bytes weiter (Addr+2). Das ganze passiert sehr oft.

Nach der Verarbeitung benötigst du zur weiteren Verarbeitung oder zur Wiedergabe wieder den Anfangswert. Entweder du stellst den Wert durch Rechnugng wieder her (dec(Data, AnzahlDerElementeDieDerZeigerZurueckgesetztWerdenS oll)) oder du änderst ihn gar nicht, sondern nutzt zwischendurch einen "Hilfszeiger".

Das besondere ist eben die Arbeit mit Zeigern. Ein Zeiger speichert eine Adresse im RAM, er zeigt sozusagen auf diese Speicheradresse. Wenn du zwei Zeiger hast, die auf die gleiche Adresse zeigen, und den Wert, auf dem einer der beiden Zeiger zeigt, änderst, ändert sich der Wert an dieser Speicheradresse und somit auch der Wert an der Adresse, auf die der andere Zeiger zeigt.

Eine gute Einführung zu Zeigern gibt es hier:
http://www.dsdt.info/grundlagen/sprache/zeiger.php

Mfg
FAlter

PS: Ich habe 'ne neue Version der SOUND.dll herausgebracht. Ein großer Teil der AVs trewten jetzt nicht mehr aus.

//edit: Oh mann, es gibt ja wirklich 'nen User "RAM". Ich meine hier den Random Access Memory.
Angehängte Dateien
Dateityp: zip sound_427.zip (199,9 KB, 10x aufgerufen)
Felix Alter
  Mit Zitat antworten Zitat