Hello everyone. It's been a long time since Sardine received an official update. I'm taking advantage of a refactoring we've undertaken with @thegamecracks to set the record straight. This version is Sardine v0.4.0 that sums up all the changes that happened on the repo since last december.
Project structure and refactoring
Sardine is now a complex project. You need the library for sure but you also need a code editor to play efficiently and that release is bringing a lot on that side. Part of the internal refactoring is the consequence of how the project has naturally evolved in the few past months.
- Sardine is the main repository. It contains the Sardine Library but also the Sardine Documentation.
- The documentation is automatically built on every commit, allowing small edits and encouraging contributions.
- Sardine Web is now a separate repository. It contains the default text editor.
- once installed, the editor will be available through the sardine web command, just like before.
- Sardine VSCode is another option for those who prefer an editor that is easy to setup and configure.
The project structure has evolved a lot. Sardine is now split between sardine
, the interpreter, and sardine_core
, the Python library imported by that interpreter for each session. As stated above, the client
and server
folders that previously contained the web editor are now gone and live happily in their own repository. There are new dependencies to account for the introduction of a fork of Vortex.
New features
- Clock based Low Frequency Oscillators (LFOs): useful modulators for live performance.
- MIDIController & MIDIInstrument: what about configuring your own MIDI tools.
- Until: play a pattern
n
times. - Condition System: conditional patterning, very confusing.
- Ziffers integration: the wonderful Ziffers library for live coding melodies.
- Vortex integration: The version of TidalCycles that nobody wants to love. Currently a hard fork but I am planning to make Sardine take from Vortex and republish it on Pypi.
- Global variables: the best thing since sliced bread. Add variables in your patterns.
- Custom Iteration Span and Iteration Limit:
l=4
to limit your iterator to4
,i=3
to make it iterate 3 by 3. - Extension system: meet Claude and other Sardine plugins :)
- SPL troubleshooting: small improvements with polyphonic events, many new functions in the Function Library.
What's Changed
- Paper proof read by @jarmitage in #137
- Add credits by @jarmitage in #138
- fix affiliations formatting by @jarmitage in #139
- [docs] syntax update after v0.2 rewrite by @mugulmd in #136
- Fixing documentation for 0.2 by @Bubobubobubobubo in #140
- Update solstice.md by @Rhoumi in #142
- Fix arguments not being transferred to deferred states by @thegamecracks in #144
- [Breaking] Introducing conditional patterns and other parser fixes by @Bubobubobubobubo in #145
- Cleanup the mess in first section of installation docs by @thegamecracks in #151
- Merging experimental local branch into 'main' by @Bubobubobubobubo in #153
- fix midi device configuration for Windows by @giohappy in #152
- Adds support for remote code execution by @JMPothelune in #154
- Adds missing ignored lib by @JMPothelune in #155
- 148 sardine gui by @JMPothelune in #157
- Rewires the front and the back :) by @JMPothelune in #158
- Allows static build by @JMPothelune in #159
- Button management by @JMPothelune in #160
- 148-sardine-gui by @JMPothelune in #163
- Fixing Windows issues by @amiika in #165
- Replace 'r' with new term 'rand' in documentation by @bench in #170
- Merging the experimental branch in main by @Bubobubobubobubo in #174
- Remove old states in @swim if runner has stopped by @Bubobubobubobubo in #175
- documentation - edits to Sound Patterns by @HighHarmonics2 in #177
- Fishery web bugfixes by @hatchjaw in #179
- Hh documentation edits by @HighHarmonics2 in #180
- Automatically build fishery client during wheel creation by @thegamecracks in #181
- Reformat again by @thegamecracks in #183
- Removing commas from the Sardine Pattern Language by @Bubobubobubobubo in #184
- add Effects Presets section to presets.md by @HighHarmonics2 in #193
- getting started changes by @HighHarmonics2 in #196
- Update getting started - patterns.md by @HighHarmonics2 in #197
- add content for period-divisor-rate by @HighHarmonics2 in #200
- Add python.md to diving_deeper by @HighHarmonics2 in #201
- edits in diving deeper by @HighHarmonics2 in #203
- add vowel and filters to audio engine by @HighHarmonics2 in #204
- Docs improvements by @Bubobubobubobubo in #205
- Rewrite OSCLoop to run in the event loop's thread by @thegamecracks in #206
- update filtering.md by @HighHarmonics2 in #210
- more filtering.md edits by @HighHarmonics2 in #211
- edits to sleeping.md by @HighHarmonics2 in #215
- Prototype of Vortex -> Sardine by @Bubobubobubobubo in #216
- Vortex scheduling by @Bubobubobubobubo in #217
- update mininotation.md by @HighHarmonics2 in #219
- Plugin system for custom handlers by @mugulmd in #220
- update extensions management by @JMPothelune in #222
- Showcase updates by @HighHarmonics2 in #223
- Merging dev branch with new features by @Bubobubobubobubo in #225
- Nobody saw anything, Sardine was never broken by @Bubobubobubobubo in #226
- last correction by @Bubobubobubobubo in #227
- Add rot function by @ssidorenko in #228
- [docs] add showcase: Claude by @mugulmd in #229
- MidiInHandler: Fix queue order bug and optimize message handling by @ssidorenko in #230
- Fix MIDI note duration handling by @ssidorenko in #232
- Attempt to fix unsync bug by @Bubobubobubobubo in #233
- Allow negative numbers as rot argument by @ssidorenko in #234
- Add and, or, xor lists operators to SPL by @ssidorenko in #235
- Add min79 chord by @ssidorenko in #237
- Add ramp w/interpolation operator by @ssidorenko in #238
- Fix an issue where MIDI ports in windows have a number appended to them by @ssidorenko in #239
- Add notdot function to invert rests by @ssidorenko in #240
- Fix bug with windows MIDI port names by @ssidorenko in #241
- Add support to chords for arithmetic operations by @ssidorenko in #242
- Use separate queues for last_item in MidiInHandler by @ssidorenko in #243
- Cc clamp + logic edge cases by @ssidorenko in #244
- Fix occasional double iterations when reloading runners by @thegamecracks in #247
- Sardine web plugin by @Bubobubobubobubo in #246
New Contributors
- @Rhoumi made their first contribution in #142
- @giohappy made their first contribution in #152
- @JMPothelune made their first contribution in #154
- @amiika made their first contribution in #165
- @bench made their first contribution in #170
- @hatchjaw made their first contribution in #179
- @ssidorenko made their first contribution in #228
Full Changelog: v0.2.1...v0.4.0