Coder Social home page Coder Social logo

xasopheno / weresocool Goto Github PK

View Code? Open in Web Editor NEW
48.0 3.0 5.0 619.77 MB

A language for composing microtonal music built in Rust. Make cool sounds. Impress your friends/pets/plants.

Home Page: https://www.weresocool.org/

License: GNU General Public License v3.0

Rust 16.26% Shell 0.02% TypeScript 0.79% C 66.37% C++ 16.52% Just 0.02% JavaScript 0.01%
rust composition sound-synthesis sound-processing microtonal binaural sonification sound friends stereo

weresocool's Introduction

WereSoCool

Cool Tests

A language for composing mictoronal music built in Rust. You might find this language useful if you want to make cool sounds and impress your friends/pets/plants.

This language is designed to be easy to use, and you don't need any prior knowledge of microtonal music or computer programming. However, experience in either area will certainly be helpful.

The WereSoCool CLI is availble on macOS, Linux and Windows. You can also explore the language in a Firefox or Chrome browser on a desktop computer in the WereSoCool Playground. Live coding in the browser currently only works on desktop in a Firefox or Chrome browser.

Documentation:

If you want to learn how to make cool sounds using WereSoCool, you'll find cool documentation in English, Portuguêse, and Español at weresocool.org.

I recommend following the tutorials in order and writing your own composition after completing each one. Additional documentation is currently being worked on, as well as a record featuring a great band, so stay tuned.

On mobile, you can still view the tutorials, but you won't be able to hear anything.

Installation:

Macos:

brew tap xasopheno/weresocool && brew install weresocool

Arch Linux:

Available on the AUR here.

Cargo:

WereSoCool can be installed on macos, linux, and windows via cargo. You'll also need to install the "Necessary Dependencies".

Install cargo by installing Rustup.

cargo install weresocool

Necessary Dependencies

Macos: brew install lame libvorbis

Arch Linux (ALSA): sudo pacman -S lame vorbis-tools

Ubuntu (ALSA): sudo apt-get install lame vorbis-tools

Raspberry Pi OS: sudo apt-get install libmp3lame-dev libasound2-dev

Windows

This software runs on Windows, but in a slightly limited capacity. On Windows, this software is compiled without mp3 and oggvorbis support. I mostly work on macos and linux machines, so I feel a bit out of my depths in Windows land. If you'd like to help work on the Windows implementation, please reach out.

You can install WereSoCool from source or via cargo.

From Source:

You'll need Cargo and Just.

Rust: Cargo is the rust package manager for Rust. Install cargo by installing Rustup.

You can install from this source code by cloning this repo and then running:

You'll also need to install Just - a cool cross-platform command runner.

You can install from this source code by cloning this repo and then running:

just install

WereSoCool CLI

Usage: weresocool [COMMAND]

Commands:
  new    Create a new .socool file from the template
  play   Render a .socool file.
    --watch                    On file save, the composition will be re-rendered
  demo   Hear a cool sound
  print  Print a .socool composition to a file
    --output_dir <output_dir>
    --wav                      print a wav file (default)
    --mp3                      print an mp3
    --oggvorbis                print an oggvorbis file
    --csv                      print a csv file
    --json                     print a json file
    --stems                    print stems as a zip file
    --sound                    print all sound file types
    --all                      print all file types
  help   Help of the given subcommand(s)

Development:

Setup

Rust: Rust is a great language. Install it with Rustup.

Just: Commands are issued via Just.

You'll need also need to install the following packages:

Macos:

brew install lame libvorbis

Arch Linux:

sudo pacman -S lame vorbis-tools

Ubuntu:

sudo apt-get install lame vorbis-tools

Raspberry Pi OS:

sudo apt-get install libmp3lame-dev libasound2-dev

Build

just build

Run Tests:

just test

Special Thanks:

This wouldn't exist in a million years if it wasn't for Antonis Stampoulis' help with language design or the help of friends/programmers like Sönke Hahn, Hao Lian, Catharine M, Matt Handler, Alex David, Lee Pender, Amanda Doucette, Khaled Alquaddoomi, Alex Kestner, everyone else that has sat down to program with me.

Of course, special thanks to Maria for always listening to my new_weird_sounds and programming problems. - Danny

Copyright (C) 2023 - Danny Meyer

This program is free software, licensed under the GPLv3 (see LICENSE).

weresocool's People

