Autor Beitrag
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 06.09.12 14:22 
Moin!

Ich bastle grade mal wieder an/mit einem ADSR-Hüllkurven-Synth rum, Basis ist (wie praktisch immer wenn jemand sowas mit Delphi macht :roll: ) das Tutorial von Delphic.

So, nun habe ich grade ein Implementationsproblem was sich zu einer Sinnkrise ausgeweitet hat ;)
Zitat:
Wesentlich an den Hüllkurven ist jedoch, dass die einzelnen Abschnitte der AD-Hüllkurve in ihrer Länge von der Frequenz des Grundtones abhängig sind, weshalb man die Längen nicht in Zeitdauern angibt, sondern durch die Zahl der Schwingungen.


Warum ist das eigentlich so? Das bedeutet doch, dass eine Note eine Minimallänge hat - nämlich (A+D+S+R) / Samplerate. Oder andersrum betrachtet, wenn man die Sustain-Zeit aus der gewünschten Notenlänge berechnet (S:=Duration-A-D-R), geht das irgendwann nicht mehr auf.
Soweit wäre das ja noch zu verschmerzen. Dann kann man halt keine 128stel Noten :roll:
ABER, und jetzt das Problem: Durch die Frequenzabhängigkeit ist diese Minimallänge umgekehrt proportional zur Frequenz. Das heißt, wenn z.B. A4 (440Hz) nur ein kurzes Attack hat, ist das bei A3(220Hz) schon doppelt so lang.

Warum macht man das also, und wie könnte man Noten trotzdem frequenzunabhängig beliebig lang haben?
Ich hab grade mal mit ein paar anderen Chiptune-SoftSynths gespielt, die haben meistens eine AD-Kurve mit extrem kurzem A, so gezielt dass genau die Notenlänge zum Decay gebraucht wird.

Viele Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 06.09.12 17:55 
>Warum macht man das also

Das ADSR ist ja nur _ein_ Modell um einen "realistischen" Klang zu erhalten.

Nehmen wir ein Klafünf, da hört man genau das Phänomen daß tiefe Töne "lang" dauern, hohe nur kurz.
Stark vereinfacht ist eine Saite ein gedämpfter harmon. Oszillator der pro Periode einen bestimmten Betrag der noch vorhandenen Systemenergie abstrahlt. Bei hoher Frequenz verliert er seine Energie also schneller.
Deshalb dieses Verhalten des ADSR - man könnte es natürlich auch anders gestalten (z.B. feste Intervall-Längen), es klingt dann anders und vor allem anders als man es von vielen (Schlag)Instrumenten "gewöhnt" ist. Trompete etc. ist natürlich etwas anderes.

> und wie könnte man Noten trotzdem frequenzunabhängig beliebig lang haben?

Schuss ins Blaue: Evtl. durch Anpassen der ADSREnvelope-Funktion im Wiki - geeignete Multiplikation von t mit der Frequenz des Samples.
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 06.09.12 19:50 
Ah okay, das ist logisch. Das bedeutet dann ja, dass eigentlich nur Saiten- und Schlaginstrumente (Impulsanregung also) diese Art der Berechnung brauchen, die Trompete z.B. bekommmt ja immer wieder neue Energie "nachgeblasen" und man würde den frequenzabhängigen Teil nur im Decay bemerken, richtig?

user profile iconmandras hat folgendes geschrieben Zum zitierten Posting springen:
Schuss ins Blaue: Evtl. durch Anpassen der ADSREnvelope-Funktion im Wiki - geeignete Multiplikation von t mit der Frequenz des Samples.
Hm, ja, ich hab die Frage blöd gestellt. Dass ich einfach die Division weglassen (oder wieder draufmultiplizieren) kann ist eigentlich klar. War mehr so die Frage was man da sonst noch so an Modellen zur Auswahl hat.

Ich glaub, ich das ist ein fall für In Dubio Pro Setting... grade noch gelesen, dass es auch Ansichtssache ist wo Release anfängt:
{Note On}-Attack-Decay-Sustain-Release-{Note Off} (wenn die Off-Zeit vorher bekannt ist)
{Note On}-Attack-Decay-Sustain-{Note Off}-Release
{Note On}-Attack-Decay-Sustain-{Note Off}-Hold-Release
{Note On}-Attack-Decay-Sustain-Release (mit fester Gesamtlänge)

Ich brauch mehr Parameter.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 06.09.12 20:05 
> Das bedeutet dann ja, dass eigentlich nur Saiten- und Schlaginstrumente (Impulsanregung also) diese Art der Berechnung brauchen

Ja, denn es ist nur ein Modell um der Realität auf die Schliche zu kommen.

> die Trompete z.B. bekommmt ja immer wieder neue Energie "nachgeblasen" und man würde den frequenzabhängigen Teil nur im Decay bemerken, richtig?

In erster Näherung. Hier wird es noch schlimmer da die Spektren ja auch noch von der Art des Anblasens abhängig sind.
Ach ja, auch bei Saiteninstrumenten nehmen die einzelnen Oberwellen mit verschiedenem Grad ab. Also bitte ADSR für jeden Spektralanteil getrennt... Nun frag mich aber bitte nicht wie stark der frequenzabhängige Einfluß ist, da muß ich passen.

> ..weitere Modelle..

Ich bin sehr unmusikalisch *g*, da werde ich kaum helfen können. Aber ich erinnere mich dunkel an einen Artikel in der c't wo Soundsynthese mal aufs Maximum getrieben wurde (ich glaube am Beispiel Saxophon) und tatsächlich der Sound mittels Simulation u.a. des Resonanzraums auf Luftdruckebene erzeugt wurde (also nicht wie oft angewendet mittels Filter). Es ist aber schon mehrere Jahre her daß ich diesen Artikel las und auf die Schnelle habe ich ihn nicht in deren Archiv gefunden.

LG

Andreas