Jeannie Polyphonic DIY Synthesizer

Hi Klaus :)
Danke für deine Unterstützung. Ein Update mit deinen Änderungen und SysEx Dump Funktion steht in Kürze bereit. Hab da noch ein paar kleine Probleme zu lösen. Aber das bekomm ich hin.
Ferner werden noch einige Midi CCs ergänzt.

Gruß Rolf
 
ich habe den Eintrag dazu möglicherweise übersehen (bin auh noch nicht auf der neusten Firmware), aber Support für Aftertouch und einen Eintrag dafür in der Matrix wäre für mich ein echtes Wunschfeature (und sicher auch nicht übermäßig kompliziert zu implementieren). Im einfachsten Fall würde mir eine wahlweise Zuweiszug von Modwheel oder Aftertouch zu LFO1-Intensity oder Cutoff/Filter-Env-Amt ausreichen.
Luxus dann natürlich über die Matrix mit frei zuweisbarem Ziel.

Der Mod-Amt für Crossmod/Xmod & co wäre ebenfalls als Modulationsziel für Spielhilfen interessant (ich weiß natürlich, dass an der Modmatrix noch gearbeitet wird, und übe mich auch gern noch etwas in Geduld ;-) ).
 
Toll wäre es wie gesagt, wenn ihr die aktuellen Versionen auch als Sourcecode veröffentlichen würdet
Wieso wird es denn Opensource Synthesizer genannt wenn der Sourcecode nicht verfügbar ist?

Wobei ich sehe das ihr (@rolfdegen und @tubeohm ) den nicht so nennt.
Evtl. sollte man mal die Berichterstatter auf das Detail hinweisen.
Nur weil es DIY istmuss ja der Quellcode nicht verfügbar sein. Aber wenn es OpenSource heist hat man schon gewisse erwartungen.
 
Wieso wird es denn Opensource Synthesizer genannt wenn der Sourcecode nicht verfügbar ist?

Wobei ich sehe das ihr (@rolfdegen und @tubeohm ) den nicht so nennt.
Evtl. sollte man mal die Berichterstatter auf das Detail hinweisen.
Nur weil es DIY istmuss ja der Quellcode nicht verfügbar sein. Aber wenn es OpenSource heist hat man schon gewisse erwartungen.
Ist doch alles geuppt . Auch die Software. Aber ist doch klar das Rolf nicht irgend welche Zwischenversionen auf Github stellt . Wenn du auf die TubeOhm Seite schaust wirst du sehen da da ein Link zu Github ist. Wir haben es nur nicht explizit erwähnt das Jeannie open source ist. Dachte das wissen alle.
 
Zuletzt bearbeitet:
Die Version im git ist 1.37 - als Zip gibt es dort noch die 1.42f - aber die hat ja laut tubeohm Webseite einen Bug.
Die aktuelle 1.43 wird als latest stable version auf der Webseite empfohlen und ist für die neue Soundbank Vorraussetzung - also keine "Zwischenversion"
Da würde ich mich über ein Update des Sourcecodes schon freuen.
 
Die Version im git ist 1.37 - als Zip gibt es dort noch die 1.42f - aber die hat ja laut tubeohm Webseite einen Bug.
Die aktuelle 1.43 wird als latest stable version auf der Webseite empfohlen und ist für die neue Soundbank Vorraussetzung - also keine "Zwischenversion"
Da würde ich mich über ein Update des Sourcecodes schon freuen.
Wird schon kommen. Denke Rolf ist noch beschäftigt mit der sysex Geschichte .
 
Abwarten und ein Tässchen Tee trinken :kaffee:

Hab noch etwas Schwierigkeiten beim Senden von Patch Bänken über USB zum PC. Immer wieder kommt es zu Übertragungsfehlern im PC. Keine Ahnung warum !?

Ein Patch besteht aus 348 Byte. Diese werden per usbMIDI.sendSysEx() vom Teensy an den PC übertragen. Dann mach ich eine kleine Pause (25ms) und übertrage den nächsten Patch.

Wenn ich nur einen Patch übertrage, dann funktioniert alles problemlos. Ich habe keine Übertragungsfehler.

Die Übertragungsfehler sehen dann so aus..

SysEx dump.PNG
 