Contributors

astampoulis avatar dependabot-preview[bot] avatar dependabot[bot] avatar hallettj avatar jkrukowski avatar matteovh avatar soenkehahn avatar xasopheno 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  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

weresocool's Issues

Panic accessing default audio device on Debian Linux

I'm not able to run the server due to a panic that appears to involve unwrapping something to access the default audio device. I'm running Debian Testing with Gnome 3.38. Here is the trace:

WereSoCool on  makefile-changes via 𝗥 v1.46.0 took 6m 34s
[I] ✘130 ❯ export RUST_BACKTRACE=full

WereSoCool on  makefile-changes via 𝗥 v1.46.0
[I] ❯ make dev
(cd application && yarn build-backend && yarn dev)
yarn run v1.22.4
$ cd server && ./build_static.sh && cd ../ && cp ../target/release/weresocool_server extraResources/weresocool_server
LINUX...will NOT build built statically.
    Finished release [optimized] target(s) in 0.42s
Done in 0.56s.
yarn run v1.22.4
$ yarn build-backend && cross-env START_HOT=1 node -r @babel/register ./internals/scripts/CheckPortInUse.js && cross-env START_HOT=1 yarn start-renderer-dev
$ cd server && ./build_static.sh && cd ../ && cp ../target/release/weresocool_server extraResources/weresocool_server
LINUX...will NOT build built statically.
    Finished release [optimized] target(s) in 0.12s
$ cross-env NODE_ENV=development webpack-dev-server --config configs/webpack.config.renderer.dev.babel.js
Starting Main Process...
npm WARN lifecycle The node binary used for scripts is /tmp/yarn--1601763051501-0.9033573657357188/node but npm is using /home/jesse/.nvm/versions/node/v14.8.0/bin/node itself. Use the `--scripts-prepend-node-path` option to include the path for the node binary npm was executed with.

> [email protected] start-main-dev /home/jesse/projects/rust/WereSoCool/application
> cross-env START_HOT=1 NODE_ENV=development electron -r ./internals/scripts/BabelRegister ./app/main.dev.ts

