Synthesizer: Wiederanschlagsverhalten gleicher Taste, Polyphonic Portamento

  • Ersteller synthpark
  • Erstellt am
synthpark

synthpark

Registriert
11.11.09
Beiträge
27.524
Reaktionen
10.971
Punkte
61.465
Ich bin gerade dabei, ein Stimmzuweisungsmodul zu programmieren.

Bei Synths hat man, vorrausgesetzt es gibt genug Stimmen, zwei Möglichkeiten, wenn man ein und dieselbe Taste erneut anschlägt:

1. es wird immer die nächste freie Stimme zugeordnet (z.B. Round Robin), die alte Stimme kann also parallel ausschwingen(!)
2. die gleiche interne Stimme wird zugeordnet wie das letzte mal, vorausgesetzt, diese ist in der Zwischenzeit nicht anders verwendet worden oder gerade besetzt (also Ausnahmefall, kein Round Robin)

Ich grad mal mit einem Beispielsynth, zum Beispiel Dune gecheckt, da wird (1) gemacht.

Aber wenn man sich akustische Instrumente anschaut wie ein Klavier, dann können nur die gleichen Saiten schwingen(!). Das wäre aber Variante (2).

Das Problem entsteht ja erst bei langem Release. Bei (1) kann sich ganz schön was zusammentummeln, wenn man die gleiche Taste mehrmals schnell wiederanschlägt. Im Extremfall erklingen alle Stimmen.

Andererseits hat man immer einen knackigen Attack bezogen auf die Stimme, da dieser in den meisten Fällen von Null startet. Und einen dicken Sound, wenn genug Drift vorhanden. Der aber auch zu dick werden kann.

Weist man hingegen die gleiche interne Stimme zu (Fall 2), klaut der Stimme also den Release, und will Clicks vermeiden, darf die VCF/VCA Hüllkurve wohl nicht abbrechen und muss von dem Wert starten, wo sie gerade steht, also irgendwo größer Null, wenn Release noch nachschwingt, das kann durchaus etwas verwaschen klingen, je nach Decay Time.

Meinung dazu? Beides anbieten? Oder gar anders lösen?

Übrigens gibts noch ein weiteres Kriterium, Polyphonic Portamento.
 
Zuletzt bearbeitet:
warum nicht beide möglichkeiten anbieten, wenn du den entwicklungsaufwand vertreten kannst?
 
Der MPowerSynth bietet dazu ein halbes Dutzend Optionen an, unter anderem unlimitierte Polyphonie auf dem selben Ton, auf eine Wiederhol-Stimme begrenzte Polyphonie, und verschiedene Möglichkeiten wie mit den Envelopes umgegangen wird (harter Cut, kurzer Fade, Aufnahme des aktuellen Wertes).
 
...
Weist man hingegen die gleiche interne Stimme zu (Fall 2), klaut der Stimme also den Release, und will Clicks vermeiden, darf die VCF/VCA Hüllkurve wohl nicht abbrechen und muss von dem Wert starten, wo sie gerade steht, also irgendwo größer Null, wenn Release noch nachschwingt, das kann durchaus etwas verwaschen klingen, je nach Decay Time.
...

Es gibt ja im Bereich der Hüllkurvengeneratoren verschiedene Ansätze...

Gate und Trigger
Bei Gate wird beim Neuanschlag auf dem Sustainwert aufgesetzt oder wo die Spannung gerade stand.

Bei Trigger startet die Hüllkurve erneut von Null und ignoriert den Sustainwert wenn keine Taste gehalten wird und fährt nur Attack und Decay durch.
Da gibt es verschiedene Philosophien ob man einem natürlichen Instrumentenverhalten nahekommen will oder einen reinen/beliebigen Syntheseweg geht.
Ich habe verschiedene Synths mit verschiedenen Hüllkurvenphilosophien.
Je nach dem mag ich das Eine oder das Andere...

