[Microbit-Python] Current state of play - a summary and straw man

Nicholas H.Tollervey ntoll at ntoll.org
Tue Oct 13 13:11:23 CEST 2015


Hi David,

On 12/10/15 23:49, David Whale wrote:
> Regarding MIDI
> 
> All the MIDI needs to connect to an external MIDI synth (e.g. a keyboard
> with a MIDI IN port) is a UART Tx on one of the pins running at
> 31250bps,n,8,1. Damien, is there a DAL api or something in the
> MicroPython that exposes the on-pins UART? This would be a MIDI-OUT from
> the micro:bit
> 

Damien states in his reply the MicroPython supports UART. Not sure what
information you need to start playing around.

> MIDI-IN could be interesting, it would mean you could press a button on
> an external keyboard synth, and a note-on message would come into the
> micro:bit - what you would do with it then I'm not sure, so perhaps this
> is less valuable?
> 

This is VERY valuable since MIDI is used by VJ / DJ type people to
signal all sorts of events in multimedia displays. Someone at the BBC
got very excited when I mentioned we were only looking at MIDI.

> 
> The messages are very simple and well defined (mostly 2 byte messages).
> There is a small single chip circuit (opto isolator) that is required to
> make the electrical connection.  You can then play any note and change
> any controller (e.g. shake the micro:bit to do a pitch bend could be
> real fun!)
> 
> MIDI over USB (e.g. so the micro:bit is presented as a MIDI device to
> the PC/Mac) is much harder, because it requires the USB descriptor in
> the interface chip to be reprogrammed and we don't have access to that,
> so I think we should forget that idea. 
> 
> I spoke to Martin Wooley about perhaps MIDI over bluetooth (there is a
> profile for it), but he didn't seem keen in making any changes to the
> existing profiles, preferring the innovation to happen at the PC end.
> 
> So, plug your micro:bit into a small chip and then into a 5-pin DIN plug
> in the back of your synthesiser could be really great, it might also
> open up SonicPi access by using a MIDI/USB adaptor into the PC/Mac/Pi.
> 
> Mostly the code would be a set of constants for the message types and
> note numbers, perhaps with a few wrapper functions in python (note_on,
> note_off, play, set_patch, control_change, sysex).
> 
> I sense the only way to make this happen would be for me or someone to
> write a quick spec for the API, then anyone could actually write the code.
> 
> Given the API is so thin, if there is a good API for UART, this could
> easily be a python frozen module as it's then easy for anyone to write
> and test and contribute to the mix.
> 

Exactly, although making it "native" would be better.

> 
> It does beg the question whether we should consider a 'redirect' option
> from the music module Matthew is writing, so you can either play beeps
> through the speaker, OR send MIDI note messages, using the same lovely
> API. Note MIDI has controllers (like pitch bend) that would be excellent
> to expose for things like 'accelerometer tilt varies pitch bend or
> modulation wheel'.
> 

Agreed.

> If timing is tight, it would be possible I think to write this as an
> example py program instead, and bring it in as a frozen module later
> perhaps. I have a huge amount on at the moment I'm not sure I could
> commit to making all this work in time for a V1 release window.
> 

Hmm... ok. What can we do to help make this happen?

N.

