Consume libakgl 0.3.0: every workaround deleted, two capabilities gained
0.3.0 closed all ten API gaps this port had filed. The four workarounds go with them: the CMake block that declared libakgl's vendored dependencies by hand, the akgl/actor.h include in three files, and the six vtable pointers assigned by hand in two more, now akgl_render_bind2d(). Two gaps were capabilities rather than inconveniences, and both are now real: The line editor takes the composed UTF-8 text the ring carries in preference to the keycode, so shifted characters, keyboard layouts, compose keys and dead keys all work. A double quote can be typed, which means a BASIC string literal can be typed -- the sharp end of the old limitation. Letters are no longer folded to upper case. SOUND's dir/min/step reach akgl_audio_sweep instead of being refused. dir 3 sweeps once rather than oscillating and TODO.md section 5 says so. A backend with no sweep still refuses the swept note and plays the held one. The adaptors now carry an AKGL_VERSION_AT_LEAST(0, 3, 0) floor, verified by temporarily demanding 0.4.0 and watching it fire. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-Authored-By: Andrew Kesterson <andrew@aklabs.net>
This commit is contained in:
@@ -67,6 +67,16 @@ typedef struct akbasic_AudioBackend
|
||||
|
||||
/** Start a note on a voice, for a bounded duration. */
|
||||
akerr_ErrorContext AKERR_NOIGNORE *(*tone)(struct akbasic_AudioBackend *self, int voice, double hz, int ms);
|
||||
/**
|
||||
* Start a note whose pitch moves, which is what SOUND's `dir`, `min` and
|
||||
* `step` arguments ask for -- a siren, a laser, a falling bomb.
|
||||
*
|
||||
* May be NULL, and a host that leaves it so gets `SOUND` refused with
|
||||
* AKBASIC_ERR_DEVICE for a swept note and served normally for a held one.
|
||||
* That is deliberate: this arrived in libakgl 0.3.0, and a backend written
|
||||
* against an older one is still a valid backend for everything else.
|
||||
*/
|
||||
akerr_ErrorContext AKERR_NOIGNORE *(*sweep)(struct akbasic_AudioBackend *self, int voice, double from_hz, double to_hz, double step_hz, int ms);
|
||||
/** Silence a voice immediately. */
|
||||
akerr_ErrorContext AKERR_NOIGNORE *(*stop)(struct akbasic_AudioBackend *self, int voice);
|
||||
/** Select the waveform a voice synthesises. */
|
||||
|
||||
Reference in New Issue
Block a user