Found a solution, surely not the most elegant one, but seems to work:
;
;; Receiving MIDI Input
;
; Here is the definition of a MIDI receiver that routes midi on and
; off messages to the output port and as alist to *m* global variable
(define *m* (list (now)))
(define (myplayer data)
(let* ((opcode (first data))
(channel (second data))
(keyn (third data))
(velocity (fourth data)))
(set! *m* (append *m* (list (list data (now)))))
(if (= opcode mm:on)
(mp:on :time (now) :key keyn :vel velocity :chan channel)
(if (= opcode mm:off)
(mp:off :key keyn :chan channel)))))
; Set receiver, then play your midi keyboard
(mp:receive myplayer)
; When you are done clear it...
(mp:receive #f)
;save the *m* to a file
(define (play-it-again-sam file)
(sprout (let* ((notes (rest *m*))
(wasnow (first *m*)))
(process for d in notes do
(print d)
(let* ((data (first d))
(op (first data))
(ch (second data))
(keyn (third data))
(veloc(fourth data)))
(if (= op mm:on)
(mp:on :time (- wasnow (last d)) :chan ch
:key keyn :vel veloc))
(if (= op mm:off)
(mp:off :time (- wasnow (last d))
:chan ch :key keyn))))) file))
;test it
(play-it-again-sam "ts3.mid")
> On 11. Mar 2022, at 18.41, Matti Koskinen <[email protected]> wrote:
>
> Hi all,
>
> I got Grace compiled and it works, but since I’ve used it many years ago,
> can’t remember anything at all.
> If someone could post a simple example how to read midi from keyboard and
> save it to a midi file, I’d be more than happy.
>
> Thanks
>
> -m
>
>
> _______________________________________________
> Cmdist mailing list
> [email protected]
> https://cm-mail.stanford.edu/mailman/listinfo/cmdist
_______________________________________________
Cmdist mailing list
[email protected]
https://cm-mail.stanford.edu/mailman/listinfo/cmdist