Ambisonics Encoder (was: question about SQ decoder)

einseinsnull

[nur noch PN]
ich benutze hin und wieder meinen SQ encoder um irgendwelche effekte auf dessen domäne zu machen.

doch wie kommt man wieder zurück zu stereo?

ein SQ encoder besteht maßgeblich einfach nur aus einer hilbert transform, wobei die "rear" kanäle die versetzte phase wieder aufs hauptsignal addiert bekommen.

macht ein "SQ decoder" überhaupt sinn? in der beschallung scheint es das nicht zu geben...
 
so, das hätten wir dann auch gefunden. das gabs tatschlich, sansui und yamaha haben so etwas gebaut. es muss wohl ein paar wenige schallplatten gegeben haben, die tatsächlich in und für SQ produziert wurden, aber natürlich nur als 2 kanal ton vervielfältigt worden sind.
 
ich brauch das garnicht, ich hatte nur irgendwann der vollständigkeit halber einen encoder programmiert. da dachte ich warum nicht auch einen decoder? :)

dass für das format speziell produziert worden ist war mir nicht bewusst, das hab ich grad ergoogelt.

vom grundsatz her ist es ja erst mal nur dazu gedacht sich "normale" stereoaufnahmen auf eine interessante art und weise mit 4 lautsprechern anzuhören.

gott, die digital domain muss man einfach lieben. ein bischen plus und minus und eine hilbert transform und fertig. 5 minuten und 0 euro.
 
Zuletzt bearbeitet:
is völlig unspektakulär.

meine hilberts replaced du mit dem vanilla hilbert~ (immer eins für zwei, frag mich nicht warum ich meine trenne)

max v2;
#N vpatcher 510 145 1480 481;
#P hidden newex 826 206 116 196617 bgcolor 100 100 200;
#P outlet 673 263 15 0;
#P newex 673 206 119 196617 +~ 0.;
#P outlet 413 263 15 0;
#P newex 413 206 119 196617 +~ 0.;
#P outlet 228 263 15 0;
#P newex 673 164 97 196617 *~ 0.7071;
#P newex 782 177 97 196617 *~ 0.7071;
#P newex 413 164 97 196617 *~ -0.7071;
#P outlet 48 263 15 0;
#P newex 522 177 97 196617 *~ -0.7071;
#P inlet 228 54 15 0;
#P newex 782 70 138 196617 110.hilbert-imaginary~;
#P newex 228 146 138 196617 110.hilbert-real~;
#P inlet 48 54 15 0;
#P newex 522 70 138 196617 110.hilbert-imaginary~;
#P newex 48 146 138 196617 110.hilbert-real~;
#P connect 2 0 0 0;
#P connect 0 0 7 0;
#P connect 5 0 3 0;
#P connect 3 0 11 0;
#P connect 3 0 8 0;
#P connect 8 0 12 0;
#P connect 12 0 13 0;
#P connect 2 0 1 0;
#P connect 1 0 6 0;
#P connect 6 0 12 1;
#P connect 0 0 10 0;
#P connect 10 0 14 0;
#P connect 14 0 15 0;
#P connect 5 0 4 0;
#P connect 4 0 9 0;
#P connect 9 0 14 1;
#P pop;
 
das ambi zeug ist ja auch sehr geil. bald braucht man gar nichts mehr selbst machen, man muss nur noch auf live umsteigen.

oder wenn ich so recht überlege ... och nö. :P
 
ambi(sonics)? damit habe ich mich nie so wirklich beschäftigt. ich habe mir, sehr dilletantisch einen multipanner mit delay und lautstärkeänderung nach pythagoras gebaut.
Soll: eine realistische raumbewegung durch "n" lautsprecher die in einem würfel mit seitenlänge 1 platziert sind, darstellen.
Tut: naja, man hört auf kopfhörern eine veränderung der raumwahrnehmung wenn man am größenparameter schraubt, bzw diesen ändert, aber ich konnte es noch nie in idealer umgebung ausprobieren. ich frage mich auch die ganze zeit ob ich nicht eh einem fundamentalen denkfehler unterlige und ob das amplituden panning linear oder expotentiell erfolgen muss... so kocht jeder sein süppchen, ich vor allem weil ich das rad lieber neu erfinde(jetzt mit drei extra ecken) als mich in bestehende systeme einzuarbeiten.
 
