Suche
Close this search box.

Der Güterzug

Auch auf Youtube

Am 31. Janu­ar 2021 ging ich spa­zie­ren. Das Wet­ter war okay, der Win­ter­ein­bruch kam erst eine Woche spä­ter. Der Wan­der­weg führ­te ein Stück ent­lang der Bahn­stre­cke Erfurt — Wei­mar, wo auf bis zu sechs Glei­sen Züge aller Art ver­keh­ren. Als ich einen sehr lang­sam nahen­den Güter­zug sah, posi­tio­nier­te ich mich so, dass die Umge­bung zu einer fast gra­fisch anmu­ten­den Büh­ne wur­de. Mit mei­nem Smart­phone (Sam­sung S10e) nahm ich den Zug in sei­ner gan­zen Län­ge mit der Zeit­lu­pen­funk­ti­on auf: Die Auf­nah­me dau­er­te 30 Sekun­den, und bot etwa 5 Minu­ten Material.

Als ich wei­ter lief, sin­nier­te ich dar­über, was ich wohl mit der Auf­nah­me anstel­len könn­te. Ich stell­te mir vor, was wäre, wenn jeder Wagen ein Laut­spre­cher wäre, der einen Loop abspielt, wäh­rend sich der Zug bewegt. Je mehr ich dar­über nach dach­te, des­to kon­kre­ter waren die dazu nöti­gen Schrit­te und ich woll­te es als Pro­jekt umsetzen.

Ich bin Anfän­ger was After Effects angeht, aber auch jah­re­lang Pro­gram­mie­rer. Mir gefällt die Mög­lich­keit, auf alle ani­mier­ba­ren Para­me­ter ein Script (Expres­si­on) legen zu kön­nen und damit Berech­nun­gen anzu­stel­len. Es krib­bel­te wie­der in den Fingern.

Ange­fan­gen hat­te ich mit der Lok. Die soll­te irgend­wie so elek­trisch klin­gen. So vor­wärts zie­hend. Mecha­nisch. Und ich ver­brach­te dann doch den Abend damit, in Sound Pi an die­sem Sound zu fei­len: Der »Lokomovorwärts«-Loop:

# Sketch für Sonic Pi
# The Train - Lok-Loop
# Autor: Sven Wachsmuth
use_bpm 124
live_loop :loop0 do
  with_fx :distortion, distort: 0.5 do
    sample :elec_bong
    wait 1
    sample :elec_twang
    wait 1
    sample :elec_wood
    wait 0.5
    sample :elec_wood
    wait 0.5
    sample :elec_cymbal
    wait 1
  end
end
live_loop :lok2 do
  sample :vinyl_hiss, pitch: 24, attack: 2, sustain: 0, release: 2, amp: 2
  wait 4
end

Die Lok ist nicht kaputt, die soll­te so klin­gen. Das heißt, der Sound muss­te sich mit der Lok bewe­gen. Im Umkehr­schluss bedarf es einer Mög­lich­keit, stets zu wis­sen, wo die Lok ist, damit woll­te ich die Laut­stär­ke und die Balan­ce ermit­teln. In After Effects gibt es soge­nann­te Null-Objekte, die selbst nicht sicht­bar sind, son­dern nur Eigen­schaf­ten zur Ver­fü­gung stel­len, wie X- und Y‑Koordinate. Der Zug fährt gleich­mä­ßig, so ergibt sich die X‑Koordinate grob aus der Zeit im Video mal die Geschwin­dig­keit in Pixel pro Sekun­de. Nach ein paar Anpas­sun­gen lag das Null-Objekt stets mit­tig auf der Lok. Ist die Lok links ist XPos=0, ist sie rechts ist XPos=1920 (Video­grö­ße = 1920x1080 Pixel, rot dar­ge­stellt). Im Bild »klebt« das Null-Objekt mit­ten auf der Lok, sei­ne X‑Koordinate habe ich als XPos eingezeichnet.

 

Für die wei­te­ren Berech­nun­gen sind Pixel nicht mehr rele­vant. Zur Ver­ein­fa­chung rech­ne­te ich die Pixel-Koordinaten XPos = [0…1920] (rot) in einen Wer­te­be­reich x_relative = [-1…+1](blau) mit­hil­fe des Drei­sat­zes um:

