Midi Song Position Pointer

Dieses Thema im Forum "Controller & MIDI" wurde erstellt von Nоrdcore, 22. Mai 2011.

  1. Nоrdcore

    Nоrdcore Spezialist

    Ich bastel gerade einen kleinen Hardware-Controller, der u.a. auch ein Startsignal Synchron auf der nächsten "1" erzeugen kann.
    Im laufenden Betrieb immer schön Mitzählen, und bei Start von vorne anfangen klappt, bei Midi-Continue da weitermachen wo ich beim Stop stehen geblieben bin geht so halbwegs - das verschiebt sich doch recht schnell merklich.

    Wenn ich allerdings in der DAW den Cursor verstelle, und von dort loslaufe, dann geht das komplett schief. Dafür wollte ich den Song Position Pointer benutzen. Der wird auch schön brav übertragen - aber leider immer auf einen ganzen Takt gerundet, und nicht etwa wo ich wirklich anfange. => unbrauchbar.

    Gehört das so hirnrissig, bin ich zu blöde, oder oder ist das ein Bug im SONAR?
     
  2. serge

    serge ||

    Deine erste Vermutung lässt sich laut diesen Seiten
    http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midispec/ssp.htm
    http://www.sweetwater.com/expert-center/glossary/t--SPP
    http://home.snafu.de/sicpaul/midi/midi0a.htm
    ausschliessen, denn danach bezeichnet der Song Position Pointer die Position ab Songbeginn in 16tel-Noten.
     
  3. Nоrdcore

    Nоrdcore Spezialist

    Puh... es war zum Glück nur die übliche Blödheit. (= Fehler im Programm)
    Nu tut es so, wie es soll.
    OK, beim Scrubben verliert er den Sync (lt. Midi-Norm darf der SPP nicht im Betrieb gesendet werden), aber einmal Pause/Weiter und es stimmt wieder.
     
  4. fairplay

    fairplay Tach

    ... <thread abonnier> :floet: ...
     
  5. Nоrdcore

    Nоrdcore Spezialist

    Mal gucken, womit es jetzt weitergeht.
    Irgendwelche analogen Clock-Ausgänge sind ja eher langweilig, das kann jeder...

    Also gleich zum spannenden Teil: eingehende Clock stabilisieren. (Das Ding soll ja an der DAW hängen, die mag nicht als Slave und ist als Master ggfls. etwas zu wackelig. )
    (Das gibt dann auch analoge Clock => Midi her, und zwar auch, wenn man man analog nur 1/4, 1/8 oder 1/16 hat. Und Tap-Tempo => Midi-Clock ist dann auch nicht so weit weg. )
     
  6. Nоrdcore

    Nоrdcore Spezialist

    So Clock ausmessen klappt, aber sobald ich da diese blöde Phasenregelschleife drauf setzte, kommt nur noch Mumpitz raus.

    Der Ausgangs-Clock soll so geregelt werden das er *im Mittel* immer dann Auftritt, wenn der Eingangsclock eintrifft. Also eigentlich völlig ungeheimisvoll:
    Erst mal ein gutes Dutzend Clocks ausmessen, damit man die Frequenz kennt.
    Damit wird dann ein Timer laufen gelassen, der die Ausgangsclock erzeugt.
    Die stimmt dann zwar in der Frequenz ziemlich gut, läuft einem auf Dauer aber weg.
    Daher wird jetzt die Ausgangsclock mit der Eingangsclock verglichen. Eilt sie vor, wird sie etwas langsamer gemacht, schleppt sie, wird sie etwas beschleunigt.
    An der Stelle wird sozusgagen die Frequenz Tiefpass-gefiltert, der Jitter am Ausgang ist damit kleiner als der am Eingang.
    ("In Analog" ist das übrigens tatsächlich ein Tiefpassfilter, dessen Ausgang auf einen VCO geht. )
     
  7. Coole Sache, würde mich interessieren wie das genau geht, das wäre eine Sache die ich gern für den Octopus implementieren möchte, wenn ich denn den Sourcecode begreifen würde ;-)
     
  8. Nоrdcore

    Nоrdcore Spezialist

    Dazu muss es erst mal funktionieren... es gibt da einige Fallstricke, die nicht zwingend praktikabel lösbar sein müssen.
    Bei "DAW-Start" springt bei mir die Clock locker mal um ein bis zwei ganze Pulsbreiten. Und bei den Starts darf die Clock das Start-Signal nicht "überholen".
    Sonst kommt zwar eíne stabile Clock raus, die aber um ein "Raster" (21ms bei 120BPM) versetzt ist.
     
  9. Nоrdcore

    Nоrdcore Spezialist

    So, die Regelung läuft.
    Der Trick ist semi-elegant: der Timer für den Clockausgang bekommt dazu einen Phasenoffset verpasst, einzelne Clockabstände werden dazu länger / kürzer gemacht, um auf Dauer synchron zum Eingangsclock zu bleiben.
    Das ist ja nun eigentlich genau das Phasenrauschen, was rausgefiltert werden soll. Der Trick ist aber, dass ich da mit 3..6µs Variation auskomme, wo das Eingangssignal plus/minus ein paar Millisekunden hat.
     
  10. fairplay

    fairplay Tach

    ... :supi: ... :mrgreen: ...
     
  11. Nоrdcore

    Nоrdcore Spezialist

    Ähm was meint ihr:

    Clock auch ausgeben, wenn einem der Eingang wegbricht?
    Ich denke schon, auch wenn Ableton die im Stop abschaltet.

    Anpassung an geänderte Clock eher soft oder plötzlich?
    Ich würde zumindest unsinnig kurze Clock-Pulse vermeiden wollen, im laufen würde ich ungerne Clocks verlieren, im Stop ist das egal (bzw. unvermeidlich, da kommt einfach auch unabgezählter Blödsinn rein. )

    Clock sofort nach dem Einschalten ausgeben?
    Eher ja, die Geräte an dem Ding sind ja so eingestellt, dass sie auf externer Clock laufen. Fehlt die, sind die immer so tot, das nervt.

    Einstellbare Clock (als selbstständige Quelle) erfordert Display und Bedientaster, das brauche ich bisher nicht. Das ist eher so viel Mehraufwand, dass ein anderes Projekt würde.
     
  12. Ich hab noch nicht genau verstanden was du machen willst...

    Ich hab mir mal über ähnliches Gedanken gemacht, da dachte ich mir wenn sich der Eingang ändert (sowas wie analog lfo -> midi clock) zusätzlich erforderliche clocks einfach nachzuholen.
     
  13. Nоrdcore

    Nоrdcore Spezialist

    Re: Midi Clock Sync Box

    Im Moment baue ich einfach nur eine Midi-Clock, die zu einer externen Midi-Clock (aus der DAW) synchron läuft. Ziel ist zunächst, dass die ausgegebene Midi-Clock nicht eiert.
    Mit dem Ansatz kann man aber auch so etwas bauen, wie aus einer "analogen" 1/16tel Sequencerclock eine Midi-Clock zu machen.
    Mit Midi-Clock gesyncter LFO ist auch recht dicht dran, ebenso wie diverse "analoge" Clock-Ausgaben.

    "Abfallen" tut dabei das, was ich weiter oben beschrieben habe: das synchrone Einstarten externer Geräte. D.h. ich kann auf einem Drummie Stop drücken, wenn ich dann an der Schaltung Start drücke, wird er auf der nächsten 1 wieder gestartet.

    "Clocks einfach nachholen" hat keine konstante Frequenz, d.h. da passiert erst mal nix und dann kommt eine Handvoll Clockpulse. Eigentlich will man die aber gleichmäßig verteilt haben.
    Wenn dein analoger Sequencer mit 120BPM auf sechszehnteln läuft, dann ist das alle 125ms ein Impuls. Für Midi braucht man da dann noch 6 Impulse zwischen (alle 21ms einer), und zwar gleichmässig.
    (Nicht das man *da* nicht damit durchkommen könnte, einfach nur eine Clockperiode auszustoppen und daraus die Zwischenpulse in der nächsten zu erzeugen. Da die analoge Clock kaum Jitter hat (die driftet dafür satt!) dürfte das ganz gut funktionieren. Bei Midi brauche ich eher 5-10 Takte damit die gemessene Frequenz ausreichend stimmt... )
     
  14. Ich dachte mir das so:

    Ein Rechteck an den Eingang startet einen zähler bei high und einen bei low. (geclockt durch einen uhrenquarz)
    Die zähler werden dann durch zb 3 dividiert (6 clocks pro 16tel) und bei der nächsten periode werden dann die clocks enstprechend ausgegeben. Falls nich alle clocks ausgegeben wurden und die nächste periode schon begonnen hat werden sie nachgeholt. (die Frequenz des eingangssignals wurde erhöht)

    Bei digital 1:1 würde ich aber eher einen Fifo buffer und uart nehmen das wird afik so gemacht in den geräten ;-)
     
  15. Nоrdcore

    Nоrdcore Spezialist

    Bei mir ist das alles in einem Atmel-Mikro-Controller.
    Ich komme ja noch aus der Zeit, wo man das mit Hardware machen musste :opa:, das brauche ich heute nicht mehr.

    P.S.: Midi-Start/Stop geht jetzt auch in Ableton, d.h. wenn die Eingangs-Clock im Stop weg bleibt.
    P.P.S: Mist, Continue geht so noch nicht, da pfuscht Ableton an der Clockdauer rum, die ersten paar sind zusammen gestaucht.
     

Diese Seite empfehlen