Tweaks, more inspirations, and figure

This commit is contained in:
alex 2022-04-25 10:41:16 +01:00
parent fe13a7fe34
commit 07b22a2c28
6 changed files with 185 additions and 20 deletions

View File

@ -525,6 +525,112 @@
"title": "Strudel REPL",
"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": ""
}
}
}
}

View File

@ -311,6 +311,42 @@ references:
id: "https://strudel.tidalcycles.org"
title: Strudel REPL
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"
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,
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
[@https://zenodo.org/record/6456380], Gibber
Strudel draws inspiration from many prior existing projects like
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}],
Estuary
[@https://www.semanticscholar.org/paper/Estuary_x37_3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b]
and Feedforward [@https://zenodo.org/record/6353969].
[@https://www.semanticscholar.org/paper/Estuary_x37_3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b],
Hydra [@{https://hydra.ojack.xyz/docs/_x35_/}], Wags
[@{https://mikesol.github.io/purescript-wags/}] and Feedforward
[@https://zenodo.org/record/6353969].
# 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
query the pattern for events, which then will be used for playback.
![Screenshot of the Strudel editor, including piano-roll
visualisation.](images/strudel-screenshot.png){width="43%"}
# Making Patterns
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
1. accessible
2. as compatible as possible with Tidal
2. consistent with Tidal's approach to pattern
3. modular and extensible
The main accessibility advantage over Tidal is the zero install browser
environment. 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
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
[@{https://webaudioconf.com/posts/2021_8/}] and faust
[@{https://webaudioconf.com/posts/2019_38/}]. To improve compatibility
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
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
\<github.com/tidalcycles/strudel\>, all the code is open source under
the GPL-3.0 License.
[https://github.com/tidalcycles/strudel
[@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

View File

@ -6,7 +6,7 @@ url2cite: all-links
# 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
@ -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.
The scheduler will repeatedly query the pattern for events, which then will be used for playback.
![Screenshot of the Strudel editor, including piano-roll visualisation.](images/strudel-screenshot.png){ width=43% }
# 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.
@ -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
1. accessible
2. as compatible as possible with Tidal
2. consistent with Tidal's approach to pattern
3. modular and extensible
The main accessibility advantage over Tidal is the zero install browser environment.
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.
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.
# Links
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
@ -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
[@glicol]: https://webaudioconf.com/posts/2021_8/
[@faust]: https://webaudioconf.com/posts/2019_38/
[@wags]: https://mikesol.github.io/purescript-wags/
[@hydra]: https://hydra.ojack.xyz/docs/#/

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

View File

@ -1,7 +1,11 @@
\documentclass{tex/sig-alternate}
\usepackage{hyperref}
\usepackage[colorlinks = true,
linkcolor = blue,
urlcolor = blue,
citecolor = blue,
anchorcolor = blue]{hyperref}
\usepackage{fancyvrb}
\usepackage{xcolor}
@ -79,7 +83,14 @@
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% 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}
\setcopyright{waclicense}