GithubHelp home page GithubHelp logo

pac-dev / teasynth Goto Github PK

View Code? Open in Web Editor NEW
24.0 4.0 1.0 22.22 MB

An Audio Programming Tool

Home Page: https://ts.osar.fr

JavaScript 96.67% HTML 0.30% CSS 3.03%
creative-coding generative-music livecoding

teasynth's Introduction

Teasynth: an Audio Programming Tool

Teasynth is a tool to make music with code in Javascript, Faust and Sporth. There are two main ways of using it:

  • The web editor runs in the browser and provides an instant composition environment.
  • The command line interface can render music to audio files, serve the editor locally, and bundle music code.

What does it sound like?

Teasynth was used to produce all the audio in ambient.garden. The related album "A Walk Through the Ambient Garden" was also produced entirely using Teasynth. You can build it from source or listen to it on Spotify and Apple Music. While these are ambient, Teasynth is, of course, not limited to any particular genre.

Using the Web Editor

The editor is available on ts.osar.fr. You can also serve it yourself or build it as a static site using the command line (see the "command line" section below). Its main features are:

  • Load and save a local directory. The loaded directory is the current project, and you can edit files and folders in the project.

  • The code editor component is VSCode's Monaco. It features inline help and autocomplete for JS and Faust, and a command palette with keybindings that should be familiar if you've used VSCode.

  • Play and stop the current audio patch. A patch is any directory containing a main.js file exporting a process function that generates audio frame-by-frame. See the example patches for more details.

  • Sliders to control the parameters of any currently running audio patch.

  • An experimental macro system. Create a macro file and record a performance where you start/stop patches and modify their parameters. Macros are simple text files that can be edited, played back, and rendered.

  • Feedback in the browser console. The editor is meant to run with the browser console enabled.

Using the Command Line

The Teasynth command line requires Deno. If you haven't used Deno, you can download it as a single binary or install it properly if you prefer. Subcommands that produce audio files also require ffmpeg to be present. The following help text, included in the tool, describes all subcommands:

Optionally install with: deno install -A teasynth.js
If installed, invoke with: teasynth
Otherwise, use: deno run -A teasynth.js

SUBCOMMAND: RENDER
------------------
Render a patch to an audio file.
Usage: teasynth render MAINFILE OUTFILE [-t=DURATION] [--p-PARAM=X ...]
Arguments:
    MAINFILE        path to the main.js of the patch to render
    OUTFILE         path to the output audio file
    -t=DURATION     seconds of audio to render, default 10
    --p-PARAM=X     set value of patch parameter PARAM to X
Example 1: teasynth render projects/startup/1-welcome/main.js test.wav
    Renders the included test file for the default 10 seconds
Example 2: teasynth render example/main.js test.wav --p-lopass=500 --p-hipass=900
    Renders an example patch with values for parameters "lopass" and "hipass"

SUBCOMMAND: BUILD
-----------------
Build patches from a project into js+wasm bundles.
Usage: teasynth build PROJDIR OUTDIR [--patch=NAME ...]
Arguments:
    PROJDIR         path to project directory containing patches
    OUTDIR          path to output directory
    --patch=X       only build specified patches
Example 1: teasynth build projects/startup/ bundles/
    Build all patches in the included test project to the "bundles" folder
Example 2: teasynth build example/ bundles/ --patch=bell --patch=whistle
    Build only "bell" and "whistle" patches of an example project

SUBCOMMAND: SERVE-EDITOR
------------------------
Serve the Teasynth web editor locally.
Usage: teasynth serve-editor [--config=FILE]
Arguments:
    --config=FILE   optional path to configuration file.
                    the default is cli/config.default.json

SUBCOMMAND: GENERATE-EDITOR
---------------------------
Generate the Teasynth editor static website for deployment.
Usage: teasynth generate-editor OUTDIR [--config FILE] [-y]
Arguments:
    OUTDIR          path to output directory
    --config=FILE   optional path to configuration file.
                    the default is cli/config.default.json
    -y              answer "yes" to all confirmation prompts

SUBCOMMAND: MACRO
-----------------
Render a macro file to an audio file.
Usage: teasynth macro PROJDIR MACFILE OUTFILE
Arguments:
    PROJDIR         path to project directory containing patches
    MACFILE         path to macro text file
    OUTFILE         path to the output audio file

What makes Teasynth different from other livecoding options?

  • The code is the music. Teasynth is ideal for a style sometimes called "the code is the music", meaning your code runs without intervention to make a finished music piece. This contrasts with performance-centric livecoding, where you write and/or update code as part of a performance. Each approach has different advantages, but in short, "the code is the music" offers more freedom in how you structure your music and your code, at the expense of interrupting the music every time you want to reload the code.
  • Full sounds without samples. A lot of livecoding environments assume you want to work with existing sound samples or instruments. Making sound from scratch is often second class and/or results in old school bleep-bloop noises. Teasynth is designed to make interesting, polished sounds from scratch without samples, especially when using the integration with Faust.
  • Javascript. While Faust is ideal for low-level synth and effect code, Javascript takes on the high level, composition portion. It may not be the most loved, but it works. A scripting language that has received more optimization than any other. Temporal recursion with async/await. DSP modules compiled to WASM. Direct integration with the holy trinity. You can have it all.

Limitations

  • The web editor is meant for desktop browsers and does not work well on smartphones.
  • While the timing within patches is generally sample-accurate, the experimental macro system is not. It's more like "second-accurate", so if you like rhythm, you might want to avoid macros specifically. However, macros are at least timed precisely when rendered from the command line.

teasynth's People

Contributors

pac-dev avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar

Forkers

nikolay17538583

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.