Main purpose of the system is to do random music generation, but it can already do more :
- USB MIDI interface to use it as an external MIDI synthesizer
- Micro SD card to use it as a standalone MIDI file player
- Tetris program for fun
Random music generation is done on the STM32F405 with an expert system AI C++ lib (see ccgmusic for details). This lib includes some arrangements with multiple instruments (simple piano, but also rock like and dance like among others) which permit diversity in rendering. CODEC chip is Dream's SAM2695 (see https://hackaday.io/project/6378-dream-sam2695-breakout-board), this chip is initially intended for use in cheap Karaoke device and provide a simple MIDI interface input, and an analog audio output. STM32F405 "true" random number generator gives billions of generations possibilities and greater difference between songs.
USB device is recognized as USBMIDI. Input messages sent to USBMIDI are rendered on MIDI synth chip. Output MIDI messages generated by microcontroller are sent to host.