Egal.
Wenn du mehrere Ansätze fahren kannst würde ich das in Erwägung ziehen.
Es käme den verschiedenen Spielweisen näher.
Wenn einer Stakkato spielt, hat aber ein etwas zu langes Decay eingestellt ist ihm ein Null-Startwert vielleicht lieber.
Wenn das Filter jedesmal neu zuschnappt im Gegensatz dazu, dass es halb geöffnet gehalten wird und dann kaum mehr spektrale Dynamik kommt.
Es ist eben ein Synthesizer und man erwartet sich schon eher dass man eben auch solche Synthesewerkzeuge zur Verfügung hat.

Portamento polyphon
Also ich glaube, dass man sich zuerst erwartet, dass der nächste neu angeschlagene Ton sich so verhält als wenn er von der zuletzt angeschlagenen Taste weggezogen wird.
Also von der letzten Taste die angeschlagen wurde oder von der zuletzt losgelassenen.

Wäre mal am grünen Tisch meine Arbeitshypothese 1.
So trocken fertigdenken ist echt schwer...
 
Danke für die Inputs!

Der MPowerSynth bietet dazu ein halbes Dutzend Optionen an, unter anderem unlimitierte Polyphonie auf dem selben Ton, auf eine Wiederhol-Stimme begrenzte Polyphonie, und verschiedene Möglichkeiten wie mit den Envelopes umgegangen wird (harter Cut, kurzer Fade, Aufnahme des aktuellen Wertes).

Ich hatte schon mal Fading in Betracht gezogen, aber nicht durchdacht. Jetzt, wo du es erwähnst, ist mir auch endlich mal eine musikalisch/technisch sinnvolle Variante eingefallen. Die Meldajungs machen vieles möglich, aber hier bei einem HW Synth will man die Möglichkeiten eher begrenzt halten.

Und zwar kann man die Sache so lösen, daß man beim Envelope Generator als State Machine einen Release2-State einführt. Wenn der exponentielle Envelope Generator normalerweise aus drei States besteht, Idle/Release, Attack und Decay/Sustain, und man führt einen weiteren Sonsterstate ein, Release2, der ein kurzes Release realisiert, dann kann man bei Wiederverwendung der Taste eine neue Stimme auslösen, und die alte faded schnell aus, ohne daß an der Methode an sich was geändert wird, und ohne zusätzliche Verzögerung, also Variante 1.

D.h. im Fadingfall erklingen zwei Stimmen kurz gleichzeitig, werden aber immer noch individuell gehandhabt wie sonst auch, genug Stimmen vorausgesetzt. Release wird für die Erststimme auf kurz geschaltet. Variante 2, so wie oben beschrieben, ist musikalisch eher Quatsch, wegen der nicht bei Null startenden Env. Genau wie hartes Abschneiden, ich hasse Geclicke wie die Pest. :)

Stattdessen also Variante 1 mit Release2, und Variante 1 ohne Release2. Das setzt auch vorraus, daß es nicht nur ein "CV/Gate" gibt, sondern noch ein Extrasignal zum Umschalten des Releaseverhaltens. Sollte nun die Situation enstehen, daß keine Zusatzstimmen verfügbar sind, und man spielt immer wieder den gleichen Akkord, ergibt sich automatisch Variante 1 wie oben beschrieben, also Envelope Start ab irgendeinem Wert, zwar nicht optimal, aber ohne Click.
 
Zuletzt bearbeitet:
Portamento polyphon
Also ich glaube, dass man sich zuerst erwartet, dass der nächste neu angeschlagene Ton sich so verhält als wenn er von der zuletzt angeschlagenen Taste weggezogen wird.
Also von der letzten Taste die angeschlagen wurde oder von der zuletzt losgelassenen.

Wäre mal am grünen Tisch meine Arbeitshypothese 1.
So trocken fertigdenken ist echt schwer...

Ich habe mir jetzt einen robusten Algorithmus überlegt, der hoffentich Polyphonic Portamento musikalisch sinnvoll löst. Die meisten Implementierungen finde ich unberechenbar oder war zu oberflächlich, um mich damit auseinanderzusetzen. Aber so wie unten im Video finde ich unbrauchbar. Da wird einfach vom letzten Wert der neuen Stimme gefaded, die liegt aber in der Vergangenheit zurück und kann irgendeine Frequenz sein. Als ob der User da Kontrolle hätte.



