#ifndef XTC_PROJECT_INTERNAL_H #define XTC_PROJECT_INTERNAL_H #include "xtc/xtc_project.h" #include "xtc/xtc_midi.h" #include "xtc/xtc_mixer.h" struct xtc_project { xtc_graph *graph; uint64_t next_track_id, next_clip_id; unsigned int tempo; size_t track_count, clip_count; uint64_t next_note_id; size_t note_count; size_t automation_count; xtc_automation_point automation[XTC_MAX_AUTOMATION_POINTS]; xtc_note_info notes[XTC_PROJECT_MAX_NOTES]; xtc_track_info tracks[XTC_PROJECT_MAX_TRACKS]; xtc_clip_info clips[XTC_PROJECT_MAX_CLIPS]; }; /** * @brief Checks for a nonempty UTF-8 name of at most 63 bytes without ASCII controls. * * @param name NUL-terminated name. * @return Nonzero for a valid name, zero otherwise. */ int xtc_project_valid_name(const char *name); /** * @brief Validates project IDs, timeline ranges, names, graph, notes, and automation. * * @param project Project model; borrowed for this call. * @return XTC_OK on success, or an error code describing the failure. */ xtc_result xtc_project_validate(const xtc_project *project); #endif