ein multipanner ist ja auch die halbe miete, das machst du schon richtig.

wie für 2, nur eben für 4 oder für 10, equal power panning oder auch noch breiter, und der letzte geht wieder in den ersten.

genau wie du wahrscheinlich benutze ich das auch nicht mit lautsprechern - sondern mit virtuellen lautsprechen in verschiedenen umgebungen und haue dann z.b. 10 verschiedene auralfilter (so hrtf mäßig) dahinter.

sofern die virtuellen lautsprecher alle den gleichen abstand haben, kann man auch problemlos welche noch in der tiefe verschieben (also aus einer weiter außen liegende kreislinie) - ein tiefpassfilter und ein delay ist alles was man dazu brauch, und die phasensauerei die dabei entsteht ist ja absicht weil sie in der natur auch so wäre.

scheiß auf HOA :P jetzt wo es das alles als external gibt, braucht man das eh nicht mehr selbst machen.


dekam.jpg


- ich hab mal extensions drangehängt falls du winblows bläst.

- das helpfile musst du manuell öffnen und als json.maxhelp exportieren, damit es dann auch automatisch öffnet, als v4 tut es das nicht.

- werte kleiner als "equal power" weighting sind eigentlich quatsch, keine ahnung was ich mir vor 15 jahren dabei gedacht habe. [zmap 0. 1. 0.2512 0.] is your friend.

- "interpolation" ist nur ein halbgares gimmick (als alternative dazu, gleich alles in signal zu machen, was sehr, sehr teuer wird). springst du damit langsam von einem punkt zu einem anderen, würde die bewegung (nur als) ein segment(!) in dem als kreis gedachter speaker-anordnung beschreiben.
 
Zuletzt bearbeitet:
ich benutze hin und wieder meinen SQ encoder um irgendwelche effekte auf dessen domäne zu machen.

doch wie kommt man wieder zurück zu stereo?

ein SQ encoder besteht maßgeblich einfach nur aus einer hilbert transform, wobei die "rear" kanäle die versetzte phase wieder aufs hauptsignal addiert bekommen.

macht ein "SQ decoder" überhaupt sinn? in der beschallung scheint es das nicht zu geben...
frag mal @Bernie @einseinsnull der kennt sich mit quadrofonie gut aus =)
 
@einseinsnull der filteransatz fehlt mir völlig, da ich, wenn ich mich in sowas reinbegebe, meistens tatsächlich 4 oder mehr lautsprecher zur verfügung habe oder eher hatte. ich war da unimäßig sehr verwöhnt, aus diesem luxus und dem willen zu mehr als bloßem panning, ist überhaupt erst der gedanke mit dem panner entstanden.
ich habe seit ewigkeiten einen tab zum thema blauertsche bänder offen (https://de.m.wikipedia.org/wiki/Blauertsche_Bänder), leider habe ich dazu gerade keine verwendung.

hast du max2? das sieht sehr altertümlich aus bei dir. Ich mache die delays mit gen~ da läuft alles sample genau und einfach, nicht nur in milisekunden.

leider kann ich die anhänge nicht öffnen weil mein Lüfter in einem mac bläst. :)

ich hab dir meinen quadpanner angehangen. er ist gedacht für 4 boxen im quadrat. soll jede beliebige position darin darstellen können und mit sehr großen raumgrößen arbeiten. die positionen der lautsprecher sind in einem kartesischen koordinatensystem gedacht, also 0_0 ist hinten links und 1_1 vorne rechts. alles dazwischen und drumherum geht auch.

EDIT: dammich wie bekomme ich maxpatches angehangen?
 
ein mac der kein zip von einem anderen mac aufmachen kann? hm.

wir probieren es mal trocken. http://laut8leise.de/_modular/dekamix/

ja ich benutze v4 und ein bischen v6, v7 hab ich nur zum gucken und v8 garnicht.

