76 lines
2.6 KiB
C
76 lines
2.6 KiB
C
#pragma once
|
|
|
|
#include "../../plugin.h"
|
|
#include "../../events.h"
|
|
#include "../../string-sizes.h"
|
|
|
|
static CLAP_CONSTEXPR const char CLAP_EXT_TUNING[] = "clap.tuning/2";
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// Use clap_host_event_registry->query(host, CLAP_EXT_TUNING, &space_id) to know the event space.
|
|
//
|
|
// This event defines the tuning to be used on the given port/channel.
|
|
typedef struct clap_event_tuning {
|
|
clap_event_header_t header;
|
|
|
|
int16_t port_index; // -1 global
|
|
int16_t channel; // 0..15, -1 global
|
|
clap_id tunning_id;
|
|
} clap_event_tuning_t;
|
|
|
|
typedef struct clap_tuning_info {
|
|
clap_id tuning_id;
|
|
char name[CLAP_NAME_SIZE];
|
|
bool is_dynamic; // true if the values may vary with time
|
|
} clap_tuning_info_t;
|
|
|
|
typedef struct clap_plugin_tuning {
|
|
// Called when a tuning is added or removed from the pool.
|
|
// [main-thread]
|
|
void(CLAP_ABI *changed)(const clap_plugin_t *plugin);
|
|
} clap_plugin_tuning_t;
|
|
|
|
// This extension provides a dynamic tuning table to the plugin.
|
|
typedef struct clap_host_tuning {
|
|
// Gets the relative tuning in semitones against equal temperament with A4=440Hz.
|
|
// The plugin may query the tuning at a rate that makes sense for *low* frequency modulations.
|
|
//
|
|
// If the tuning_id is not found or equals to CLAP_INVALID_ID,
|
|
// then the function shall gracefully return a sensible value.
|
|
//
|
|
// sample_offset is the sample offset from the beginning of the current process block.
|
|
//
|
|
// should_play(...) should be checked before calling this function.
|
|
//
|
|
// [audio-thread & in-process]
|
|
double(CLAP_ABI *get_relative)(const clap_host_t *host,
|
|
clap_id tuning_id,
|
|
int32_t channel,
|
|
int32_t key,
|
|
uint32_t sample_offset);
|
|
|
|
// Returns true if the note should be played.
|
|
// [audio-thread & in-process]
|
|
bool(CLAP_ABI *should_play)(const clap_host_t *host,
|
|
clap_id tuning_id,
|
|
int32_t channel,
|
|
int32_t key);
|
|
|
|
// Returns the number of tunings in the pool.
|
|
// [main-thread]
|
|
uint32_t(CLAP_ABI *get_tuning_count)(const clap_host_t *host);
|
|
|
|
// Gets info about a tuning
|
|
// Returns true on success and stores the result into info.
|
|
// [main-thread]
|
|
bool(CLAP_ABI *get_info)(const clap_host_t *host,
|
|
uint32_t tuning_index,
|
|
clap_tuning_info_t *info);
|
|
} clap_host_tuning_t;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|