Midi Ausgabe über IO Pins


#1

Ich würde gerne mit dem Calliope einen Midi-Ausgang steuern um so ein E-Piano anschliessen zu können (ähnlich dieser Lösung
Mit dem Microbit und dem in dem Link gezeigten Python Code funktioniert das auch mit den Anschlüssen 3V,GND & P0 , allerdings würde ich lieber den Calliope und PXT Editor verwenden. Mit der Library wird aber anscheinend der Port P0 nicht seriell angesprochen, ist das irgendwie konfigurierbar ?


#2

Ich habe zwar keine Ahnung aber hast Du schon mal hier geschaut?
https://www.hackster.io/42232/der-calliope-mini-als-midi-player-343f92


#3

Dies ist leider nicht was ich suche, da ich nicht den Calliope als Player eines externen Midi-Instruments nutzen möchte sondern umgekehrt, der Calliope Midi-Sounds erzeugt die auf einem externen Synthesizer oder einem Computer gespielt werden sollen. Zudem möchte ich nicht die USB-Schnittstelle des Calliope zur Kommunikation sondern einen IO-Port verwenden.

Einfacher gesagt, würde mich interessieren ob das Midi-Package für den PXT Editor eine Konfiguration der seriellen Kommunikation erlaubt, als beispielsweise die Wahl des IO-Ports und der Baudrate.


#4


müsste doch passen. Nur wie Du mit Deinem Midigerät kommunizierst musst Du wissen. Da fällt mir ein dass das Stagepione meiner Tochter auch einen Midieingang hat.
Verwende aber den Makecode zum installieren der Pakete.


#5

Program
Mittlerweile habe ich herausgefunden, dass ich einfach nur die Konfiguration aus dem Serial Block nehmen kann, im Midi Block wird ja definiert, dass Midi auf Serial umgeleitet wird.
Leider kann man nicht die Baudrate 31250 auswählen, das gezeigte Beispiel stammt aus einer Beta-Umgebung (LINK) Es wäre schön, wenn die Auswahlmöglichkeit auch für die PXT-Umgebung des Calliope angepasst würde.


#6

Nimm den Umweg über Javascript
1
Wenn Du dann auf Block umschaltest ist der Block zwar blau, aber es müsste gehen.
2
Wobei der pxt gerade (22.30 Uhr ) den Server nicht mehr findet.


#7

Der Trick mit dem Javascript Umweg scheint zu funktionieren, zumindest meldet mein angeschlossenes Keyboard nun keinen Midi-Fehler mehr an. Allerdings bekomme ich immer noch keinen Ton heraus. Ich habe nun mal die Midi-Signale die per Python generiert wurden (und funktionieren) mit denen die per PXT generiert wurden verglichen, sie sehen sehr unterschiedlich aus. Die Midi-Signale des PXT erscheinen wesentlich länger zu sein.

Also irgendwie scheint die Konfiguration des Serialports immer noch nicht richtig zu sein.


#8

Bitte einfach mal ein Screenshot deines Programms einstellen, dann können mal ein paar Leute drüberschauen.


#9

Der Code enstspricht eigentlich genau dem Bild oben, anbei der Java-Script Code.


#10

Zwischenzeitlich wurde das Problem gelöst. Es gibt einen neuen Block “midi use raw serial” der die Midi-Daten genau so auf die Schnittstelle gibt wie sie von Midi-Eingängen benötigt werden.

(s.a. LINK)


#11

Auf dem Microbit läuft jetzt das Programm, allerdings bekomme ich den gleichen Code auf dem Calliope noch nicht zum Laufen…hat jemand eine Idee weshalb ?
(Error code: pxt_modules/midi/midi.ts(82,20): error TS2339: Property ‘writeBuffer’ does not exist on type ‘typeof serial’.)

let Guitar: midi.MidiController = null
input.onButtonPressed(Button.A, () => {
    basic.showIcon(IconNames.EigthNote)
    Guitar.note(midi.frequencyToKey(262), music.beat(BeatFraction.Whole))
    basic.pause(300)
    Guitar.note(midi.frequencyToKey(330), music.beat(BeatFraction.Whole))
    basic.pause(300)
    Guitar.note(midi.frequencyToKey(440), music.beat(BeatFraction.Whole))
    basic.pause(300)
    basic.showIcon(IconNames.Yes)
})
serial.redirect(
SerialPin.P0,
SerialPin.P1,
31250
)
midi.useRawSerial()
basic.showIcon(IconNames.Yes)
Guitar = midi.channel(1)
Guitar.setInstrument(MidiInstrument.AcousticGuitarNylon)