2 / 1920 = (x_relative + 1) / Xpos   | Umstel­len nach x_relative

x_relative = 2 * Xpos / 1920 — 1;

In After Effects gibt es die Varia­ble thisComp.width wo immer die Brei­te der Kom­po­si­ti­on in Pixeln drin steht. Hier steht also 1920 drin.

Bestim­mung der Balance

Ich defi­nier­te die Varia­blen left und right. Die sol­len Wer­te von 0 (kei­ne Dämp­fung) bis 1 (maxi­ma­le Dämp­fung) haben. In der Mit­te bei x_relative=0 sol­len bei­de 0 sein, also mini­ma­le Dämp­fung, zum Rand hin soll sich ein Wert zum Maxi­mum (1) bewe­gen. Die Ermitt­lung der For­meln dazu war eine Nuss. Aber ich habs geschafft:

left = 1 — ((x_relative < 0) ? 1 : Math.max(0, 1-x_relative));
right = 1 — ((x_relative > 0) ? 1 : Math.max(0,1‑Math.abs(x_relative)));

Dämp­fung durch Distanz

Die Stre­cke von Betrach­ter zu Schie­ne und die Schie­ne selbst bil­den ein recht­wink­li­ges T (schwarz). Der Abstand dist des Betrach­ters von der Lok lässt sich mit dem Phy­ta­goras ermit­teln (blau) — ist in der Mit­te 1 und wird nach links und rechts größer.

dist = Math.sqrt(x_relative * x_relative + 1);

Aus der Distanz ergibt sich direkt der Dämpfungspegel:

pegel = ‑20 * Math.log10(dist);

Und da hat­te ich alle Zuta­ten, um den Pegel der Audio-Spur mit Wer­ten für den lin­ken und rech­ten Kanal zu füt­tern. Dabei wird von der Dämp­fung durch die Distanz noch die Dämp­fung pro Kanal abge­zo­gen (Fak­tor 48 regelt die Iten­si­tät des Stereo-Effekts).

pegel_left = pegel — (48 * left);
pegel_right = pegel — (48 * right);

Damit fährt der Sound mit der Lok schein­bar durch das Bild.

Die wei­te­ren Wagons

Die Berech­nun­gen für die Wagen war ana­log zur Lok: Jeder bekam sein eige­nes Null-Objekt »auf­ge­klebt«, und das lie­fer­te zu jedem Zeit­punkt die Posi­ti­on des­sel­ben, so dass die­se zeit­ver­setzt durch das Bild wan­dern und die Audio­pe­gel der ein­zel­nen Sound­spu­ren — jeder Wagon hat­te eine eige­ne — nach oben beschrie­be­ner Metho­de steu­ern. Als die­ses Gerüst stand, kon­zen­trier­te ich mich auf die Pro­gram­mie­ren wei­te­rer Sound­loops mit Sound Pi, die vom Takt zur Lok und neben­ein­an­der gespielt auch zuein­an­der pas­sen. Ins­ge­samt pro­gram­mier­te ich 11 ver­schie­de­ne Sounds auf 19 Spu­ren, die am Anfang gleich­zei­tig star­ten und begin­nend mit der Lok mit der Bewe­gung des Zuges lang­sam inein­an­der über­ge­hen und sich abwech­seln. Ach­ja, das Quiet­schen ist Originalton.

Sicher kann man noch mehr ins Detail gehen und noch die Lauf­zeit­un­ter­schie­de zu wei­ter ent­fern­ten Wagons durch die Schall­ge­schwin­dig­keit, den Doppler-Effekt und ein gewis­ses Echo berück­sich­ti­gen. Mir ging es hier aber nicht um Rea­lis­mus, son­dern um eine ande­re Art, die Sounds zu mischen, sozu­sa­gen fremd­ge­steu­ert durch die Bewe­gung eines Güterzuges.

Was denkt ihr?

Edit 14.11.2023:

ich habe ein Oszilloskop-Video von der Audio­spur des Vide­os gemacht. Dazu nutz­te ich das XXY Oszil­lo­skop, den Aisee­soft Screen­Re­cor­derAdo­be Pho­to­shop und das freie DaVin­ci Resol­ve zum schneiden.

 

Wei­te­re Bei­trä­ge in die­ser Kategorie: