Tabula Sonora 0.1.0
A native C++20 implementation of the Roland Sound Canvas VA synth voice
Loading...
Searching...
No Matches
ts::smf::SongLoop Struct Reference

Loop points a file declared, in samples on the render-block grid. More...

#include <tabulasonora/smf_reader.hpp>

Public Attributes

std::int64_t start = 0
 First sample of the loop body.
std::int64_t end = 0
 Sample the jump back happens at.
bool soft = false
 Whether the file marked the loop end explicitly (a soft loop).

Detailed Description

Loop points a file declared, in samples on the render-block grid.

Four marker dialects are scanned, ported from spessasynth_core_c (itself from midi_processing's scan_for_loops): Touhou's CC 2/CC 4 pair in format-0 files, RPG Maker's CC 111 (ignored when the file carries EMIDI track designations, which give CC 111 another meaning), the XMI/EMIDI CC 116–119 set, and loopStart/loopEnd marker meta events. The outermost surviving start and end win. A start with no end runs to the last voice event; a degenerate loop — empty, or starting on the song's final tick — is dropped entirely.

Member Data Documentation

◆ start

std::int64_t ts::smf::SongLoop::start = 0

First sample of the loop body.

◆ end

std::int64_t ts::smf::SongLoop::end = 0

Sample the jump back happens at.

◆ soft

bool ts::smf::SongLoop::soft = false

Whether the file marked the loop end explicitly (a soft loop).

A soft jump rewinds without replaying state — anything that must change at the jump is inside the loop body and re-fires on its own — where a hard loop's end is inferred and the jump replays controllers the way a seek does.


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