Zuletzt bearbeitet:
Jetzt habe ich USB- und Midi-SysEx-Übertragung implementiert. USB hat oft Übertragungsfehler. Midi funktioniert ohne Fehler 🤔

Kann es eventuell am verwendeten USB Hub liegen 🤔


C:
a lot of sysex data..

        uint14_to_sysex2Bytes(data[207], sysexCount, sysexData);    // (207) 2    328 - LFO2releaseTime (0 - 12000) Fade out
        float_to_sysex5Bytes(data[208], sysexCount, sysexData);        // (208) 5    330 - Osc1ModAmt (0.00000 - 1.00000) Fx Mod
        int8_to_sysex2Bytes(data[209], sysexCount, sysexData);        // (209) 2    335 - LFO1enCurve (-8 - +8)
        int8_to_sysex2Bytes(data[210], sysexCount, sysexData);        // (210) 2    337 - LFO2enCurve (-8 - +8)
        uint8_to_sysex1Byte(data[211], sysexCount, sysexData);        // (211) 1    339 - LFO1mode (0 - 1)
        uint8_to_sysex1Byte(data[212], sysexCount, sysexData);        // (212) 1    340 - LFO2mode (0 - 1)
        sysexData[sysexCount++] = 0xF7;                                // 1    346 - End SysEx (0xF7)
       
        usbMIDI.sendSysEx(sysexCount, sysexData, true);        // send SysEx data via USB
       
        MIDI.sendSysEx(sysexCount, sysexData, true);        // send SysEx data via Midi
       
    }


    Serial.println("transfer complete..");
 
Übertragungsfehler treten am USB 3.0 Hub und USB2.0 Anschluss auf. Habs mit mehreren Programmen überprüft (MIOS, MIDI-OX, Pocket MIDI). Immer das gleiche.. Es treten zufällige Übertragungsfehler auf. Es ist kein Muster zu erkennen. Die gleiche Übertragung funktioniert über Midi fehlerfrei.

Ich werde jetzt mal einen kleinen Scretch für den Teensy programmieren, der nur eine SysEx Übertragung am USB beinhaltet und diesen testen. Bin gespannt ob damit auch Übertragungsfehler auftreten 🤔
 
Zuletzt bearbeitet:
Vielleicht wird zu schnell gesendet. Pausen zwischen den patches erhöhen, hilft vielleicht 🤔
 

Ja.. Das war der entscheidende Tip. Mit dem Auskommentieren in der usb.c Datei in der Arduino Lib funktioniert es.

Datei Pfad: C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy4

C-ähnlich:
void usb_isr(void)
{
    code...
       
    if ((USB1_USBINTR & USB_USBINTR_SRE) && (status & USB_USBSTS_SRI)) {
        //printf("sof %d\n", usb_reboot_timer);
        if (usb_reboot_timer) {
            if (--usb_reboot_timer == 0) {
                usb_stop_sof_interrupts(NUM_INTERFACE);
                _reboot_Teensyduino_();
            }
        }
        #ifdef MIDI_INTERFACE
        //usb_midi_flush_output();
        #endif
        #ifdef MULTITOUCH_INTERFACE
        usb_touchscreen_update_callback();
        #endif
        #ifdef FLIGHTSIM_INTERFACE
        usb_flightsim_flush_output();
        #endif
    }
}

Eine Patch Bank wird jetzt über USB fehlerfrei in weniger als 2sec übertragen :)
Über Midi dauert es ca. das ca. 15sec.
 
Zuletzt bearbeitet:
So wie ich das verstanden habe, ist die Funktion usb_midi_flush_output() für das Löschen von nicht gelesenen Daten im Midi Buffer zuständig.

Da ich in der Jeannie mit MIDI.read() und usbMIDI.read den Midi Buffer ständig abfrage, sollten durch die Abschaltung dieser Funktion keine Nachteile entstehen.

Auf github werde ich dann auf die Änderungen in der Arduino Library bzw. die geänderte Datei usb.c hinweisen.
 
Zuletzt bearbeitet:
flush sendet den Buffer - nicht nur löschen ... ist wohl um die latenz niedrig zu halten da drin und damit keine buffer reste ungesendet verbleiben. Aber einen post weiter unten haben die ja eine Lösung mit einer blockier variable gepostet,
das ist imho besser, wenn man mit der gleichen library (z.B in einem anderen Projet) midi per usb senden will und es auf die Latenz ankommt.
 
