Compounds | |
class | DemidifyException |
class | Demidify |
Reconstruct Song structure utility. More... | |
class | StreamMidiScheduler |
Diagnostic ostream MidiScheduler implementation. More... | |
class | NullMidiScheduler |
Null MidiScheduler implementation (does nothing!). More... | |
class | PowerQuantise |
Staggeringly impressive Phrase quantisation. More... | |
class | PowerQuantise::Pattern |
class | Snap |
Time 'snapping'. More... | |
Functions | |
int | muldiv (int val, int num, int div) |
std::string | numberToNote (int note) |
int | noteToNumber (const std::string &src) |
void | Phrase_Merge (std::vector< TSE3::Playable * > &play, TSE3::PhraseEdit *pe) |
void | Phrase_Add (TSE3::Phrase *p1, TSE3::Phrase *p2, TSE3::PhraseEdit *pe) |
void | Phrase_Subtract (TSE3::Phrase *p1, TSE3::Phrase *p2, TSE3::PhraseEdit *pe) |
void | Phrase_Arpeggiate (TSE3::Phrase *p1, TSE3::Phrase *p2, TSE3::PhraseEdit *pe) |
void | Phrase_Explode (TSE3::Phrase *p, std::string baseName, int channels, bool insertParts, TSE3::Song *song) |
void | Song_SearchForPhrase (TSE3::Song *song, TSE3::Phrase *phrase, std::vector< TSE3::Part * > &list) |
void | Song_ReplacePhrase (TSE3::Song *song, TSE3::Phrase *oldphr, TSE3::Phrase *newphr) |
void | Track_RemoveParts (TSE3::Track *track, TSE3::Clock start, TSE3::Clock end) |
void | Track_RemoveParts (TSE3::Track *track, TSE3::Clock start, TSE3::Clock end, std::vector< TSE3::Part * > &removed, TSE3::Clock &clippedStart, TSE3::Clock &clippedEnd, TSE3::Part *&newPart) |
void | Track_UnremoveParts (TSE3::Track *track, TSE3::Clock start, TSE3::Clock end, std::vector< TSE3::Part * > &removed, TSE3::Clock clippedStart, TSE3::Clock clippedEnd) |
The Util namespace contains classes and functions that build upon the TSE3 class API to provide more sophisitacted functionality.
These utilities are contained in the separate Util namespace to prevent the basic TSE3 API becoming large and complex to understand.
|
A utility function for doing muldiv calculations very quickly on platforms with no floating point support. It performs a multiplication and a divison. It used because most systems have 32 bit integers and we want multiplication/division that can cope with overflows.
|
|
Converts a MIDI note number to a name string. Note name 'C5' is middle C (note number 60).
|
|
Converts a MIDI name string to a note number Note name 'C5' is middle C (note number 60).
|
|
Merge together the contents of the specified TSE3::Playable objects and put the result in the given PhraseEdit object. You can use this, for example, to add together two TSE3::Phrase objects, or to merge together several . The resultant PhraseEdit output is tidy.
|
|
Add two together and put the result in the given TSE3::PhraseEdit object.
|
|
Subtract two and put the result in the given TSE3::PhraseEdit object.
|
|
Arpeggiate
|
|
Explode the given TSE3::Phrase into one TSE3::Phrase per MIDI channel. The new TSE3::Phrase objects are named _1 .. _16.
|
|
Search for the given TSE3::Phrase in all of the TSE3::Part objects in this TSE3::Song. A pointer to each Part is placed into the vector This is a useful way to discover which TSE3::Part objects Song_ReplacePhrase is going to alter.
|
|
Replace the given TSE3::Phrase with a new TSE3::Phrase in the TSE3::Song. Often the new TSE3::Phrase will have the same 'unique' reference name as the old one, and the old Phrase will be deleted directly after this call, after which the new TSE3::Phrase will be placed in the TSE3::PhraseList.
|
|
Removes any TSE3::Part objects that are between the given times. The TSE3::Part objects will be 'intelligently' clipped, i.e. if a TSE3::Part starts in the time zone, but ends after it, it's start will be moved, and an offset calculated for the TSE3::Part's TSE3::MidiFilter. The Part objects will be deleted. If there are no TSE3::Part objects deleted, no error will be raised and the method wil silently return.
|
|
This method acts like the remove above, but has more bells and whistles. The reason for using this method over the simpler remove above is that with the information returned from this call you can reconstruct the TSE3::Track again afterwards, for example to provide an undo facility. The Track_UnremoveParts function exists to do this. You can also safely 'redo' the operation again. Unless you need this ability don't read the following description since it will give you a headache ;-)
Rather than delete any TSE3::Part objects in the TSE3::Track, they are removed, and placed into the Additionally as a TSE3::Part at the start of the zone may be clipped, and a TSE3::Part at the end of the zone may be clipped, the funtion provides a way of reporting this.
If cliping does take place, the old TSE3::Part end/start values (respectively) are placed in the
A second type of clipping may occur - there could be a single big TSE3::Part that starts before start and ends after end. Track_RemoveParts will 'cut a hole' into it.
If you do an 'undo' (calling Track_UnremoveParts) on this operation, and need to redo it, it can be important that the same TSE3::Part is added at the end - so if you were given a
|
|
Undoes the removal of any TSE3::Part from the second Track_RemoveParts function above. Pass the same
If
|