Also statt so ein Ansatz lieber letzte Stimme merken, wo sie mit ihrer Frequenz zuletzt stand, und von dort aus für die neue Stimme als Startfrequenz wählen. Das Prinzip der letzten Stimme kann aber erweitert werden, sonst würde bei einem repetitiven Dreiklangsakkord immer irgendein Portamento auftreten, hoch oder runter, oder hoch und runter, und zwar je nachdem, welche Taste zuletzt angeschlagen wurde, absoluter Käse. :)

Stattdessen kann der Algorithmus adaptiv mehrere Noten berücksichtigen plus Prinzip des kleinsten Abstandes. Aufpassen muss man, um nicht in einen Klassifikator zu landen, der dann im Grenzfall rumnippelt. Ziel ist, wenn der Akkord mehrfach angeschlagen wird, daß nach Vollendung der Bewegungen gar kein Portamento mehr auftritt. Gleiches Verhalten, egal ob man einen Akkord hält, oder einen Akkord wiederholt Staccato anschlägt. Und das scheint zu gehen ...
 
Zuletzt bearbeitet:
Nun - Portamento ist ein Effekt.
Er soll das Spiel dramatisieren, oder?

Wenn sich bei mehrfachen Anschlagen des selben Akkordes die Noten tauschen, hätte das eher den Effekt wie das Kicksen der Blechbläser, was man ja gerne mit einer Pitch-Envelope einstellt.
Also bei kurzer Slewrate.

Wenn man einen großen Effekt mit langen Zeiten haben will, tendiert man eher dazu alle Noten ganz unten oder oben zu "parken".
Wenn man dann draufzimmert hat man erstmal eine Drone die sich auf den Akkord einschwingt.

Hmmm...
Kommt drauf an was man sich von dem Effekt erwartet.
Ob es eher als eine "Agitation" verstanden wird oder als tatsächlicher Effekt wie der Superglissando vom THX :)

Also im Grunde akademische Richtigkeiten gegenüber musikalischer Geilheit :)
 
Wenn man einen großen Effekt mit langen Zeiten haben will, tendiert man eher dazu alle Noten ganz unten oder oben zu "parken".
Wenn man dann draufzimmert hat man erstmal eine Drone die sich auf den Akkord einschwingt.

Hmmm...
Kommt drauf an was man sich von dem Effekt erwartet.
Ob es eher als eine "Agitation" verstanden wird oder als tatsächlicher Effekt wie der Superglissando vom THX :)

Also im Grunde akademische Richtigkeiten gegenüber musikalischer Geilheit :)

Du schlägst C0 und C8 an. Dann spielst du einen mittleren C-Dur Dreilangsakkord. Dann erwarte ich, daß wenn die obere Note zu der höchsten einen geringeren Abstand hat als zur untersten, dann soll die untere von unten sweepen, also aufsteigend, die obere absteigend von oben und die mittlere entweder oder. Bei meinem Algo ließe sich das realisieren. Der User kann das dann einstellen, indem er zunächste die richtige Ausgangssituation schafft, also unterste Taste und oberste gleichzeitig angeschlagen, dann losgelassen, dann Stille abgewartet, dann Aufnahmebutton und Chord anspielen. Wenn er den kompletten Akkord von unten haben will, spielt es zunächst eine tiefe Note und macht das gleiche. Und wenn du den Akkord nicht legato hälst, sondern mehrfach anschlägst, dann soll das dennoch so sweepen, als ob du durchgehend gehalten hättest.

Und wenn du D-Dur spielst, Grundstellung, dann C-Dur Grundstellung,
dann müssten alle drei Voices runtergehen, könnte man sich als Ziel setzen.

