diff options
Diffstat (limited to 'plugins/eg-metro.lv2')
-rw-r--r-- | plugins/eg-metro.lv2/metro.c | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/plugins/eg-metro.lv2/metro.c b/plugins/eg-metro.lv2/metro.c index f196474..cd7dfdb 100644 --- a/plugins/eg-metro.lv2/metro.c +++ b/plugins/eg-metro.lv2/metro.c @@ -15,10 +15,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/** - @file metro.c Metronome Plugin -*/ - #include <math.h> #include <stdio.h> #include <stdlib.h> @@ -135,7 +131,7 @@ instantiate(const LV2_Descriptor* descriptor, return NULL; } - /* Scan host features for URID map */ + /** Scan host features for URID map */ LV2_URID_Map* map = NULL; for (int i = 0; features[i]; ++i) { if (!strcmp(features[i]->URI, LV2_URID_URI "#map")) { @@ -148,7 +144,7 @@ instantiate(const LV2_Descriptor* descriptor, return NULL; } - /* Map URIS */ + /** Map URIS */ MetroURIs* const uris = &self->uris; self->map = map; uris->atom_Blank = map->map(map->handle, LV2_ATOM__Blank); @@ -161,14 +157,14 @@ instantiate(const LV2_Descriptor* descriptor, uris->time_beatsPerMinute = map->map(map->handle, LV2_TIME__beatsPerMinute); uris->time_speed = map->map(map->handle, LV2_TIME__speed); - /* Initialise fields */ + /** Initialise fields */ self->rate = rate; self->bpm = 120.0f; self->attack_len = attack_s * rate; self->decay_len = decay_s * rate; self->state = STATE_OFF; - /* Generate one cycle of a sine wave at the desired frequency. */ + /** Generate one cycle of a sine wave at the desired frequency. */ const double freq = 440.0 * 2.0; const double amp = 0.5; self->wave_len = rate / freq; @@ -200,7 +196,7 @@ play(Metro* self, uint32_t begin, uint32_t end) for (uint32_t i = begin; i < end; ++i) { switch (self->state) { case STATE_ATTACK: - /* Amplitude increases from 0..1 until attack_len */ + /** Amplitude increases from 0..1 until attack_len */ output[i] = self->wave[self->wave_offset] * self->elapsed_len / (float)self->attack_len; if (self->elapsed_len >= self->attack_len) { @@ -208,7 +204,7 @@ play(Metro* self, uint32_t begin, uint32_t end) } break; case STATE_DECAY: - /* Amplitude decreases from 1..0 until attack_len + decay_len */ + /** Amplitude decreases from 1..0 until attack_len + decay_len */ output[i] = 0.0f; output[i] = self->wave[self->wave_offset] * (1 - ((self->elapsed_len - self->attack_len) / @@ -221,10 +217,10 @@ play(Metro* self, uint32_t begin, uint32_t end) output[i] = 0.0f; } - /* We continuously play the sine wave regardless of envelope */ + /** We continuously play the sine wave regardless of envelope */ self->wave_offset = (self->wave_offset + 1) % self->wave_len; - /* Update elapsed time and start attack if necessary */ + /** Update elapsed time and start attack if necessary */ if (++self->elapsed_len == frames_per_beat) { self->state = STATE_ATTACK; self->elapsed_len = 0; @@ -237,7 +233,7 @@ update_position(Metro* self, const LV2_Atom_Object* obj) { const MetroURIs* uris = &self->uris; - /* Received new transport position/speed */ + /** Received new transport position/speed */ LV2_Atom *beat = NULL, *bpm = NULL, *speed = NULL; lv2_atom_object_get(obj, uris->time_barBeat, &beat, @@ -245,17 +241,17 @@ update_position(Metro* self, const LV2_Atom_Object* obj) uris->time_speed, &speed, NULL); if (bpm && bpm->type == uris->atom_Float) { - /* Tempo changed, update BPM */ + /** Tempo changed, update BPM */ self->bpm = ((LV2_Atom_Float*)bpm)->body; } if (speed && speed->type == uris->atom_Float) { - /* Speed changed, e.g. 0 (stop) to 1 (play) */ + /** Speed changed, e.g. 0 (stop) to 1 (play) */ self->speed = ((LV2_Atom_Float*)speed)->body; } if (beat && beat->type == uris->atom_Float) { - /* Received a beat position, synchronize. - This is a simple hard sync that may cause clicks. - A real plugin would do something more graceful. + /** Received a beat position, synchronise. + This is a simple hard sync that may cause clicks. + A real plugin would do something more graceful. */ const float frames_per_beat = 60.0f / self->bpm * self->rate; const float bar_beats = ((LV2_Atom_Float*)beat)->body; @@ -277,36 +273,36 @@ run(LV2_Handle instance, uint32_t sample_count) Metro* self = (Metro*)instance; const MetroURIs* uris = &self->uris; - /* Empty notify output for now */ + /** Empty notify output for now */ LV2_Atom_Sequence* notify = self->ports.notify; notify->atom.type = self->uris.atom_Sequence; notify->atom.size = sizeof(LV2_Atom_Sequence_Body); notify->body.unit = notify->body.pad = 0; - /* Work forwards in time frame by frame, handling events as we go */ + /** Work forwards in time frame by frame, handling events as we go */ const LV2_Atom_Sequence* in = self->ports.control; uint32_t last_t = 0; for (LV2_Atom_Event* ev = lv2_atom_sequence_begin(&in->body); !lv2_atom_sequence_is_end(&in->body, in->atom.size, ev); ev = lv2_atom_sequence_next(ev)) { - /* Play the click for the time slice from last_t until now */ + /** Play the click for the time slice from last_t until now */ play(self, last_t, ev->time.frames); if (ev->body.type == uris->atom_Blank) { const LV2_Atom_Object* obj = (LV2_Atom_Object*)&ev->body; if (obj->body.otype == uris->time_Position) { - /* Received position information, update */ + /** Received position information, update */ update_position(self, obj); } } - /* Update time for next iteration and move to next event*/ + /** Update time for next iteration and move to next event*/ last_t = ev->time.frames; ev = lv2_atom_sequence_next(ev); } - /* Play for remainder of cycle */ + /** Play for remainder of cycle */ play(self, last_t, sample_count); } |