Voice summing algorithmes

zmooc

Prutser allerlei
Lid sinds
6 januari 2008
Berichten
685
Locatie
nimwegen
Ik ben al geruime tijd bezig met een softsynthje programmeren, dat lukt redelijk ok, maar ik zit al een tijd te klungelen met het summen van de voices. Ik tel ze nu gewoon bij elkaar op, en dat klinkt op zich prima, maar dan moet ik ontzettend veel headroom overlaten om genoeg plek te hebben voor mijn 24 voices polyfonie zonder te clippen. Daardoor is het geluid van 1 voice ontzettend zacht. Dat kan ik vervolgens dan wel weer rechtbreien met een compressor/limiter, maar dat is toch niet echt optimaal. Je blijft de instellingen van de compressor aanpassen aan de VCA-Envelope en het is eigenlijk nooit perfect.

Een andere oplossing die ik heb geprobeerd is het sum=A+B-A*B algoritme (http://www.vttoth.com/digimix.htm). Meestal klinkt dat prima en klinkt 1 voice op het gehoor bijna net zo hard als 24 voices samen, maar bijvoorbeeld met een kale pulse wave drukken de verschillende tonen in een akkoord elkaar compleet weg terwijl dat bij simpel optellen niet gebeurt. Dat is dus ook niet echt een oplossing.

Nou heb ik al flink gezocht in allerlei boeken, op het forum en de rest van Internet maar hoewel er ontzettend veel gekletst wordt over summing algorithmes, weet vrijwel niemand te verklappen hoe die dingen werken. De meeste DAW's lijken gewoon op te tellen, maar ik denk dat voor het summen van voices in een polyfone synthesizer betere/andere oplossingen mogelijk zijn. Althans, al mijn hardware synthesizers summen een stuk smakelijker dan mijn eigen brouwsel8~

Heeft hier iemand een idee/tip/referentie?
 
Ik heb helaas weinig programmeer-advies; maar ik weet dat Absynth de volumes per voice bijstelt op het moment dat je bijv. van 8 naar 12 stemmen gaat. Er zit naast de slider voor het aantal stemmen nog wel een soort make-up gain. Daar wordt dus de hele hoop headroom oplossing gebruikt, lijkt me. Polyfone hardware synthesizers hebben dit in feite ook.

Is het wellicht een idee om een soort gain-tabel te maken van 1 t/m 24 stemmen waarbij je uitgaat van de RMS van het resultaat? Als iemand z'n stemmen-aantal dan op 24 zet en vindt dat het te zacht is - tja, pech gehad. Juist dat compressor-effect lijkt me iets te zijn wat je aan de gebruiker moet overlaten.

Ik heb even hier gekeken (Audjoo Helix) of er misschien iets over mixers in stond maar ik kon 't niet vinden.
 
als je aanneemt dat alle stemmen ongecorreleerde golfvormen hebben (wat vrijwel altijd het geval is, alleen al omdat ze andere pitch hebben), kun je met 1/sqrt(N) schalen, waarbij N het aantal stemmen. Zo blijft de RMS altijd gelijk (die neemt namelijk met sqrt(N) toe).

Maar zoiets zou ik dus nooit doen. Je krijgt dan allerlei lelijke dynamische problemen. Stel je hebt 2 voices actief, en er komt een 3e bij. Dan krijg je ineens een discontinuiteit in de 2 voices die al aan stonden.

Ik zou gewoon wat headroom toelaten, en een volume knop erop, zodat gebruikers zelf de headroom kunnen aanpassen aan de hand van het aantal voices. Eventueel een limiter erbij maken.

En ja, alle DAWs tellen gewoon op, in tegenstelling tot allerhei hoaxen die er rondzwerven over de ene DAW die beter sommeert dan de andere... 1+1 is gewoon 2, of het nu cubase, nuendo, logic, of wat dan ook is.
 
Laatst gewijzigd:
Ik heb hier eigenlijk nooit zo bij stil gestaan, ik vind het zelf wel logisch dat een akkoord harder klinkt als een losse toon, maar het is eigenlijk wel interesant, ben ook wel benieuwd hoe dit in goed ontwikkelde synts met zoveel stemmen geregeld word, ik heb zelf nooit een synth met zoveel stemmen gehad (max 6 stemmen), maar bij de (oude) polysynths die ik heb gehad tellen de stemmen gewoon op zonder volume aanpassing.

Bij traditionele instrumenten, worden de klanken ook gewoon bij elkaar opgeteld, mischien niet zo duidelijk als bij een synth, maar bij opnamens word hier ook een bepaalde headroom voor gereserveerd, ondanks dat je hiermee natuurlijk meer ruis door krijgt, maar het is altijd nog beter als clipping, dit kun je ook horen aan het relatief lage rms volume van een opname van een orkest, omdat hier bijna nooit gebruik word gemaakt van compressie is er zelfs na de mastering nog veel headroom nodig.

Ik denk dus dat gewoon simpel optellen het natuurlijkste klinkt, hoewel dit inderdaad wel veel headroom kost, het lijkt me onmogelijk om voor iedere bijkomende of afvallende stem het volume bij te stellen zonder dat dit duidelijk hoorbaar is, hoewel clipping of compressie juist wel een bepaald karakter aan je sound toe kan voegen, ik ga er maar eens even rustig over na denken op het strand.


Ik zou gewoon wat headroom toelaten, en een volume knop erop, zodat gebruikers zelf de headroom kunnen aanpassen aan de hand van het aantal voices. Eventueel een limiter erbij maken.

Dit lijkt mij ook de beste oplossing.

En ja, alle DAWs tellen gewoon op, in tegenstelling tot allerhei hoaxen die er rondzwerven over de ene DAW die beter sommeert dan de andere...

Geen andere DAW sumt zo precies als Pro Tools HD.

http://akmedia.digidesign.com/support/docs/48_Bit_Mixer_26688.pdf
 
Hier spelen summing algoritmes geen rol.
Het hoort harder te worden als je meer noten speelt.
Als je het op een muzikale manier in een nummer wil oplossen moet je het met compressie doen (automatisch) of gewoon zelf een volume envelope tekenen (handmatig naderhand).
Dat het heel zacht is is trouwens geen probleem met softsynths want 24/32bits heeft zat headroom en geen ruis.
 
Geen andere DAW sumt zo precies als Pro Tools HD.

http://akmedia.digidesign.com/support/docs/48_Bit_Mixer_26688.pdf

Dat is een leuk stukje, maar in een DAW gaat dat verhaal helaas niet op.

DAWs gebruiken meestal floating point representaties, en niet zoals in bovenstaande tekst fixed point (zoals DA converters en allerlei hardware). Het dynamisch bereik van floating-point doubles is meer dan 1500 dB, probeer dat maar eens met fixed point te halen. Je zou daarvoor 1500/6 = 250 bits signaal representatie nodig hebben :)
 