Das ist dann schwierig, weil der Abstand für E nach unten oder oben gleich ist, da hab ich noch keine Lösung auf Anhieb, muss man drüber nachdenken. Man muss ja immer bedenken, daß die Töne nicht gleichzeitig angespielt werden, und das Ding nicht wissen kann, daß sich ein Akkord aufbaut. Das E macht dann Probleme. Woher soll die Kiste wissen, ob du E-Dur Dreiklang spielen willst oder C-Dur, wenn E der im Mikrosekundenbereich erste angeschlagene Ton ist? Einmal müsste die Note hoch, einmal runtersweepen. Klar kann man das mit PITCHBEND lösen. Vielleicht will man das gar nicht akademisch korrekt lösen? Keine Ahnung ...

Wenn sich bei mehrfachen Anschlagen des selben Akkordes die Noten tauschen, hätte das eher den Effekt wie das Kicksen der Blechbläser, was man ja gerne mit einer Pitch-Envelope einstellt.

Deshalb scheint der Single-Reference-Note Ansatz nicht zu funzen.

Edit:

zu der oberen Problematik: wenn der Spieler das weiss, dann kann er den Akkord so leicht Arrpegio anschlagen. Dann schaut der Algo, welche Noten bereits als Referenz fürs Portamento dienen und kann entsprechend verteilen, und zwar auf die noch nicht verwendete Referenzen. Also du kommst von D-Fis-A, dann soll C-E-G kommen. Wenn du kurz hintereinander C-E-G anschlägst, dann ist D als Referenz schon benutzt, also nimmt er Fis, weil er das prüft, sobald (und nur dann) gleiche Abstände vorliegen, hier also D zu E und Fis zu E, ob ein Ton schon "weg" ist, hier also das D, und sweept runter von Fis.

Aber was macht man für G? Da wäre Fis näher dran als A :wtf: :schock:
Könnte man lösen, indem man benutzte Referenztöne in ihrem "Gravitationsfeld" bei jeder Benutzung um eine halbe Note runterstuft.

Man sieht: Polyphonic Portamento ist eine knifflige Angelegenheit. Sobald da binäre Entscheidungen ins Spiel kommen, man man ein ungewolltes Faß auf. Da muss der Algo schauen, welche Töne sind aktiv angeschlagen, welche waren vorher, und darauf aufbauend eine Entscheidung treffen, welcher Ton als Referenz dazu dient, von seiner Frequenz aus zu sweepen.

ODER Alternativansatz: wenn neue Note zwischen zwei alten, dann wird gar kein Portamento gemacht, die Note einfach so ausgegeben, so wie bei Kräftegleichgewicht. Hört sich intuitiv robuster und geradiniger an, der Ansatz.

Wie gesagt: wenn es jeder Synthie "richtig" machen würde, würde ich mir nicht son Kopp machen, aber ich finds meist daneben.
 
Zuletzt bearbeitet:
Es kommt wohl darauf an welche Klangerwartung man hat und wie blau und intuitiv der User damit umgeht.
Ob er sich mit happy accidents erfreuen kann oder ob er eine signifikante Wiederholgenauigkeit erwartet.

Im Bereich der Naturinstrumente müsste einer eine bundlose Gitarre akkordisch spielen um diesen Ansatz musikalisch umzusetzen.
Das ist schon etwas übernatürlich vom Charakter her.
Egal.
Bin gespannt für welchen Kompromiss du dich entscheiden wirst...!
 

Ähnliche Themen

tim_heinrich
    • Danke
  • Artikel
Antworten
0
Aufrufe
608
tim_heinrich
tim_heinrich
tim_heinrich
    • Gute Antwort
    • Danke
  • Artikel
Antworten
4
Aufrufe
984
tim_heinrich
tim_heinrich
moonbooter
    • Danke
  • Artikel
Antworten
4
Aufrufe
5K
music-anderson
M
tim_heinrich
Antworten
0
Aufrufe
3K
tim_heinrich
tim_heinrich
moonbooter
    • Danke
  • Artikel
Antworten
2
Aufrufe
4K
joit
J

Oft gelesene Themen

Zurück
Oben