18:10:54.375 › App starting...
(node:1085911) UnhandledPromiseRejectionWarning: Error: Loading extension at /home/jesse/projects/rust/WereSoCool/application/node_modules/devtron failed with: The 'manifest_version' key must be present and set to 2 (without quotes). See developer.chrome.com/extensions/manifestVersion.html for details.
(node:1085911) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:1085911) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:1085911) ExtensionLoadWarning: Warnings loading extension at /home/jesse/.config/Electron/extensions/fmkadmapgofadopljbjfkapdkoienihi: Unrecognized manifest key 'browser_action'. Unrecognized manifest key 'minimum_chrome_version'. Unrecognized manifest key 'update_url'. Cannot load extension with file or directory name _metadata. Filenames starting with "_" are reserved for use by the system.
Listening on 4588
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /home/jesse/.cargo/registry/src/github.com-1ecc6299db9ec823/portaudio-0.7.0/src/lib.rs:250:60
stack backtrace:
   0:     0x56245cd904e5 - backtrace::backtrace::libunwind::trace::h14d338b30b3ea0a7
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/libunwind.rs:86
   1:     0x56245cd904e5 - backtrace::backtrace::trace_unsynchronized::h73ea91d74a3fd67f
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/mod.rs:66
   2:     0x56245cd904e5 - std::sys_common::backtrace::_print_fmt::hd42948c952866e12
                               at src/libstd/sys_common/backtrace.rs:78
   3:     0x56245cd904e5 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::ha8f928866ff7571e
                               at src/libstd/sys_common/backtrace.rs:59
   4:     0x56245cdb77dc - core::fmt::write::he0c1e5f7426d2718
                               at src/libcore/fmt/mod.rs:1076
   5:     0x56245cd8a3b2 - std::io::Write::write_fmt::hf3afc6cfd57d0033
                               at src/libstd/io/mod.rs:1537
   6:     0x56245cd92b50 - std::sys_common::backtrace::_print::hfc0110703f3696fd
                               at src/libstd/sys_common/backtrace.rs:62
   7:     0x56245cd92b50 - std::sys_common::backtrace::print::h3f77c6990ddfaa22
                               at src/libstd/sys_common/backtrace.rs:49
   8:     0x56245cd92b50 - std::panicking::default_hook::{{closure}}::heae49580a8d62d75
                               at src/libstd/panicking.rs:198
   9:     0x56245cd9289c - std::panicking::default_hook::hecc34e3f729e213c
                               at src/libstd/panicking.rs:217
  10:     0x56245cd93193 - std::panicking::rust_panic_with_hook::he82f5d0644692441
                               at src/libstd/panicking.rs:526
  11:     0x56245cd92d8b - rust_begin_unwind
                               at src/libstd/panicking.rs:437
  12:     0x56245cdb5741 - core::panicking::panic_fmt::h09c929f06bb87c98
                               at src/libcore/panicking.rs:85
  13:     0x56245cdb568d - core::panicking::panic::h7ece43057e5422d4
                               at src/libcore/panicking.rs:50
  14:     0x56245cbbbfbb - portaudio::PortAudio::default_output_device::h108773ff6f4cc58f
  15:     0x56245cb308f9 - weresocool::portaudio::real_time_render_manager::real_time_render_manager::h2bcc0cfc5ef3c050
  16:     0x56245caa979e - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::hcfc3be826150f1ab
  17:     0x56245caf772b - std::thread::local::LocalKey<T>::with::ha3d26d72f727b90c
  18:     0x56245ca71a00 - tokio::macros::scoped_tls::ScopedKey<T>::set::h662ee624253722e9
  19:     0x56245caa90ad - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::haf6e7e005092049a
  20:     0x56245caf764b - std::thread::local::LocalKey<T>::with::hcf2bf56aa9969295
  21:     0x56245ca70e2a - tokio::macros::scoped_tls::ScopedKey<T>::set::h21b9050f33f67431
  22:     0x56245caa2f94 - tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on::haa3a68f9ef8bf00d
  23:     0x56245caedf71 - tokio::runtime::context::enter::h2565055bab1ac0f8
  24:     0x56245cabcfde - tokio::runtime::handle::Handle::enter::h0969bfb2c129dbd4
  25:     0x56245cad2567 - weresocool_server::main::h3611dd802127c0ae
  26:     0x56245cae44a3 - std::rt::lang_start::{{closure}}::h865a623185261596
  27:     0x56245cd93633 - std::rt::lang_start_internal::{{closure}}::h5d3ea623498f5f43
                               at src/libstd/rt.rs:52
  28:     0x56245cd93633 - std::panicking::try::do_call::hac65e71be769a440
                               at src/libstd/panicking.rs:348
  29:     0x56245cd93633 - std::panicking::try::hd4706e264bcf6712
                               at src/libstd/panicking.rs:325
  30:     0x56245cd93633 - std::panic::catch_unwind::h948a0fb4a8b3ee82
                               at src/libstd/panic.rs:394
  31:     0x56245cd93633 - std::rt::lang_start_internal::h72cc068ed2d0ac53
                               at src/libstd/rt.rs:51
  32:     0x56245cad2602 - main
  33:     0x7fe94eecbcca - __libc_start_main
  34:     0x56245ca5e3fa - _start
  35:                0x0 - <unknown>
Panic in Arbiter thread.

Fix Imports

Imports were removed when functions were added. Time to add them back.

Length/FitLength

There seems to be an issue related to getting the Length of a FitLength Operation. Still need a simple example.

Control

  • replay
  • swap file
  • record
  • save
  • fast-forward
  • rewind

I would really love a windows version of this program.

Hello! In your README you state that if someone is "interested in using this software on Windows...", well I am. May be I can help testing, translating or something like that.

I'm just another cheap third world windows musician that uses MuseScore and plays microtonal music but can't do both, who would greatly benefit from your work if it could run on windows pc. I really love and appreciate what you're doing. Great Job!

I think this could be an Issue that can be eventually be resolved and more people could give their thoughts on this thread, but may be it was inappropriate.

Audio To NormalForm

Sing/play into mic and get back a NormalForm. This will depend on #68 Fix Imports, because that generated normal form would be very big and much better to import.

Dependabot couldn't find a Cargo.toml for this project

Dependabot couldn't find a Cargo.toml for this project.

Dependabot requires a Cargo.toml to evaluate your project's current Rust dependencies. It had expected to find one at the path: /socool_ast/Cargo.toml.

If this isn't a Rust project, or if it is a library, you may wish to disable updates for it from within Dependabot.

You can mention @dependabot in the comments below to contact the Dependabot team.

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.