diff --git a/README.md b/README.md index 145271864..d8db6c782 100644 --- a/README.md +++ b/README.md @@ -6,502 +6,222 @@ Lemon Studio -

A free and open-source digital audio workstation, written in Rust.

+

Make music. Keep the source.

+ +

A free and open-source digital audio workstation, written in Rust, for Windows, Linux and macOS.

CI License: GPL-3.0-or-later - Rust 2024 edition - Platform: Windows | Linux | macOS Status: pre-alpha Discord

- Overview · - Capabilities · - Getting started · - Architecture · - Roadmap · - Contributing · - Community · - License + Website · + Download · + Wiki · + Discord


-Lemon Studio with the browser, playlist, channel rack and piano roll open +Lemon Studio with a song in the arranger, the instrument rack and the piano roll open --- -## Overview - -Lemon Studio is a pattern-based music production environment: build patterns in a step sequencer and -piano roll, arrange them on a playlist, and mix them through a routable mixer. It is written from the -ground up in Rust, with a sample-accurate audio engine, a fast CPU-rendered interface and hosting for -CLAP, VST3 and VST2 plugins. - -Lemon Studio runs on Windows, Linux and macOS, and every change is built and tested on all three. macOS is supported -at the same level as Linux; the few differences are listed in the [macOS notes](#macos). +## What is Lemon Studio? -A central goal is **interoperability**: Lemon Studio opens FL Studio projects (`.flp`) and saves them as `.lemon` -files, its own format laid out like an FLP (a `.flp` is written only if you pick "All files" and type the name). The -project reader is built to round-trip: anything in a file that Lemon Studio does not understand yet is -kept and written back unchanged, so a project survives being opened and saved. This support is still -young, so read the warning below before trying it on real work. +Lemon Studio is a pattern-based music production program. You build patterns in the instrument rack and piano roll, lay +them out as a song in the arranger, and mix them in the mixer. It comes with its own instruments and effects, and it +loads your CLAP, VST3 and VST2 plugins. > [!WARNING] -> **Lemon Studio is pre-alpha software.** It is under active development and is not yet a usable DAW: -> expect missing features, rough edges and breaking changes. -> -> - **Greyed-out controls are not implemented yet.** Many menus and buttons are already laid out but do -> nothing so far; they are drawn dim and say "not available yet". Other features of a full DAW have no control -> at all yet, so a menu with nothing greyed in it is not necessarily complete. -> - **Builds are not signed.** Your system may stop them the first time; the release notes say how to open them. -> - **Projects saved by FL Studio 10 or later open** (25 and 26 included). Projects older than 24.2 are -> converted to the current layout as they open and are saved in it, so the version that wrote them may not -> read the saved copy. -> - **Project-file support is at a very early stage.** Do not overwrite your original `.flp` projects -> with files saved by Lemon Studio until this support is declared stable. Work on copies and keep backups. - -## Capabilities - -Where Lemon Studio stands against what a complete DAW offers: - -| Area | Status | Notes | -|---|:---:|---| -| Step sequencing and patterns | 🚧 | Channel rack with steps, mini piano rolls, swing and per-channel loops. Not yet: a layer channel's settings (it plays, with volume and pan), the Misc tab's arpeggiator, echo delay, gate, time shift and tracking (drawn greyed) | -| Piano roll | 🚧 | All eight tools, velocity and event lanes, quantize (FL's templates), chop (FL's patterns), randomize (melodies and levels), strum, arpeggiate, flam, claw machine, flip, level scaling, limit, LFO and more. Not yet: note colours, slide and portamento toggles, Note Properties, scale and chord helpers, the piano roll's ▸ menu, release velocity (its lane edits a value nothing plays) | -| Song arrangement | 🚧 | Playlist with pattern, audio and automation clips, clip groups, markers and several arrangements. Not yet: a clip properties window with per-clip pitch, pan and reverse, audio clip chop and merge. The playlist's bars are always 4 beats, and Consolidate and Export all playlist tracks leave plugin instruments out | -| Mixing and routing | ✅ | Mixer tracks, sends, effect slots and meters; sidechain inputs for a project's Fruity Limiter and Vocodex slots and for CLAP and VST3 effects (not VST2). Not yet: the seven other mixer layouts, the track inspector | -| Plugin hosting | ✅ | CLAP, VST3 and VST2 instruments and effects with their editors; "Create automation clip" in CLAP and VST3 plugins' own parameter menus; a parameter menu for every plugin parameter (automation clips, controller links, typed and set values); a crashing plugin is stopped instead of closing Lemon Studio (on macOS, all but its editor); no 32-bit plugins; outputs past a plugin's main stereo pair are dropped | -| Plugin management | ✅ | Plugin manager with your own search folders, a crash-safe background scan, favourites and hidden plugins; presets of your own and factory presets, import of `.vstpreset`, `.fxp` and `.fxb` files, and preset files dropped onto a plugin | -| Time-stretching | ✅ | All twelve stretch methods for samples and audio clips, played by one open-source stretcher | -| Playback engine | 🚧 | Renders ahead of the audio device so edits do not cause dropouts; voice limits, cut groups, glides, layer channels; multi-core mixing | -| Automation | 🚧 | Clips for channel, mixer and plugin parameters with every curve shape, their range and their LFO; channel, mixer, tempo and plugin controls record into a pattern, as in FL Studio, and Turn into automation clip makes a clip of them. Not yet: editing a clip's targets (a clip from ADD can't be linked to anything), making internal controller links in the app | -| Project files | 🚧 | Opens projects from FL Studio 10 and later (older layouts are converted as they open) and saves `.lemon` files. Keep backups | -| Built-in instruments and effects | 🚧 | Instruments: Lemon Sampler (long samples can play straight from disk), Lemon Trio (three oscillators), Citrus (a six-operator synth that plays Sytrus patches), Smith (an additive synth that plays Ogun patches), Lemon Slicer (a loop cut into slices that plays Fruity Slicer channels) and Lemon Drum Sampler (32 pads of velocity-layered samples that plays FPC kits). Effects: Lemon Parametric EQ (all of FL's quality modes: HQ+, HQ Enhanced, linear phase), Limiter, Reverb, Delay, Chorus, Stereo Shaper, Stereo Enhancer, Balance, Soft Clipper, Fast Distortion, Transient Processor, Filter, Flanger and Phaser, plus Pulp Filter (a pattern-controlled multi-filter), Press (a multiband maximiser) and Lemon Drop (an oscilloscope, spectrum, meter and vectorscope that shows Wave Candy slots). All built in, and also VST3 and CLAP plugins for other DAWs; a project's Fruity Limiter slots play Lemon Limiter's sound, sidechain included | -| Exporting audio | ✅ | Song, pattern or selection to WAV, FLAC, MP3 and OGG at once; bit depth, sample rate, interpolation (not for Lemon Sampler channels, which keep their own), dither, mono, tails, stems and WAV markers; a pattern rendered as an audio clip (Quick render, Render and replace) | -| MIDI file import / export | ✅ | Import into a new project or the open one (tracks, channels, tempo changes, time signatures, markers) or a piano roll channel (notes and time signatures); export a pattern or the song's patterns | -| Note input | 🚧 | Mouse, computer keyboard, MIDI controllers (velocity curves, sustain pedal, pitch bend, aftertouch) and the touch controller; note recording into patterns with loop record, precount and Start on input; step edit | -| MIDI controllers and sync | ✅ | Link knobs, faders and plugin parameters to a controller (or many at once with Multilink), kept for the whole program rather than per project; no device scripts or typed mapping formulas yet; MIDI clock and time code out, external clock in | -| Undo | 🚧 | One history for the whole project, with redo and the browser's History: edits, knobs and faders, the mixer, channels added and deleted, the tempo and project settings, and plugin parameters, those changed in their own windows too. Not yet: the channel rack's graph editor | -| Scripting and assistants | 🚧 | Scripts, tests and AI assistants read and edit projects over a local socket, every change undoable; see [docs/control-plane.md](docs/control-plane.md) | -| Audio drivers | 🚧 | WASAPI (shared and exclusive) and ASIO® (output pairs, and inputs for audio recording) on Windows; the sound server (PulseAudio, or PipeWire through it), ALSA or JACK (written, not yet tried against a running server) on Linux; Core Audio on macOS | -| Platforms | 🚧 | Windows 10 / 11, Linux (X11, and Wayland through XWayland) and macOS 11 or newer; macOS is supported at the same level as Linux | -| Look and themes | 🚧 | Lemon and Citrus (formerly Classic) skins; 25 built-in themes, your own themes and `.flstheme` files colour either skin, with live adjustments and a colour picker; Lemon plugin editors in the Lemon design only | -| Settings | 🚧 | Every page is there: MIDI, Audio, Recording, General, File, Plugins, Theme, Project and Info. About 14 controls are still greyed, and 11 are saved but nothing reads them yet | -| Audio recording | 🚧 | Armed mixer tracks record into the playlist at their record source; one-click audio recording into the playlist or the audio editor, from ASIO or system inputs; Tesla records what reaches its mixer slot. Not yet: loop-record passes for audio, take lanes | -| Audio editing | ✅ | Tesla, the audio editor and recorder after FL's Edison: a mixer effect (and VST3 / CLAP plugin) with markers, regions, destructive edits and tools; a project's Edison slots open in it | -| Plugin delay compensation | 🚧 | Plugins' reported delays and the mixer tracks' latency settings, in playback and exports; the settings are edited from the mixer | - -✅ usable · 🚧 partial · ❌ not available yet - -ASIO Compatible logo - -ASIO is a registered trademark of Steinberg Media Technologies GmbH. +> **Lemon Studio is pre-alpha.** Expect missing features and breaking changes. Greyed-out controls aren't implemented +> yet. Keep backups of anything you care about. + +## Features + +- **Instrument rack.** Click steps to make a beat, with per-instrument loops, swing and mini piano rolls. +- **Piano roll.** Draw notes, edit velocity and other controls in lanes, and quantize, chop, strum, arpeggiate or + randomize them. +- **Arranger.** Paint pattern, audio and automation clips, mark sections, keep several arrangements in one project, and + launch clips live in performance mode. +- **Mixer.** Route any track to any other, stack effects in slots and feed sidechains, with plugin delay compensation + keeping everything in time. +- **Automation.** Automate instrument, mixer and plugin controls with clips, or record your moves into a pattern. +- **Recording and audio editing.** Record notes and audio, and edit audio in Tesla, the built-in audio editor. +- **Time stretching.** Fit samples and audio clips to the project's tempo. +- **Export.** Render the song, a pattern or stems to WAV, FLAC, MP3 and OGG at once. MIDI files import and export too. +- **MIDI controllers.** Link knobs, faders and plugin controls to your hardware with MIDI learn. +- **Themes.** Pick from 25 built-in themes or make your own. - - + + - - + + + + + + + + + +
The piano roll with a two-handed piano part: chords under a melody, with note names and the velocity laneThe playlist with a 64-bar song arranged from pattern, audio and automation clips under section markersThe instrument rack: a column of named instruments, each with a row of stepsThe piano roll with a melody over chords, and a velocity lane below
Piano roll: chords and a melody with their note names, and the velocity lane belowSong arrangement: pattern, audio and automation clips under section markersInstrument rackPiano roll
The arranger holding a 64-bar song of pattern, audio and automation clips under section markersThe mixer with named tracks, faders and a column of effect slots for the selected track
ArrangerMixer
-Per-area details are in [docs/status.md](docs/status.md). The full, item-by-item roadmap lives on the -[Discord server](https://discord.gg/yC2uCuGs3M). - -## Getting started - -**Builds** for Windows, Linux (AppImage) and macOS (Apple silicon) are on the -[releases page](https://github.com/ItsAlphaNeon/Lemon-Studio/releases), with Lemon Studio's plugins for other DAWs as a -separate zip: **alphas**, the tagged `0.x` releases, and **nightlies**, the newest changes on main, built every night. -They are not signed: the release notes say how to open them on each system (on macOS, past Gatekeeper). Once installed, -a build checks for a newer one of its own kind when it starts and installs it when you agree (Settings ▸ General ▸ -Updates). How releases are made: [docs/releasing.md](docs/releasing.md). - -Or build Lemon Studio from source, which never updates itself. Each platform below goes from a fresh -machine to Lemon Studio installed with its icon, and Lemon Studio's own plugins installed for any DAW. All three need -**Rust**, stable toolchain 1.89 or newer, installed through [rustup](https://rustup.rs/), and a clone of this repository: - -```bash -git clone https://github.com/ItsAlphaNeon/Lemon-Studio.git -cd Lemon-Studio -``` +### Built-in plugins -`cargo run -p os-app --release` builds and runs Lemon Studio. Before Lemon Studio starts, it also rebuilds Lemon -Studio's own plugins (Lemon Sampler, Lemon Trio, Lemon Parametric EQ, Lemon Limiter, Lemon Reverb, Lemon Delay, Lemon -Soft Clipper, Lemon Fast Distortion, Lemon Balance, Lemon Stereo Enhancer, Lemon Transient Processor, Lemon Chorus, -Lemon Stereo Shaper, Lemon Filter, Lemon Flanger, Lemon Phaser, Pulp Filter, Press, Lemon Drop, Tesla, Citrus and Smith) and -installs the ones that changed as VST3 and CLAP plugins, in the folders where other DAWs find them. Lemon Studio itself -has every one of them built in and needs no plugin files. A plugin that is new or updated in the repository shows up -in other DAWs at the next run. The first run builds every plugin, which takes -a few minutes more; later runs rebuild only what changed. Set `OPENSTUDIO_NO_PLUGIN_BUILD=1` to skip the plugin build. A -Lemon Studio installed as below builds nothing: after pulling changes, either run the command above once, or build and -install only the plugins with `cargo run -p bundle-plugins -- --install`. +Lemon Studio has 29 plugins built in. All but Lemon MIDI Out and Lemon Container also work as free VST3 and CLAP plugins +in other DAWs. The [catalogue](https://getlemonstudio.app/instruments-and-effects/) says what each one does. -### Windows - -Windows 10 or 11, x64. - -**Prerequisites** - -- The Microsoft C++ build tools that Rust uses (rustup offers them when it installs; otherwise the Visual Studio Build - Tools with the "Desktop development with C++" workload). They include the Windows SDK, which embeds the application - icon in the program; without the SDK the build still succeeds, without the icon. -- LLVM, whose libclang generates the time stretcher's and the ASIO SDK's bindings at build time: - `winget install LLVM.LLVM`. If `libclang.dll` is not in LLVM's default folder, set `LIBCLANG_PATH` to the folder - that holds it. - -**Build and run** - -```powershell -cargo run -p os-app --release -``` - -**Install** `lemonstudio.exe`, with its icon, into `%USERPROFILE%\.cargo\bin`, and give it a Start menu entry (from there -it can be pinned to the taskbar): - -```powershell -cargo install --path crates/os-app -$link = (New-Object -ComObject WScript.Shell).CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Lemon Studio.lnk") -$link.TargetPath = "$env:USERPROFILE\.cargo\bin\lemonstudio.exe" -$link.Save() -``` - -**Plugins:** `cargo run -p os-app --release` installs Lemon Studio's plugins in `%LOCALAPPDATA%\Programs\Common\VST3` -and `...\CLAP`, where DAWs find them. To build and install them without starting Lemon Studio, run -`cargo run -p bundle-plugins -- --install`. - -**Notes** - -- A plugin that crashes is stopped (its slot passes the sound through) instead of closing Lemon Studio. -- `lemonstudio.exe` is a Windows GUI program: started from Explorer, the Start menu or a shortcut it opens no console - window. Under `cargo run` its output goes to the terminal as before. Started directly from a terminal it prints there - too, but the terminal does not wait for it: for `--render`, add `| Out-Default` in PowerShell (or use - `start /wait` in `cmd`) to wait until the render is done. -- Settings, themes and presets live in `%APPDATA%\Lemon Studio`. `OPENSTUDIO_USER_DIR` overrides the folder. -- Plugins are found in `%LOCALAPPDATA%\Programs\Common\{VST3,CLAP}`, `%COMMONPROGRAMFILES%\{VST3,CLAP}` and - `CLAP_PATH`, plus any folder added in Settings > Plugins. VST2 plugins are found in the folder their installers - record (`HKEY_LOCAL_MACHINE\SOFTWARE\VST`, `VSTPluginsPath`) and in those of `%PROGRAMFILES%\VSTPlugins`, - `%PROGRAMFILES%\Steinberg\VSTPlugins`, `%COMMONPROGRAMFILES%\VST2` and `%COMMONPROGRAMFILES%\Steinberg\VST2` that - exist. 32-bit VST2 plugins cannot be loaded: they are listed as not supported, without being tried. - -### Linux - -x64, on X11 or a Wayland desktop. - -**Prerequisites:** a C++ compiler and libclang (for the time stretcher), the ALSA and JACK development files (JACK -itself is loaded only when JACK mode is chosen), the Wayland development files (which Lemon Sampler's file dialogs -link against when it is built as a plugin) and `pkg-config`: - -```bash -# Debian / Ubuntu -sudo apt install g++ libclang-dev libasound2-dev libjack-jackd2-dev libwayland-dev pkg-config -# Arch (pipewire-jack or jack2) -sudo pacman -S gcc clang alsa-lib pipewire-jack wayland pkgconf -# Fedora -sudo dnf install gcc-c++ clang-devel alsa-lib-devel pipewire-jack-audio-connection-kit-devel wayland-devel pkgconf-pkg-config -``` - -For the "save changes?" prompt, `zenity` or KDE's `kdialog` (a stock KDE desktop has the latter). - -**Build and run** - -```bash -cargo run -p os-app --release -``` +| Kind | Plugins | +|---|---| +| Instruments | Lemon Sampler, Lemon Trio, Citrus, Smith, Lemon Slicer, Lemon Drum Sampler | +| Effects | Lemon Parametric EQ, Lemon Limiter, Lemon Reverb, Lemon Delay, Lemon Chorus, Lemon Flanger, Lemon Phaser, Lemon Filter, Lemon Vocoder, Lemon Soft Clipper, Lemon Fast Distortion, Lemon Transient Processor, Lemon Balance, Lemon Stereo Enhancer, Lemon Stereo Shaper, Pulp Filter, Press, Lemon Drop | +| Controllers | Lemon Peak Controller, Lemon Formula Controller | +| Tools | Tesla, Lemon MIDI Out, Lemon Container | -**Install** `lemonstudio` into `~/.cargo/bin` (which must be on your `PATH`), with its icon and an entry in the -application menu (the desktop entry also names the icon under native Wayland): +### Project files -```bash -cargo install --path crates/os-app -install -Dm644 crates/os-app/assets/lemonstudio.png ~/.local/share/icons/hicolor/256x256/apps/lemonstudio.png -install -Dm644 crates/os-app/assets/lemonstudio.desktop ~/.local/share/applications/lemonstudio.desktop -``` +Lemon Studio saves projects as `.lemon` files, its own format. It can also open `.flp` projects saved by FL Studio 10 and +later and convert them to `.lemon`. Saving never touches the original file, and anything Lemon Studio doesn't understand +yet is kept, not thrown away. This support is still young, so work on copies. See +[Project files](https://getlemonstudio.app/wiki/reference/project-files/). -**Plugins:** `cargo run -p os-app --release` installs Lemon Studio's plugins in `~/.vst3` and `~/.clap`. To build and -install them without starting Lemon Studio, run `cargo run -p bundle-plugins -- --install`. +## Status -**Notes** +✅ works · 🚧 partly works -Lemon Studio runs on X11, and on Wayland desktops through XWayland. Plugin editors on Linux are X11 windows, and an X11 -window cannot sit inside a native Wayland one; with the main window on X11 too, plugin windows dock inside it as on -Windows (or detach, from their window menu). A few things differ from Windows for now: +| Area | Status | Still missing | +|---|:---:|---| +| Instrument rack | 🚧 | Arpeggiator, echo delay, gate, time shift and tracking | +| Piano roll | 🚧 | Note colours, scale and chord helpers, sound for release velocity | +| Arranger | 🚧 | Per-clip pitch, pan and reverse. Bars are always 4 beats. Consolidate and exporting all tracks leave plugins out | +| Mixer and routing | ✅ | Other mixer layouts | +| Plugin hosting | ✅ | 32-bit plugins, Audio Units, outputs past a plugin's main stereo pair | +| Built-in plugins | 🚧 | Some settings of the larger plugins aren't played yet | +| Automation | 🚧 | Editing a clip's targets, making controller links in the app | +| Recording | 🚧 | Loop recording and take lanes for audio | +| Audio editing (Tesla) | ✅ | | +| Time stretching | ✅ | | +| Audio and MIDI export | ✅ | | +| MIDI controllers and sync | ✅ | Device scripts, typed mapping formulas | +| Project files | 🚧 | Stable `.flp` support | +| Undo | 🚧 | Step parameters | +| Settings and themes | 🚧 | A few settings are greyed out or have no effect yet | + +The area-by-area details are in [docs/status.md](docs/status.md). + +## Get Lemon Studio + +| System | You need | Audio | +|---|---|---| +| Windows | Windows 10 or 11, x64 | WASAPI, ASIO | +| Linux | x64, on X11, or on Wayland through XWayland | PulseAudio or PipeWire, ALSA, JACK (not yet tried against a running server) | +| macOS | macOS 11 or newer. Downloads are for Apple silicon | Core Audio | -- **Native Wayland** is used only when there is no X server, or when `OPENSTUDIO_WAYLAND=1` is set. Plugin windows are - then always separate windows, kept above Lemon Studio while it is the active application; their window menu, Presets - list and Misc lists do not open, and files cannot be dropped in from a file manager (the windowing library does not - support it there). -- **Scaling:** under XWayland Lemon Studio follows the X11 scale (`Xft.dpi`). If it looks soft on a fractionally scaled - Wayland desktop, let X11 applications scale themselves (KDE: Display Configuration > Legacy applications (X11) > - Apply scaling themselves). -- **Keys** pressed while a plugin's editor has the keyboard focus do not play the typing keyboard yet, and a sample - dragged from Lemon Studio's browser onto a plugin window does not reach the plugin yet. -- **Lemon Sampler** cannot copy or paste audio through the clipboard yet. -- **Settings, themes and presets** live in `$XDG_CONFIG_HOME/Lemon Studio` (usually `~/.config/Lemon Studio`). - `OPENSTUDIO_USER_DIR` overrides the folder. -- Plugins are found in `~/.clap`, `/usr/lib/clap`, `/usr/local/lib/clap` and `CLAP_PATH`, in `~/.vst3`, - `/usr/lib/vst3` and `/usr/local/lib/vst3`, and in `VST_PATH` (else `~/.vst`, `/usr/lib/vst`, `/usr/local/lib/vst` and - the `lxvst` folders that exist) for VST2, plus any folder added in Settings > Plugins. +Every change is built and tested on all three. -### macOS +### Download -macOS 11 or newer. macOS is supported at the same level as Linux, with the same features, and -continuous integration builds and tests every change on macOS alongside Windows and Linux. +**No builds have been released yet.** The first ones are coming soon, and they'll be on the +[download page](https://getlemonstudio.app/download/). They update themselves, but they aren't signed, so your system may +stop them the first time. The [install guide](https://getlemonstudio.app/wiki/getting-started/install/) says how to open +them. -**Prerequisites:** the Xcode Command Line Tools, which bring the compiler and libclang: `xcode-select --install`. Xcode -itself is not needed (only to regenerate the app icon, see `tools/logo/macos-icon.sh`). +### Build from source -**Build and run** +You need [Rust](https://rustup.rs/) (stable, 1.89 or newer) and a few system packages. The +[build guide](https://getlemonstudio.app/wiki/reference/build-from-source/) lists them for each system, and also shows how +to install Lemon Studio with its icon and menu entry. ```bash +git clone https://github.com/ItsAlphaNeon/Lemon-Studio.git +cd Lemon-Studio cargo run -p os-app --release ``` -**Install** Lemon Studio as an app, `Lemon Studio.app` in `~/Applications`, with its icon: it opens from Launchpad, -Spotlight or the Dock (on macOS 26 and later its icon follows the light, dark, tinted and clear icon styles), and the -Finder opens `.flp` projects with it. Without `--install` the app is only written to `target/bundled/`. - -```bash -cargo run -p bundle-app -- --install -``` - -**Plugins:** `cargo run -p os-app --release` installs Lemon Studio's plugins as bundles, signed ad hoc so that Apple -silicon loads them, in `~/Library/Audio/Plug-Ins/VST3` and `.../CLAP`. To build and install them without starting Lemon -Studio, run `cargo run -p bundle-plugins -- --install`. - -**Notes** - -Plugin windows dock inside the main window as on Windows, or detach (from their window menu) into windows of their own -that stay above Lemon Studio while it is the active application. A few things differ from Windows and Linux: - -- **Menu bar:** the window's menus (FILE … HELP) are also in the macOS menu bar, with the same entries. -- **Keys:** Command stands in for Ctrl in every shortcut (Command+S saves), and - Control+click is a right click. Quit (Command+Q, the menu bar, the Dock) asks about unsaved changes like closing the - window does. -- **Plugin windows:** a minimized detached window is hidden rather than sent to the Dock; its channel's button brings - it back. A sample dragged from Lemon Studio's browser onto a plugin window reaches Lemon Sampler only (other plugins - take dropped files only from the Finder). -- **Microphone:** the first time a mixer track monitors or records an input (the Mac's microphone, an audio - interface's inputs), macOS asks whether Lemon Studio may use the microphone; System Settings > Privacy & Security > - Microphone changes the answer. Started from a terminal, macOS asks on the terminal's behalf instead. -- **FL Studio's factory content** (samples that projects name through `%FLStudioFactoryData%`) is found in the newest - `/Applications/FL Studio *.app`; `OPENSTUDIO_FACTORY` overrides it. -- **Settings, themes and presets** live in `~/Library/Application Support/Lemon Studio`. `OPENSTUDIO_USER_DIR` - overrides the folder. -- Plugins are found in `~/Library/Audio/Plug-Ins/{CLAP,VST3,VST}`, `/Library/Audio/Plug-Ins/{CLAP,VST3,VST}` and - `CLAP_PATH`, plus any folder added in Settings > Plugins. Audio Units are not supported. On Apple silicon, plugins - built for Intel Macs only (common among older VST2 plugins) cannot be loaded; VST2 ones are listed as not supported, - without being tried. - -### Using Lemon Studio - -Open a project directly by passing its path: +The first run takes a while. It also builds Lemon Studio's plugins and installs them as VST3 and CLAP plugins for your +other DAWs. A copy built from source never updates itself: to update it, run `git pull` and build it again. -```bash -cargo run -p os-app --release -- path/to/project.flp -``` +### Learn to use it -Use `FILE > Export audio` (Ctrl+R) to render the song, or the current pattern in PAT mode, to WAV, FLAC, MP3 or OGG files. The same -render runs without a window, hosting the same plugins the app would and without opening an audio device: +Start with the [getting started guide](https://getlemonstudio.app/wiki/getting-started/), or look something up in the +[wiki](https://getlemonstudio.app/wiki/). -```bash -cargo run -p os-app --release -- --render path/to/project.flp out.wav [--rate 48000] [--seconds 30] [--from TICK] [--builtin-only] -``` +## Plans -`--builtin-only` hosts only Lemon Studio's own plugins, for a render that is the same on every machine. -Settings > Theme picks the skin (Lemon, or Citrus, the look formerly called Classic) and the theme; the choice is -remembered. +### The first alpha -Lemon Trio and Lemon Parametric EQ were called Lemon 3x Osc and Lemon Parametric EQ 2 before, and earlier all three -plugins were called Open Sampler, Open 3x Osc and Open Parametric EQ 2. They keep their plugin IDs, so sessions saved -with the old names still open with the new plugins. Installing the plugins (by the run from source or -`bundle-plugins --install`) removes bundles installed under the old names; delete any others you copied yourself, or -DAWs will list each plugin twice. +✅ done · 🚧 in progress · ⏳ not started -### Tests +| Step | Status | +|---|:---:| +| Self-updating builds, and nightly builds with their own name and icon | ✅ | +| HELP menu that opens the website and wiki | ✅ | +| Stop plugin crashes from closing Lemon Studio on macOS and Linux (done on Windows) | 🚧 | +| Decide which gaps found by the recent audit hold up the alpha, such as the arranger's fixed 4-beat bars | ⏳ | +| Publish the first nightly builds | ⏳ | +| Tag `v0.1.0`, the first alpha | ⏳ | -```bash -cargo test --workspace -``` - -Tests that need an audio device are marked `#[ignore]` and run with `cargo test -p os-app -- --ignored`. -Project-file corpus tests run when `OPENSTUDIO_FLP_CORPUS` points to a text file listing `.flp` paths; -project files are never committed to this repository. -The watermark test (`cargo test -p watermark`) checks that every source file opens with its header: a copyright line -for each of its copyright holders, its SPDX licence identifier and the project's name. +Nightly builds come first. Tagged releases follow once the [alpha checklist](docs/alpha-checklist.md) is done. Every +`0.x` release is an alpha, and `v1.0.0` will be the first stable release. -Every test binary is compiled and linked on its own, so a crate keeps its integration tests in one: -`tests/integration/main.rs` names each file there as a module (run one with `cargo test -p os-engine --test integration -fx_null`); a new file goes there, not beside it. The crates have no doc tests (`doctest = false`: code in doc comments is -`text` or `ignore`), and a crate without tests has `test = false`; take that out when adding its first test. +### After the alpha -### Scripting and assistants +- The arpeggiator, echo delay, gate, time shift and tracking. +- Glides for plugin instruments, and more automation targets. +- Free routing between the plugins inside a Lemon Container. -`--control ` lets scripts, tests and AI assistants read and change the open project over a local socket -(JSON-RPC 2.0), and `--serve [project.flp]` does the same without a window. Each change is an undo step named -after the client; clients can be limited to reading or to proposing changes the user accepts. The protocol and its -commands are in [docs/control-plane.md](docs/control-plane.md). - -```bash -cargo run -p os-app --release -- --control /tmp/lemon.sock path/to/project.flp -``` +The item-by-item roadmap is on the [Discord server](https://discord.gg/yC2uCuGs3M). -### Command-line tools +## Community and contributing -| Tool | Purpose | -|---|---| -| `flp-dump` | Print a project file's event stream and verify that it round-trips | -| `os-render` | Render a project or pattern offline to a WAV file with the engine alone (no hosted plugins, so it does not sound like the app; `--render` above does) | -| `os-play` | Play a project through the default audio output | -| `bundle-plugins` | Build Lemon Studio's own plugins as VST3 and CLAP bundles, and optionally install them (`cargo run -p os-app --release` runs it with `--install`) | -| `bundle-app` | Build Lemon Studio as a macOS app, and optionally install it | -| `updater` | `lemonstudio-updater`, which release builds carry to update themselves (built by the release workflow only; [docs/releasing.md](docs/releasing.md)) | +Join the [Discord server](https://discord.gg/yC2uCuGs3M) to follow development and talk about the project. Support isn't +offered at this stage, but you can [report a bug](https://github.com/ItsAlphaNeon/Lemon-Studio/issues/new/choose). -## Architecture +Lemon Studio isn't accepting outside contributions yet. Once it does, all contributions must be **clean-room** work: +decompiled code, and code or pseudocode derived from decompiled output, won't be accepted in any form. -Lemon Studio is a Cargo workspace of focused crates: +Lemon Studio is developed independently. File-format and behaviour details needed for interoperability are first written +down as specifications, and the code is implemented from those specifications and public documentation. All artwork, +icons and interface graphics are original or come from openly licensed projects. -| Crate | Responsibility | -|---|---| -| [`os-model`](crates/os-model) | Project data model, free of I/O | -| [`os-flp`](crates/os-flp) | Lossless `.flp` event-stream reader/writer and model mapping | -| [`os-engine`](crates/os-engine) | Audio engine: sampler, mixer, routing, effects, envelopes, automation | -| [`os-dsp`](crates/os-dsp) | DSP building blocks: level curve, pan split, gain glides, mixer matrix and equaliser | -| [`os-theme`](crates/os-theme) | Colour palette, skins (Lemon, Citrus), theme files and the HSL adjustment model | -| [`os-ui`](crates/os-ui) | CPU canvas, text rendering and the shared widget kit | -| [`os-app`](crates/os-app) | The `lemonstudio` application: windows, editors, transport | -| [`os-host`](crates/os-host) | Format-neutral plugin hosting layer (CLAP, VST3, VST2) | -| [`os-clap`](crates/os-clap) | CLAP plugin host | -| [`os-vst3`](crates/os-vst3) | VST3 plugin host | -| [`os-vst2`](crates/os-vst2) | VST2 plugin host, on a clean-room description of the interface (no Steinberg SDK) | -| [`os-hostlink`](crates/os-hostlink) | Host link protocol between Lemon Studio and its own plugins | -| [`os-plugkit`](crates/os-plugkit) | Shared editor pieces of Lemon Studio's own plugins | -| [`os-paths`](crates/os-paths) | Where Lemon Studio keeps its settings, themes and presets on each platform | -| [`lemon-sampler`](plugins/lemon-sampler) | Lemon Sampler instrument (VST3 + CLAP) | -| [`lemon-3x-osc`](plugins/lemon-3x-osc) | Lemon Trio instrument (VST3 + CLAP) | -| [`lemon-drum-sampler`](plugins/lemon-drum-sampler) | Lemon Drum Sampler instrument, 32 pads of velocity-layered samples (VST3 + CLAP) | -| [`lemon-parametric-eq-2`](plugins/lemon-parametric-eq-2) | Lemon Parametric EQ effect (VST3 + CLAP) | -| [`lemon-limiter`](plugins/lemon-limiter) | Lemon Limiter effect (VST3 + CLAP) | -| [`lemon-reverb`](plugins/lemon-reverb) | Lemon Reverb effect (VST3 + CLAP) | -| [`lemon-delay`](plugins/lemon-delay) | Lemon Delay effect (VST3 + CLAP) | -| [`lemon-small-fx`](plugins/lemon-small-fx) | What the small Lemon effects share: the plugin, its state, the editor and each effect's description | -| [`lemon-soft-clipper`](plugins/lemon-soft-clipper) | Lemon Soft Clipper effect (VST3 + CLAP) | -| [`lemon-fast-distortion`](plugins/lemon-fast-distortion) | Lemon Fast Distortion effect (VST3 + CLAP) | -| [`lemon-balance`](plugins/lemon-balance) | Lemon Balance effect (VST3 + CLAP) | -| [`lemon-stereo-enhancer`](plugins/lemon-stereo-enhancer) | Lemon Stereo Enhancer effect (VST3 + CLAP) | -| [`lemon-transient-processor`](plugins/lemon-transient-processor) | Lemon Transient Processor effect (VST3 + CLAP) | -| [`lemon-chorus`](plugins/lemon-chorus) | Lemon Chorus effect (VST3 + CLAP) | -| [`lemon-stereo-shaper`](plugins/lemon-stereo-shaper) | Lemon Stereo Shaper effect (VST3 + CLAP) | -| [`lemon-filter`](plugins/lemon-filter) | Lemon Filter effect (VST3 + CLAP) | -| [`lemon-flanger`](plugins/lemon-flanger) | Lemon Flanger effect (VST3 + CLAP) | -| [`lemon-peak-controller`](plugins/lemon-peak-controller) | Lemon Peak Controller: a peak follower and LFO whose outputs drive linked controls (VST3 + CLAP) | -| [`lemon-formula-controller`](plugins/lemon-formula-controller) | Lemon Formula Controller: a typed formula of three knobs and the song position whose output drives linked controls (VST3 + CLAP) | -| [`lemon-phaser`](plugins/lemon-phaser) | Lemon Phaser effect (VST3 + CLAP) | -| [`lemon-vocoder`](plugins/lemon-vocoder) | Lemon Vocoder: a band vocoder with a sidechain input for the carrier (VST3 + CLAP) | -| [`pulp-filter`](plugins/pulp-filter) | Pulp Filter effect, a pattern-controlled multi-filter (VST3 + CLAP) | -| [`press`](plugins/press) | Press effect, a multiband maximiser (VST3 + CLAP) | -| [`lemon-drop`](plugins/lemon-drop) | Lemon Drop, an audio visualizer: oscilloscope, spectrum, meter and vectorscope (VST3 + CLAP) | -| [`tesla`](plugins/tesla) | Tesla, the audio editor and recorder (VST3 + CLAP) | -| [`citrus`](plugins/citrus) | Citrus instrument, a six-operator synthesizer (VST3 + CLAP) | -| [`smith`](plugins/smith) | Smith instrument, an additive synthesizer (VST3 + CLAP) | -| [`lemon-slicer`](plugins/lemon-slicer) | Lemon Slicer instrument, a loop cut into slices (VST3 + CLAP) | - -## Roadmap - -The roadmap is kept on the [Lemon Studio Discord server](https://discord.gg/yC2uCuGs3M), where every item is -marked as complete, in progress or not started. The broad next steps are the engine rework (sampler voice, -automation), opening projects from older FL Studio versions, more built-in instruments and effects, and the rest of -the plugin window features on Linux. - -## Development approach - -Lemon Studio is developed independently. File-format and behaviour details needed for -interoperability are first written down as specifications, and the product code is implemented -from those specifications and public documentation. All artwork, icons and interface graphics -in this repository are original or come from the openly licensed projects listed below. - -## Contributing - -Lemon Studio is not accepting outside contributions yet. Once it does, pull requests will be welcome -from developers who are comfortable with Rust and the pull-request workflow. - -All contributions must be **clean-room** work. Decompiled code, and code or pseudocode derived from -decompiled output, will not be accepted in any form: the codebase must contain none of it. - -Contributors keep the copyright of their work and license it under the GPL, version 3 or later, like the rest of -Lemon Studio. In each file you write or substantially change, add a line with your name or username to the copyright -lines at the top of the header, `Copyright (C) `, and keep the lines already there. - -## Community - -Join the [Lemon Studio Discord server](https://discord.gg/yC2uCuGs3M) to follow development and talk -about the project. Please keep in mind that support is not offered at this stage. - -## Third-party components - -| Component | Use | License | -|---|---|---| -| [Cuprum](https://fonts.google.com/specimen/Cuprum) by Jovanny Lemonad | Interface typeface | [SIL Open Font License 1.1](crates/os-ui/fonts/Cuprum/OFL.txt) | -| [Barlow](https://github.com/jpt/barlow) by The Barlow Project Authors | Interface typeface on Linux and macOS | [SIL Open Font License 1.1](crates/os-ui/fonts/Barlow/OFL.txt) | -| [Tabler Icons](https://tabler.io/icons) | Interface icons | [MIT](crates/os-ui/icons/TABLER-LICENSE.txt) | -| [NIH-plug](https://github.com/robbert-vdh/nih-plug) | Plugin framework for Lemon Studio's plugins | ISC | -| [vst3-sys](https://github.com/RustAudio/vst3-sys) | VST3 interface bindings (plugin hosting and Lemon Studio's plugins) | GPLv3 or later (its com crate MIT) | -| [vst2sdk](https://github.com/Xaymar/vst2sdk) by Xaymar | Clean-room description of the VST2 interface, which `os-vst2`'s bindings are written from | [BSD 3-Clause](crates/os-vst2/LICENSE-vst2sdk.txt) | -| [FST](https://git.iem.at/zmoelnig/FST) by IOhannes m zmölnig | Reverse-engineered VST2 interface: the parts vst2sdk leaves out (time info, edit gestures) | GPLv3 or later | -| [Signalsmith Stretch](https://github.com/Signalsmith-Audio/signalsmith-stretch) by Geraint Luff / Signalsmith Audio Ltd, with Signalsmith Linear | Time stretching and pitch shifting | MIT | -| [signalsmith-stretch](https://github.com/colinmarc/signalsmith-stretch-rs) by Colin Marc | Rust bindings to Signalsmith Stretch | MIT | -| [ASIO SDK](https://www.steinberg.net/asiosdk) by Steinberg Media Technologies GmbH (host files) | ASIO output on Windows | [GPLv3](crates/os-app/asiosdk/LICENSE.txt) (its GPL option); a Windows build with it is GPLv3 | -| [Cantarell](https://gitlab.gnome.org/GNOME/cantarell-fonts), built into the sctk-adwaita crate | Window title bars on Wayland (Linux) | SIL Open Font License 1.1 | -| [LAME](https://lame.sourceforge.io) 3.100, built by the mp3lame-sys crate | MP3 export | LGPL version 2 or later | -| Rust crates listed in `Cargo.lock` | Various | Their respective licenses | - -Their copyright notices and licence texts are collected in [THIRD-PARTY-NOTICES.txt](THIRD-PARTY-NOTICES.txt), which -goes with every copy of Lemon Studio next to [LICENSE](LICENSE). Its last section, the Rust crates with their licence -texts, is generated by `cargo run -p notices` (with [cargo-about](https://github.com/EmbarkStudios/cargo-about): -`cargo install cargo-about --locked --features cli`); `cargo test` fails while a crate that goes into a build is missing -from it, so run it after changing a dependency. - -ASIO is a registered trademark of Steinberg Media Technologies GmbH. +Tests, the code layout, command-line tools and scripting are covered in [docs/development.md](docs/development.md). ## License -Copyright (C) 2026 ItsAlphaNeon and the Lemon Studio contributors. Each source file names its copyright holders in -its header. +Copyright (C) 2026 ItsAlphaNeon and the Lemon Studio contributors. Each source file names its copyright holders in its +header. Lemon Studio is free software: you can redistribute it and/or modify it under the terms of the -[GNU General Public License](LICENSE), version 3 or (at your option) any later version. It is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. See the GNU General Public License for more details. +[GNU General Public License](LICENSE), version 3 or (at your option) any later version. A Windows build includes the ASIO +SDK under its GPLv3 option, so that build is GPLv3. Lemon Studio is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. -The third-party components listed above keep their authors' copyright and licences, whose notices are in -[THIRD-PARTY-NOTICES.txt](THIRD-PARTY-NOTICES.txt). The two source files that hold others' work -(`crates/os-vst2/src/abi.rs`, `crates/os-ui/src/tabler.rs`) name it in their header. +Third-party components keep their authors' copyright and licences. Their notices are in +[THIRD-PARTY-NOTICES.txt](THIRD-PARTY-NOTICES.txt), which goes with every copy of Lemon Studio. -**A request, not a licence term.** As the author, I'd ask that Lemon Studio's code not be used in ArtCraft. This is -only a request: it is not part of Lemon Studio's licence, adds no condition to the GPL, and takes away none of the -rights the GPL gives you. +**A request, not a licence term.** As the author, I'd ask that Lemon Studio's code not be used in ArtCraft. This is only +a request: it is not part of Lemon Studio's licence, adds no condition to the GPL, and takes away none of the rights the +GPL gives you. ## Trademarks -FL Studio is a trademark of Image-Line Software. Lemon Studio is an independent project and is not -affiliated with, sponsored by or endorsed by Image-Line Software. FL Studio and its `.flp` file format -are referred to solely to describe interoperability. +FL Studio is a trademark of Image-Line Software. Lemon Studio is an independent project and is not affiliated with, +sponsored by or endorsed by Image-Line Software. FL Studio and its `.flp` file format are referred to solely to describe +interoperability. -VST is a registered trademark of Steinberg Media Technologies GmbH. All other trademarks are the -property of their respective owners. +ASIO Compatible logo -
-
- -
-Copyright © 2026 ItsAlphaNeon and the Lemon Studio contributors. Free software under the GNU GPL, version 3 or later. -
+VST and ASIO are registered trademarks of Steinberg Media Technologies GmbH. All other trademarks are the property of +their respective owners. diff --git a/docs/assets/screenshot-arranger.webp b/docs/assets/screenshot-arranger.webp new file mode 100644 index 000000000..7818fbf6e Binary files /dev/null and b/docs/assets/screenshot-arranger.webp differ diff --git a/docs/assets/screenshot-instrument-rack.webp b/docs/assets/screenshot-instrument-rack.webp new file mode 100644 index 000000000..de0d7e8ef Binary files /dev/null and b/docs/assets/screenshot-instrument-rack.webp differ diff --git a/docs/assets/screenshot-mixer.webp b/docs/assets/screenshot-mixer.webp new file mode 100644 index 000000000..aa81bfc9d Binary files /dev/null and b/docs/assets/screenshot-mixer.webp differ diff --git a/docs/assets/screenshot-piano-roll.webp b/docs/assets/screenshot-piano-roll.webp index db276844d..cac28e4f9 100644 Binary files a/docs/assets/screenshot-piano-roll.webp and b/docs/assets/screenshot-piano-roll.webp differ diff --git a/docs/assets/screenshot-playlist.webp b/docs/assets/screenshot-playlist.webp deleted file mode 100644 index def6e379b..000000000 Binary files a/docs/assets/screenshot-playlist.webp and /dev/null differ diff --git a/docs/assets/screenshot.webp b/docs/assets/screenshot.webp index 21f79eeb5..918d60b0a 100644 Binary files a/docs/assets/screenshot.webp and b/docs/assets/screenshot.webp differ diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 000000000..a02a81f33 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,161 @@ +# Development notes + +The details that used to be in the README. For how to install and use Lemon Studio, see the +[wiki](https://getlemonstudio.app/wiki/). Building on each system is in the +[build guide](https://getlemonstudio.app/wiki/reference/build-from-source/), and what differs on Linux and macOS is in +[Troubleshooting](https://getlemonstudio.app/wiki/reference/troubleshooting/). + +## Running from source + +`cargo run -p os-app --release` builds and runs Lemon Studio. Before Lemon Studio starts, it also rebuilds Lemon Studio's +own plugins and installs the ones that changed as VST3 and CLAP plugins, in the folders where other DAWs find them. Lemon +Studio itself has every one of them built in and needs no plugin files. A plugin that is new or updated in the repository +shows up in other DAWs at the next run. The first run builds every plugin, which takes a few minutes more; later runs +rebuild only what changed. Set `OPENSTUDIO_NO_PLUGIN_BUILD=1` to skip the plugin build. A Lemon Studio installed with +`cargo install` builds nothing: after pulling changes, either run the command above once, or build and install only the +plugins with `cargo run -p bundle-plugins -- --install`. + +Open a project directly by passing its path: + +```bash +cargo run -p os-app --release -- path/to/project.lemon +``` + +The render that `FILE > Export audio` does also runs without a window, hosting the same plugins the app would and without +opening an audio device: + +```bash +cargo run -p os-app --release -- --render path/to/project.lemon out.wav [--rate 48000] [--seconds 30] [--from TICK] [--builtin-only] +``` + +`--builtin-only` hosts only Lemon Studio's own plugins, for a render that is the same on every machine. + +On Windows, `lemonstudio.exe` is a GUI program: started from Explorer, the Start menu or a shortcut it opens no console +window. Under `cargo run` its output goes to the terminal as before. Started directly from a terminal it prints there too, +but the terminal does not wait for it: for `--render`, add `| Out-Default` in PowerShell (or use `start /wait` in `cmd`) +to wait until the render is done. + +## Where things live + +`OPENSTUDIO_USER_DIR` overrides the folder for settings, themes and presets. By default it is: + +| System | Folder | +|---|---| +| Windows | `%APPDATA%\Lemon Studio` | +| Linux | `$XDG_CONFIG_HOME/Lemon Studio` (usually `~/.config/Lemon Studio`) | +| macOS | `~/Library/Application Support/Lemon Studio` | + +Plugins are found in these folders, plus any added in Settings > Plugins: + +| System | Folders | +|---|---| +| Windows | `%LOCALAPPDATA%\Programs\Common\{VST3,CLAP}`, `%COMMONPROGRAMFILES%\{VST3,CLAP}` and `CLAP_PATH`. VST2: the folder installers record (`HKEY_LOCAL_MACHINE\SOFTWARE\VST`, `VSTPluginsPath`) and those of `%PROGRAMFILES%\VSTPlugins`, `%PROGRAMFILES%\Steinberg\VSTPlugins`, `%COMMONPROGRAMFILES%\VST2` and `%COMMONPROGRAMFILES%\Steinberg\VST2` that exist | +| Linux | `~/.clap`, `/usr/lib/clap`, `/usr/local/lib/clap` and `CLAP_PATH`; `~/.vst3`, `/usr/lib/vst3` and `/usr/local/lib/vst3`. VST2: `VST_PATH`, else `~/.vst`, `/usr/lib/vst`, `/usr/local/lib/vst` and the `lxvst` folders that exist | +| macOS | `~/Library/Audio/Plug-Ins/{CLAP,VST3,VST}`, `/Library/Audio/Plug-Ins/{CLAP,VST3,VST}` and `CLAP_PATH` | + +On Linux, `OPENSTUDIO_WAYLAND=1` asks for native Wayland even with an X server. On macOS, `OPENSTUDIO_FACTORY` overrides +where FL Studio's factory content is looked for (by default the newest `/Applications/FL Studio *.app`). + +## Tests + +```bash +cargo test --workspace +``` + +Tests that need an audio device are marked `#[ignore]` and run with `cargo test -p os-app -- --ignored`. Project-file +corpus tests run when `OPENSTUDIO_FLP_CORPUS` points to a text file listing `.flp` paths; project files are never +committed to this repository. The watermark test (`cargo test -p watermark`) checks that every source file opens with its +header: a copyright line for each of its copyright holders, its SPDX licence identifier and the project's name. + +Every test binary is compiled and linked on its own, so a crate keeps its integration tests in one: +`tests/integration/main.rs` names each file there as a module (run one with `cargo test -p os-engine --test integration +fx_null`); a new file goes there, not beside it. The crates have no doc tests (`doctest = false`: code in doc comments is +`text` or `ignore`), and a crate without tests has `test = false`; take that out when adding its first test. + +## Scripting and assistants + +`--control ` lets scripts, tests and AI assistants read and change the open project over a local socket (JSON-RPC +2.0), and `--serve [project]` does the same without a window. Each change is an undo step named after the +client; clients can be limited to reading or to proposing changes the user accepts. The protocol and its commands are in +[control-plane.md](control-plane.md). + +```bash +cargo run -p os-app --release -- --control /tmp/lemon.sock path/to/project.lemon +``` + +## Command-line tools + +| Tool | Purpose | +|---|---| +| `flp-dump` | Print a project file's event stream and verify that it round-trips | +| `os-render` | Render a project or pattern offline to a WAV file with the engine alone (no hosted plugins, so it does not sound like the app; `--render` above does) | +| `os-play` | Play a project through the default audio output | +| `bundle-plugins` | Build Lemon Studio's own plugins as VST3 and CLAP bundles, and optionally install them (`cargo run -p os-app --release` runs it with `--install`) | +| `bundle-app` | Build Lemon Studio as a macOS app, and optionally install it | +| `notices` | Generate the last section of [THIRD-PARTY-NOTICES.txt](../THIRD-PARTY-NOTICES.txt) (below) | +| `updater` | `lemonstudio-updater`, which release builds carry to update themselves (built by the release workflow only; [releasing.md](releasing.md)) | + +## Code layout + +Lemon Studio is a Cargo workspace of focused crates: + +| Crate | Responsibility | +|---|---| +| [`os-model`](../crates/os-model) | Project data model, free of I/O | +| [`os-flp`](../crates/os-flp) | Lossless project event-stream reader and writer, and model mapping | +| [`os-smf`](../crates/os-smf) | Standard MIDI files | +| [`os-engine`](../crates/os-engine) | Audio engine: sampler, mixer, routing, effects, envelopes, automation | +| [`os-dsp`](../crates/os-dsp) | DSP building blocks: level curve, pan split, gain glides, mixer matrix and equaliser | +| [`os-theme`](../crates/os-theme) | Colour palette, skins (Lemon, Citrus), theme files and the HSL adjustment model | +| [`os-ui`](../crates/os-ui) | CPU canvas, text rendering and the shared widget kit | +| [`os-app`](../crates/os-app) | The `lemonstudio` application: windows, editors, transport | +| [`os-host`](../crates/os-host) | Format-neutral plugin hosting layer (CLAP, VST3, VST2) | +| [`os-clap`](../crates/os-clap) | CLAP plugin host | +| [`os-vst3`](../crates/os-vst3) | VST3 plugin host | +| [`os-vst2`](../crates/os-vst2) | VST2 plugin host, on a clean-room description of the interface (no Steinberg SDK) | +| [`os-hostlink`](../crates/os-hostlink) | Host link protocol between Lemon Studio and its own plugins | +| [`os-plugkit`](../crates/os-plugkit) | Shared editor pieces of Lemon Studio's own plugins | +| [`os-paths`](../crates/os-paths) | Where Lemon Studio keeps its settings, themes and presets on each platform | + +Each built-in plugin is a crate in [`plugins/`](../plugins), built into Lemon Studio and also as a VST3 and CLAP plugin. +`lemon-small-fx` is what the small Lemon effects share, `lemon-3x-osc` is Lemon Trio and `lemon-parametric-eq-2` is Lemon +Parametric EQ. + +## Old plugin names + +Lemon Trio and Lemon Parametric EQ were called Lemon 3x Osc and Lemon Parametric EQ 2 before, and earlier all three +plugins were called Open Sampler, Open 3x Osc and Open Parametric EQ 2. They keep their plugin IDs, so sessions saved with +the old names still open with the new plugins. Installing the plugins (by the run from source or `bundle-plugins +--install`) removes bundles installed under the old names; delete any others you copied yourself, or DAWs will list each +plugin twice. + +## Copyright headers + +Contributors keep the copyright of their work and license it under the GPL, version 3 or later, like the rest of Lemon +Studio. In each file you write or substantially change, add a line with your name or username to the copyright lines at +the top of the header, `Copyright (C) `, and keep the lines already there. The two source files that hold +others' work (`crates/os-vst2/src/abi.rs`, `crates/os-ui/src/tabler.rs`) name it in their header. + +## Third-party components + +| Component | Use | License | +|---|---|---| +| [Cuprum](https://fonts.google.com/specimen/Cuprum) by Jovanny Lemonad | Interface typeface | [SIL Open Font License 1.1](../crates/os-ui/fonts/Cuprum/OFL.txt) | +| [Barlow](https://github.com/jpt/barlow) by The Barlow Project Authors | Interface typeface on Linux and macOS | [SIL Open Font License 1.1](../crates/os-ui/fonts/Barlow/OFL.txt) | +| [Tabler Icons](https://tabler.io/icons) | Interface icons | [MIT](../crates/os-ui/icons/TABLER-LICENSE.txt) | +| [NIH-plug](https://github.com/robbert-vdh/nih-plug) | Plugin framework for Lemon Studio's plugins | ISC | +| [vst3-sys](https://github.com/RustAudio/vst3-sys) | VST3 interface bindings (plugin hosting and Lemon Studio's plugins) | GPLv3 or later (its com crate MIT) | +| [vst2sdk](https://github.com/Xaymar/vst2sdk) by Xaymar | Clean-room description of the VST2 interface, which `os-vst2`'s bindings are written from | [BSD 3-Clause](../crates/os-vst2/LICENSE-vst2sdk.txt) | +| [FST](https://git.iem.at/zmoelnig/FST) by IOhannes m zmölnig | Reverse-engineered VST2 interface: the parts vst2sdk leaves out (time info, edit gestures) | GPLv3 or later | +| [Signalsmith Stretch](https://github.com/Signalsmith-Audio/signalsmith-stretch) by Geraint Luff / Signalsmith Audio Ltd, with Signalsmith Linear | Time stretching and pitch shifting | MIT | +| [signalsmith-stretch](https://github.com/colinmarc/signalsmith-stretch-rs) by Colin Marc | Rust bindings to Signalsmith Stretch | MIT | +| [ASIO SDK](https://www.steinberg.net/asiosdk) by Steinberg Media Technologies GmbH (host files) | ASIO output on Windows | [GPLv3](../crates/os-app/asiosdk/LICENSE.txt) (its GPL option); a Windows build with it is GPLv3 | +| [Cantarell](https://gitlab.gnome.org/GNOME/cantarell-fonts), built into the sctk-adwaita crate | Window title bars on Wayland (Linux) | SIL Open Font License 1.1 | +| [LAME](https://lame.sourceforge.io) 3.100, built by the mp3lame-sys crate | MP3 export | LGPL version 2 or later | +| Rust crates listed in `Cargo.lock` | Various | Their respective licenses | + +Their copyright notices and licence texts are collected in [THIRD-PARTY-NOTICES.txt](../THIRD-PARTY-NOTICES.txt), which +goes with every copy of Lemon Studio next to [LICENSE](../LICENSE). Its last section, the Rust crates with their licence +texts, is generated by `cargo run -p notices` (with [cargo-about](https://github.com/EmbarkStudios/cargo-about): +`cargo install cargo-about --locked --features cli`); `cargo test` fails while a crate that goes into a build is missing +from it, so run it after changing a dependency. diff --git a/docs/status.md b/docs/status.md index 91664c9bc..9d08008e8 100644 --- a/docs/status.md +++ b/docs/status.md @@ -1,6 +1,6 @@ # Feature status -The details behind the [Capabilities](../README.md#capabilities) table, area by area. Controls for anything +The details behind the [Status](../README.md#status) table, area by area. Controls for anything that is not implemented yet are greyed out in the application: hovering one says "not available yet", and clicking it does nothing. Not everything missing has a control: many features of FL Studio are simply absent from the menus, and a few controls look live but change nothing heard (the Release lanes of the piano roll and the graph @@ -745,8 +745,8 @@ ASIO is a registered trademark of Steinberg Media Technologies GmbH. ## 🚧 Platforms - Windows 10 / 11 -- Linux: X11, and Wayland through XWayland (see the [Linux notes](../README.md#linux)) -- macOS 11 or newer, supported at the same level as Linux (see the [macOS notes](../README.md#macos)) +- Linux: X11, and Wayland through XWayland (see [Troubleshooting](https://getlemonstudio.app/wiki/reference/troubleshooting/)) +- macOS 11 or newer, supported at the same level as Linux (see [Troubleshooting](https://getlemonstudio.app/wiki/reference/troubleshooting/)) ## 🚧 Look and themes