41 Commits

Author SHA1 Message Date
Dale Whinham
f1eaf2f43c Update copyright notices 2023-02-02 13:32:48 +00:00
Dale Whinham
a19f6c6015 Add ability to override gain per-SoundFont
Closes #248.
2022-03-10 14:58:28 +00:00
Dale Whinham
164174aab4 Replace LCD simulation with new libmt32emu code 2022-03-10 14:57:16 +00:00
Dale Whinham
07004eac54 Update copyright notices 2022-01-06 17:35:40 +00:00
Dale Whinham
e5b4403c7a Add support for Yamaha SysEx text/bitmap messages 2021-12-12 23:17:13 +00:00
Dale Whinham
4e0d7d06e5 Add ability to reverse MT-32 stereo channels 2021-08-11 18:18:31 +01:00
Dale Whinham
f958bb8d80 Rework GM/GS/XG SysEx parsing, fix SC-55 text 2021-08-01 21:59:54 +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
e9f71d7d76 Add ability to configure FluidSynth effects
This commit introduces the notion of "effects profiles", with
reverb/chorus settings that can be set on a per-SoundFont basis.

The configuration file has been updated with an example of applying a
profile to the GeneralUser GS SoundFont.
2021-06-25 23:57:13 +01:00
Dale Whinham
afeacbf1cb Set FluidSynth device ID to Sound Canvas default
This ensures FluidSynth interprets Roland "Use For Rhythm Part" messages
that were previously handled in mt32-pi manually before 7405ae5.
2021-06-25 23:57:13 +01:00
Dale Whinham
3024c23953 Add ability to set mt32emu gain values 2021-03-19 23:53:26 +00:00
Dale Whinham
aa30752d74 Add support for loading MT-32 ROMs from USB disks 2021-03-19 23:53:26 +00:00
Dale Whinham
a93300f3c1 Show SoundFont name when switching with button 2021-02-06 15:34:41 +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
d4e4ffcbb8 Implement GS "Use For Rhythm Part" SysEx 2021-01-16 20:40:36 +00:00
Dale Whinham
27042a1261 Reset FluidSynth on GM/GS reset SysEx
Closes #54.
2021-01-16 20:40:01 +00:00
Dale Whinham
2f19528de9 Refactor Roland SysEx headers 2021-01-16 20:31:31 +00:00
Dale Whinham
bc13fadcd7 Switch SoundFonts by destroying/recreating synth
Work around the lack of a lazy unload timer by avoiding use of
fluid_synth_sfunload() and instead simply recreating the synth instance
when switching to a new SoundFont.
2021-01-02 22:41:23 +00:00
Dale Whinham
ea8f2b7164 Add support for SC-55 "graphics" SysEx messages 2020-12-19 16:46:57 +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
798d26cc4a Refactor custom SysEx parsing 2020-12-08 18:57:10 +00:00
Dale Whinham
b41fff88a7 Add getters to synths for ROM set/SoundFont index 2020-12-08 18:57:10 +00:00
Dale Whinham
ee9a3e802c Rename header guard in synthbase 2020-12-08 18:57:10 +00:00
Dale Whinham
67156c0d66 Make ROM/SoundFont status reporting generic 2020-12-05 17:24:52 +00:00
Dale Whinham
96a14cc5f1 Extract TMT32ROMSet into separate header 2020-12-05 17:15:01 +00:00
Dale Whinham
f6d76ec2f2 Rework bar drawing, implement for SoundFont synth 2020-11-22 23:16:44 +00:00
Dale Whinham
30575e93df Protect SoundFont synth with a spinlock 2020-11-22 23:16:44 +00:00
Dale Whinham
ae84562702 Show SoundFont name on startup 2020-11-22 23:16:44 +00:00
Dale Whinham
553db85046 Move spinlock and samplerate to SynthBase 2020-11-22 23:16:44 +00:00
Dale Whinham
896db9e39a Make MT32Synth vars private instead of protected 2020-11-22 23:16:44 +00:00
Dale Whinham
59d978a666 Move SynthLCD pointer/method up into Synth class 2020-11-22 23:16:44 +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
a5e1cf4068 Add ability to configure FluidSynth polyphony 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
5d9b85bfcf Add missing virtual specifier to mt32synth funcs 2020-11-08 18:24:32 +00:00
Dale Whinham
1479f29f56 Protect mt32synth with a spinlock
As multiple cores will now be accessing the synth object, we need to
protect critical sections to avoid crashes.
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
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