quadpanner oder morpher oder wie auch immer hab ich auch einige. leider kann keiner davon alles auf einmal, also z.b. nur rund oder eckig. da hat natürlich das klassiche ambisonics die nase vorn. braucht mir aber alles zuviel CPU. meist braucht man ja doch nur einen bestimmten effekt.

man will ja nicht ein summensignal, sondern mehrere spuren/quellen/instrumente parallel damit verteilen.

wer war eigentlich dein prof?
 
Zuletzt bearbeitet:
deine blauen bänder da sind musikalisch wertloser als wie wenn du eine durchgehende kreislinie hast bzw. feste positionen auf einer solchen - und nicht nur die markanten hotspots. und richtig gut geht das eigentlich nur mit faltung oder fft.

irgendwo hier sind auch wav files. https://www.ece.ucdavis.edu/cipic/spatial-sound/hrtf-data/ das ist das, was eigentlich jeder benutzt. kann der faltungshall in live mono to mono?

eine 50-positionen library solltest du natürlich sinnvollerweise in eine 10-positionen library umrechnen. :P
 
Zuletzt bearbeitet:
also, mit dem neuen link ging es. zu den bändern: ich bin wirklich nicht tief rein, werd ich wohl mal wieder.

mein Prof. In komposition war dirk reith und in musikinformatik thomas neuhaus.
ich hab etwas zu viel mein eigenes ding gemacht statt mich ins lernen zu hängen, aber es ging auch immer eher um syntheseformen bzw. kompositionsalgorithmen als um panning oder sowas, das waren leider eher randthemen, bzw. deine sache dich damit zu beschäftigen. mitlerweile haben die ein ambisonic system, aber ich war lange nicht dort.
 
fällt mir gerade ein: toms [binaural+] gibts ja auch direkt als external, da hättest du es mit 3 klicks. kann aber sein dass es nur für 32 bit verfügbar ist(?)

1 dekamix und 10 binaural. für "stereo" 2 und 20. und natürlich ein kopfhörer und schönes breitbandiges material. dann geht der punk ab.
 
Zuletzt bearbeitet:
ich frage mich auch die ganze zeit ob ich nicht eh einem fundamentalen denkfehler unterlige und ob das amplituden panning linear oder expotentiell erfolgen muss.

ich schau gern mal rien wenn du es hochgeladen bekommst.

eigentlich ist es einfach: erst machst du equal power panning für das setup so wie es steht (was einfach linear ist - denn 4 lautsprecher in einerm viereck befinden sich ja auch auf einer kreislinie) und dann transformierst du das quadrat in einen kreis.

da kommt dann so eine art achteck raus.
 
das war etwas blöd formuliert, es sind zwei mögliche fehler:
der eine hat mit der berechnung des delays zu tun und der andere eben mit dem pan.
die ganze kreisdenke ist ja genau was ich nicht wollte, es sollte ja jede beliebige position im (hier jetzt 2D) Raum "projeziert" werden können.
jetzt weiss ich auch wieder wie ich darauf kam:

Das sollte für eine installation in einem raum sein wo die leute von oben getrackt werden und dann ihren pseudoindividuellen stream bekommen.
ist leider über die planung nie raus. aber wäre witzig geworden weil sich auch jeder in eigenen samples bewegt hätte.

ok gezippt ging es. hier nbochmal mein text von oben:
ich hab dir meinen quadpanner angehangen. er ist gedacht für 4 boxen im quadrat. soll jede beliebige position darin darstellen können und mit sehr großen raumgrößen arbeiten. die positionen der lautsprecher sind in einem kartesischen koordinatensystem gedacht, also 0_0 ist hinten links und 1_1 vorne rechts. alles dazwischen und drumherum geht auch.
 

Anhänge

  • nk.quadrilla.maxpat.zip
    4,8 KB · Aufrufe: 1
Zuletzt bearbeitet:
auch für "jede beliebige position" brauchst du im prinzip erst mal einen kreis.

du hast oben bereits pythagoras erwähnt. :) richtung und abstand. damit kannst du dann alles machen. davor einfach carthesian to polar (für eine achse.), damit du einen slider anschließen kannst oder einen VSTparameter oder was auch immer.

kennst du das (ircam) spat modell noch? panning - room - weighting // low level control - high level control - GUI (oder so ähnlich)

