Loading...
Searching...
No Matches

Detailed Description

What is heard of a MIDI loop, copied by the processing thread for a worker to write it. Fixed storage: the copy does not allocate.

Public Member Functions

std::string to_smf () const
 

Public Attributes

std::array< midi_note, midi_loop::max_notes > notes {}
 
std::array< midi_control, midi_loop::max_controls > controls {}
 
int note_count {}
 
int control_count {}
 
int64_t length {}
 
double rate {48000.}
 
double tempo {120.}
 
int meter_numerator {4}
 
int meter_denominator {4}
 
bool wrap {true}
 
std::atomic_bool in_use {}
 

Static Public Attributes

static constexpr int ticks_per_quarter = 480
 

Member Function Documentation

◆ to_smf()

std::string Nodes::Looper::midi_export::to_smf ( ) const
inline

The loop as a Standard MIDI File, at the tempo and in the meter it was played in. Ticks count quarters, so the tempo only says how fast they went: score places a file by its quarters. The file ends exactly at the loop's end.

< note-offs, then the rest, at a given tick

Member Data Documentation

◆ in_use

std::atomic_bool Nodes::Looper::midi_export::in_use {}

A job is writing it: the processing thread does not fill it until the job is over. The job may outlive the looper that made it.


The documentation for this struct was generated from the following file: