Lots + MIDI implementation
This commit is contained in:
3
website/.gitignore
vendored
Normal file
3
website/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
node_modules/
|
||||
dist/
|
||||
.astro/
|
||||
5
website/astro.config.mjs
Normal file
5
website/astro.config.mjs
Normal file
@@ -0,0 +1,5 @@
|
||||
import { defineConfig } from "astro/config";
|
||||
|
||||
export default defineConfig({
|
||||
output: "static",
|
||||
});
|
||||
@@ -1,164 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Cagire</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', monospace;
|
||||
background: #0a0a0a;
|
||||
color: #e0e0e0;
|
||||
min-height: 100vh;
|
||||
padding: 2rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 70ch;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.header {
|
||||
border-bottom: 1px solid #333;
|
||||
padding-bottom: 1rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.ascii {
|
||||
color: #64a0b4;
|
||||
font-size: 0.7rem;
|
||||
line-height: 1.1;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
nav {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
nav a {
|
||||
color: #cccc44;
|
||||
text-decoration: none;
|
||||
margin-right: 1.5rem;
|
||||
}
|
||||
|
||||
nav a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
section {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #888;
|
||||
font-size: 0.9rem;
|
||||
font-weight: bold;
|
||||
margin-bottom: 0.75rem;
|
||||
border-bottom: 1px solid #333;
|
||||
padding-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.buttons {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.btn {
|
||||
flex: 1;
|
||||
padding: 0.75rem 1rem;
|
||||
border: 1px solid #333;
|
||||
color: #e0e0e0;
|
||||
text-decoration: none;
|
||||
font-size: 0.9rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
border-color: #64a0b4;
|
||||
color: #64a0b4;
|
||||
}
|
||||
|
||||
.screenshot img {
|
||||
width: 100%;
|
||||
border: 1px solid #333;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.screenshot p {
|
||||
color: #888;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #888;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
section a {
|
||||
color: #cccc44;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
section a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<pre class="ascii">
|
||||
██████╗ █████╗ ██████╗ ██╗██████╗ ███████╗
|
||||
██╔════╝██╔══██╗██╔════╝ ██║██╔══██╗██╔════╝
|
||||
██║ ███████║██║ ███╗██║██████╔╝█████╗
|
||||
██║ ██╔══██║██║ ██║██║██╔══██╗██╔══╝
|
||||
╚██████╗██║ ██║╚██████╔╝██║██║ ██║███████╗
|
||||
╚═════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝╚═╝ ╚═╝╚══════╝
|
||||
</pre>
|
||||
<nav>
|
||||
<a href="#description">Description</a>
|
||||
<a href="#releases">Releases</a>
|
||||
<a href="#credits">Credits</a>
|
||||
<a href="#support">Support</a>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<section id="description" class="screenshot">
|
||||
<img src="cagire.png" alt="Cagire screenshot">
|
||||
<p>Cagire is a terminal-based step sequencer for live coding music. Each step in a pattern contains a Forth script that produces sound and creates events. Synchronize with other musicians using Ableton Link. Cagire uses its own audio engine for audio synthesis and sampling!</p>
|
||||
</section>
|
||||
|
||||
<section id="releases">
|
||||
<h2>Releases</h2>
|
||||
<div class="buttons">
|
||||
<a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-macos-aarch64-desktop.app.zip" class="btn">macOS (ARM)</a>
|
||||
<a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-macos-x86_64-desktop.app.zip" class="btn">macOS (Intel)</a>
|
||||
<a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-windows-x86_64-desktop.msi" class="btn">Windows</a>
|
||||
<a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-linux-x86_64-desktop.deb" class="btn">Linux</a>
|
||||
</div>
|
||||
<p style="margin-top: 0.75rem;">CLI binaries also available on <a href="https://github.com/Bubobubobubobubo/cagire/releases/latest">GitHub Releases</a>.</p>
|
||||
</section>
|
||||
|
||||
<section id="credits">
|
||||
<h2>Credits</h2>
|
||||
<p>Cagire is built by BuboBubo (Raphael Maurice Forment).</p>
|
||||
<p>Doux (audio engine) is a Rust port of Dough, originally written in C by Felix Roos.</p>
|
||||
<p>mi-plaits-dsp-rs by Oliver Rockstedt, based on Mutable Instruments Plaits by Emilie Gillet.</p>
|
||||
</section>
|
||||
|
||||
<section id="support">
|
||||
<h2>Support</h2>
|
||||
<p>Report issues and contribute on <a href="https://github.com/Bubobubobubobubo/cagire">GitHub</a>.</p>
|
||||
<p>Support the project on <a href="https://ko-fi.com/raphaelbubo">Ko-fi</a>.</p>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
12
website/package.json
Normal file
12
website/package.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "cagire-website",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"astro": "^5.2.5"
|
||||
}
|
||||
}
|
||||
3142
website/pnpm-lock.yaml
generated
Normal file
3142
website/pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
BIN
website/public/CozetteVector.ttf
Normal file
BIN
website/public/CozetteVector.ttf
Normal file
Binary file not shown.
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 152 KiB |
173
website/src/pages/index.astro
Normal file
173
website/src/pages/index.astro
Normal file
@@ -0,0 +1,173 @@
|
||||
---
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Cagire</title>
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: 'CozetteVector';
|
||||
src: url('/CozetteVector.ttf') format('truetype');
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'CozetteVector', monospace;
|
||||
background: #0a0a0a;
|
||||
color: #e0e0e0;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 1rem;
|
||||
line-height: 1.3;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #64a0b4;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #64a0b4;
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 0.25rem;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p { margin: 0.25rem 0; }
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
|
||||
a { color: #cccc44; }
|
||||
|
||||
ul {
|
||||
padding-left: 1.5rem;
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
|
||||
li { margin: 0.1rem 0; }
|
||||
|
||||
pre {
|
||||
background: #1a1a1a;
|
||||
padding: 0.5rem;
|
||||
overflow-x: auto;
|
||||
margin: 0.25rem 0;
|
||||
}
|
||||
|
||||
.downloads-table {
|
||||
border-collapse: collapse;
|
||||
margin: 0.5rem 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.downloads-table th,
|
||||
.downloads-table td {
|
||||
padding: 0.25rem 0.75rem;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.downloads-table th {
|
||||
color: #64a0b4;
|
||||
}
|
||||
|
||||
.downloads-table td:first-child {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.downloads-table tr:nth-child(even) {
|
||||
background: #151515;
|
||||
}
|
||||
|
||||
.note {
|
||||
color: #555;
|
||||
font-size: 0.8rem;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.note a {
|
||||
color: #777;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>CAGIRE: LIVE CODING IN FORTH</h1>
|
||||
|
||||
<table class="downloads-table">
|
||||
<tr>
|
||||
<th>Platform</th>
|
||||
<th>Desktop</th>
|
||||
<th>Terminal</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>macOS (ARM)</td>
|
||||
<td><a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-macos-aarch64-desktop.app.zip">.app</a></td>
|
||||
<td><a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-macos-aarch64.tar.gz">.tar.gz</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>macOS (Intel)</td>
|
||||
<td><a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-macos-x86_64-desktop.app.zip">.app</a></td>
|
||||
<td><a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-macos-x86_64.tar.gz">.tar.gz</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Windows</td>
|
||||
<td><a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-windows-x86_64-desktop.exe">.exe</a></td>
|
||||
<td><a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-windows-x86_64.zip">.zip</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Linux</td>
|
||||
<td><a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-linux-x86_64-desktop.deb">.deb</a></td>
|
||||
<td><a href="https://github.com/Bubobubobubobubo/cagire/releases/latest/download/cagire-linux-x86_64.tar.gz">.tar.gz</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<p class="note">All releases on <a href="https://github.com/Bubobubobubobubo/cagire/releases/latest">GitHub</a>. You can also compile the software yourself or get it from Cargo!</p>
|
||||
|
||||
<img src="/cagire.png" alt="Cagire screenshot">
|
||||
|
||||
<h2>About</h2>
|
||||
<p>Cagire is a step sequencer where each step contains a Forth script instead of typical note data. When the sequencer reaches a step, it runs the script. Scripts can produce sound, trigger samples, apply effects, or do nothing at all. You are free to define what your scripts will do. Cagire includes a built-in audio engine called <a href="https://doux.livecoding.fr">Doux</a>. No external software is needed to make sound. It comes with oscillators, sample players, filters, reverb, delay, distortion, and more.</p>
|
||||
|
||||
<h2>Code Examples</h2>
|
||||
<p>A minimal script that plays a middle C note using a sine wave:</p>
|
||||
<pre>c4 note sine sound .</pre>
|
||||
|
||||
<p>Sawtooth wave with lowpass filter, chorus and reverb:</p>
|
||||
<pre>saw sound 1200 lpf 0.2 chorus 0.8 verb .</pre>
|
||||
|
||||
<p>Pitched-down kick drum sample with distortion:</p>
|
||||
<pre>kkick sound 1.5 distort 0.8 speed .</pre>
|
||||
|
||||
<h2>Features</h2>
|
||||
<ul>
|
||||
<li>32 banks × 32 patterns × 128 steps per project</li>
|
||||
<li>Ableton Link synchronization</li>
|
||||
<li>Built-in synthesis engine (oscillators, samples, wavetables)</li>
|
||||
<li>Effects: filters, reverb, delay, distortion, chorus</li>
|
||||
<li>User-defined words and shared variables</li>
|
||||
<li>Embedded dictionary and documentation</li>
|
||||
</ul>
|
||||
|
||||
<h2>Live Coding</h2>
|
||||
<p>Live coding is a technique where a programmer writes code in real-time, often in front of an audience. It can be used to create music, visual art, and other forms of media. Learn more at <a href="https://toplap.org">TOPLAP</a> or <a href="https://livecoding.fr">livecoding.fr</a>.</p>
|
||||
|
||||
<h2>Credits</h2>
|
||||
<ul>
|
||||
<li><a href="https://raphaelforment.fr">BuboBubo</a> (Raphaël Maurice Forment)</li>
|
||||
<li><a href="https://doux.livecoding.fr">Doux</a> audio engine, Rust port of Dough by <a href="https://eddyflux.cc/">Felix Roos</a></li>
|
||||
<li><a href="https://github.com/sourcebox/mi-plaits-dsp-rs">mi-plaits-dsp-rs</a> by Oliver Rockstedt, based on <a href="https://mutable-instruments.net/">Mutable Instruments</a> Plaits by Emilie Gillet</li>
|
||||
<li>Related: <a href="https://strudel.cc">Strudel</a>, <a href="https://tidalcycles.org">TidalCycles</a>, <a href="https://sova.livecoding.fr">Sova</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Links</h2>
|
||||
<ul>
|
||||
<li><a href="https://github.com/Bubobubobubobubo/cagire">GitHub</a></li>
|
||||
<li><a href="https://ko-fi.com/raphaelbubo">Ko-fi</a></li>
|
||||
</ul>
|
||||
|
||||
<p style="margin-top: 2rem; color: #666;">AGPL-3.0 License</p>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user