bwp_arp

Arpeggiator.

It features various playing modes, repeats on several ranges (octaves), can handle output notes falling out of a given note range in different ways, and more.

It is not concerned with timing and hence has to be used with an external trigger (e.g., bwp_trig).

Examples

We can privately hand you one or more example plugins if you are interested.

Contact us

API

Module type: Utility

bwp_arp_mode

typedef enum {
	bwp_arp_mode_off,
	bwp_arp_mode_up,
	bwp_arp_mode_down,
	bwp_arp_mode_up_down,
	bwp_arp_mode_up_down_no_repeat,
	bwp_arp_mode_first_to_last,
	bwp_arp_mode_last_to_first,
	bwp_arp_mode_first_to_last_and_back,
	bwp_arp_mode_first_to_last_and_back_no_repeat,
	bwp_arp_mode_random
} bwp_arp_mode;

Note playing modes:

  • bwp_arp_mode_off: arpeggiator off (bypass);
  • bwp_arp_mode_up: play notes by increasing pitch;
  • bwp_arp_mode_down: play notes by decreasing pitch;
  • bwp_arp_mode_up_down: play notes by increasing then decreasing pitch;
  • bwp_arp_mode_up_down_no_repeat: play notes by increasing then decreasing pitch, avoiding to repeat same notes within the same range, if possible;
  • bwp_arp_mode_first_to_last: play notes by increasing pressing time order;
  • bwp_arp_mode_last_to_first: play notes by decreasing pressing time order;
  • bwp_arp_mode_first_to_last_and_back: play notes by increasing then decreasing pressing time order;
  • bwp_arp_mode_first_to_last_and_back_no_repeat: play notes by increasing then decreasing pressing time order, avoiding to repeat same notes within the same range, if possible;
  • bwp_arp_mode_random: play notes in random order.

bwp_arp_outside_mode

typedef enum {
	bwp_arp_outside_mode_dont_play,
	bwp_arp_outside_mode_skip
} bwp_arp_outside_mode;

Modes for handling notes falling outside of the current output note range:

  • bwp_arp_outside_mode_dont_play: just don't play anything;
  • bwp_arp_outside_mode_skip: skip them and play the next one in range.

bwp_arp

typedef struct bwp_arp bwp_arp;

Arpeggiator object.

bwp_arp_init()

static inline void bwp_arp_init(
	bwp_arp * BW_RESTRICT  arp,
	uint64_t * BW_RESTRICT rand_state);

Initializes option values in arp and sets the rand_state pointer to obtain pseudo-random numbers in arp.

rand_state can be BW_NULL, in which case you must not use bwp_arp_mode_random mode.

Call this on arp before other functions in this API.

bwp_arp_reset()

static inline void bwp_arp_reset(
	bwp_arp * BW_RESTRICT arp);

Resets arp to its initial state.

This must be called at least once before calling bwp_arp_process().

bwp_arp_process()

static inline void bwp_arp_process(
	bwp_arp * BW_RESTRICT             arp,
	const bw_note_queue * BW_RESTRICT queue,
	size_t                            trig_count);

Lets arp process events in the input queue, where trig_count is the number of trigger events since last call, if any.

bwp_arp_set_mode()

static inline void bwp_arp_set_mode(
	bwp_arp * BW_RESTRICT arp,
	bwp_arp_mode          value);

Sets the note playing mode to value in arp.

If rand_state was BW_NULL when calling bwp_arp_init(), then bwp_arp_mode_random is invalid.

Default value: bwp_arp_mode_off.

bwp_arp_set_range_min()

static inline void bwp_arp_set_range_min(
	bwp_arp * BW_RESTRICT arp,
	signed char           value);

Sets the minimum repeat range value (octaves) in arp.

By the time bwp_arp_reset() or bwp_arp_process() is called, range_min must be less than or equal to range_max.

Default value: 0.

bwp_arp_set_range_max()

static inline void bwp_arp_set_range_max(
	bwp_arp * BW_RESTRICT arp,
	signed char           value);

Sets the maximum repeat range value (octaves) in arp.

By the time bwp_arp_reset() or bwp_arp_process() is called, range_min must be less than or equal to range_max.

Default value: 0.

bwp_arp_set_note_on_min()

static inline void bwp_arp_set_note_on_min(
	bwp_arp * BW_RESTRICT arp,
	unsigned char         value);

Sets the minimum note of the output note range to value in arp.

By the time bwp_arp_reset() or bwp_arp_process() is called, note_on_min must be less than or equal to note_on_max.

Valid range: [0, 127].

Default value: 0.

bwp_arp_set_note_on_max()

static inline void bwp_arp_set_note_on_max(
	bwp_arp * BW_RESTRICT arp,
	unsigned char         value);

Sets the maximum note of the output note range to value in arp.

By the time bwp_arp_reset() or bwp_arp_process() is called, note_on_min must be less than or equal to note_on_max.

Valid range: [0, 127].

Default value: 0.

bwp_arp_set_outside_mode()

static inline void bwp_arp_set_outside_mode(
	bwp_arp * BW_RESTRICT arp,
	bwp_arp_outside_mode  value);

Sets the modes for handling notes falling outside of the current output note range to value in arp.

Default value: bwp_arp_outside_mode_dont_play.

bwp_arp_set_immediate_off()

static inline void bwp_arp_set_immediate_off(
	bwp_arp * BW_RESTRICT arp,
	char                  value);

Sets whether all notes should be immediately turned off when no notes are played in the input queue (value non-0) or not (0).

Defalut value: 0.

bwp_arp_get_queue()

static inline bw_note_queue * bwp_arp_get_queue(
	bwp_arp * BW_RESTRICT arp);

Returns a pointer to arp's internal output note queue, which has to be cleared by the user of this API.

bwp_arp_is_valid()

static inline char bwp_arp_is_valid(
	bwp_arp * BW_RESTRICT arp);

Tries to determine whether arp is valid and returns non-0 if it seems to be the case and 0 if it is certainly not. False positives are possible, false negatives are not.

arp must at least point to a readable memory block of size greater than or equal to that of bwp_note_track_is_valid.

C++ wrapper

BrickworksPro::Arp
class Arp {
public:
	Arp(
		uint64_t * BW_RESTRICT randState);

	void reset();

	void process(
		const bw_note_queue * BW_RESTRICT queue,
		size_t                            trigCount);

	void setMode(
		bwp_arp_mode value);

	void setRangeMin(
		signed char value);

	void setRangeMax(
		signed char value);

	void setNoteOnMin(
		unsigned char value);

	void setNoteOnMax(
		unsigned char value);

	void setOutsideMode(
		bwp_arp_outside_mode value);

	void setImmediateOff(
		char value);

	bw_note_queue * getQueue();
...
}

Changelog

  • Version 1.0.0:
    • First release.