{"id":13430497,"url":"https://github.com/monadgroup/FLParser","last_synced_at":"2025-03-16T05:31:15.808Z","repository":{"id":41984020,"uuid":"99536830","full_name":"monadgroup/FLParser","owner":"monadgroup","description":"An FL Studio project file parser for .NET","archived":true,"fork":false,"pushed_at":"2022-03-15T20:39:55.000Z","size":30,"stargazers_count":124,"open_issues_count":5,"forks_count":22,"subscribers_count":11,"default_branch":"master","last_synced_at":"2024-10-28T09:58:37.160Z","etag":null,"topics":["daw","dotnet","fl-studio","parser"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/monadgroup.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-08-07T04:32:53.000Z","updated_at":"2024-10-09T01:06:46.000Z","dependencies_parsed_at":"2022-09-06T09:21:27.279Z","dependency_job_id":null,"html_url":"https://github.com/monadgroup/FLParser","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monadgroup%2FFLParser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monadgroup%2FFLParser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monadgroup%2FFLParser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monadgroup%2FFLParser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monadgroup","download_url":"https://codeload.github.com/monadgroup/FLParser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243830912,"owners_count":20354848,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["daw","dotnet","fl-studio","parser"],"created_at":"2024-07-31T02:00:54.610Z","updated_at":"2025-03-16T05:31:15.498Z","avatar_url":"https://github.com/monadgroup.png","language":"C#","funding_links":[],"categories":["C# #"],"sub_categories":[],"readme":"# FLParser\n\n\u003e A parser for FL Studio project files in .NET.\n\nFLParser is a utility for parsing and structuring project files in [FL Studio](https://www.image-line.com/flstudio/) (FLP files). It is used by the MONAD Demogroup for converting FLP files to a format useable by the demo replayer.\n\nFLParser is based on [andrewrk's node-flp](https://github.com/andrewrk/node-flp), but contains many improvements to clean up code and add compatability for newer versions of FL Studio.\n\nPlease note: FLParser is currently in beta. Only the minimal things that we need are currently implemented, and some of them might break - if they do, or you find something new, please submit an issue or pull request.\n\n## install\n\nIn commandline:\n\n```bash\n$ cd my/project/directory\n$ git clone https://github.com/monadgroup/flparser.git\n```\n\nIn Visual Studio:\n\n```\nSolution \u003e Add \u003e Existing Project\n    Find Monad.FLParser.csproj\nProject References \u003e Add Reference \u003e Projects \u003e Monad.FLParser\n```\n\nNuget package coming soon!\n\n## use\n\nLoad a project with `Project.Load`:\n\n```cs\nProject project1 = Project.Load(\"path/to/project.flp\"); // load from file\n\nStream someStream = ...;\nProject project2 = Project.Load(someStream); // load from stream\n\nBinaryReader someReader = ...;\nProject project3 = Project.Load(someReader); // load from binaryreader\n```\n\n## reference\n\n### classes\n\n#### `class Project`\n\nRepresents an FLP file. Has the following properties: (all `get; set;`)\n\n```cs\nconst int MaxInsertCount;   // max number of inserts (as of FL 12, equal to 105)\nconst int MaxTrackCount;    // max number of tracks (as of FL 12, equal to 199)\nint MainVolume;             // volume of project\nint MainPitch;              // pitch of project\nint Ppq;                    // pulses per quarter-beat\ndouble Tempo;               // tempo of project\nstring ProjectTitle;        // title of project\nstring Comment;             // comment of project\nstring Author;              // author of project\nstring Genre;               // genre of project\n\nstring VersionString;       // xx.xx.xx-formatted string of FL version\nint Version;                // int format of version\nList\u003cChannel\u003e Channels;     // list of channels in project\nTrack[] Tracks;             // set of tracks in project (length is equal to Project.MaxTrackCount)\nList\u003cPattern\u003e Patterns;     // list of patterns in project\nInsert[] Inserts;           // set of inserts in project (length is equal to Project.MaxInsertCount)\n```\n\n#### `class Channel`\n\nRepresents an individual channel (instrument) in a project. Has the following properties: (all `get; set;`)\n\n```cs\nint Id;             // channel ID\nstring Name;        // channel name\nuint Color;         // 0x00RRGGBB-formatted channel color\nIChannelData Data;  // channel data, will either be GeneratorData or AutomationData\n```\n\n#### `class GeneratorData : IChannelData`\n\nRepresents channel data for a generator channel (sampler or plugin). Has the following properties: (all `get; set;`)\n\n```cs\nbyte[] PluginSettings;      // settings saved by the plugin\nstring GeneratorName;       // plugin generator name\ndouble Volume;              // generator volume\ndouble Panning;             // generator panning\nuint BaseNote;              // generator base note\nint Insert;                 // insert to send audio to\nint LayerParent;            // ???\n\nEnums.ArpDirection ArpDir;  // direction of arp\nint ArpRange;               // range of arp\nint ArpChord;               // chord of arp (mapping unknown)\nint ArpRepeat;              // number of times to repeat arp\ndouble ArpTime;             // speed of arp\ndouble ArpGate;             // arp note duration\nbool ArpSlide;              // slide arp?\n\n// for samplers:\nstring SampleFileName;      // path to sample\nint SampleAmp;              // sample volume\nbool SampleReversed;        // play sample reversed?\nbool SampleReverseStereo;   // swap stereo channels?\nbool SampleUseLoopPoints;   // ???\n```\n\n#### `class AutomationData : IChannelData`\n\nRepresents channel data for an automation channel. Has the following properties: (all `get; set;`)\n\n```cs\nChannel Channel;                // channel that this automation is controlling\nint Parameter;                  // parameter to control\nAutomationKeyframe[] Keyframes; // automation keyframes\n```\n\n#### `class AutomationKeyframe`\n\nRepresents an individual keyframe in an automation track. Has the following properties: (all `get; set;`)\n\n```cs\nint Position;       // keyframe position in pulses\ndouble Value;       // keyframe value\nfloat Tension;      // keyframe tension\n```\n\n#### `class Track`\n\nRepresents a track in a project playlist. Has the following properties: (all `get; set;`)\n\n```cs\nstring Name;                // track name\nuint Color;                 // 0x00RRGGBB-formatted track color\nList\u003cIPlaylistItem\u003e Items;  // list of playlist items in track, will either be ChannelPlaylistItem or PatternPlaylistItem\n```\n\n#### `class IPlaylistItem`\n\nRepresents an item in a track. Has the following properties: (all `get; set;`)\n\n```cs\nint Position;       // position of the item in pulses\nint Length;         // length of the item in pulses\nint StartOffset;    // position to start in data\nint EndOffset;      // position to end in data\n```\n\n#### `class ChannelPlaylistItem : IPlaylistItem`\n\nRepresents a sample or automation item in a track. Has the following additional properties: (all `get; set;`)\n\n```cs\n\nChannel Channel;    // channel to take sample or automation data from\n```\n\n#### `class PatternPlaylistItem : IPlaylistItem`\n\nRepresents a pattern in a track. Has the following additional properties: (all `get; set;`)\n\n```cs\nPattern Pattern;    // pattern to take note data from\n```\n\n#### `class Pattern`\n\nRepresents a pattern in a project. Has the following properties: (all `get; set;`)\n\n```cs\nint Id;                                 // pattern ID\nstring Name;                            // pattern name\nDictionary\u003cChannel, List\u003cNote\u003e\u003e Notes;  // the notes that each channel plays in this pattern\n```\n\n#### `class Note`\n\nRepresents a note in a pattern. Has the following properties: (all `get; set;`)\n\n```cs\nint Position;       // note position in pulses\nint Length;         // note length in pulses\nbyte Key;           // note key in MIDI format\nushort FinePitch;   // note pitch adjustment\nushort Release;     // note release time\nbyte Pan;           // note pan, 0 is left and 127 is right\nbyte Velocity;      // note velocity\n```\n\n#### `class Insert`\n\nRepresents an insert in a project. Has the following properties: (all `get; set;`)\n\n```cs\nconst int MaxSlotCount;     // max number of effect slots (as of FL 12, equal to 10)\nint Id;                     // insert ID\nstring Name;                // insert name\nuint Color;                 // 0x00RRGGBB-formatted track color\nushort Icon;                // icon ID\nEnums.InsertFlags Flags;    // insert flags\nint Volume;                 // insert volume\nint Pan;                    // insert pan\nint StereoSep;              // stereo separation\nint LowLevel;               // EQ lowpass level\nint BandLevel;              // EQ bandpass level\nint HighLevel;              // EQ highpass level\nint LowFreq;                // EQ lowpass frequency\nint BandFreq;               // EQ bandpass frequency\nint HighFreq;               // EQ highpass frequency\nint LowWidth;               // EQ lowpass width\nint BandWidth;              // EQ bandpass width\nint HighWidth;              // EQ highpass width\nbool[] Routes;              // map of which inserts this insert routes to (length is equal to Project.MaxInsertCount)\nInsertSlot[] Slots;         // set of slots in insert (length is equal to Insert.MaxSlotCount)\n```\n\n#### `class InsertSlot`\n\nRepresents an effect slot in an insert. Has the following propertie: (all `get; set;`)\n\n```cs\nint Volume;     // volume of slot\nint State;      // slot state (0 = muted, 1 = enabled, 2 = solo)\n```\n\n### enums\n\nAll enums are in the `Enums` static class.\n\n#### `enum Event`\n\nList of FLP event types, used for parsing. Consult the source code for a list of values.\n\n#### `enum InsertParam`\n\nList of insert parameters, used for parsing. Consult the source code for a list of values.\n\n#### `enum ArpDirection`\n\nPotential directions for generator channel's arpeggiator. Values are:\n\n - `Off = 0` - no active arp\n - `Up = 1` - arp notes go up\n - `Down = 2` - arp notes go down\n - `UpDownBounce = 3` - arp notes bounce up and down\n - `UpDownSticky = 4` - arp notes stick up and down\n - `Random` - random arp notes\n\n#### `[Flags] enum InsertFlags`\n\nFlags for inserts to specify their states. Values are:\n\n - `ReversePolarity = 1` - reverse polarity of the insert\n - `SwapChannels = 1 \u003c\u003c 1` - swap left and right channels\n - `Unmute = 1 \u003c\u003c 3` - insert is audible\n - `DisableThreaded = 1 \u003c\u003c 4` - threading is disabled on insert\n - `DockedMiddle = 1 \u003c\u003c 6` - insert is docked to middle\n - `DockedRight = 1 \u003c\u003c 7` - insert is docked to right\n - `Separator = 1 \u003c\u003c 10` - insert has separator on left\n - `Lock = 1 \u003c\u003c 11` - insert is locked\n - `Solo = 1 \u003c\u003c 12` - insert is solo'd (all other inserts will be muted)\n\n## license\n\nLicensed under the GPL3 license. See the LICENSE file for more information.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonadgroup%2FFLParser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmonadgroup%2FFLParser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonadgroup%2FFLParser/lists"}