Go Down

Topic: Midi Daten mit Arduino live bearbeiten? (Read 3750 times) previous topic - next topic

stoni99

Ich habe ein Keyboard mit dem ich die Midi Daten per USB an meinen PC sende. Dort kann ich den Klang mit dem Programm pianoteq bearbeiten.

Leider sendet mein Keyboard recht schwache Lautstärkedaten (Velocity) was zu einem sehr dumpfen Klang führt.


Meine Überlegung:

Ein Arduino empfängt die USB-Midi-Daten, rechnet auf Velocity immer 30 drauf und sendet die neuen Midi-Daten sofort per USB weiter an den PC.

Gibt es einen Arduino mit zwei nutzbaren USB Schnittstellen?

Ist die Datenbearbeitung schnell genug um nicht die Latenzzeit(Verzögerung) merkbar zu erhöhen?

Hat jemand einen guten Link dazu? Kenne mich mit Arduino-Midi nicht aus.

Klaus_ww

Aus meiner Sicht völlig falscher Ansatz.

- bei (halbwegs) vernünftigen Keyboards läßt sich die Anschlagstärke zumindest in groben Stufen einstellen
- bei (halbwegs) vernünftigen Programmen läßt sich die ankommende Anschlagstärke anpassen

Erst wenn beides tatsächlich nicht gegeben ist würde ich mir weitere Gedanken machen (z.B. was vernünftiges kaufen  :D )

Haste beides ausgelotet?
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

gregorss

#2
Dec 13, 2016, 06:38 pm Last Edit: Dec 13, 2016, 06:39 pm by gregorss
Hat jemand einen guten Link dazu? Kenne mich mit Arduino-Midi nicht aus.
Einen Link habe ich zwar nicht dazu, dafür etwas aus dem Nähkästchen:

Ich kenne MIDI noch aus Zeiten, als es USB nicht gab und MIDI-Geräte eine fünfpolige „DIN-Buchse" hatten, aus der die Daten seriell kamen. Die Verbindung zwischen solchen Geräten lief über ein entsprechendes Kabel mit fünfpoligen Steckern an den Enden. Bei einem Keyboard, bei dem der MIDI-Kanal fest auf 0 eingestellt und entsprechend übertragen wurde, habe ich mit einem Uno einen „Kanal-Wechsler" gebaut. Der hat einfach ein empfangenes MIDI-Datenpäckchen mit einer anderen Kanal-Info bestückt und weitergeschickt

Das funktionierte vollkommen unproblematisch. AFAIR hatte ich damals eine Seite hier bei arduino.cc gefunden.

Hier passende Schnipsel aus einem Sketch von damals:
Code: [Select]

...
Serial.begin(31250);
...
  for(note=0x1e; note < 0x5a; note++)
  {
      cmd=0x90;
      velocity=127;

      midi_send(cmd, note, velocity);
      flash();
      delay(100);

      midi_send(cmd, note, 0);
  }
...
void midi_send(int cmd, int pitch, int velocity)
{
  Serial.write(cmd);
  Serial.write(pitch);
  Serial.write(velocity);
}
...


Gruß

Gregor
Mir wird übel. (Uwe)

stoni99

Und kennt ihr ein Arduino mit 2 nutzbaren USB?

Tommy56

Mega mit SerialToUSB-Adapter auf Serial 1...2 oder UNO/NANO mit Softserial+Adapter

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

gregorss

#5
Dec 13, 2016, 10:18 pm Last Edit: Dec 13, 2016, 10:27 pm by gregorss
Und kennt ihr ein Arduino mit 2 nutzbaren USB?
Das kenne ich zwar nicht, aber das war in meinem Fall auch gar nicht nötig: Die Daten vom Keyboard kamen über eine 5 pol. DIN-Buchse auf Pin 0/1 an und wurden via USB an den Computer weitergereicht. Dort konnte ich das MIDI-Signal sofwaremäßig an einen Software-Synthesizer weiterleiten.

Vielleicht erfordert es bei Dir ja nur einen kleinen Aufwand, um das auf ähnliche Weise zu bewerkstelligen.

