Giter VIP home page Giter VIP logo

fpsdk's Introduction

docs

fpsdk

Rust port of FL Studio SDK.

The FL Studio SDK provides you the API libraries and developer tools necessary to build, test, and debug plugins for FL Studio.

Example

The example demonstrates how to use this library.

To build it, run:

cargo build --release --example simple

To install it:

./install.mac.sh simple Simple -g # for macOS
./install.win.bat simple Simple -g # for Windows

Check out the corresponding script for your system for usage notes.

The plugin's log file is created at FL's resources root. It's /Applications/FL Studio 20.app/Contents/Resources/FL for macOS and <Drive>:\Program Files\Image-Line\FL Studio 20 for Windows.

fpsdk's People

Contributors

ales-tsurko avatar dmitryrec avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

emily33901

fpsdk's Issues

Port flags to Rust

The next types should be ported to Rust:

  • Plugin flags
  • Processing Mode Flags
  • ProcessParam Flags
  • Parameter Popup Menu Item Flags
  • Sample Loading Flags
  • TNotesParams Flags
  • Parameter Flags
  • GetInBuffer / GetOutBuffer flags

bitflags should be used if possible.

For undocumented types see src/cxx/fp_plugclass.h.

Checkout already implemented types to get an example.

Port TFruityPlugHost sample methods

  • LoadSample -> host::Host::load_sample sample::Sample::load
  • GetSampleData -> host::Host::sample_data sample::Sample::data
  • CloseSample -> host::Host::close_sample sample::Sample::close
  • GetSampleInfo -> host::Host::sample_info sample::Sample::info
  • GetSampleRegion -> host::Host::sample_region sample::Sample::region

Port event IDs to Rust

They should be exposed as enum host::Event.

Enum's items should keep corresponding values as they're described in the documentation.

Check TFruityPlug->ProcessEvent(...) to get a clue from where the parameters come from.

enum host::HostMessage can be used as an example.

Note: the type is public and documentation should be ported too.

Port TOutVoiceHandle

Should be exposed as struct OutputVoice and has methods:

  • OutputVoice::release (TFruityPlugHost::OutputVoice_Release)
  • OutputVoice::kill (TFruityPlugHost::OutputVoice_Kill)
  • OutputVoice::process_event (TFruityPlugHost::OutputVoice_ProcessEvent)

Plugin dispatcher causes FL to hang

When I return 0 from plugin_dispatcher function (i.e. commenting out its inners) everything's fine, but with the actual code it causes FL Studio to hang.

Example's log path on Windows

As far as the plugin is a DLL, specifying its path goes out of scope for a simple example, so we don't put the log just beside it. We use the current working directory of the process.

So the log file for the example plugin is created in /Applications/FL Studio 20.app/Contents/Resources/FL on macOS.

I think it's inside of FL's root directory on Windows. But this information needs to be clarified and added in README.md.

Push notifications to dev chats

Notify about (if possible):

  • issue open
  • issue assigns
  • issue comments
  • review requests
  • review submissions
  • PR comments
  • PR merge

Add install script on Windows

Add a simple script to install compiled plugin on Windows to simplify debugging process.

It should install only Effects.

It should accept current dll name as the first argument and destination name as the second one.

install.mac.sh can be used as an example.

Add CI/CD

The crate should be published automatically on a new release.

Port TFruityPlugHost->Voice_*

* [ ] Voice_Release as host::Host::voice_release.
* [ ] Voice_Kill as host::Host::voice_kill
* [ ] Voice_ProcessEvent as host::Host::voice_process

How it's related to Voice?

It's implemented by introducing type Voicer (Host::voice_handler), which sends release, kill, and on_event to the corresponding voice.

Port TVoiceHandle

Should be exposed as trait Voice and have next methods:

  • Voice::new
  • Voice::release (TFruityPlug->Voice_Release)
  • Voice::kill (TFruityPlug->Voice_Kill)
  • Voice::process_event (TFruityPlug->Voice_ProcessEvent)
  • Voice::render (TFruityPlug->Voice_Render) deprecated

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.