Jump to content

ilmenator

Frequent Writer
  • Posts

    2,302
  • Joined

  • Last visited

  • Days Won

    37

Everything posted by ilmenator

  1. Hi all, currently I am developing a filter application that changes certain MIDI CCs into NRPNs and vice versa. For this I am planning to use two core modules, one for each direction of MIDI stream. These will be placed between a Peavey StudioMix and Cubase SX. The one in between the MIDI cable from the StudioMix to the Sequencer will also be provided with a "jitter eater" algorithm, which shall save the system from fader jitter. Now, as a first step I spiced up the basic routine provided by Thorsten so that some of the CCs are transformed into NRPNs. I noticed that all Note On, Note Off messages (and some others, too) are sent twice by the filter circuit, like once being actively echoed in the "proc.inc" part, and once being echoed somewhere else. The modification of MIDI data works fine, so CCs are coming in, and NRPNs are going out, and only once. Any ideas? The section of code I changed (sorry, I am a beginner and don't know how to work with tables...) ist this. The rest of the code remains unaltered. Anything I am doing wrong, or is there something wrong with the section that Thorsten provided? ;; -------------------------------------------------------------------------- ;; PROC Received Bn: called on a Controller Event ;; In: MIDI_LASTEVENT0: Bn, n = midi channel ;; MIDI_LASTEVENT1: CC number ;; MIDI_LASTEVENT2: CC value ;; -------------------------------------------------------------------------- PROC_ReceivedBn ;; branch if CC number is 0x17 (dec23 Fader M) movf MIDI_LASTEVENT1, W xorlw 0x17 bz PROC_ReceivedBn17 ;; branch if CC number is 0x2C (dec44 Fader 1) movf MIDI_LASTEVENT1, W xorlw 0x2C bz PROC_ReceivedBn2C ;; branch if CC number is 0x2D (dec45 Fader 2) movf MIDI_LASTEVENT1, W xorlw 0x2D bz PROC_ReceivedBn2D ;; branch if CC number is 0x2E (dec46 Fader 3) movf MIDI_LASTEVENT1, W xorlw 0x2E bz PROC_ReceivedBn2E ;; branch if CC number is 0x2F (dec47 Fader 4) movf MIDI_LASTEVENT1, W xorlw 0x2F bz PROC_ReceivedBn2F ;; branch if CC number is 0x30 (dec48 Fader 5) movf MIDI_LASTEVENT1, W xorlw 0x30 bz PROC_ReceivedBn30 ;; branch if CC number is 0x31 (dec49 Fader6) movf MIDI_LASTEVENT1, W xorlw 0x31 bz PROC_ReceivedBn31 ;; branch if CC number is 0x32 (dec50 Fader 7) movf MIDI_LASTEVENT1, W xorlw 0x32 bz PROC_ReceivedBn32 ;; branch if CC number is 0x33 (dec51 Fader 8) movf MIDI_LASTEVENT1, W xorlw 0x33 bz PROC_ReceivedBn33 movf MIDI_LASTEVENT0, W call MIDI_SendByte movf MIDI_LASTEVENT1, W call MIDI_SendByte movf MIDI_LASTEVENT2, W call MIDI_SendByte return PROC_ReceivedBn17 movlw 0x23 movwf W_TMP movlw 0x17 ; NRPN LSB = 0x17, Fader M goto PROC_ReceivedFader_SendNRPN ; continue here PROC_ReceivedBn2C movlw 0x1B movwf W_TMP movlw 0x2C ; NRPN LSB = 0x2C, Fader 1 goto PROC_ReceivedFader_SendNRPN ; continue here PROC_ReceivedBn2D movlw 0x1B movwf W_TMP movlw 0x2D ; NRPN LSB = 0x2D, Fader 2 goto PROC_ReceivedFader_SendNRPN ; continue here PROC_ReceivedBn2E movlw 0x1B movwf W_TMP movlw 0x2E ; NRPN LSB = 0x2E, Fader 3 goto PROC_ReceivedFader_SendNRPN ; continue here PROC_ReceivedBn2F movlw 0x1B movwf W_TMP movlw 0x2F ; NRPN LSB = 0x2F, Fader 4 goto PROC_ReceivedFader_SendNRPN ; continue here PROC_ReceivedBn30 movlw 0x1B movwf W_TMP movlw 0x30 ; NRPN LSB = 0x30, Fader 5 goto PROC_ReceivedFader_SendNRPN ; continue here PROC_ReceivedBn31 movlw 0x1B movwf W_TMP movlw 0x31 ; NRPN LSB = 0x31, Fader 6 goto PROC_ReceivedFader_SendNRPN ; continue here PROC_ReceivedBn32 movlw 0x1B movwf W_TMP movlw 0x32 ; NRPN LSB = 0x32, Fader 7 goto PROC_ReceivedFader_SendNRPN ; continue here PROC_ReceivedBn33 movlw 0x1B movwf W_TMP movlw 0x33 ; NRPN LSB = 0x33, Fader 8 ;; goto PROC_ReceivedFader_SendNRPN ; continue here PROC_ReceivedFader_SendNRPN movwf TMP1 ; store number in temp. register movf MIDI_LASTEVENT0, W ; send Bn call MIDI_SendByte movlw 0x63 ; Send NRPN MSB <W_TMP> (0x63 <W_TMP>) call MIDI_SendByte movf W_TMP, W call MIDI_SendByte movf MIDI_LASTEVENT0, W ; send Bn call MIDI_SendByte movlw 0x62 ; SEND NRPN Address LSB <TMP1> (0x62 <TMP1>) call MIDI_SendByte movf TMP1, W call MIDI_SendByte movf MIDI_LASTEVENT0, W ; send Bn call MIDI_SendByte movlw 0x06 ; send NRPN Value MSB (06 <MIDI_LASTEVENT2>) call MIDI_SendByte movf MIDI_LASTEVENT2, W call MIDI_SendByte movf MIDI_LASTEVENT0, W ; send Bn call MIDI_SendByte movlw 0x26 ; send NRPN LSB value (26 40) call MIDI_SendByte movlw 0x40 call MIDI_SendByte return Thanks, ilmenator
  2. Wow, this will be sooo cool :) Thanks a lot, Thorsten!
  3. Nette Knöpfe gibt es bei Canford, allerdings auch nur in größeren Mengen. http://www.canford.de/catalogue.asp und dort nach 'knob' suchen, dann wird man auf diverse PDF-Dateien verwiesen. Die Knöpfe dort kosten so um die 0,20 ¤ aufwärts, bei einer MIDIbox 64 kann das trotz der horrenden Lieferkosten (ich habe was von 15-20 ¤ im Hinterkopf, genaueres sollte aber bei denen auf der Seite zu finden sein) aber schon lohnenswert sein. Dort findet man übrigens einige von größeren Pulten "bekannte" Knöpfe wieder...
  4. Für die Steuerung von VTSi-Parametern und ähnlichem sieht es noch schwieriger aus: metallene Oberflächen an Potikappen sind ziemlich häßlich, fühlen sich nicht gut an und sind auch noch teuer. Und es ist am Poti/Potiachse keine Möglichkeit vorhanden, die Kappenoberfläche irgendwie elektrisch zu kontaktieren, was aber für eine Entdeckung der Berührung notwendig wäre. Und erstmal dran drehen um festzustellen, welcher Parameter das nun gerade ist, kann auch nicht der Weisheit letzter Schluss sein. Zur Darstellung auf dem Computerbildschirm: im Prinzip ja, aber das Problem besteht ja gerade darin, dass die physikalische (geometrische) Anordnung der Drehknöpfe auf der Box nicht der auf dem Bildschirm entspricht, d.h. man muss auch den entsprechenden Parameter erst auf dem Bildschirm suchen. Das geht aber auch erst in dem Moment, wo man den Wert bereits verändert...
  5. Hallo zusammen, Dank Bennis Hilfe mit Webspace (Merci :) ) hier also eine Skizze von einer möglichen Anordnung mit viel Displayplatz und vielen Drehknöpfen, nämlich 30 Stück (entsprechend der 30 Textzeilen des Displays / je 12 Zeichen pro Zeile), auf jeder Seite 15 Stück versetzt zueinander angeordnet. Den unteren Teil der Anordnung bitte hinzudenken! Gruß, ilmenator
  6. Wer hat den Thread angefangen? Wer war also "eher"? :-* Übrigens hat "ilmenator" nichts mit "Illumination" zu tun... Falls mir jemand erklären kann, wie ich hier Bilder poste, ohne dass ich über eigenen Webspace verfüge, dann schicke ich eine Skizze von der Anordnung der Drehknöpfe um das Display.
  7. Hi Thorsten, I would like to upload a graphic to the forum in order to explain my ideas a bit clearer, but I have not found a way to do so yet. As far as I understand, I can add a url if the picture is already in the web, but what if I don't have any webspace to upload the picture to?? Is there somewhere in this board we could upload the pictures and then use that url?? Thanks a lot, ilmenator
  8. Is that the reason why the encoders must not be "mechanically detented" as you write on the 16E-page? Otherwise you would always increase the values in steps of two (from e.g. 72 to 74 to 76 etc.) when turning the encoder one step?
  9. Stopp! Bei dem 64x240 Display soll es sich nicht um eines handeln, welches ein "Mischpult" unterstützt, sondern um eines, welches das Editieren von z.B. Instrument-Parametern erlaubt! Hatte mich da wohl mißverständlich ausgedrückt, weil ich von "Kanalname" bei ProControl schrieb. Eine Beschriftung von Kanalzügen hat für _mich_ :) weniger Priorität. Obwohl, wenn ich mir das Bild von Thorsten so anschaue... macht schon was her!
  10. Auch nochmal zum Grafikdisplay: wenn das Display 18cm hoch ist und auf jeder Seite 15 Encoder liegen, dann müßte man die natürlich versetzt montieren. Plant man auf jeder Seite zwei versetzte Spalten, kommt man auf deine 2.25 cm, bei drei Spalten sind es schon 3.6 cm. Ob das dann noch aussieht ist vielleicht eine andere Frage, weil man sicherlich die Zugehörigkeit zwischen Displayzeile und Encoder durch einen Strich auf der Gehäuseoberfläche andeuten müßte. Andererseits könnte man das evtl. auch durch Markierungen in der jeweiligen Zeile im Display selbst darstellen. Linke Encoder-Spalte dauerhaft eine vertikale Linie (1 Pixel breit) am linken Displayrand, mittlere Spalte zwei Pixel breit, rechte drei Pixel breit. Für die Encoder auf der anderen Seite vom Display wandern auch die dauerhaft dargestellten Pixelbalken auf die andere Seite des Displays. Anzahl an darstellbaren Buchstaben verliert man auch nicht unbedingt, da 64:5 = 12 (+ 4 Pixel ungenutzt) sind. Vielleicht schaffe ich es, da mal eine Skizze von zu machen. Die Ansteuerung des Displays traue ich mir übrigens nicht wirklich zu, also Grafikmodus und Bytes übertragen... Naja, bin halt Realist ;)
  11. Moin zusammen, Danke erstmal für die Antworten. Bei den 7-Segment-Anzeigen sehe ich noch das Problem, dass die einfach zu groß sind. Hänge ich acht davon hintereinander zur Darstellung von Text, dann ist das entstehende Display mind. doppelt so breit wie der Kanalzug, den es beschriften soll. Ausserdem ist die Darstellung von einigen Buchstaben doch mehr als kryptisch... schließlich soll es ja auch halbwegs aussehen, denn das Auge bedient mit. Vielleicht nochmal konkret zu dem 240x64 Zeichen Display: gibt es eine Möglichkeit, Zeilen und Spalten zu vertauschen, also den Display-Controller so mit dem Display zu verbinden, dass er eben nicht 48 Zeichen in 8 Zeilen darstellt, sondern je 12 Zeichen in 30 Zeilen? Dann könnte man den Controller im Text-Only-Modus belassen und muss sich nicht mit aufwendigen Grafikroutinben herumschlagen, die letztlich doch nur Text anzeigen sollen. Das Datenblatt hat mir hier leider nicht weitergeholfen. Grüße, ilmenator
  12. Moin zusammen, ich spiele wiedermal mit dem Gedanken, eine MIDIbox16E zu bauen. Wie die letzten Male auch ;) ist die ultimative Lösung aber noch nicht fertig vorgemacht, deshalb sage ich mal laut, was ich mir so wünsche. Natürlich würde ich das alles auch gerne selber machen, fühle mich aber erstmal nicht wirklich dazu in der Lage. Also: Ich hätte gerne eine Möglichkeit, jedem Fader / Knob einen Namen zu geben, und zwar zur gleichzeitigen (!) Sichtbarkeit. Ähnlich wie bei einem Beschriftungsfeld, nur dass sich dieses automatisch ausfüllt. Wer mal mit einer ProControl für ProTools gearbeitet hat, weiss vielleicht, was ich meine: jeder Kanalname wird dort in einem kleinen LED-Matrixdisplay angezeigt. Dass es diese Displays gibt, weiss ich also, wo allerdings weiss ich nicht. Wie groß der Aufwand ist, diese anzusteuern, weiss ich mangels Datenblatt auch nicht. Eine Alternative dazu wäre ein 240x64 Punkte Grafikdisplay, welches vertikal angeordnet ist. Links und rechts davon könnte man dann die Endlosdrehgeber anordnen, vielleicht auf jeder Seite 15. Somit bliebe also pro Drehgeber eine Zeile zu jeweils 12 Zeichen zur Darstellung von Namen und aktuellem Wert - sollte reichen. Bei holländischen öffentlichen Telefonen gibt es diese Displays, allerdings habe ich noch nirgendwo einen Hinweis darauf gefunden, wie man ein solches Display entsprechend ansteuern kann. Alle Hersteller scheinen davon auszugehen, dass man sie horizontal betreibt. Kennt hier jemand Hinweise?? So, ein langes Posting, hoffentlich liest es auch jemand... Grüße und Dank, ilmenator
×
×
  • Create New...