Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit f763608
Showing
100 changed files
with
48,191 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
REACT_APP_DECORATORS=true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# See http://help.github.com/ignore-files/ for more about ignoring files. | ||
|
||
# dependencies | ||
node_modules | ||
|
||
# testing | ||
coverage | ||
|
||
# production | ||
build | ||
deps | ||
config | ||
# misc | ||
.DS_Store | ||
npm-debug.log | ||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"files.associations": { | ||
"*.tidal": "haskell" | ||
} | ||
} |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
# Siren | ||
*Siren*, is a tracker interface that embodies abstractions where programming is realized as the medium for pattern sequencing in a modular fashion. It is based on a hierarchical structure that consists of scenes and channels. Separate channels have independent patterns; a complete song consists of a master list of repeated patterns. In addition to pattern composition, *Siren* supports programming variations of and transitions between patterns. | ||
|
||
|
||
Supported programming languages : | ||
SuperCollider | ||
Haskell/TidalCycles | ||
|
||
![] (SOURCE TO GIF) | ||
|
||
**Note:** This is a beta release (*v0.5*), and it has not been tested comprehensively. If you come across a bug, please do [submit an `issue` ](https://github.com/inceio/inceio/issues/new), and/or create a `pull request` of you feel like participating in its development. | ||
|
||
## Download | ||
You can get *Siren* either by downloading repository `as a ZIP file` at [https://github.com/inceio/siren](github.com/inceio/siren), or by using the command line to `clone` the repository. | ||
|
||
```shell | ||
git clone https://github.com/inceio/Siren.git | ||
``` | ||
|
||
## Build and Run | ||
#### Dependencies: | ||
Make sure the latest versions of following software are installed for your system user | ||
- [SuperCollider](http://supercollider.github.io/download.html) | ||
- [NodeJS](https://nodejs.org/en/download/) | ||
+ Make sure `npm` is globally installed with `NodeJS` | ||
- [TidalCycles](https://tidalcycles.org/getting_started.html) | ||
|
||
Then follow these lines to install package dependencies: | ||
```shell | ||
cd path/to/downloaded/repo | ||
npm i | ||
``` | ||
|
||
|
||
``` | ||
In order to bind software dependencies, edit full paths in config/config.json according to your file system formatting and save the file. Copy paste your startup files to scd-start-default.scd and tidal-boot-default.hs into config folder or set the appropriate paths in config.json | ||
Note that it's possible to target required paths using the `Settings` module in the interface. | ||
``` | ||
|
||
|
||
|
||
**Note:** Make sure SuperCollider is either idle or closed before moving on. | ||
|
||
Now you can start the interface | ||
```shell | ||
npm start | ||
``` | ||
and initialize the backend | ||
|
||
```shell | ||
npm run siren | ||
``` | ||
|
||
then go to `http://localhost:3000/` or `http://127.0.0.1:3000/` in your browser | ||
*Tested with Chrome on Windows 10 and MacOSX El Capitan* | ||
|
||
## Modules | ||
|
||
### Scenes | ||
|
||
Scenes are the core of `Siren` and a scene serves as a framework to the composition. Each scene comprises of unique channels, global modifiers and patterns. | ||
|
||
*example in Figure (a)*- Textbox for scene name - `Update`/`Add` button- `Clear Matrix` button | ||
|
||
|
||
### Sequencer (aka Matrix) | ||
#### Channels | ||
|
||
Channels can be added using `Add Channel` layout and consists of `type`, `name`, `step` and `transition` parameters. Once a channel is added to the sequencer, the parameters and layout can be adjusted dynamically. Each cell is a textbox allowing any type of text input. Patterns can be looked up from the dictionary with their names and parameters. When a cell is active, it triggers the pattern with appropriate name and applies parameters in an ordered fashion. See `parameters` for various types. | ||
|
||
You can add channels using next module: | ||
|
||
### Add Channel | ||
Please note that channels has to be defined appropriately in `tidal-boot-default.hs` or compiled using `console`. | ||
|
||
**Transitions:** Transition functions for TidalCycles | ||
*example in Figure (b)*- Transition function (i.e. `(clutchIn 4)`) | ||
**Steps:** Initial step number of channel | ||
**Type:** Channel type, possible types; SCSynth, MIDI, Visual | ||
|
||
#### Cells | ||
Cells of the channels serve as a canvas for pattern names and pattern parameters. | ||
|
||
### Pattern Parameters | ||
|
||
Siren allows patterns to be parameterized and can be called with different parameters from different cells in the channel. | ||
|
||
### Random Parameters | ||
`|x,y|` returns a random value within the `x` and `y` | ||
|
||
## Patterns | ||
Disclaimer: Please omit the channel number and dollar sign on Tidal commands (instead of `d1 $ sound "bd"` just write `sound "bd"`) | ||
|
||
Tidal patterns are stored in the `dictionary` on the right hand side of the interface. This dictionary is unique for each scene and interacts with the sequencer in terms of parameters and calls. | ||
|
||
#### Temporal parameter | ||
`t` represents the temporal parameter for each timer and it can be used in expressions to create complex values, especially with math expressions. | ||
|
||
#### Mathematical expressions | ||
Mathematical expressions can be used in the patterns in the dictionary, parser evaluates the expressions when enclosed with `&` symbol.*example in Figure (c)*- Math expression enclosed by `& ... &` (i.e. in the body of `jvv`: ```... [~ f3 &`t`%3 &] ~ ...```) | ||
|
||
|
||
#### Value Parameters | ||
Any character sequence inside Siren pattern can be parameterized by surrounding desired spot with \` symbol (like surrounding a phrase for Markdown code block). Using this feature, you can not only pass well-tuned values dynamically, but also pass anything you want. | ||
|
||
```haskell | ||
n `x` # s `y` | ||
``` | ||
This can be called with any `x`or `y` value such as (assume it's named as `sq`): | ||
``` sq `"{3*4}%3"` `"bd"` ``` | ||
or | ||
``` sq `"{3*4 4*2}%3"` `"bd"` ``` | ||
|
||
### Pattern History | ||
This module stores the successfully compiled patterns to keep track of the running sequences. | ||
|
||
### Console | ||
This module serves as a CLI(Command-Line-Interface) to Haskell and SuperCollider | ||
|
||
### Global Modulators | ||
|
||
This is an experimental module that can be toggled using right click menu. There are two sections dedicated to appending and prepending to the running code. `ctrl+enter` activates the code and sections can be recalled by creating presets. Pressing `Rec` button saves the active modifiers. `shift+ click` clears the desired slot and `alt+ click` overwrites it. These modifiers are applied to the patterns shown in the pattern history section. (i.e active patterns)Channels that you want to modify can also be specified using the `channel` section in the submenu. Writing `1 2` will make the modifiers only affect the first two channels, `0` is a special case and means that modifiers will be applied to all channels in the scene. | ||
|
||
### Settings | ||
In this module, it’s possible to set various settings of Siren such as startup configs or various paths. | ||
|
||
### Debug Console | ||
This module serves as a debug console for GHC. | ||
|
||
##Notes | ||
|
||
## Known Bugs | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
const { injectBabelPlugin } = require("react-app-rewired"); | ||
const rewireMobX = require("react-app-rewire-mobx"); | ||
|
||
module.exports = function override(config, env) { | ||
config = injectBabelPlugin("babel-plugin-styled-components", config); | ||
config = rewireMobX(config, env); | ||
|
||
return config; | ||
}; |
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
const {app, BrowserWindow, ipcMain } = require('electron') | ||
var path = require('path') | ||
let mainWindow = null | ||
const url = require('url'); | ||
|
||
function createWindow() { | ||
// Initialize the window to our specified dimensions | ||
mainWindow = new BrowserWindow({ | ||
width: 1600, height: 900, | ||
backgroundColor: '#000', | ||
show: true, | ||
icon: __dirname + './favicon.icns', | ||
}) | ||
app.setAboutPanelOptions({ | ||
applicationName: "Siren", | ||
applicationVersion: "0.6.0" | ||
}) | ||
|
||
//mainWindow.setMenu(null); | ||
|
||
// Specify entry point | ||
// const startUrl = process.env.ELECTRON_START_URL || url.format({ | ||
// pathname: path.join(__dirname, '/server/build/index.html'), | ||
// protocol: 'file:', | ||
// slashes: true | ||
// }); | ||
|
||
//mainWindow.loadURL(startUrl); | ||
mainWindow.loadURL('http://localhost:3000/#/') | ||
|
||
// Show dev tools | ||
// Remove this line before distributing | ||
//mainWindow.webContents.openDevTools() | ||
|
||
|
||
// Remove window once app is closed | ||
mainWindow.on('closed', function () { | ||
if (process.platform !== 'darwin') { | ||
app.quit(); | ||
mainWindow = null | ||
} | ||
|
||
}) | ||
|
||
// mainWindow.webContents.executeJavaScript(` | ||
// var path = require('path'); | ||
// module.paths.push(path.resolve('node_modules')); | ||
// module.paths.push(path.resolve('../node_modules')); | ||
// module.paths.push(path.resolve(__dirname, '..', '..', 'electron', 'node_modules')); | ||
// module.paths.push(path.resolve(__dirname, '..', '..', 'electron.asar', 'node_modules')); | ||
// module.paths.push(path.resolve(__dirname, '..', '..', 'app', 'node_modules')); | ||
// module.paths.push(path.resolve(__dirname, '..', '..', 'app.asar', 'node_modules')); | ||
// path = undefined; | ||
// `); | ||
} | ||
|
||
app.on('ready', function () { | ||
createWindow() | ||
mainWindow.setMenu(null); | ||
}) | ||
|
||
app.on('activate', () => { | ||
if (mainWindow === null) { | ||
createWindow() | ||
} | ||
}) | ||
|
||
app.on('window-all-closed', function () { | ||
if (process.platform !== 'darwin') { | ||
app.quit() | ||
} | ||
}) | ||
|
||
|
Oops, something went wrong.