tune_yard 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +47 -0
- data/Rakefile +2 -0
- data/lib/tune_yard.rb +20 -0
- data/lib/tune_yard/player.rb +52 -0
- data/lib/tune_yard/version.rb +3 -0
- data/tune_yard.gemspec +26 -0
- metadata +109 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b369ff721e09244cf80dcfc2f5b2b0841c32ef00
|
4
|
+
data.tar.gz: 67f346c6e84fd1f45f1937033924f60bc603cb47
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0c2020d7594803a2fb81a7fadd692a0cd693c76aab757f3ff0a35155e0e2483d0b1f0e6eb24188a374e5e9cceb1ebd1e2f04d6f09d21bdaccdda315206bdb487
|
7
|
+
data.tar.gz: 86ccd4df8b118c2e19aacbc2d789ad8c512c1dbb2ce85d0959becc0638e653fd01711d5ae7fca66219e1e6b0b721fb26983d2a2d34e7b96cf490cd3de0a4a092
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 James Dabbs
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# TuneYard
|
2
|
+
|
3
|
+
_With immense respect to [tUnE-yArDs](http://tune-yards.com/)_
|
4
|
+
|
5
|
+
TuneYard is a gem to allow remote interaction with [SonicPi](http://sonic-pi.net/) (outside of the built-in SonicPi IDE).
|
6
|
+
|
7
|
+
**Big Disclaimer:** this is built on some undocumented SonicPi internals which could very well break. It is sufficient for my somewhat limited purposes (namely, a SonicPi + [Camping](http://camping.io/) class project at [The Iron Yard](http://theironyard.com/academy/)), but has only been tested in that context (namely, OSX 10.10, Ruby 2.1, and SonicPi 2.2). Please let me know if you are interested in using this elsewhere; I'd love some motivation to help properly [extract SonicPi to a gem](https://groups.google.com/forum/#!topic/sonic-pi/fI455WKYJDo).
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Be sure you have installed [SonicPi](http://sonic-pi.net/). If it is installed to a non-default location, you may need to specify where to look for the bundled Ruby files:
|
12
|
+
|
13
|
+
```
|
14
|
+
$LOAD_PATH.unshift '/path/to/sonic pi/app/server'
|
15
|
+
require 'tune_yard'
|
16
|
+
```
|
17
|
+
|
18
|
+
## Usage
|
19
|
+
|
20
|
+
Play some boops
|
21
|
+
|
22
|
+
```
|
23
|
+
TuneYard.play do
|
24
|
+
with_fx :reverb, mix: 0.2 do
|
25
|
+
loop do
|
26
|
+
play scale(:Eb2, :major_pentatonic, num_octaves: 3).choose, release: 0.1, amp: rand
|
27
|
+
sleep 0.1
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
With a little ~~violence~~metaprogramming, the `play` function _should_ close over properly. Warning: there be dragons here.
|
34
|
+
|
35
|
+
```
|
36
|
+
def rate
|
37
|
+
rrand 0.125, 1.5
|
38
|
+
end
|
39
|
+
delay = 0.25
|
40
|
+
|
41
|
+
TuneYard.play for: 2 do
|
42
|
+
loop do
|
43
|
+
sample :perc_bell, rate: rate
|
44
|
+
sleep delay
|
45
|
+
end
|
46
|
+
end
|
47
|
+
```
|
data/Rakefile
ADDED
data/lib/tune_yard.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "tune_yard/version"
|
2
|
+
require "tune_yard/player"
|
3
|
+
|
4
|
+
module TuneYard
|
5
|
+
Player = DefaultPlayer.new
|
6
|
+
|
7
|
+
at_exit { Player.stop }
|
8
|
+
|
9
|
+
def self.play opts={}, &block
|
10
|
+
Player.run &block
|
11
|
+
if opts[:for]
|
12
|
+
sleep opts[:for]
|
13
|
+
stop
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.stop
|
18
|
+
Player.stop
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'sourcify'
|
2
|
+
|
3
|
+
# `rugged` is vendored in SonicPi, but not required relative, so the require may fail to find it
|
4
|
+
require 'rugged'
|
5
|
+
|
6
|
+
# Load bundled Sonic Pi files
|
7
|
+
$LOAD_PATH.unshift '/Applications/Sonic Pi.app/app/server'
|
8
|
+
require 'core.rb'
|
9
|
+
%w{ studio spider spiderapi server util oscencode }.each do |m|
|
10
|
+
require "sonicpi/lib/sonicpi/#{m}"
|
11
|
+
end
|
12
|
+
$LOAD_PATH.shift
|
13
|
+
|
14
|
+
# TODO: seems like we shouldn't need this included globally ...
|
15
|
+
include SonicPi::Util
|
16
|
+
|
17
|
+
module TuneYard
|
18
|
+
class BasePlayer < SonicPi::Spider
|
19
|
+
include SonicPi::SpiderAPI
|
20
|
+
include SonicPi::Mods::Sound
|
21
|
+
|
22
|
+
def run &block
|
23
|
+
# TODO: there's a definite race condition here
|
24
|
+
@_outer_binding = block.binding
|
25
|
+
|
26
|
+
code = <<-CODE
|
27
|
+
use_arg_checks true
|
28
|
+
use_debug true
|
29
|
+
#{block.to_source strip_enclosure: true}
|
30
|
+
CODE
|
31
|
+
__spider_eval code, workspace: __FILE__
|
32
|
+
end
|
33
|
+
|
34
|
+
def stop
|
35
|
+
__stop_jobs
|
36
|
+
end
|
37
|
+
|
38
|
+
def method_missing name, *args
|
39
|
+
if @_outer_binding.local_variable_defined? name
|
40
|
+
@_outer_binding.local_variable_get name
|
41
|
+
else
|
42
|
+
@_outer_binding.send name, *args
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class DefaultPlayer < BasePlayer
|
48
|
+
def initialize
|
49
|
+
super "localhost", 4555, Queue.new, 5, Module.new
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/tune_yard.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'tune_yard/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "tune_yard"
|
8
|
+
spec.version = TuneYard::VERSION
|
9
|
+
spec.authors = ["James Dabbs"]
|
10
|
+
spec.email = ["jamesdabbs@gmail.com"]
|
11
|
+
spec.summary = %q{A simple remote for SonicPi}
|
12
|
+
#spec.description = %q{TODO: Write a longer description. Optional.}
|
13
|
+
spec.homepage = "https://github.com/jamesdabbs/tune_yard"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
|
24
|
+
spec.add_dependency 'rugged', '~> 0.21'
|
25
|
+
spec.add_dependency 'sourcify', '~> 0.5'
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tune_yard
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Dabbs
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-12-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.7'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rugged
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.21'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.21'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sourcify
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.5'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.5'
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- jamesdabbs@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- Gemfile
|
78
|
+
- LICENSE.txt
|
79
|
+
- README.md
|
80
|
+
- Rakefile
|
81
|
+
- lib/tune_yard.rb
|
82
|
+
- lib/tune_yard/player.rb
|
83
|
+
- lib/tune_yard/version.rb
|
84
|
+
- tune_yard.gemspec
|
85
|
+
homepage: https://github.com/jamesdabbs/tune_yard
|
86
|
+
licenses:
|
87
|
+
- MIT
|
88
|
+
metadata: {}
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 2.2.2
|
106
|
+
signing_key:
|
107
|
+
specification_version: 4
|
108
|
+
summary: A simple remote for SonicPi
|
109
|
+
test_files: []
|