Midi Ausgabe über IO Pins

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 ?

1 „Gefällt mir“

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

1 „Gefällt mir“

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.

1 „Gefällt mir“


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.

1 „Gefällt mir“

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.

1 „Gefällt mir“

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.

1 „Gefällt mir“

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.

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

1 „Gefällt mir“

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

1 „Gefällt mir“

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

1 „Gefällt mir“

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)

1 „Gefällt mir“

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)
1 „Gefällt mir“