Merge branch 'master' of repo.fo.am:foam/ephemeral-garden

This commit is contained in:
nik gaffney 2018-05-10 20:19:47 +02:00
commit a29d7948a4
10 changed files with 233 additions and 7 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*~

View file

@ -3,4 +3,3 @@
"The Ephemeral Garden evokes the sense of convivial gatherings under a pergola. The murmur of conversation, complemented with the sound of animate matter. Growing plants, crackling wood, expanding rocks, crawling insects and the invisible signals emanating from all-pervasive electronic devices. Human and non-human voices intermingle. An ambience that is thick and alive, filled with liminal whispers otherwise unheard. Field recordings and synthetic sounds combine to create a continuously changing atmosphere. Beings come and go, the noise rises and subsides. The garden awakens with daylight, buzzes with activity throughout the day, then quietens at dusk. Its character adapting to the changing of seasons..."
https://fo.am/pergola/

33
crontab.txt Normal file
View file

@ -0,0 +1,33 @@
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
# in foam's crontab. check timezone and clock sync
# */5 * * * * /home/foam/ephemeral-garden/check.sh >> /home/foam/ephemeral-garden/test.log 2>&1
* 07 * * * /home/foam/ephemeral-garden/morning.sh >> /home/foam/ephemeral-garden/test.log 2>&1
* 22 * * * /home/foam/ephemeral-garden/evening.sh >> /home/foam/ephemeral-garden/test.log 2>&1
# in root's crontab. check timing
# 0 4 * * * /sbin/shutdown -r now

136
ephemera.sc Normal file
View file

@ -0,0 +1,136 @@
///// // / / / / / / /
//
// supercollider tests
//
////// / /
"e p h e m e r a l g a r d e n".postln;
// sc server
s = Server.local;
//s.options.memSize = 1024 * 1024;
//s.options.maxNodes = 1024 * 1024;
//s.options.numBuffers = 1024 * 1024 * 1024;
//s.latency = 0.05;
s.options.sampleRate = 44100;
s.boot;
"...".postln;
~background = {
"background >> ".post;
// list of soundfiles
~sources = [
"/home/foam/snd/39-incomprehensible-restaurtant-chatter-02.wav",
"/home/foam/snd/39-incomprehensible-restaurtant-chatter-03.wav",
"/home/foam/snd/39-incomprehensible-restaurtant-chatter-04.wav",
"/home/foam/snd/46-afternoon-chorus-02.wav",
"/home/foam/snd/46-afternoon-chorus-03.wav",
"/home/foam/snd/46-afternoon-chorus-04.wav",
];
// select random element from the list
~file = ~sources.choose;
~file.postln;
// read file then play buffer
Buffer.read (server: s, path: ~file, action: ~play1);
};
~foreground = {
"foreground >> ".post;
// list of soundfiles
~sources = [
"/home/foam/snd/26-multilayered-conversations-01.wav",
"/home/foam/snd/26-multilayered-conversations-02.wav",
"/home/foam/snd/39-incomprehensible-restaurtant-chatter-02.wav",
"/home/foam/snd/39-incomprehensible-restaurtant-chatter-03.wav",
"/home/foam/snd/39-incomprehensible-restaurtant-chatter-04.wav",
"/home/foam/snd/26-party-chatter-02.wav",
"/home/foam/snd/26-party-chatter-03.wav",
"/home/foam/snd/26-party-chatter-04.wav",
"/home/foam/snd/06-uw-pebbles-urchins-waves.wav",
"/home/foam/snd/17-uw-waves-crashing-on-pebble-beach-slow.wav"
];
// select random element from the list
~file = ~sources.choose;
~file.postln;
// read file then play buffer
Buffer.read (server: s, path: ~file, action: ~play2);
};
~play1 = { arg b1;
Routine {
"~play [bg - ".post; b1.path.post; "]".postln;
{(PlayBuf.ar(1, b1, rate: 1, loop: 0, doneAction: 2) * 0.1).dup }.play.waitForFree;
// free buffer once done?
"freed [bg - ".post; b1.path.post; "]".postln;
b1.free;
~background.value;
}.play;
};
~play2 = { arg b2;
Routine {
"~play [fg - ".post; b2.path.post; "]".postln;
{(PlayBuf.ar(1, b2, rate: 1, loop: 0, doneAction: 2) * 0.1).dup }.play.waitForFree;
// free buffer once done?
"freed [fg - ".post; b2.path.post; "]".postln;
b2.free;
~foreground.value;
}.play;
};
s.waitForBoot {
"booted...".postln;
i = 0;
j = 0;
p = 2; // how many background layers?
q = 3; // how many foreground layers?
while ( { i < p }, { i = i + 1; ~background.value;});
while ( { j < q }, { j = j + 1; ~foreground.value;});
};
// 167/31 -> 175/31 -> 168/31
// via http://danielnouri.org/docs/SuperColliderHelp/Tutorials/Getting-Started/Buffers.html
// Streaming a File in From Disk
// In some cases, for instance when working with very large files, you might not want to load a sound completely into memory. Instead, you can stream it in from disk a bit at a time, using the UGen DiskIn, and Buffer's 'cueSoundFile' method:
// (
// SynthDef("tutorial-Buffer-cue",{ arg out=0,bufnum;
// Out.ar(out,
// DiskIn.ar( 1, bufnum )
// )
// }).send(s);
// )
// b = Buffer.cueSoundFile(s,"sounds/a11wlk01-44_1.aiff", 0, 1);
// y = Synth.new("tutorial-Buffer-cue", [\bufnum,b.bufnum], s);
// b.free; y.free;
// This is not as flexible as PlayBuf (no rate control), but can save memory.

