31 Commits

Author SHA1 Message Date
Dale Whinham
919696b41d Makefile: Fix indentation 2023-03-03 21:13:17 +00:00
Dale Whinham
55588f8201 Update to circle-stdlib v15.14/Circle Step 45 2022-12-04 22:24:06 +00:00
Dale Whinham
f8945cdea4 Add support for MIDI via raw UDP socket 2022-03-24 14:50:45 +00:00
Dale Whinham
3464b4ae13 Add embedded FTP server 2021-12-09 19:11:33 +00:00
Dale Whinham
484dacd42f Major refactor of all LCD-related code
Previously, the LCD code needed to be aware of each synthesizer to know
how to draw their respective displays, which wasn't very maintainable.

Introduce a UI class where generic drawing utility functions and
"system" drawing code can be implemented, and move synth-specific
drawing to the synth classes themselves. This simplifies the LCD/OLED
drivers to just being interfaces to the hardware.

Also introduce a "MIDI monitor" class which tracks the state of all MIDI
activity per-synth for level meter drawing purposes. This ensures we
never miss a note; previously we were simply polling each synth engine
for its note velocities per LCD update, which was prone to missing fast
notes and also didn't account for channel volume or expression pedal.

Finally, enable support for 16-character wide displays (closes #58).
2021-06-25 23:57:13 +01:00
Dale Whinham
469ee28761 Fix missing directory from EXTRACLEAN in Kernel.mk 2021-06-25 23:57:13 +01:00
Dale Whinham
f3c5f51c07 Add basic networking and AppleMIDI support 2021-06-25 23:57:13 +01:00
Dale Whinham
22dc67e540 Add support for SH1106 OLED displays 2021-02-03 05:06:40 +00:00
Dale Whinham
5d39db9682 Switch FluidSynth to use a custom memory allocator
Add a Doom-style "zone" memory allocator that can be used instead of
malloc()/realloc()/free() for FluidSynth.

This removes the need to reconfigure the Circle heap and could reduce
fragmentation caused by repeated loading/unloading of SoundFonts.
2021-01-02 22:42:17 +00:00
Dale Whinham
8d6b84fecc Add initial physical control system
This commit adds a simple physical control system with two schemes:

  * simple_buttons: 4-button scheme
  * simple_encoder: 2-button scheme + rotary encoder (with button)
2020-12-19 16:46:57 +00:00
Dale Whinham
51f86d6fda Introduce support for MiSTer I2C control interface 2020-12-19 15:02:47 +00:00
Dale Whinham
4de13be8f5 Initial support for the Blokas Pisound
This commit adds a driver for the Blokas Pisound audio/MIDI HAT based on
the Linux sources.

Currently this requires a patch to Circle to allow the Pi's I2S audio
device to operate in slave mode.

The Pisound only works at 48000Hz, 96000Hz, and 192000Hz. The Pisound is
automatically detected by the startup code; the user only has to enable
I2S audio output.

MIDI output and recording functionality is not supported.

Closes #42.
2020-12-05 16:24:01 +00:00
Dale Whinham
78db034a9a Rename MT32LCD class to SynthLCD 2020-11-22 23:16:44 +00:00
Dale Whinham
2705788391 Add ability to switch between multiple SoundFonts 2020-11-22 23:16:44 +00:00
Dale Whinham
61759d278c Add FluidSynth synthesizer 2020-11-22 23:16:44 +00:00
Dale Whinham
ff8cca440d Add FluidSynth patch and build steps to Makefile 2020-11-22 23:16:44 +00:00
Dale Whinham
f1de26bd5c Add basic power management/throttle detection 2020-11-10 20:18:09 +00:00
Dale Whinham
16b42f10e7 Move audio rendering to another CPU core
Refactor synth code to decouple it from the audio driver and instead use
the drivers' Write() methods to insert rendered audio into a queue from
CPU core 2.
2020-11-08 18:24:32 +00:00
Dale Whinham
aa73c3e5dd Bring up additional CPU cores 2020-11-08 18:24:32 +00:00
Dale Whinham
97962dd09b Add ability to switch between multiple ROM sets
Introduce a ROM manager that scans a 'roms' directory on startup for all
valid ROMs that mt32emu supports.

If none are found in this directory, fall back on searching for
MT32_{CONTROL|PCM}.ROM in the root of the SD card as before.

Add a custom SysEx command that allows the user to switch ROM sets on
the fly.

Add a new config file option for setting the default ROM set.

Closes #18.
2020-10-04 23:28:40 +01:00
Dale Whinham
d1f3deb04c CI: Fix version string for untagged builds 2020-09-23 00:13:35 +01:00
Dale Whinham
061ececf1e Refactor LCD code, add patch change/volume updates 2020-09-19 21:53:21 +01:00
Dale Whinham
f5b51e2b70 Factor out and rewrite MIDI parser
This is a significant rewrite of the MIDI stream parsing code. USB and
serial MIDI streams now both use a common parsing class that maintains
its own state and dispatches valid MIDI events as they arrive.

Some more major fixes for devices that send using Running Status like
the UM-ONE MkII have also been made, and support for all valid MIDI 1.0
messages has been added, even though mt32emu may not use all of them.

Fixes #25 and fixes #26.
2020-09-19 14:56:39 +01:00
Dale Whinham
fad824a231 Fix baked ROM build 2020-08-09 18:55:58 +01:00
Dale Whinham
8800729da6 Reorganize sources into src and include subdirs 2020-08-09 18:55:39 +01:00
Dale Whinham
2886162510 Add LCD/OLED support and documentation
Initial support for HD44780 (4-bit direct and I2C) and SSD1306 OLEDs.

Closes #7.
2020-08-03 20:53:55 +01:00
Dale Whinham
53d1960ced Add configuration file system
Closes #8.
2020-07-14 17:41:06 +01:00
Dale Whinham
dd9fa7c0ab Enable -Werror and -Wextra, fix warning 2020-07-13 01:09:07 +01:00
Dale Whinham
2b6cd466fc Generate version string from git tag 2020-07-10 21:20:26 +01:00
Dale Whinham
5d49e173c3 Refactor synth into own class, add I2S DAC support 2020-07-03 15:28:06 +01:00
Dale Whinham
f83a9b5749 Replace bash build scripts with Makefiles 2020-06-30 00:28:46 +01:00