Gruß

Gregor

Nachtrag: Siehe hier und hier.
Mir wird übel. (Uwe)

stoni99

Hab mir mal die Library MidiUSB geladen.

Die soll wohl nur bei der IDE 1.6.6 und einem Arduino mit "nativer USB capabilities" funktionieren. Also warscheinlich nur mit Genuino 101 and friends...

Bei meinem Genuino 101 meckert die IDE 1.6.10 aber auch. MidiUsb not supportet.

Hat jemand Erfahrung damit?

ArduFE

Hallo,


und einem Arduino mit "nativer USB capabilities" funktionieren. Also warscheinlich nur mit Genuino 101 and friends...
Erfahrung mit Midi habe ich selber nicht.

Aber wenn ich die defines in der oben verlinkten Library richtig deute, sind die unterstützten Boards:

AVR : Leonardo bzw. Micro (haben gleichen Prozessor Atmega 32U4)
SAM : Due
SAMD : wahrscheinlich der Zero

Außerdem gibt es die Lib in einer Variante für den Teensy, da wird sie bei der Installation in die Arduino IDE mitgeliefert.

stoni99

Hmm, bekomm es nicht auf die Reihe:

Einen Uno mit USB2Serial an 1 (TX).

Testprogramm geladen:

Code: [Select]

/*
MIDI note player


The circuit:
* digital in 1 connected to MIDI jack pin 5
* MIDI jack pin 2 connected to ground
* MIDI jack pin 4 connected to +5V through 220-ohm resistor
Attach a MIDI cable to the jack, then to a MIDI synth, and play music.


This example code is in the public domain.

 */


void setup() {

//  Set MIDI baud rate:

Serial.begin(31250);

}



void loop() {

// play notes from F#-0 (0x1E) to F#-5 (0x5A):

for (int note = 0x1E; note < 0x5A; note ++) {

//Note on channel 1 (0x90), some note value (note), middle velocity (0x45):

noteOn(0x90, note, 0x45);

delay(100);

//Note on channel 1 (0x90), some note value (note), silent velocity (0x00):

noteOn(0x90, note, 0x00);

delay(100);

}

}


//  plays a MIDI note.  Doesn't check to see that

//  cmd is greater than 127, or that data values are  less than 127:

void noteOn(int cmd, int pitch, int velocity) {

Serial.write(cmd);

Serial.write(pitch);

Serial.write(velocity);

}



Und was passiert: NIX !

Die Programme: Midi Ox / Anvil Studio und piantotec registrieren kein reinkommendes Midi Signal.

Was mache ich falsch?

Klaus_ww

Du hustest einfach Midi-Befehle an USB raus - so weit so gut.
Hast Du auf dem PC auch eine entsprechende Bridge am laufen, die die Kommandos an die Midi-Treiber weiterreicht? Also irgendwas, das einen virtuellen Midi-Port bereitstellt auf den Du die Daten losläßt?
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

Tommy56

An 0 und 1 liegt doch schon die normale USB-Verbindung vom UNO. Was willst Du da mit noch einem Wandler dran? Die dürften im Zweifel gegeneinander arbeiten.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

stoni99

Ja, raushusten ist gut ausgedrückt!  :smiley-mr-green:

Will ja erst mal testen.

Wie gesagt: Hab keine Ahnung von MIDI.

Bridge? Keine Ahnung - wo kann ich nachsehen?

Wenn ich mein Keyboard anschliesse wir es sofort erkannt - auch ohne daß ich eine Taste drücke.
In den Options von pianoteq ist auch "listen to all Midi Inputs" aktiviert.

stoni99

Meinst du sowas: Hairless Midi serial Bridge?

Hmm, wird bei Midi-In auch nix erkannt,

stoni99

Wenn ich mir bei Hairless Midi den Datenfluß anzeigen lasse kommen merkwürdige Befehle:

......
Note off velocity 56
Programm change 0
Note %2 off velocity %3
......

Tommy56

Warum ignorierst Du das Posting #10?

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up