mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-10 21:28:31 +00:00
Tweaks, more inspirations, and figure
This commit is contained in:
parent
fe13a7fe34
commit
07b22a2c28
@ -525,6 +525,112 @@
|
|||||||
"title": "Strudel REPL",
|
"title": "Strudel REPL",
|
||||||
"type": ""
|
"type": ""
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"https://hydra.ojack.xyz/docs/#/": {
|
||||||
|
"fetched": "2022-04-25T09:03:25.132Z",
|
||||||
|
"bibtex": [
|
||||||
|
"",
|
||||||
|
"@misc{noauthor_hydra_nodate,",
|
||||||
|
" title = {Hydra},",
|
||||||
|
" url = {https://hydra.ojack.xyz/docs/#/},",
|
||||||
|
" abstract = {Description},",
|
||||||
|
" urldate = {2022-04-25},",
|
||||||
|
" journal = {hydra.ojack.xyz},",
|
||||||
|
"}",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"csl": {
|
||||||
|
"URL": "https://hydra.ojack.xyz/docs/#/",
|
||||||
|
"abstract": "Description",
|
||||||
|
"accessed": {
|
||||||
|
"date-parts": [
|
||||||
|
[
|
||||||
|
2022,
|
||||||
|
4,
|
||||||
|
25
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"container-title": "hydra.ojack.xyz",
|
||||||
|
"id": "https://hydra.ojack.xyz/docs/_x35_/",
|
||||||
|
"title": "Hydra",
|
||||||
|
"type": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"https://mikesol.github.io/purescript-wags/": {
|
||||||
|
"fetched": "2022-04-25T09:03:26.456Z",
|
||||||
|
"bibtex": [
|
||||||
|
"",
|
||||||
|
"@misc{noauthor_wags_nodate,",
|
||||||
|
" title = {Wags documentation},",
|
||||||
|
" url = {https://mikesol.github.io/purescript-wags/},",
|
||||||
|
" urldate = {2022-04-25},",
|
||||||
|
" journal = {mikesol.github.io},",
|
||||||
|
"}",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"csl": {
|
||||||
|
"URL": "https://mikesol.github.io/purescript-wags/",
|
||||||
|
"accessed": {
|
||||||
|
"date-parts": [
|
||||||
|
[
|
||||||
|
2022,
|
||||||
|
4,
|
||||||
|
25
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"container-title": "mikesol.github.io",
|
||||||
|
"id": "https://mikesol.github.io/purescript-wags/",
|
||||||
|
"title": "Wags documentation",
|
||||||
|
"type": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"https://github.com/tidalcycles/strudel": {
|
||||||
|
"fetched": "2022-04-25T09:15:32.518Z",
|
||||||
|
"bibtex": [
|
||||||
|
"",
|
||||||
|
"@misc{noauthor_strudel_2022,",
|
||||||
|
" title = {strudel},",
|
||||||
|
" copyright = {GPL-3.0},",
|
||||||
|
" url = {https://github.com/tidalcycles/strudel},",
|
||||||
|
" abstract = {Experimental port of tidalcycles to Javascript},",
|
||||||
|
" urldate = {2022-04-25},",
|
||||||
|
" publisher = {TidalCycles},",
|
||||||
|
" month = apr,",
|
||||||
|
" year = {2022},",
|
||||||
|
" note = {original-date: 2022-01-22T20:24:35Z},",
|
||||||
|
" keywords = {javascript, livecoding, tidal, tidalcycles, algorave, algorithmic-patterns},",
|
||||||
|
"}",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"csl": {
|
||||||
|
"URL": "https://github.com/tidalcycles/strudel",
|
||||||
|
"abstract": "Experimental port of tidalcycles to Javascript",
|
||||||
|
"accessed": {
|
||||||
|
"date-parts": [
|
||||||
|
[
|
||||||
|
2022,
|
||||||
|
4,
|
||||||
|
25
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"id": "https://github.com/tidalcycles/strudel",
|
||||||
|
"issued": {
|
||||||
|
"date-parts": [
|
||||||
|
[
|
||||||
|
2022,
|
||||||
|
4
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"keyword": "javascript, livecoding, tidal, tidalcycles, algorave, algorithmic-patterns",
|
||||||
|
"note": "original-date: 2022-01-22T20:24:35Z",
|
||||||
|
"publisher": "TidalCycles",
|
||||||
|
"title": "Strudel",
|
||||||
|
"type": ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -311,6 +311,42 @@ references:
|
|||||||
id: "https://strudel.tidalcycles.org"
|
id: "https://strudel.tidalcycles.org"
|
||||||
title: Strudel REPL
|
title: Strudel REPL
|
||||||
URL: "https://strudel.tidalcycles.org/"
|
URL: "https://strudel.tidalcycles.org/"
|
||||||
|
- abstract: Description
|
||||||
|
accessed:
|
||||||
|
date-parts:
|
||||||
|
- - 2022
|
||||||
|
- 4
|
||||||
|
- 25
|
||||||
|
container-title: hydra.ojack.xyz
|
||||||
|
id: "https://hydra.ojack.xyz/docs/\\_x35\\_/"
|
||||||
|
title: Hydra
|
||||||
|
URL: "https://hydra.ojack.xyz/docs/#/"
|
||||||
|
- accessed:
|
||||||
|
date-parts:
|
||||||
|
- - 2022
|
||||||
|
- 4
|
||||||
|
- 25
|
||||||
|
container-title: mikesol.github.io
|
||||||
|
id: "https://mikesol.github.io/purescript-wags/"
|
||||||
|
title: Wags documentation
|
||||||
|
URL: "https://mikesol.github.io/purescript-wags/"
|
||||||
|
- abstract: Experimental port of tidalcycles to Javascript
|
||||||
|
accessed:
|
||||||
|
date-parts:
|
||||||
|
- - 2022
|
||||||
|
- 4
|
||||||
|
- 25
|
||||||
|
id: "https://github.com/tidalcycles/strudel"
|
||||||
|
issued:
|
||||||
|
date-parts:
|
||||||
|
- - 2022
|
||||||
|
- 4
|
||||||
|
keyword: javascript, livecoding, tidal, tidalcycles, algorave,
|
||||||
|
algorithmic-patterns
|
||||||
|
note: "original-date: 2022-01-22T20:24:35Z"
|
||||||
|
publisher: TidalCycles
|
||||||
|
title: Strudel
|
||||||
|
URL: "https://github.com/tidalcycles/strudel"
|
||||||
title: "Strudel: Algorithmic Patterns for the Web"
|
title: "Strudel: Algorithmic Patterns for the Web"
|
||||||
url2cite: all-links
|
url2cite: all-links
|
||||||
---
|
---
|
||||||
@ -332,12 +368,14 @@ impossible. The application supports multiple ways to output sound,
|
|||||||
including Tone.js, Web Audio nodes, OSC (Open Sound Control) messages,
|
including Tone.js, Web Audio nodes, OSC (Open Sound Control) messages,
|
||||||
Web Serial and Web MIDI. The project is split into multiple packages,
|
Web Serial and Web MIDI. The project is split into multiple packages,
|
||||||
allowing granular reuse in other applications. Apart from TidalCycles,
|
allowing granular reuse in other applications. Apart from TidalCycles,
|
||||||
Strudel draws inspiration from prior projects like TidalVortex
|
Strudel draws inspiration from many prior existing projects like
|
||||||
[@https://zenodo.org/record/6456380], Gibber
|
TidalVortex [@https://zenodo.org/record/6456380], Gibber
|
||||||
[@{https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/–gibber-live-coding-audio-in-the-browser?page_x61_root;size_x61_150;view_x61_text}],
|
[@{https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/–gibber-live-coding-audio-in-the-browser?page_x61_root;size_x61_150;view_x61_text}],
|
||||||
Estuary
|
Estuary
|
||||||
[@https://www.semanticscholar.org/paper/Estuary_x37_3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b]
|
[@https://www.semanticscholar.org/paper/Estuary_x37_3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b],
|
||||||
and Feedforward [@https://zenodo.org/record/6353969].
|
Hydra [@{https://hydra.ojack.xyz/docs/_x35_/}], Wags
|
||||||
|
[@{https://mikesol.github.io/purescript-wags/}] and Feedforward
|
||||||
|
[@https://zenodo.org/record/6353969].
|
||||||
|
|
||||||
# Porting from Haskell
|
# Porting from Haskell
|
||||||
|
|
||||||
@ -396,6 +434,9 @@ In the REPL, the user only has to type in the pattern itself, the
|
|||||||
querying will be handled by the scheduler. The scheduler will repeatedly
|
querying will be handled by the scheduler. The scheduler will repeatedly
|
||||||
query the pattern for events, which then will be used for playback.
|
query the pattern for events, which then will be used for playback.
|
||||||
|
|
||||||
|
{width="43%"}
|
||||||
|
|
||||||
# Making Patterns
|
# Making Patterns
|
||||||
|
|
||||||
In practice, the end-user live coder will not deal with constructing
|
In practice, the end-user live coder will not deal with constructing
|
||||||
@ -458,16 +499,18 @@ The project is still young, with many features on the horizon. As
|
|||||||
general guiding principles, Strudel aims to be
|
general guiding principles, Strudel aims to be
|
||||||
|
|
||||||
1. accessible
|
1. accessible
|
||||||
2. as compatible as possible with Tidal
|
2. consistent with Tidal's approach to pattern
|
||||||
3. modular and extensible
|
3. modular and extensible
|
||||||
|
|
||||||
The main accessibility advantage over Tidal is the zero install browser
|
The main accessibility advantage over Tidal is the zero install browser
|
||||||
environment. While Strudel can control Tidal's SuperDirt audio system
|
environment. It is not yet accessible to screen reader users, but will
|
||||||
via OSC, it requires the user to install SuperCollider and its
|
be soon with the integration of the CodeMirror 6 editor. While Strudel
|
||||||
sc3plugins library, which can be difficult. Without SuperDirt, Strudel
|
can control Tidal's SuperDirt audio system via OSC, it requires the user
|
||||||
is able to output sound itself via Tone.js, however this is limited both
|
to install SuperCollider and its sc3plugins library, which can be
|
||||||
in terms of available features and runtime performance. For the future,
|
difficult. Without SuperDirt, Strudel is able to output sound itself via
|
||||||
it is planned to integrate alternative sound engines such as glicol
|
Tone.js, however this is limited both in terms of available features and
|
||||||
|
runtime performance. For the future, it is planned to integrate
|
||||||
|
alternative sound engines such as glicol
|
||||||
[@{https://webaudioconf.com/posts/2021_8/}] and faust
|
[@{https://webaudioconf.com/posts/2021_8/}] and faust
|
||||||
[@{https://webaudioconf.com/posts/2019_38/}]. To improve compatibility
|
[@{https://webaudioconf.com/posts/2019_38/}]. To improve compatibility
|
||||||
with Tidal, more Tidal functions are planned to be ported, as well as
|
with Tidal, more Tidal functions are planned to be ported, as well as
|
||||||
@ -484,8 +527,10 @@ The Strudel REPL is available at [https://strudel.tidalcycles.org
|
|||||||
[@https://strudel.tidalcycles.org]](https://strudel.tidalcycles.org){.uri
|
[@https://strudel.tidalcycles.org]](https://strudel.tidalcycles.org){.uri
|
||||||
cite-meta="{\"URL\":\"https://strudel.tidalcycles.org/\",\"abstract\":\"Strudel REPL\",\"accessed\":{\"date-parts\":[[2022,4,24]]},\"container-title\":\"strudel.tidalcycles.org\",\"id\":\"https://strudel.tidalcycles.org\",\"title\":\"Strudel REPL\",\"type\":\"\"}"},
|
cite-meta="{\"URL\":\"https://strudel.tidalcycles.org/\",\"abstract\":\"Strudel REPL\",\"accessed\":{\"date-parts\":[[2022,4,24]]},\"container-title\":\"strudel.tidalcycles.org\",\"id\":\"https://strudel.tidalcycles.org\",\"title\":\"Strudel REPL\",\"type\":\"\"}"},
|
||||||
including an interactive tutorial. The repository is at
|
including an interactive tutorial. The repository is at
|
||||||
\<github.com/tidalcycles/strudel\>, all the code is open source under
|
[https://github.com/tidalcycles/strudel
|
||||||
the GPL-3.0 License.
|
[@https://github.com/tidalcycles/strudel]](https://github.com/tidalcycles/strudel){.uri
|
||||||
|
cite-meta="{\"URL\":\"https://github.com/tidalcycles/strudel\",\"abstract\":\"Experimental port of tidalcycles to Javascript\",\"accessed\":{\"date-parts\":[[2022,4,25]]},\"id\":\"https://github.com/tidalcycles/strudel\",\"issued\":{\"date-parts\":[[2022,4]]},\"keyword\":\"javascript, livecoding, tidal, tidalcycles, algorave, algorithmic-patterns\",\"note\":\"original-date: 2022-01-22T20:24:35Z\",\"publisher\":\"TidalCycles\",\"title\":\"Strudel\",\"type\":\"\"}"},
|
||||||
|
all the code is open source under the GPL-3.0 License.
|
||||||
|
|
||||||
# Technical requirements
|
# Technical requirements
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ url2cite: all-links
|
|||||||
|
|
||||||
# Introduction
|
# Introduction
|
||||||
|
|
||||||
This paper introduces Strudel (or sometimes 'StrudelCycles'), an alternative implementation of the Tidal (or 'TidalCycles') live coding system, using the JavaScript programming language. Strudel is an attempt to make live coding more accessible, by creating a system that runs entirely in the browser, while opening Tidal's approach to algorithmic patterns [@algorithmicpattern] up to modern audio/visual web technologies. The Strudel REPL is a live code editor dedicated to manipulating strudel patterns while they play, with builtin visual feedback. While Strudel is written in JavaScript, the API is optimized for simplicity and readability by applying code transformations on the syntax tree level, allowing language operations that would otherwise be impossible. The application supports multiple ways to output sound, including Tone.js, Web Audio nodes, OSC (Open Sound Control) messages, Web Serial and Web MIDI. The project is split into multiple packages, allowing granular reuse in other applications. Apart from TidalCycles, Strudel draws inspiration from prior projects like TidalVortex [@tidalvortex], Gibber [@gibber], Estuary [@estuary] and Feedforward [@feedforward].
|
This paper introduces Strudel (or sometimes 'StrudelCycles'), an alternative implementation of the Tidal (or 'TidalCycles') live coding system, using the JavaScript programming language. Strudel is an attempt to make live coding more accessible, by creating a system that runs entirely in the browser, while opening Tidal's approach to algorithmic patterns [@algorithmicpattern] up to modern audio/visual web technologies. The Strudel REPL is a live code editor dedicated to manipulating strudel patterns while they play, with builtin visual feedback. While Strudel is written in JavaScript, the API is optimized for simplicity and readability by applying code transformations on the syntax tree level, allowing language operations that would otherwise be impossible. The application supports multiple ways to output sound, including Tone.js, Web Audio nodes, OSC (Open Sound Control) messages, Web Serial and Web MIDI. The project is split into multiple packages, allowing granular reuse in other applications. Apart from TidalCycles, Strudel draws inspiration from many prior existing projects like TidalVortex [@tidalvortex], Gibber [@gibber], Estuary [@estuary], Hydra [@hydra], Wags [@wags] and Feedforward [@feedforward].
|
||||||
|
|
||||||
# Porting from Haskell
|
# Porting from Haskell
|
||||||
|
|
||||||
@ -44,6 +44,8 @@ If an argument is an array, the same rule applies to that part of the cycle. In
|
|||||||
In the REPL, the user only has to type in the pattern itself, the querying will be handled by the scheduler.
|
In the REPL, the user only has to type in the pattern itself, the querying will be handled by the scheduler.
|
||||||
The scheduler will repeatedly query the pattern for events, which then will be used for playback.
|
The scheduler will repeatedly query the pattern for events, which then will be used for playback.
|
||||||
|
|
||||||
|
{ width=43% }
|
||||||
|
|
||||||
# Making Patterns
|
# Making Patterns
|
||||||
|
|
||||||
In practice, the end-user live coder will not deal with constructing patterns directly, but will rather build patterns using Strudel's extensive combinator library to create, combine and transform patterns.
|
In practice, the end-user live coder will not deal with constructing patterns directly, but will rather build patterns using Strudel's extensive combinator library to create, combine and transform patterns.
|
||||||
@ -94,16 +96,15 @@ Here is a short description of all the functions used:
|
|||||||
The project is still young, with many features on the horizon. As general guiding principles, Strudel aims to be
|
The project is still young, with many features on the horizon. As general guiding principles, Strudel aims to be
|
||||||
|
|
||||||
1. accessible
|
1. accessible
|
||||||
2. as compatible as possible with Tidal
|
2. consistent with Tidal's approach to pattern
|
||||||
3. modular and extensible
|
3. modular and extensible
|
||||||
|
|
||||||
The main accessibility advantage over Tidal is the zero install browser environment.
|
The main accessibility advantage over Tidal is the zero install browser environment. It is not yet accessible to screen reader users, but will be soon with the integration of the CodeMirror 6 editor. While Strudel can control Tidal's SuperDirt audio system via OSC, it requires the user to install SuperCollider and its sc3plugins library, which can be difficult. Without SuperDirt, Strudel is able to output sound itself via Tone.js, however this is limited both in terms of available features and runtime performance. For the future, it is planned to integrate alternative sound engines such as glicol [@glicol] and faust [@faust]. To improve compatibility with Tidal, more Tidal functions are planned to be ported, as well as full compatibility with SuperDirt. Besides sound, other ways to render events are being explored, such as graphical, and choreographic output. We are also looking into alternative ways of editing patterns, including multi-user editing for network music, parsing a novel syntax to escape the constraints of javascript, and developing hardware/e-textile interfaces.
|
||||||
While Strudel can control Tidal's SuperDirt audio system via OSC, it requires the user to install SuperCollider and its sc3plugins library, which can be difficult. Without SuperDirt, Strudel is able to output sound itself via Tone.js, however this is limited both in terms of available features and runtime performance. For the future, it is planned to integrate alternative sound engines such as glicol [@glicol] and faust [@faust]. To improve compatibility with Tidal, more Tidal functions are planned to be ported, as well as full compatibility with SuperDirt. Besides sound, other ways to render events are being explored, such as graphical, and choreographic output. We are also looking into alternative ways of editing patterns, including multi-user editing for network music, parsing a novel syntax to escape the constraints of javascript, and developing hardware/e-textile interfaces.
|
|
||||||
|
|
||||||
# Links
|
# Links
|
||||||
|
|
||||||
The Strudel REPL is available at <https://strudel.tidalcycles.org>, including an interactive tutorial.
|
The Strudel REPL is available at <https://strudel.tidalcycles.org>, including an interactive tutorial.
|
||||||
The repository is at <github.com/tidalcycles/strudel>, all the code is open source under the GPL-3.0 License.
|
The repository is at <https://github.com/tidalcycles/strudel>, all the code is open source under the GPL-3.0 License.
|
||||||
|
|
||||||
# Technical requirements
|
# Technical requirements
|
||||||
|
|
||||||
@ -135,3 +136,5 @@ Thanks to the Strudel and wider Tidal, live coding, webaudio and free/open sourc
|
|||||||
[@godfried]: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.72.1340
|
[@godfried]: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.72.1340
|
||||||
[@glicol]: https://webaudioconf.com/posts/2021_8/
|
[@glicol]: https://webaudioconf.com/posts/2021_8/
|
||||||
[@faust]: https://webaudioconf.com/posts/2019_38/
|
[@faust]: https://webaudioconf.com/posts/2019_38/
|
||||||
|
[@wags]: https://mikesol.github.io/purescript-wags/
|
||||||
|
[@hydra]: https://hydra.ojack.xyz/docs/#/
|
||||||
BIN
paper/demo.pdf
BIN
paper/demo.pdf
Binary file not shown.
BIN
paper/images/strudel-screenshot.png
Normal file
BIN
paper/images/strudel-screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 220 KiB |
@ -1,7 +1,11 @@
|
|||||||
|
|
||||||
\documentclass{tex/sig-alternate}
|
\documentclass{tex/sig-alternate}
|
||||||
|
|
||||||
\usepackage{hyperref}
|
\usepackage[colorlinks = true,
|
||||||
|
linkcolor = blue,
|
||||||
|
urlcolor = blue,
|
||||||
|
citecolor = blue,
|
||||||
|
anchorcolor = blue]{hyperref}
|
||||||
|
|
||||||
\usepackage{fancyvrb}
|
\usepackage{fancyvrb}
|
||||||
\usepackage{xcolor}
|
\usepackage{xcolor}
|
||||||
@ -79,7 +83,14 @@
|
|||||||
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
|
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
|
||||||
% Add ',fontsize=\small' for more characters per line
|
% Add ',fontsize=\small' for more characters per line
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
|
||||||
|
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
|
||||||
|
\makeatother
|
||||||
|
% Scale images if necessary, so that they will not overflow the page
|
||||||
|
% margins by default, and it is still possible to overwrite the defaults
|
||||||
|
% using explicit options in \includegraphics[width, height, ...]{}
|
||||||
|
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\setcopyright{waclicense}
|
\setcopyright{waclicense}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user