denken tut man meistens auf der ebene von high level control. also baut man das zuerst.

neben den fehlenden gen~ patchern fehlen mir in deinem patch zwei dinge:

- wie berechnest du das delay? du würdest wohl sinnvollerweise schon meter in millisekunden umrechnen wollen (und nicht in pi/2^^.)

- kein weighting :sad: die arme source klebt in den ecken.

und natürlich - genau wie bei mir oben - die interpolation... ist gefährlich. die verfälscht die ergebnisse. wenn sie in anspruch genommen wird, läuft alles aus dem ruder.

ach ja, und wenn wir schon dabei sind, ich würde schon auch 0 0 als mitte definieren, und nicht als links hinten. :) dann kannste dir später den offset sparen.

und noch was. dir ist klar, dass man die tatsächliche aufstellung der speaker berücksichtigen muss um das delay zu berechnen? (bzw. das predelay für das "dazwischen geht auch")
 
Zuletzt bearbeitet:
auch für "jede beliebige position" brauchst du im prinzip erst mal einen kreis.
den kann man aber mit vier Lautsprechern nicht abbilden, da der Abstrahlwinkel ja meistens nur um die 60° beträgt und selbst eine Raumecke von 90° nicht lückenlos ausfüllen kann.
dir ist klar, dass man die tatsächliche aufstellung der speaker berücksichtigen muss um das delay zu berechnen? (bzw. das predelay für das "dazwischen geht auch")
Die Berechnungen der Laufzeiten sind deutlich komplexer, das würde ich nicht nur auf Delay und Predelay reduzieren.
 
Das wird aber in der Praxis wegen den störenden Phantomschallquellen nie funktionieren.

ein punktförmiges ("mono") signal kannst schon auch näher an den zuhörer bringen wie die speaker überhaupt stehen. nämlich ganz einfach indem du es dann breiter machst. (das kannst du in dem HOA beispeilbild oben schön sehen.)

nur wenn die quelle bereits sehr breit ist, dann hörts ganz auf.

voraussetzung ist natürlich immer, dass wir uns nicht in einem parkhaus befinden und der zuhörer ganz in der ecke steht.

den kann man aber mit vier Lautsprechern nicht abbilden, da der Abstrahlwinkel ja meistens nur um die 60° beträgt

im idealfall ist der abstrahlwinkel so gering wie möglich. dann hast du mehr direktschall im vergleich zu möglichweise vorhandenen störenden decken und wänden.

klar ist es mit 3-4 nicht so toll wie mit 8, aber dass es nicht geht kann ich nicht bestätigen.

Die Berechnungen der Laufzeiten sind deutlich komplexer, das würde ich nicht nur auf Delay und Predelay reduzieren.

da ist gar nichts komplex. die schallgeschwindigkeit ist eine konstante. du müsstest halt nur auch tiefpassfiltern, wenn es sich halbwegs realistisch anhören soll. das bischen phasendifferenz zwischen den ohren bei schallquellen von 45 grad ignoriert man einfach. spätestens wenn sich die quelle bewegt, merkst du das gar nicht.
 
Zuletzt bearbeitet:
ein punktförmiges ("mono") signal kannst schon auch näher an den zuhörer bringen wie die speaker überhaupt stehen. nämlich ganz einfach indem du es dann breiter machst. (das kannst du in dem HOA beispeilbild oben schön sehen.)
nur wenn die quelle bereits sehr breit ist, dann hörts ganz auf.
Hast du das schon mal in der Praxis ausprobiert oder ist das reine Theorie?
 
ja, den gen~patch hab ich vergessen. ist jetzt da, ist aber auch nix besonderes drin.

das delay berechnet sich aus der Positionierung der gedachten Schallquelle(gegeben durch die inlets x und y) zur jeweiligen Box(festgelegt in der expression in den 0_0 etc Patches*).
in diesen Einzelpatches immer davon ausgehend dass die Seitenlänge 1m ist. im gendelay patch wird der errechnete Wert mit der realen Raumseitenlänge mulitpliziert und dann, bei c = 330m/s braucht der Schall pro Meter 3Milisekunden, mal drei genommen und in samples umgerechnet. das ist dann der delaywert.
und genau hie ist jetzt auch die Krux, bzw. die mauer gegen die ich laufe: de patch ist jetzt so gebaut dass je weiter die gedachte Quelle von der Realen Box weg ist das Delay kürzer wird, so dass das delay da am größten ist wo die Quelle am nächsten liegt. (liest sich das noch sinnvoll?)
im moment denke ich dass das richtig ist, ich war aber auch schon anderer Ansicht.

