OpenXTalk Extensions
Posted: Thu Jun 13, 2024 2:13 am
Looking for a particular experiment I did several years ago I realized that I have accumulated quite a few Extensions and Widgets and haven't properly announced many of them. They vary widely in their release quality, but I thought I should make a downloads list for things that I didn't think were yet worthy of including with the 'heavy' IDE ...or that I just haven't gotten around to integrating.
I'm planning to update this thread as time allows.
Sound & Music related Extensions:
https://github.com/PaulMcClernan/OpenXTalk-Piano-Widget
The Piano widget is one I've included in OXT 'Heavy', it is the most complete of Widget I've written. It has lots of properties for setting, and can be used for animating musical note playback (the main use case I had in mind). The Widget doesn't produce any sound on its own, instead it sends noteOn/Off messages to the IDE along with note-Names and MIDI Note Numbers as message parameters. It's up to script authors to route that information to some musical note playback engine.
https://github.com/PaulMcClernan/OpenXTalk-FluidSynth
This is a Library Extension that uses FFI (Foreign Function Interface) to wrap libFluidSynth, the widely used FOSS cross-platform sound sample MIDI playback engine (SoundFonts). This has been tested on macOS, Windows, and Linux (theoretically it could also work on Android, but I've not tested that). It's fairly complete as far as normal playback. I planned to eventually add a few more things like support for its built-in sequencer, and in-memory SoundFont creation. The main goal of independently enabling MIDI playback on all OXT desktop OSes wa accomplished. I did include this in OXT 'Heavy' along with a very small (low quality) basic General MIDI sound set. Additionally I've included a Script library called OXT General Music Library that, among other things enables xTalk-style-'ABC'text-music notation (aka a 'playSentence') and can use the FluidSynth library for playback if it's installed (the default MIDI playback for Linux/Windows, on macOS it uses AVMIDIPlayer as default instead).
https://github.com/PaulMcClernan/OpenXT ... MidiPlayer
This is a Library Extension that uses FFI (Foreign Function Interface) to wrap Apple's AppleAVMidiPlayer, an API that has come with macOS since 10.7 (comes with iOS too but not tested on iOS). It's a very simple API that enables the basic functionality that FluidSynth's command line interface covers, namely playing back MIDI data with SoundFonts (or DLS banks). You pass it MIDI file path and the path to a SoundBank file and it uses those to play the music. This API is for basic playback only, not for 'realtime' performances (see others below for that sort of thing).
https://github.com/PaulMcClernan/OpenXT ... e-CoreMIDI
This is a Library Extension that uses FFI (Foreign Function Interface) to send MIDI Messages to Apple's CoreMIDI APIs(s). Obviously it's only useful for Apple devices (and macOS specifically, not tested on iOS). It's also incomplete, which is why I have not included it with OXT 'Heavy'. MIDI-in crashes the engine after a short time but MIDI-out is very stable. I had just begun to wrap Core MIDI's Sequencing recording and manipulating 'tracks' functionality but then I got very busy with other things (specifically OXT). MIDI is NOT 'sound', so one must route the MIDI Messages, usually with 'Audio MIDI Setup.app' in the App/'Utilities' folder, to an App, a virtual Instrument plug-In host, external MIDI sound module, or a remote computer / mobile device that can play the notes with actual sound.
https://github.com/PaulMcClernan/OpenXT ... dioSampler
This is a Library Extension that uses FFI (Foreign Function Interface) to wrap Apple's AVAudioSampler, which is an AudioUnit Instrument that's come with macOS since 10.7. Again this is for macOS only (might work on iOS too). AVAudioSampler, like libFluidSynth, can load 'SoundFont' (or DLS) sound sets. Unlike libFluidSynth wrapper this can load individual sound files (AIF, Wave) to use as virtual instrument, however it only allows for using a single MIDI channel (per instance).
https://github.com/PaulMcClernan/OpenXT ... entManager
This wrapper extension can List ALL AudioUnits that are installed in the user's macOS system along with information about them (type, manufacturer, supported CPU architectures, etc.). Most importantly it can provide the FourCC codes that are needed to load a plugin into a host (in our case in OXT)
https://github.com/PaulMcClernan/OpenXT ... Instrument
This Extension wrapper can load arbitrary 'MIDI Instrument' Audio Unit plug-ins using those codes retrieved by AVAudioUnitComponentManager (above). This allows for playback with all sorts of cool 'Analog' emulation synths, of which there are some really good (and free) ones like that available. That classic 1980s Yamaha DX-7 synth sound is totally doable (and loads of fun),
https://github.com/PaulMcClernan/OpenXT ... ioRecorder
OpenXTalk-Apple-AVAudioRecorder is an Extension wrapper that enables scripted basic recording of sound from user's microphone using Apple's AVAudio system API, it should automatically ask for user's permission to use the microphone hardware. Obviously this only works on the Apple platform. This is fairly complete wrapper for the basic recording parts of the API, but it could be expanded much more to include sound processing plugins such as echo effects.
I'm planning to update this thread as time allows.
Sound & Music related Extensions:
https://github.com/PaulMcClernan/OpenXTalk-Piano-Widget
The Piano widget is one I've included in OXT 'Heavy', it is the most complete of Widget I've written. It has lots of properties for setting, and can be used for animating musical note playback (the main use case I had in mind). The Widget doesn't produce any sound on its own, instead it sends noteOn/Off messages to the IDE along with note-Names and MIDI Note Numbers as message parameters. It's up to script authors to route that information to some musical note playback engine.
https://github.com/PaulMcClernan/OpenXTalk-FluidSynth
This is a Library Extension that uses FFI (Foreign Function Interface) to wrap libFluidSynth, the widely used FOSS cross-platform sound sample MIDI playback engine (SoundFonts). This has been tested on macOS, Windows, and Linux (theoretically it could also work on Android, but I've not tested that). It's fairly complete as far as normal playback. I planned to eventually add a few more things like support for its built-in sequencer, and in-memory SoundFont creation. The main goal of independently enabling MIDI playback on all OXT desktop OSes wa accomplished. I did include this in OXT 'Heavy' along with a very small (low quality) basic General MIDI sound set. Additionally I've included a Script library called OXT General Music Library that, among other things enables xTalk-style-'ABC'text-music notation (aka a 'playSentence') and can use the FluidSynth library for playback if it's installed (the default MIDI playback for Linux/Windows, on macOS it uses AVMIDIPlayer as default instead).
https://github.com/PaulMcClernan/OpenXT ... MidiPlayer
This is a Library Extension that uses FFI (Foreign Function Interface) to wrap Apple's AppleAVMidiPlayer, an API that has come with macOS since 10.7 (comes with iOS too but not tested on iOS). It's a very simple API that enables the basic functionality that FluidSynth's command line interface covers, namely playing back MIDI data with SoundFonts (or DLS banks). You pass it MIDI file path and the path to a SoundBank file and it uses those to play the music. This API is for basic playback only, not for 'realtime' performances (see others below for that sort of thing).
https://github.com/PaulMcClernan/OpenXT ... e-CoreMIDI
This is a Library Extension that uses FFI (Foreign Function Interface) to send MIDI Messages to Apple's CoreMIDI APIs(s). Obviously it's only useful for Apple devices (and macOS specifically, not tested on iOS). It's also incomplete, which is why I have not included it with OXT 'Heavy'. MIDI-in crashes the engine after a short time but MIDI-out is very stable. I had just begun to wrap Core MIDI's Sequencing recording and manipulating 'tracks' functionality but then I got very busy with other things (specifically OXT). MIDI is NOT 'sound', so one must route the MIDI Messages, usually with 'Audio MIDI Setup.app' in the App/'Utilities' folder, to an App, a virtual Instrument plug-In host, external MIDI sound module, or a remote computer / mobile device that can play the notes with actual sound.
https://github.com/PaulMcClernan/OpenXT ... dioSampler
This is a Library Extension that uses FFI (Foreign Function Interface) to wrap Apple's AVAudioSampler, which is an AudioUnit Instrument that's come with macOS since 10.7. Again this is for macOS only (might work on iOS too). AVAudioSampler, like libFluidSynth, can load 'SoundFont' (or DLS) sound sets. Unlike libFluidSynth wrapper this can load individual sound files (AIF, Wave) to use as virtual instrument, however it only allows for using a single MIDI channel (per instance).
https://github.com/PaulMcClernan/OpenXT ... entManager
This wrapper extension can List ALL AudioUnits that are installed in the user's macOS system along with information about them (type, manufacturer, supported CPU architectures, etc.). Most importantly it can provide the FourCC codes that are needed to load a plugin into a host (in our case in OXT)
https://github.com/PaulMcClernan/OpenXT ... Instrument
This Extension wrapper can load arbitrary 'MIDI Instrument' Audio Unit plug-ins using those codes retrieved by AVAudioUnitComponentManager (above). This allows for playback with all sorts of cool 'Analog' emulation synths, of which there are some really good (and free) ones like that available. That classic 1980s Yamaha DX-7 synth sound is totally doable (and loads of fun),
https://github.com/PaulMcClernan/OpenXT ... ioRecorder
OpenXTalk-Apple-AVAudioRecorder is an Extension wrapper that enables scripted basic recording of sound from user's microphone using Apple's AVAudio system API, it should automatically ask for user's permission to use the microphone hardware. Obviously this only works on the Apple platform. This is fairly complete wrapper for the basic recording parts of the API, but it could be expanded much more to include sound processing plugins such as echo effects.