GithubHelp home page GithubHelp logo

tonikasoft / fpsdk Goto Github PK

View Code? Open in Web Editor NEW
13.0 2.0 2.0 253 KB

Rust port of FL Studio SDK

Home Page: https://docs.rs/fpsdk/

License: MIT License

Rust 66.74% C++ 31.40% C 1.11% Shell 0.27% Batchfile 0.47%
fl-studio audio fl-sdk

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 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.

Add CI/CD

The crate should be published automatically on a new release.

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 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

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.

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.

Push notifications to dev chats

Notify about (if possible):

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

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.

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.

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.