[CM] Simple example
Matti Koskinen
squarewave at elisanet.fi
Sat Mar 12 22:05:19 PST 2022
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 <squarewave at elisanet.fi> 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
> Cmdist at ccrma.stanford.edu
> https://cm-mail.stanford.edu/mailman/listinfo/cmdist
More information about the Cmdist
mailing list