Commit Graph

37 Commits

Author SHA1 Message Date
Dale Whinham
52b85b7027 Replace CLogger::Write() calls with macros 2023-03-05 16:30:36 +00:00
Dale Whinham
f1eaf2f43c Update copyright notices 2023-02-02 13:32:48 +00:00
Dale Whinham
55588f8201 Update to circle-stdlib v15.14/Circle Step 45 2022-12-04 22:24:06 +00:00
Dale Whinham
37c256732a Remove manual DAC init, use Circle auto-detection
Closes #273.
2022-06-13 14:47:17 +01:00
Dale Whinham
02e6af1afd Fix broken network disconnection notifications 2022-04-13 15:24:35 +01:00
Dale Whinham
f8945cdea4 Add support for MIDI via raw UDP socket 2022-03-24 14:50:45 +00:00
Dale Whinham
63a4a8846c Ignore note-ons received during SoundFont switch
Fixes #247.
2022-03-10 14:58:30 +00:00
Dale Whinham
07004eac54 Update copyright notices 2022-01-06 17:35:40 +00:00
Dale Whinham
3464b4ae13 Add embedded FTP server 2021-12-09 19:11:33 +00:00
Dale Whinham
4d5bda5dfd Fix disconnection message for Ethernet 2021-10-28 17:11:14 +01:00
Dale Whinham
1b3b59a7e0 Add support for MIDI input via USB serial device 2021-06-26 00:00:46 +01: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
3d3f2cc6c3 Add basic panic handler 2021-06-25 23:57:13 +01:00
Dale Whinham
01b1e76e41 Add temperature monitoring debug code 2021-06-25 23:57:13 +01:00
Dale Whinham
c7d65a0764 Don't fail when USB controller is not present 2021-06-25 23:57:13 +01:00
Dale Whinham
04e7bc8793 Add convenience logger/config member variables 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
28390abbea Add support for loading SoundFonts from USB disks 2021-03-19 23:53:26 +00:00
Dale Whinham
2280a5a581 Enable USB plug and play support
Closes #36.
2021-02-03 05:06:40 +00:00
Dale Whinham
59cf085d1c Update copyright notices 2021-02-03 05:06:40 +00:00
Dale Whinham
a6c7d4bd10 Fix MT-32 ROM switching by button when set missing 2021-01-16 20:40:36 +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
e436dde5e7 Defer SoundFont switching when not via SysEx 2020-12-19 15:04:35 +00:00
Dale Whinham
c0dcc9d976 Allow LCDLog() to take variable number of args 2020-12-19 15:04:35 +00:00
Dale Whinham
51f86d6fda Introduce support for MiSTer I2C control interface 2020-12-19 15:02:47 +00:00
Dale Whinham
798d26cc4a Refactor custom SysEx parsing 2020-12-08 18:57:10 +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
d11fd8bbe7 Refactor USB MIDI Rx code, add ring buffer class 2020-12-05 16:22:59 +00:00
Dale Whinham
7ee2002d6c Fix USB MIDI concurrency issues
A hang could occur when using a USB MIDI interface in SoundFont mode, or
when resuming from power saving mode.

The USB MIDI interrupt handler now enqueues MIDI data into a circular
buffer that is then read from the main task context to ensure thread
safety.
2020-11-25 23:45:14 +00:00
Dale Whinham
78db034a9a Rename MT32LCD class to SynthLCD 2020-11-22 23:16:44 +00:00
Dale Whinham
61759d278c Add FluidSynth synthesizer 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
588adbf658 Allow LCDs to show temporary system messages
Improve status/error logging on the LCD.

Also fix clearing the screen on reboot by moving the call to Clear() to
the UI core and waiting for the UI core to be done before rebooting.
2020-11-08 18:24:32 +00:00
Dale Whinham
6a61981968 Cleanup includes in mt32synth 2020-11-08 18:24:32 +00:00
Dale Whinham
f5fdd09e30 Remove unneeded FileSystem param from mt32pi.cpp 2020-11-08 18:24:32 +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