5
evening.sh Normal file
View file

@ -0,0 +1,5 @@
#!/bin/bash
# evening. clean up and stop processes
echo "evening: `date`"

5
morning.sh Normal file
View file

@ -0,0 +1,5 @@
#!/bin/bash
# morning. set up and start processes
echo "morning: `date`"

15
pergola.service Normal file
View file

@ -0,0 +1,15 @@
[Unit]
Description=Supercollisions under a pergola
After=multi-user.target sound.target
[Service]
Type=simple
User=foam
Group=audio
ExecStart=/home/foam/ephemeral-garden/pre-setup.sh
StandardOutput=syslog+console
StandardError=syslog+console
[Install]
Alias=cloud-pergola.service
Requires=sound.target

7
pre-setup.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/bash
# to be run as root to setup/start/sclang
#runuser -l foam -c 'screen -S test -m -d /home/foam/ephemeral-garden/setup.sh'
# to be run from user 'foam' crontab
screen -S test -m -d /home/foam/ephemeral-garden/setup.sh

View file

@ -1,9 +1,8 @@
# -*- mode: enh-ruby; coding: utf-8; -*-
play 72
sleep 1
snd = "/home/foam/snd/"
snd = "~/snd/"
loop do
sample snd, "29", rrand_i(1,2), amp: 1.5
sample snd, "31", rrand_i(1,2), lpf: 70, amp: 1.5
#sample snd, "29", rrand_i(1,2), lpf: 70, amp: 1.5
end

26
setup.sh Executable file
View file

@ -0,0 +1,26 @@
#!/bin/bash
# via -> http://sc3howto.blogspot.be/2015/04/how-to-keep-installation-running-on.html
export DISPLAY=:0
#export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus
#export XDG_RUNTIME_DIR=/run/user/1001
export JACK_NO_AUDIO_RESERVATION=1
port=57110
echo "ephemeral: ------------------------------------------------------------"
echo "ephemeral: `/bin/date`"
echo "ephemeral: as user `whoami`"
#echo "ephemeral: with env -> `env`"
echo "ephemeral: waiting..."
sleep 5
echo "ephemeral: sclang starting..."
#runuser -l foam -c 'screen -S test -m -d /usr/local/bin/sclang /home/foam/ephemeral-garden/sc3-test.sc >> /home/foam/ephemeral-garden/test.log 2>&1'
/usr/local/bin/sclang /home/foam/ephemeral-garden/sc3-test.sc 2>&1 >> /home/foam/ephemeral-garden/test.log
echo "ephemeral: sclang spawned..."