> David
> 
> 
> ___________________________________________________________
> David Whale, B.Sc (Hons), MIET
> *Software Engineer and IET Schools Liaison Officer, Essex*
> 
> email:  dwhale at theiet.org <mailto:dwhale at theiet.org>
> twitter: @whaleygeek
> blog:  blog.whaleygeek.co.uk <http://blog.whaleygeek.co.uk>
> 
> Co-author of the new book "Adventures in Minecraft"
> <http://amzn.to/ZGfxZG> - lets get kids coding!
> 
> 
> On 12 October 2015 at 22:59, Damien George <damien.p.george at gmail.com
> <mailto:damien.p.george at gmail.com>> wrote:
> 
>     Yes, I think we need some direction and goals to get uPy on the
>     microbit to a "v1.0" state.
> 
>     We've had a lot of good ideas, discussion and contributions.  I think
>     we are close to having a very usable API.
> 
>     > * Music API - first draft of Matthew's native API is merged into master.
>     > Requires further development to allow it to work in the background. I'll
>     > be adding musical examples over the course of this week and testing it
>     > from a musician's perspective.
> 
>     I think the music module is wonderful.  It's so easy at the REPL to do:
> 
>     music.tune(pin0, ['c', 'd', 'e', 'f', 'g', 'a', 'b', 'c'])
> 
>     or even:
> 
>     music.tune(pin0, [chr(ord('c') + i) for i in range(8)])
> 
>     or better still:
> 
>     music.tune(pin0, list('cdefgabc'))
> 
>     Yes it needs work to have non-blocking mode.  And builtin tunes would
>     be awesome.
> 
>     > * Larry's game related work - I think this is hugely important. Kids
>     > love games and showing off their work to each other. If we can make it
>     > super easy to facilitate such hacking then we're doing something
>     > marvellous.
> 
>     Yes, it's great to have Larry's experience with game writing to make
>     a good API.
> 
>     > * Marks' image related work - again, this is hugely important because
>     > being able to see the result of your code is a great inspiration to
>     > kids. The easier and more capable we make this the better it'll be for
>     > all concerned.
> 
>     Yep.  Even with the additional features added here, we still have a
>     really easy entry point to simply scroll a message or animate a
>     sequence of images.
> 
>     > * Damien's suggestion of inline assembler which sounds like it'd be a
>     > wonderful thing for the hacker/maker audience the BBC are also hoping to
>     > tempt as a secondary market.
> 
>     I can add this if we think it'll be attractive.  There are 2 options:
> 
>     1. A simple "machine_code" function that takes raw bytes and turns
>     them into a function.  Very hard to use, eg: fun =
>     machine_code(b'\x12\x34\x56') and you have to find out the correct
>     byte values by assembling offline with an arm assembler, then looking
>     at the output.  Really hard to use (but then that might give it a cool
>     factor!).
> 
>     2. The proper inline assembler that already exists, where you write
>     code like:
> 
>     @micropython.asm_thumb
>     def f(r0, r1):
>         label(loop)
>         add(r0, r1)
>         bne(loop)
> 
>     This is easier to hack, but since it's verbose you'll run out of
>     memory (in the compile stage) if you try to write long functions.  It
>     also takes up flash space (not too much though) and maybe in the
>     future we need this flash space for other things?
> 
>     Regarding attracting the hacker/maker audience: I think it's important
>     to point out that starting with the microbit is an entry point to
>     learning MicroPython, and then people who want more can buy a more
>     capable board that runs uPy (eg pyboard).
> 
>     Oh, and uPy on the microbit also supports I2C and UART interfaces, for
>     those that want to interface with other electronic components (temp
>     sensors, etc).
> 
>     > * David's MIDI related suggestions. I'm not clear what would be involved
>     > for this - I presume we could use USB/serial to send MIDI information to
>     > a MIDI device running elsewhere. David, it'd be helpful to learn how you
>     > see this working.
> 
>     I don't have any experience with MIDI, so also don't see how this
>     would work (and can't really test it...).
> 
>     > * Damien and I discussed turning the display into some sort of generic
>     > graphical equaliser for arbitrary data.
> 
>     It would be neat, but I think this would be a lower priority (unless
>     the BBC really likes the idea...).
>     _______________________________________________
>     Microbit mailing list
>     Microbit at python.org <mailto:Microbit at python.org>
>     https://mail.python.org/mailman/listinfo/microbit
> 
> 
> 
> 
> _______________________________________________
> Microbit mailing list
> Microbit at python.org
> https://mail.python.org/mailman/listinfo/microbit
> 



-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <https://mail.python.org/mailman/private/microbit/attachments/20151013/35fe80be/attachment.sig>


More information about the Microbit mailing list