ChucK Music Programming Language

Related tags

chuck
Overview

ChucK macOS - Build and Unit Tests Linux - Build and Unit Tests

Please note that the master branch has been renamed to main.

The Internet Engineering Task Force (IETF) points out that "Master-slave is an oppressive metaphor that will and should never become fully detached from history" as well as "In addition to being inappropriate and arcane, the master-slave metaphor is both technically and historically inaccurate." https://www.hanselman.com/blog/EasilyRenameYourGitDefaultBranchFromMasterToMain.aspx

Strongly-timed, Concurrent, and On-the-fly Music Programming Language

Welcome to ChucK!

what is it? : Chuck is a programming language for real-time sound synthesis and music creation. It is open-source and freely available on macOS, Windows, and Linux. Chuck presents a unique time-based, concurrent programming model that's precise and expressive (we call this strongly-timed), with dynamic control rates and the ability to add and modify code on-the-fly. In addition, ChucK supports MIDI, OpenSoundControl, HID device, and multi-channel audio. It's fun and easy to learn, and offers composers, researchers, and performers a powerful programming tool for building and experimenting with complex audio synthesis/analysis programs, and real-time interactive music.

For more information, including documentation, research publications, and community resources, please check out the ChucK website: http://chuck.stanford.edu/

Issues
  • Fix MacOS 11 compile

    Fix MacOS 11 compile

    makefile.osx was treating MacOS 11.1 as if it were pre-10.6

    opened by mitchblank 13
  • Add bounds exceptions to FilterBasic

    Add bounds exceptions to FilterBasic

    Not sure if Q bounding is desired.

    opened by ntindall 8
  • Add --syntax-check-only command line switch.

    Add --syntax-check-only command line switch.

    I want to add this switch in the hopes I'll be able to use it in my VSCode extension for ChucK to add syntax checking in the editor.

    opened by forrcaho 7
  • adsr releaseTime is nan

    adsr releaseTime is nan

    ADSR a;
    a.set( 10::ms, 2::ms, 0.0, 10::ms );
    <<< a.releaseTime() >>>;
    

    --> nan :(dur)

    opened by lathertonj 7
  • Implement some left-recursion in the Bison file

    Implement some left-recursion in the Bison file

    While attempting to play some large chuck files, with several thousand statements, I encountered a "memory exhausted" error.

    I found a reference to the issue, and a solution posted by Tom, here:

    https://lists.cs.princeton.edu/pipermail/chuck-users/2009-April/004029.html

    After some attempts at replacing all of the prepend_* with append_*, and failing, this PR replaces 3 functions and implements left-recursion in the Bison file.

    • All the tests pass.
    • I'm able to play the larger files that would cause the parser to run out of memory previously.

    Let me know if I can write more tests. Thanks!

    opened by stuntgoat 6
  • Reset lisa loop record point to loop start rather than the start of the lisa buffer when the loop end is reached.

    Reset lisa loop record point to loop start rather than the start of the lisa buffer when the loop end is reached.

    This was made to fix an issues I found when working with lisa loops. Looped overdubbing would break as the record position got reset to the beginning of the buffer rather than the loop start when the end of the loop was reached. This better matches the behavior of the play positions and fixes what I believe is currently a bug.

    opened by jordancolburn 6
  • Seg fault chuck --probe on OSX 10.9.3

    Seg fault chuck --probe on OSX 10.9.3

    $ chuck --probe
    [chuck]: found 5 device(s) ...
    [chuck]: ------( audio device: 1 )---------------
    [chuck]: device name = "Apple Inc.: Built-in Microphone"
    [chuck]: probe [success] ...
    [chuck]: # output channels = 0
    [chuck]: # input channels  = 2
    [chuck]: # duplex Channels = 0
    [chuck]: default output = NO
    [chuck]: default input = YES
    [chuck]: natively supported data formats:
    [chuck]:   32-bit float
    [chuck]: supported sample rates:
    [chuck]:   32000 Hz
    [chuck]:   44100 Hz
    [chuck]:   48000 Hz
    [chuck]:   88200 Hz
    [chuck]:   96000 Hz
    [chuck]: 
    [chuck]: ------( audio device: 2 )---------------
    [chuck]: device name = "Apple Inc.: Built-in Output"
    [chuck]: probe [success] ...
    [chuck]: # output channels = 2
    [chuck]: # input channels  = 0
    [chuck]: # duplex Channels = 0
    [chuck]: default output = YES
    [chuck]: default input = NO
    [chuck]: natively supported data formats:
    [chuck]:   32-bit float
    [chuck]: supported sample rates:
    [chuck]:   44100 Hz
    [chuck]:   48000 Hz
    [chuck]:   88200 Hz
    [chuck]:   96000 Hz
    [chuck]: 
    [chuck]: ------( audio device: 3 )---------------
    Segmentation fault: 11
    

    On this machine I have Apogee ONE and Soundflower drivers and the ONE device is not currently connected. If I remember right with previous ChucK versions the ONE comes up as device 3, sorry will require more investigation on my part.

    $ uname -a
    Darwin foo.local 13.2.0 Darwin Kernel Version 13.2.0: Thu Apr 17 23:03:13 PDT 2014; root:xnu-2422.100.13~1/RELEASE_X86_64 x86_64
    
    $ chuck --version
    
    chuck version: 1.3.4.0 (chimera)
       mac os x : intel : 64-bit
       http://chuck.cs.princeton.edu/
       http://chuck.stanford.edu/
    
    mac os x 
    opened by heuermh 5
  • Make linux-alsa errors

    Make linux-alsa errors

    Here is an errors log

    RtAudio/RtAudio.o: In function `RtApiJack::getDeviceCount()':
    RtAudio.cpp:(.text+0x2b2): undefined reference to `jack_client_open'
    RtAudio.cpp:(.text+0x30d): undefined reference to `jack_get_ports'
    RtAudio.cpp:(.text+0x4b6): undefined reference to `jack_client_close'
    RtAudio/RtAudio.o: In function `RtApiJack::closeStream()':
    RtAudio.cpp:(.text+0xbda): undefined reference to `jack_client_close'
    RtAudio.cpp:(.text+0xccd): undefined reference to `jack_deactivate'
    RtAudio/RtAudio.o: In function `RtApiJack::stopStream()':
    RtAudio.cpp:(.text+0x1c4e): undefined reference to `jack_deactivate'
    RtAudio/RtAudio.o: In function `RtApiJack::startStream()':
    RtAudio.cpp:(.text+0x1d33): undefined reference to `jack_activate'
    RtAudio.cpp:(.text+0x1dd1): undefined reference to `jack_get_ports'
    RtAudio.cpp:(.text+0x1e14): undefined reference to `jack_port_name'
    RtAudio.cpp:(.text+0x1e23): undefined reference to `jack_connect'
    RtAudio.cpp:(.text+0x1f19): undefined reference to `jack_get_ports'
    RtAudio.cpp:(.text+0x1f5c): undefined reference to `jack_port_name'
    RtAudio.cpp:(.text+0x1f75): undefined reference to `jack_connect'
    RtAudio/RtAudio.o: In function `RtApiJack::abortStream()':
    RtAudio.cpp:(.text+0x213b): undefined reference to `jack_deactivate'
    RtAudio/RtAudio.o: In function `RtApiJack::callbackEvent(unsigned long)':
    RtAudio.cpp:(.text+0x3ef4): undefined reference to `jack_port_get_buffer'
    RtAudio.cpp:(.text+0x4088): undefined reference to `jack_port_get_buffer'
    RtAudio.cpp:(.text+0x4148): undefined reference to `jack_port_get_buffer'
    RtAudio.cpp:(.text+0x41a8): undefined reference to `jack_port_get_buffer'
    RtAudio.cpp:(.text+0x4240): undefined reference to `jack_port_get_buffer'
    RtAudio/RtAudio.o:RtAudio.cpp:(.text+0x43cb): more undefined references to `jack_port_get_buffer' follow
    RtAudio/RtAudio.o: In function `RtAudio::openRtApi(RtAudio::Api)':
    RtAudio.cpp:(.text+0x5917): undefined reference to `jack_set_error_function'
    RtAudio/RtAudio.o: In function `RtApiJack::RtApiJack()':
    RtAudio.cpp:(.text+0x5bfb): undefined reference to `jack_set_error_function'
    RtAudio/RtAudio.o: In function `RtAudio::RtAudio(RtAudio::Api)':
    RtAudio.cpp:(.text+0x5eef): undefined reference to `jack_set_error_function'
    RtAudio/RtAudio.o: In function `RtApiJack::getDeviceInfo(unsigned int)':
    RtAudio.cpp:(.text+0x60a9): undefined reference to `jack_client_open'
    RtAudio.cpp:(.text+0x6113): undefined reference to `jack_get_ports'
    RtAudio.cpp:(.text+0x62e6): undefined reference to `jack_get_sample_rate'
    RtAudio.cpp:(.text+0x632d): undefined reference to `jack_get_ports'
    RtAudio.cpp:(.text+0x6373): undefined reference to `jack_get_ports'
    RtAudio.cpp:(.text+0x63ec): undefined reference to `jack_client_close'
    RtAudio.cpp:(.text+0x64f6): undefined reference to `jack_client_close'
    RtAudio.cpp:(.text+0x65ed): undefined reference to `jack_client_close'
    RtAudio/RtAudio.o: In function `RtApiJack::probeDeviceOpen(unsigned int, RtApi::StreamMode, unsigned int, unsigned int, unsigned int, unsigned long, unsigned int*, RtAudio::StreamOptions*)':
    RtAudio.cpp:(.text+0x6df0): undefined reference to `jack_client_open'
    RtAudio.cpp:(.text+0x6e9c): undefined reference to `jack_get_ports'
    RtAudio.cpp:(.text+0x6f71): undefined reference to `jack_client_open'
    RtAudio.cpp:(.text+0x70af): undefined reference to `jack_get_ports'
    RtAudio.cpp:(.text+0x7339): undefined reference to `jack_get_sample_rate'
    RtAudio.cpp:(.text+0x7351): undefined reference to `jack_client_close'
    RtAudio.cpp:(.text+0x7975): undefined reference to `jack_get_ports'
    RtAudio.cpp:(.text+0x79be): undefined reference to `jack_port_by_name'
    RtAudio.cpp:(.text+0x7a5b): undefined reference to `jack_get_buffer_size'
    RtAudio.cpp:(.text+0x7c59): undefined reference to `jack_set_process_callback'
    RtAudio.cpp:(.text+0x7c72): undefined reference to `jack_set_xrun_callback'
    RtAudio.cpp:(.text+0x7c89): undefined reference to `jack_on_shutdown'
    RtAudio.cpp:(.text+0x7cf1): undefined reference to `jack_port_register'
    RtAudio.cpp:(.text+0x7f41): undefined reference to `jack_port_register'
    RtAudio.cpp:(.text+0x8366): undefined reference to `jack_client_close'
    
    opened by Arseniusz 5
  • Adding a missing chuck script to the VM confuses subsequent error messages

    Adding a missing chuck script to the VM confuses subsequent error messages

    Small test case like this:

    Machine.add("./missing/script-that-does-not-exist");
    MidiIn min;
    min.open(31337);
    

    results in the following output (both with Chuck CLI and MiniAudicle), where Chuck incorrectly attributes the MIDI open error to the script-that-does-not-exist file:

    [script-that-does-not-exist]: no such file or directory
    [script-that-does-not-exist]: MidiIn: couldn't open MIDI port 31337...
    

    This is pretty low priority, as adding missing or typo-ed script filenames to the VM is obviously developer error, but the consequence on subsequent error messages can definitely lead to some befuddled head scratching.

    opened by ynohtna 5
  • Update to latest RtAudio (as submodule). Support for runtime selection of audio driver.

    Update to latest RtAudio (as submodule). Support for runtime selection of audio driver.

    Here we migrate the "burned-in" RtAudio support to utilize the official github version.

    Costs:

    • use of submodules may be a headache across branches. Or for non-pro-level git users.

    Benefits:

    • latest and greatest RtAudio
    • ability to have multiple drivers in the same chuck build. Currently we have validated cohabitation of Windows ASIO and DirectSound but it appears possible (but unproven) to have, eg, Pulse, Alsa and Jack drivers in the same linux build.

    Known issues:

    • the ASIO driver is currently busted (one fix is easy). https://github.com/thestk/rtaudio/issues/323. When the trivial fix is applied, the latency on the adc goes way down (compared to DirectSound). So this was the entire point of this exercise.

    Usage/testing:

    • no changes to the default builds have been made. And should still produce the same result. If one edits a makefile or vsproj to include more RtApi driver requests (eg -D__WINDOWS_ASIO__) you can include multiple drivers in your build. A new commandline option --driver is required to select the non-default driver... For example: chuck --probe --driver::ASIO vs chuck --probe
    opened by dbadb 1
  • Fix for uninitialized variable in RIFF_MARKER for .wav files.

    Fix for uninitialized variable in RIFF_MARKER for .wav files.

    Comes about when reading a file written with WvOut. It seems possible that the real problem is with WvOut writing bogus files, but this is definitely a problem here as well.

    opened by dbadb 0
  • Fix incorrect bias on pink noise and free memory from previous malloc

    Fix incorrect bias on pink noise and free memory from previous malloc

    This should fix issue #195. I also spotted a malloc without a corresponding free on pink_array

    opened by anthonyhawes 0
  • Pink noise produces values outside the range -1 to +1

    Pink noise produces values outside the range -1 to +1

    CNoise cn => dac;
    "pink" => cn.mode
    1::second => now;
    

    produces audio that crackles due to clipping

    opened by anthonyhawes 0
  • makefile.osx: improve sw_vers regexp matching

    makefile.osx: improve sw_vers regexp matching

    This matches for macOS/OSX versions 10.6 -> 10.15, 11.x, 12.x, then on to a possible version 19

    opened by rnkn 0
  • Std.getenv 2 argument variant

    Std.getenv 2 argument variant

    A simple extension of Std.getenv with an additional default_value string parameter.

    Std.getenv("USER", "headless") => string whoami;
    Std.getenv("CLIENT_IP", "127.0.0.1") => string client_ip;
    

    It can help differentiate between unset environment variables and those which are set but blank (if that were ever required for some reason).

    Std.getenv("SOME_CONFIG_VALUE", "OHNO_MISSING") => string important_config;
    if (important_config == "OHNO_MISSING") {
      chout <= "Mandatory setup required!" <= IO.nl();
      Machine.crash();
    }
    
    opened by ynohtna 1
  • added SndBuf stereo file example

    added SndBuf stereo file example

    added example that shows how to work with SndBuf and stereo files (examples/stereo). in the example is shown how to access samples, how .samples() behaves and how to set the playback channel. also added 2 stereo files to examples/data (duplicates of those in examples/book/digital-artists/audio). this addresses #182

    opened by mariobuoninfante 0
  • [WIP] C++ static analyzer

    [WIP] C++ static analyzer

    opened by markcerqueira 0
  • [WIP] Windows Runners

    [WIP] Windows Runners

    opened by markcerqueira 2
  • (inquiry) add info about valueAt() in sndbuf.ck example

    (inquiry) add info about valueAt() in sndbuf.ck example

    Hi,

    I was wondering if we could add some info about how .samples() and .valueAt() work in the sndbuf.ck example. More info can be found here: https://lists.cs.princeton.edu/pipermail/chuck-users/2021-June/008961.html

    Cheers, Mario

    opened by mariobuoninfante 0
A Music programming language. Translates source code into MIDI. Includes a player. Supports MIDI-Karaoke. Includes a MIDI analyzer.

Get Started | Features | Screenshots | Programming | CLI | Contribute | License Midica is an interpreter for a Music Programming Language. It translat

Jan Trukenmüller 47 Sep 17, 2021
Typographic Beat-Oriented Notation for music

tbon Typographic Beat-Oriented Notation for music Tbon aims to be the fastest way to enter pitches, rhythms, meter and dynamic levels from a computer

null 11 Jan 23, 2020
Music typeset with the Lilypond system

Intro (from long ago) This repo contains sheet music typeset with the Lilypond typesetter. The music chosen is in favour of cello music (mostly chambe

Enthusiastic about  the Cello 95 Sep 24, 2021
网易云音乐第三方

ieaseMusic Elegant NeteaseMusic desktop app, Rock with NeteaseMusic ?? Built by Electron, React, MobX, JSS API 由 Binaryify/NeteaseCloudMusicApi 提供。 Pr

null 8.6k Sep 22, 2021
OpenSheetMusicDisplay renders sheet music in MusicXML format in your web browser based on VexFlow. OSMD is brought to you by PhonicScore.com.

OpenSheetMusicDisplay (OSMD) A MusicXML renderer for the Browser opensheetmusicdisplay.org About OSMD • Demo • Key Features • Limitations • How to Use

Open Sheet Music Display 800 Sep 15, 2021
A language for music notation

Lydown is a language and compiler for creating music scores, parts and snippets. The lydown code is compiled to lilypond code and then compiled to PDF

Sharon Rosner 21 Apr 8, 2021
A music programming language for musicians. :notes:

Installation | Docs | Changelog | Contributing composers chatting Alda is a text-based programming language for music composition. It allows you to co

Alda 4.7k Sep 25, 2021
🎵 Music notation engraving library for MEI with MusicXML and Humdrum support and various toolkits (JavaScript, Python)

Verovio is a fast, portable and lightweight library for engraving Music Encoding Initiative (MEI) digital scores into SVG images. Verovio also contain

RISM Digital Center 426 Sep 22, 2021
Music player for deepin desktop environment.

deepin-music Deepin music is a local music player with beautiful design and simple functions developed by Deepin Technology. Dependencies Build depend

Wuhan Deepin Technology Co.,Ltd. 155 Sep 16, 2021
Mopidy is an extensible music server written in Python

Mopidy Mopidy is an extensible music server written in Python. Mopidy plays music from local disk, Spotify, SoundCloud, Google Play Music, and more. Y

Mopidy 7.2k Sep 17, 2021
Frescobaldi LilyPond Editor

README for Frescobaldi Homepage: http://www.frescobaldi.org/ Main author: Wilbert Berendsen Frescobaldi is a LilyPond sheet music text editor. It aims

Frescobaldi 501 Sep 21, 2021
music library manager and MusicBrainz tagger

beets Beets is the media library management system for obsessive music geeks. The purpose of beets is to get your music collection right once and for

beetbox 10.4k Sep 15, 2021
Collaborative Programmable Music

888 888 _ooooooooo._ 888 ,o888PP""""PP88

Overtone 5.2k Sep 24, 2021
web based music sheet viewer (go, pdfjs) as a single binary

Digital Music Stand A simple cross-platform browser-based pdfjs-based viewer to display and search music sheets. A single binary including all assets.

Patrick Wieschollek 21 Aug 27, 2021
Streaming music player that finds free music for you

Desktop music player focused on streaming from free sources Links Official website Mastodon Twitter Support channel (Matrix): #nuclear:matrix.org Disc

null 6.8k Sep 17, 2021
The git repository of the advanced drum machine

Hydrogen drum machine Hydrogen is an advanced drum machine for GNU/Linux, Mac and Windows. It's main goal is to bring professional yet simple and intu

Hydrogen 702 Sep 15, 2021
Lilypond music preprocessor

Ripple - DRY for Lilypond Ripple is a small program that helps you generate scores and parts without repeating yourself, performing complex includes o

Sharon Rosner 21 Mar 24, 2020
GTK 3 client for the Music Player Daemon - I'm looking for new maintainers!

Sonata is looking for new maintainers! I (@multani) don't use Sonata much anymore and as a consequence, I've been very slow to answer even to the few

Jonathan Ballet 123 Aug 28, 2021
🎵 A simple, clean and cross-platform music player

Museeks A simple, clean and cross-platform music player. (museeks.io) Features Museeks aims to be a simple and easy to use music player with a clean U

Pierre de la Martinière 1.1k Sep 17, 2021