mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-11 21:58:31 +00:00
commit
ad917afba4
@ -14,7 +14,7 @@ const langCode = 'en'; // getLanguageFromURL(currentPage);
|
||||
const sidebar = SIDEBAR[langCode];
|
||||
---
|
||||
|
||||
<nav aria-labelledby="grid-left">
|
||||
<nav aria-labelledby="grid-left" class="max-h-full overflow-auto pb-20">
|
||||
<ul>
|
||||
{
|
||||
Object.entries(sidebar).map(([header, children]) => (
|
||||
|
||||
@ -54,6 +54,7 @@ export const SIDEBAR: Sidebar = {
|
||||
{ text: 'Samples', link: 'learn/samples' },
|
||||
{ text: 'Synths', link: 'learn/synths' },
|
||||
{ text: 'Audio Effects', link: 'learn/effects' },
|
||||
{ text: 'CSound', link: 'learn/csound' },
|
||||
],
|
||||
'Pattern Functions': [
|
||||
{ text: 'Introduction', link: 'functions/intro' },
|
||||
|
||||
@ -15,6 +15,7 @@ if (typeof window !== 'undefined') {
|
||||
import('@strudel.cycles/xen'),
|
||||
import('@strudel.cycles/webaudio'),
|
||||
import('@strudel.cycles/osc'),
|
||||
import('@strudel.cycles/csound'),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -38,7 +38,7 @@ const githubEditUrl = `${CONFIG.GITHUB_EDIT_URL}/${currentFile}`;
|
||||
</header>
|
||||
<main class="relative pt-16">
|
||||
<div class="h-full top-0 overflow-auto min-w-[300px] flex xl:justify-center pr-4 pl-4 md:pl-[300px] xl:pl-0">
|
||||
<aside title="Site Navigation" class="w-[300px] px-6 left-0 hidden md:block fixed">
|
||||
<aside title="Site Navigation" class="w-[300px] px-6 left-0 hidden md:block fixed h-full">
|
||||
<LeftSidebar currentPage={currentPage} />
|
||||
</aside>
|
||||
<PageContent frontmatter={frontmatter} headings={headings} githubEditUrl={githubEditUrl}>
|
||||
|
||||
152
website/src/pages/learn/csound.mdx
Normal file
152
website/src/pages/learn/csound.mdx
Normal file
@ -0,0 +1,152 @@
|
||||
---
|
||||
title: Csound
|
||||
layout: ../../layouts/MainLayout.astro
|
||||
---
|
||||
|
||||
import { MiniRepl } from '../../docs/MiniRepl';
|
||||
import { JsDoc } from '../../docs/JsDoc';
|
||||
import Colors from '../../docs/Colors.jsx';
|
||||
|
||||
# Using CSound with Strudel
|
||||
|
||||
🧪 Strudel has experimental support for csound, using [@csound/browser](https://www.npmjs.com/package/@csound/browser).
|
||||
|
||||
## Importing .orc files
|
||||
|
||||
To use existing csound instruments, you can load and use an orc file from an URL like this:
|
||||
|
||||
<MiniRepl
|
||||
client:only="react"
|
||||
tune={`// livecode.orc by Steven Yi
|
||||
await loadOrc('github:kunstmusik/csound-live-code/master/livecode.orc')
|
||||
note("c a f e").csound('FM1')
|
||||
`}
|
||||
/>
|
||||
|
||||
Note that the above url uses the `github:` shortcut, which resolves to the raw file on github, but you can use any URL you like.
|
||||
|
||||
The awesome [`livecode.orc by Steven Yi`](https://github.com/kunstmusik/csound-live-code) comes packed with many sounds ready for use:
|
||||
|
||||
<MiniRepl
|
||||
client:only="react"
|
||||
tune={`// livecode.orc by Steven Yi
|
||||
await loadOrc('github:kunstmusik/csound-live-code/master/livecode.orc')
|
||||
note("c a f e").csound(cat(
|
||||
"Sub1", // Substractive Synth, 3osc
|
||||
"Sub2", // Subtractive Synth, two saws, fifth freq apart
|
||||
"Sub3", // Subtractive Synth, three detuned saws, swells in
|
||||
"Sub4", // Subtractive Synth, detuned square/saw, stabby. Nice as a lead in octave 2, nicely grungy in octave -2, -1
|
||||
"Sub5", // Subtractive Synth, detuned square/triangle
|
||||
"Sub6", // Subtractive Synth, saw, K35 filters
|
||||
"Sub7", // Subtractive Synth, saw + tri, K35 filters
|
||||
"Sub8", // Subtractive Synth, square + saw + tri, diode ladder filter
|
||||
"SynBrass", // SynthBrass subtractive synth
|
||||
"SynHarp", // Synth Harp subtracitve Synth
|
||||
"SSaw", // SuperSaw sound using 9 bandlimited saws (3 sets of detuned saws at octaves)
|
||||
"Mode1", // Modal Synthesis Instrument: Percussive/organ-y sound
|
||||
"Plk", // Pluck sound using impulses, noise, and waveguides
|
||||
"Organ1", // Wavetable Organ sound using additive synthesis
|
||||
"Organ2", // Organ sound based on M1 Organ 2 patch
|
||||
"Organ3", // Wavetable Organ using Flute 8' and Flute 4', wavetable based on Claribel Flute http://www.pykett.org.uk/the\_tonal\_structure\_of\_organ\_flutes.htm
|
||||
"Bass", // Subtractive Bass sound
|
||||
"ms20_bass", // MS20-style Bass Sound
|
||||
"VoxHumana", // VoxHumana Patch
|
||||
"FM1", // FM 3:1 C:M ratio, 2->0.025 index, nice for bass
|
||||
"Noi", // Filtered noise, exponential envelope
|
||||
"Wobble", // Wobble patched based on Jacob Joaquin's "Tempo-Synced Wobble Bass"
|
||||
"Sine", // Simple Sine-wave instrument with exponential envelope
|
||||
"Square", // Simple Square-wave instrument with exponential envelope
|
||||
"Saw", // Simple Sawtooth-wave instrument with exponential envelope
|
||||
"Squine1", // Squinewave Synth, 2 osc
|
||||
"Form1", // Formant Synth, buzz source, soprano ah formants
|
||||
"Mono", // Monophone synth using sawtooth wave and 4pole lpf. Use "start("Mono") to run the monosynth, then use MonoNote instrument to play the instrument.
|
||||
"MonoNote", // Note playing instrument for Mono synth. Be careful to use this and not try to create multiple Mono instruments!
|
||||
"Click", // Bandpass-filtered impulse glitchy click sound. p4 = center frequency (e.g., 3000, 6000)
|
||||
"NoiSaw", // Highpass-filtered noise+saw sound. Use NoiSaw.cut channel to adjust cutoff.
|
||||
"Clap", // Modified clap instrument by Istvan Varga (clap1.orc)
|
||||
"BD", // Bass Drum - From Iain McCurdy's TR-808.csd
|
||||
"SD", // Snare Drum - From Iain McCurdy's TR-808.csd
|
||||
"OHH", // Open High Hat - From Iain McCurdy's TR-808.csd
|
||||
"CHH", // Closed High Hat - From Iain McCurdy's TR-808.csd
|
||||
"HiTom", // High Tom - From Iain McCurdy's TR-808.csd
|
||||
"MidTom", // Mid Tom - From Iain McCurdy's TR-808.csd
|
||||
"LowTom", // Low Tom - From Iain McCurdy's TR-808.csd
|
||||
"Cymbal", // Cymbal - From Iain McCurdy's TR-808.csd
|
||||
"Rimshot", // Rimshot - From Iain McCurdy's TR-808.csd
|
||||
"Claves", // Claves - From Iain McCurdy's TR-808.csd
|
||||
"Cowbell", // Cowbell - From Iain McCurdy's TR-808.csd
|
||||
"Maraca", // Maraca - from Iain McCurdy's TR-808.csd
|
||||
"HiConga", // High Conga - From Iain McCurdy's TR-808.csd
|
||||
"MidConga", // Mid Conga - From Iain McCurdy's TR-808.csd
|
||||
"LowConga", // Low Conga - From Iain McCurdy's TR-808.csd
|
||||
))`}
|
||||
/>
|
||||
|
||||
## Writing your own instruments
|
||||
|
||||
You can define your own instrument(s) with `loadCsound` like this:
|
||||
|
||||
<MiniRepl
|
||||
client:only="react"
|
||||
tune={`await loadCsound\`
|
||||
instr CoolSynth
|
||||
iduration = p3
|
||||
ifreq = p4
|
||||
igain = p5
|
||||
ioct = octcps(ifreq)
|
||||
|
||||
kpwm = oscili(.05, 8)
|
||||
asig = vco2(igain, ifreq, 4, .5 + kpwm)
|
||||
asig += vco2(igain, ifreq * 2)
|
||||
|
||||
idepth = 2
|
||||
acut = transegr:a(0, .005, 0, idepth, .06, -4.2, 0.001, .01, -4.2, 0) ; filter envelope
|
||||
asig = zdf_2pole(asig, cpsoct(ioct + acut + 2), 0.5)
|
||||
|
||||
iattack = .01
|
||||
isustain = .5
|
||||
idecay = .1
|
||||
irelease = .1
|
||||
asig *= linsegr:a(0, iattack, 1, idecay, isustain, iduration, isustain, irelease, 0)
|
||||
|
||||
out(asig, asig)
|
||||
|
||||
endin\`
|
||||
|
||||
"<0 2 [4 6](3,4,2) 3\*2>"
|
||||
.off(1/4, add(2))
|
||||
.off(1/2, add(6))
|
||||
.scale('D minor')
|
||||
.note()
|
||||
.csound('CoolSynth')`}
|
||||
/>
|
||||
|
||||
## Parameters
|
||||
|
||||
The `.csound` function sends the following p values:
|
||||
|
||||
| | |
|
||||
| --- | -------------------------------- |
|
||||
| p1 | instrument name e.g. `CoolSynth` |
|
||||
| p2 | time offset, when it should play |
|
||||
| p3 | the duration of the event / hap |
|
||||
| p4 | frequency in Hertz |
|
||||
| p5 | normalized `gain`, 0-1 |
|
||||
|
||||
There is an alternative `.csoundm` function with a different flavor:
|
||||
|
||||
| | |
|
||||
| --- | --------------------------------- |
|
||||
| p4 | midi key number, unrounded, 0-127 |
|
||||
| p5 | midi velocity, 0-127 |
|
||||
|
||||
In both cases, p4 is derived from the value of `freq` or `note`.
|
||||
|
||||
## Limitations / Future Plans
|
||||
|
||||
Apart from the above listed p values, no other parameter can be patterned so far.
|
||||
This also means that [audio effects](./learn/effects) will not work.
|
||||
In the future, the integration could be improved by passing all patterned control parameters to the csound instrument.
|
||||
This could work by a unique [channel](https://kunstmusik.github.io/icsc2022-csound-web/tutorial2-interacting-with-csound/#step-4---writing-continuous-data-channels)
|
||||
for each value. Channels could be read [like this](https://github.com/csound/csound/blob/master/Android/CsoundForAndroid/CsoundAndroidExamples/src/main/res/raw/multitouch_xy.csd).
|
||||
Also, it might make sense to have a standard library of csound instruments for strudel's effects.
|
||||
Loading…
x
Reference in New Issue
Block a user