{"id":13433657,"url":"https://github.com/maximecb/noisecraft","last_synced_at":"2025-05-16T09:06:16.121Z","repository":{"id":39534982,"uuid":"370396971","full_name":"maximecb/noisecraft","owner":"maximecb","description":"Browser-based visual programming language and platform for sound synthesis.","archived":false,"fork":false,"pushed_at":"2023-09-30T13:19:44.000Z","size":923,"stargazers_count":1109,"open_issues_count":10,"forks_count":61,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-04-09T04:03:53.521Z","etag":null,"topics":["audio","javascript","midi","modular-synthesizers","music","music-programming","music-programming-language","sound","sound-synthesis","synthesizer","visual-programming-language","webaudio","webmidi"],"latest_commit_sha":null,"homepage":"https://noisecraft.app","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maximecb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":["maximecb"]}},"created_at":"2021-05-24T15:19:20.000Z","updated_at":"2025-04-03T01:22:26.000Z","dependencies_parsed_at":"2023-01-29T18:31:08.056Z","dependency_job_id":"a5c1863f-f09f-451a-9fdd-7a16a5640504","html_url":"https://github.com/maximecb/noisecraft","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximecb%2Fnoisecraft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximecb%2Fnoisecraft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximecb%2Fnoisecraft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximecb%2Fnoisecraft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maximecb","download_url":"https://codeload.github.com/maximecb/noisecraft/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254501558,"owners_count":22081528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","javascript","midi","modular-synthesizers","music","music-programming","music-programming-language","sound","sound-synthesis","synthesizer","visual-programming-language","webaudio","webmidi"],"created_at":"2024-07-31T02:01:32.167Z","updated_at":"2025-05-16T09:06:11.112Z","avatar_url":"https://github.com/maximecb.png","language":"JavaScript","readme":"# NoiseCraft\n\n**NoiseCraft is a work in progress, and we are looking for contributors to help build and debug it :)**\n\nNoiseCraft is an open source, visual programming language and platform for\nsound synthesis and music making, with the goal of creating a community for\nthe open exchange of musical ideas. The design is loosely inspired by\nPureData, Max/MSP as well as other visual programming languages.\nNoiseCraft is built on technologies such as the Web Audio and Web MIDI APIs, and\nruns in a web browser. The plan is for the app to remain free to use and ad-free\nfor the foreseeable future.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"800\" src=\"doc/screenshot.png\"\u003e\n\u003c/p\u003e\n\nYou can try NoiseCraft at [noisecraft.app](https://noisecraft.app), and browse projects shared by other\nusers at [noisecraft.app/browse](https://noisecraft.app/browse). Currently, this works in Chrome, Firefox and Edge but \nnot reliably in Safari due to issues with their web audio implementation.\nPlease note that NoiseCraft is a passion project and a work in progress.\nYou may run into bugs, and support for mobile devices is currently lacking.\n\n## Design\n\nDesign principles:\n- NoiseCraft follows a minimalistic philosophy:\n  - No web frameworks, just plain JS/HTML/CSS\n  - Intentionally keep dependencies to a minimum\n  - Prioritize features the users need\n  - Avoid redundant features and feature creep\n- In terms of user interface design:\n  - Minimize the learning curve and reduce friction\n  - Keep the user interface simple and uncluttered\n  - Avoid drop-down menus and hidden options if possible\n  - Use key combos and controls that will likely seem familiar to most users\n  - Avoid ambiguity, use known/existing terminology wherever possible\n- Visual programming language design:\n  - There is only one data type: floating-point numbers\n  - There is no distinction between control signals and audio signals\n- Practical considerations:\n  - Avoid images and sound samples to keep bandwidth/server costs low\n  - Avoiding sound samples also forces people to think about how to generate sounds\n\nNoiseCraft uses a multi-page design, as opposed to a single-page app. This means\nthe New, Help and Browse links open new tabs. This helps users avoid accidentally\nlosing their work when clicking other tabs, and makes it possible for us to send new users\ndirect links to the `/browse` and `/help` pages, for example.\n\nThe user interface uses an immediate-mode GUI. That is, the UI gets redrawn every time\nan action is performed on the model. This makes it trivial to implement features such\nas undo/redo, because we can simply store copies of previous project states. It also reduces\nthe coupling between the UI and the model. In practice, caching is used to avoid\nredrawing the entire user interface for every single state change.\n\nAudio is produced by the `AudioView` class (see `public/audioview.js`), which is\nupdated when state changes\noccur in the model. This compiles the audio graph into JavaScript code that can then\nbe run in a background process (an `AudioWorklet`). We only use the web audio API\nto output sound, not for sound synthesis. This helps us guarantee that the sound\nproduced for a given project will be the same on any browser or device.\n\nProject files are saved in an easy to parse JSON format (.ncft), which could allow\nexternal tools to eventually be built. For example, it's possible to imagine that\nNoiseCraft projects could be compiled into VSTs.\n\n## Contributing\n\nWe're more than happy to accept bug fixes. However, we want to avoid growing the\nfunctionality of NoiseCraft too fast, and we strive to minimize dependencies and\noverall complexity.\nAs such, we're going to be\nbe conservative about the additions to the project that we accept. If you would\nlike to contribute new features or major changes to the codebase, please open an\nissue to discuss the proposed changes first, or comment on an existing issue.\nSome of the contributions we're the most likely to accept are bugfixes. Helping\nus track and eliminate bugs is a very useful contribution.\n\n## Development Setup Instructions\n\nWe recommend developing using the Chrome web browser because it has the most mature\nweb audio implementation and has been the most extensively tested. \nWe are waiting for a [Firefox bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1572644) to be fixed,\nand we've run into issues with the Safari web audio and pointer capture implementation.\n\nInstalling dependencies:\n\n```\n# Install nodejs and npm\n# Use apt-get on Ubuntu/Debian or brew on macOS\nsudo apt-get install -y nodejs npm\n\n# Update npm\nsudo npm install -g npm\n\n# Install the dependencies for this project\nnpm install\n```\n\nTo start the server locally:\n\n```\nnode server.js\n```\n\nNoiseCraft is then accessible at `http://localhost:7773/`\n\nTo run tests locally:\n\n```\nnode tests.js\n```\n\n## Running using Docker\n\nTo run the NoiseCraft server using Docker please follow these steps:\n```\n# Build docker NoiseCraft image\ndocker build . -t noisecraft\n\n# Start docker NoiseCraft container\ndocker run -p 7773:7773 -d noisecraft\n```\n\nNoiseCraft is then accessible at `http://localhost:7773/`\n\n## Server Configuration Parameters\n\nThe server can be configured using the following environment variables:\n\n| Config Variable | Default Value | Description             |\n|-----------------|---------------|-------------------------|\n| DB_FILE_PATH    | ./database.db | SQLite file path        |\n| HTTP_PORT_NO    | 7773          | HTTP server port number |\n","funding_links":["https://github.com/sponsors/maximecb"],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximecb%2Fnoisecraft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaximecb%2Fnoisecraft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximecb%2Fnoisecraft/lists"}