*durch veränderung der x/y koordinaten in der expression kann der Lautsprecher an jeden beliebigen Punkt gesetzt, also seine tatsächliche position im Raum berücksichtigt, werden. Gibt auch ne 3d version des ganzen, aber die erspare ich uns, ist ja auch, in meinem Modell, nur ein parameter mehr.

weighting, so wie ich das jetzt in kurzem überfliegen eines textes über ambisonics gelesen habe, spielt bei mir tatsächlich keine Rolle. daran habe ich schlicht nicht gedacht. (eben ein neues Rad mit drei extra Ecken...)

@Bernie
in einem akustisch bedämpften Raum mit nur einem Besucher hätte es wohl ganz gut funktioniert. natürlich nicht wenn der raum voll mit besuchern wäre. wir wollten die besucherzahl auch auf drei begrenzen da das sonst mit dem Kameratracking auch zu kompliziert geworden wäre.

in begrenztem maß, denke ich dass mein laufzeitenmodell tatsächlich gut funktioniert. allerdings ist es sehr statisch, d.h. der auf das signal berechnete effekt funktionier bei wirklicher Raumbewegung eines einzelnen Klanges nicht, weil es nicht in der Lage ist einen komplexen doppler effekt zu berechnen.
Ich kann eine granulare Wolke von 0.2/0.7 nach 0.9/0.1 bewegen in dem ich nach und nach Delayzeiten auf den Einzelgrains ändere(dafür war es auch gedacht), aber ich kann kein auto vorbeifahren lassen weil die tonhöhenänderung die sich durch das delay ergibt nichts mit dem bekannten Effekt den ein vorbeifahrendes auto erzeugt zu tun hat.
das müsste ja für jede Hörposition im Raum separat berechnet und abgespielt werden.
 

Anhänge

  • quadrilladelay2.gendsp.zip
    1,2 KB · Aufrufe: 2
Hast du das schon mal in der Praxis ausprobiert oder ist das reine Theorie?

das wird in der praxis so gemacht. jedenfalls mit den meisten verfahren die dafür in frage kommen.

mit so einem 4 speaker setup hast du im prinzip eine art kleinstmögliches modell, mit dem alle verfahren irgendwie halbwegs funktionieren.

wenn du - egal ob beim panning oder bei der distanz - interaurale laufzeiten mit berücksichtigst, dann hast du hinterher material, was du nie wieder in ein anderes format übersetzen kannst.
es ist sinnvoller, modelle immer so zu programmieren, dass sie morgen auch mit 5 lautsprechern funktionieren.
 
mal drei genommen und in samples umgerechnet. das ist dann der delaywert.

ach das ist das mal drei, alles klar. :)

und genau hie ist jetzt auch die Krux, bzw. die mauer gegen die ich laufe: de patch ist jetzt so gebaut dass je weiter die gedachte Quelle von der Realen Box weg ist das Delay kürzer wird, so dass das delay da am größten ist wo die Quelle am nächsten liegt. (liest sich das noch sinnvoll?)

ich würde dich gerne korrigieren, aber ich kann sowas auch immer schlecht beschreiben.

ne, ich meine du weisst ja wie weit die lautsprecher auseinanderstehen. dort, wo es die größten probleme mit den laufzeiten gibt, nämlich bei 22,5 grad, kannst du ja einfach einen kompromiss machen und den kreis (aber du willst ja keinen) wieder ein paar dellen versetzen (oder noch einfacher, dem abstandsparameter)

(z-achse würde ich übrigens nicht einfach nur kubisch machen. da bietet sich dann wirklich b-format an. aber wer hat schon so ein setup :) )
 


Neueste Beiträge

News

Zurück
Oben