Wow. Wat een respons;-) Dank! Even een hele snelle reactie tussen het werk door.

Schalen op basis van het aantal aktieve voices lijkt me - zoals jullie al aangeven - niet de juiste manier. En schalen op basis van RMS is best lastig; de RMS wijzigt constant en om clipping te voorkomen, zal ik toch rekening moeten houden met de piekwaardes. Waar ik naar op zoek ben, is een algoritme om te schalen op basis van de amplitude van het signaal. Ik was er eerst ook van overtuigd dat dat dynamische problemen zou opleveren, maar naar aanleiding van de "Geluidskwaliteit van algoritmen in digitale synths?"-thread ging ik toch weer eens op zoek en kwam ik uit bij het A+B-A*B-algorithme. Met het juiste type voice klinkt dat echt supergoed; het kan dus in ieder geval in specifieke situaties zeker wel.

En ik begrijp dat bij elkaar optellen de enige juiste aanpak is als je sonische transparantie wil. Alle Open Source software die iets met mixen doet, doet dat in ieder geval, en ik begrijp uit de reacties hier dat alle DAWs dat ook doen. Alleen ben ik geen DAW aan het maken, maar een muziekinstrument. Mijn voice summer hoeft dan ook niet sonisch transparant te zijn; het is juist leuk als hij een beetje karakter heeft;-)