Aber einen post weiter unten haben die ja eine Lösung mit einer blockier variable gepostet,

Hi Klaus. Wo hast du das genau gepostet ?

oder meinst du das hier:
C:
...
static uint8_t transmit_previous_timeout=0;
static uint8_t tx_noautoflush=0;
/* flag anti flush */
static uint8_t stopFlush = 0;

void usb_midi_send_sysex_buffer_has_term(const uint8_t *data, uint32_t length, uint8_t cable)
{
        stopFlush = 1;
        
        cable = (cable & 0x0F) << 4;
...

        stopFlush = 0;

}

void usb_midi_send_sysex_add_term_bytes(const uint8_t *data, uint32_t length, uint8_t cable)
{
    stopFlush = 1;
    
    cable = (cable & 0x0F) << 4;

....
    stopFlush = 0;
    
}

void usb_midi_flush_output(void)
{
    if ( stopFlush == 0 )
    {
        if (tx_noautoflush == 0 && tx_packet && tx_packet->index > 0) {
            tx_packet->len = tx_packet->index * 4;
            usb_tx(MIDI_TX_ENDPOINT, tx_packet);
            tx_packet = usb_malloc();
        }
    }
}
 
Zuletzt bearbeitet:
Ich hab keine Ahnung wie ich diese Funktion in meinem Code integriere soll. Teensy 4 hat eine andere USB library.

Aber es ist ja ein grundsätzliches Problem und ich denke, ich sollte Paul mal bitten, sich der Sache anzusehen.

Gruß Rolf
 
In MIDI-OX habe ich einen Fehler beim Empfang von SysEx Dump entdeckt. Die Anzahl der empfangenen SysEx Daten werden im Vorschaufenster der SysEx Dump Funktion falsch angezeigt.
Statt 44.544 Bytes werden mir 44766 Byte angezeigt. Im großen Hauptfenster ist die Anzahl der Bytes allerdings korrekt.


MidiOX 2.PNG

Werden die SysEx Dump Daten aber direkt in ein File gespeichert (Sysex Configure > Häkchen bei "Save Dump directly to file") treten keine Fehler auf.
Die Anzahl der empfangenen Daten stimmt mit den zu gesendeten Daten überein.

SysEx 1.PNG
 
Zuletzt bearbeitet:
SysEx Dump funktioniert jetzt. Siehe kurzes Video.

Es war etwas aufwendiger als ich gedacht habe. Zuerst mussten für alle 212 Parameterwerte in der Jeannie Konvertierungsroutinen entwickelt werden, die 8/16Bit Integerwerte und 32Bit Fließkommawerte in ein 7bit Format für den SysEx Dump umwandeln. Das gleiche musste auch wieder zurück gewandelt werden.
Danach folgten Funktionen für die Übertragung und den Empfang von SysEx Daten. Zu guter Letzt musste noch ein einfaches Menü zur Bedienung entwickelt werden.


20220523_135020.jpg

Mit Destination wird der Übertragungsweg ausgewählt (Midi oder USB)
DUMP-Typ ist entweder ein Patch oder eine Bank.
Mit DUMP-Bank bestimmt man die Bank (A-P) für die Übertragung oder den Empfang.
Source ist entweder die zu übertragene Patch-Nr. oder beim Empfang der Programmplatz in der ausgewählten Patch Bank.
SYSEX-DUMP stellt man auf Senden oder Empfangen von SysEX Daten.
Mit der Taste "Load/Save" wird die Übertragung oder der Empfang gestartet.
Eine Progressbar zeigt den Fortschritt der Übertragung an.

 
Zuletzt bearbeitet:
Bin gerade dabei noch eine Pick up Funktion für die Poti Abfrage zu integrieren. Dadurch verstellen sich auf den Menü Seiten die Parameter Einstellungen nicht mehr so leicht, wenn man zufällig ein Poti berührt.
 
Dank fuhr die Arbeit! Wird Github dann auch "refreshed"? Est ist gebrauchlich, um Open-Source-Software up to date zu halten.
 
Jaha , bin grade an der 1.51C Firmware - teste diese. Also, Bank und Patch senden/empfangen funktioniert jetzt. Aktuell habe ich bei der Bank B Patch 115 gemacht .
G
Andre'
 


Neueste Beiträge

Zurück
Oben