Ik zal eens kijken of ik binnenkort wat voorbeeldjes kan plaatsen om de verschillende tussen de algorithmes te laten horen.
 
Alleen ben ik geen DAW aan het maken, maar een muziekinstrument. Mijn voice summer hoeft dan ook niet sonisch transparant te zijn; het is juist leuk als hij een beetje karakter heeft;-)

Aaah ik zit niet goed op te letten. Had niet door dat het om een zelfgemaakte softsynth gaat :)
Maar ja dan is het wel een leuke optie dat (a+b) -a*b, kun je toch allebei doen, ook normaal summen en laat de gebruiker kiezen?
 
Aaah ik zit niet goed op te letten. Had niet door dat het om een zelfgemaakte softsynth gaat :)
Maar ja dan is het wel een leuke optie dat (a+b) -a*b, kun je toch allebei doen, ook normaal summen en laat de gebruiker kiezen?

Klopt, dat ga ik ook doen, maar het zou leuk zijn als er een alternatief voor (a+b)-a*b bestaat dat in meer (alle?) situaties goed werkt. Dat scheelt namelijk weer een instelling;-) Punt is namelijk dat ik nu al veel te veel controllers (67) nodig heb en ik wil hem kunnen aansturen via een _alleen_ MIDI-controller en de user-interface moet op een klein LCD-schermpje passen. Hoe minder instellingen, hoe beter voor de creativiteit en de gebruikersvriendelijkheid;-)
 
Ik begrijp toch het A+B-AB verhaal niet helemaal. Wat doe je daar nu precies?
Is dat per sample, dus sum(t) = a(t) + b(t) - a(t)*b(t) ?
En hoe werkt dat dan voor meerdere stemmen a, b, c, d, e, f bijvoorbeeld?

[edit]

laat maar, ik zie 't al, het is uitgelegd in link in eerste post
(je moet alle kruistermen gaan uitrekenen)
 
Laatst gewijzigd:
@DJB: Voor meerdere stemmen herhaal ik hem gewoon met in plaats van a het de sum van de vorige berekening. Dat is hetzelfde als de kruistermen uitrekenen, maar dat schaalt tenminste mee met het aantal stemmen.

Maar de - voorlopige - oplossing schiet me ineens te binnen: ik maak gewoon een controller waarmee je de beide sum-technieken kunt mixen. Klaar:-)
 
ja dat is een goed idee: s = a + b - a*b*c :)

met c een in te stellen waarde (c = 0 geeft normale summing ; hogere waarden geven meer effect van a*b)
 
Niet helemaal, want als c=0 moet ik nog even delen door het aantal voices om clipping te voorkomen;-)
 
Punt is namelijk dat ik nu al veel te veel controllers (67) nodig heb en ik wil hem kunnen aansturen via een _alleen_ MIDI-controller en de user-interface moet op een klein LCD-schermpje passen. Hoe minder instellingen, hoe beter voor de creativiteit en de gebruikersvriendelijkheid;-)

Ja en nee. Om een supergroot contrast weer te geven:

http://www.admiralquality.com/products/Poly-Ana/

http://www.futureaudioworkshop.com/circle/main-interface/

Slim je interface bouwen maakt het gebruikersvriendelijker :).
 
@Yoozer: maar dat vult een heel monitorscherm waar je zonder muis geen wijs uit wordt. Daar is geen plek voor tussen mijn mengpaneel, MPC, racks en synths hoor;-) Geen muis in mijn studio!:P
 
Wat bedoel je met een klein LCD-schermpje? Formaat iPhone?
 
Back
Top