imuzer 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +7 -2
- data/README.md +3 -2
- data/bin/imuzer +63 -42
- data/imuzer.gemspec +9 -8
- data/lib/format_response.rb +16 -0
- data/lib/imuze/create_music.rb +19 -3
- data/lib/imuze/get_genres.rb +33 -0
- data/lib/imuze/get_music.rb +2 -1
- data/lib/imuzer/version.rb +1 -1
- data/lib/imuzer.rb +2 -0
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a68ce8613fe16537351c9044ca646fbc10041de9
|
4
|
+
data.tar.gz: 259522091d5b725f52a800bcb7bc734bee4b1150
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bde532ec27f9b9ee0412e9398677f98d55d23b63c5984c414dd3bab001478f13a270d4cedad1b1be73bb6728ef6420bc775f535ce81b1f74238ae0586f225e4d
|
7
|
+
data.tar.gz: b0f479ec10dafe3fb2db0d25d293b765e0c5b82d525fd628ede90eed315d82e678f57f0394b309865c4ac924e9ffcb04185aa8d01130db3ebc47e530488a4811
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
imuzer (0.0.
|
4
|
+
imuzer (0.0.2)
|
5
|
+
gli (= 2.13.4)
|
5
6
|
json (~> 1.8.3)
|
6
7
|
methadone (~> 1.9.2)
|
7
8
|
rainbow (~> 2.1.0)
|
@@ -9,7 +10,7 @@ PATH
|
|
9
10
|
GEM
|
10
11
|
remote: https://rubygems.org/
|
11
12
|
specs:
|
12
|
-
aruba (0.
|
13
|
+
aruba (0.14.0)
|
13
14
|
childprocess (~> 0.5.6)
|
14
15
|
contracts (~> 0.9)
|
15
16
|
cucumber (>= 1.3.19)
|
@@ -34,6 +35,7 @@ GEM
|
|
34
35
|
diff-lcs (1.2.5)
|
35
36
|
ffi (1.9.10)
|
36
37
|
gherkin (3.2.0)
|
38
|
+
gli (2.13.4)
|
37
39
|
json (1.8.3)
|
38
40
|
methadone (1.9.2)
|
39
41
|
bundler
|
@@ -68,3 +70,6 @@ DEPENDENCIES
|
|
68
70
|
rake (~> 10.0)
|
69
71
|
rdoc
|
70
72
|
rspec (~> 3)
|
73
|
+
|
74
|
+
BUNDLED WITH
|
75
|
+
1.11.2
|
data/README.md
CHANGED
@@ -13,7 +13,8 @@ imuzer is a minimalistic gem that lets you generate music from the online music
|
|
13
13
|
|
14
14
|
## Usage
|
15
15
|
|
16
|
-
[yacin@mac imuzer (master)]$
|
16
|
+
[yacin@mac imuzer (master)]$ imuzer -h
|
17
|
+
|
17
18
|
Usage: imuzer [options] duration genre subgenre structure
|
18
19
|
|
19
20
|
Composes a track with iMuze
|
@@ -43,7 +44,7 @@ imuzer is a minimalistic gem that lets you generate music from the online music
|
|
43
44
|
|
44
45
|
Bellow is an example on how to use the tool:
|
45
46
|
|
46
|
-
|
47
|
+
[yacin@mac imuzer (master)]$ imuzer -v -e MYEMAIL -p MYPASSWORD 30000 edm soft 'calm:0.3,medium:0.3,dynamic:0.3'
|
47
48
|
|
48
49
|
## Contributing
|
49
50
|
|
data/bin/imuzer
CHANGED
@@ -1,57 +1,78 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'gli'
|
4
4
|
require 'methadone'
|
5
5
|
require 'imuzer.rb'
|
6
6
|
require 'json'
|
7
7
|
require 'rainbow'
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
9
|
+
include GLI::App
|
10
|
+
program_desc 'a demo tool for iMuze API'
|
11
|
+
|
12
|
+
desc 'Be verbose'
|
13
|
+
switch [:v, :verbose]
|
14
|
+
|
15
|
+
desc 'Email from your iMuze user account'
|
16
|
+
arg_name 'email'
|
17
|
+
flag [:e, :email]
|
18
|
+
|
19
|
+
desc 'Password from your iMuze user account'
|
20
|
+
arg_name 'password'
|
21
|
+
flag [:p, :password]
|
22
|
+
|
23
|
+
desc 'list all musical genres and subgenres'
|
24
|
+
command :genres do |c|
|
25
|
+
puts 'Listing iMuze musical genres with sub-genres...'
|
26
|
+
c.action do |global_options, options, args|
|
27
|
+
response = Imuze::GetGenres.call global_options
|
28
|
+
response['genres'].each do |genre|
|
29
|
+
print " #{genre['name']}: "
|
30
|
+
genre['subgenres'].each{|sg| print Rainbow("#{sg}, ").bright}
|
31
|
+
puts
|
22
32
|
end
|
33
|
+
end
|
34
|
+
end
|
23
35
|
|
36
|
+
desc 'composes a music'
|
37
|
+
arg 'genre', :required
|
38
|
+
arg 'subgenre', :required
|
39
|
+
arg 'duration', :required
|
40
|
+
arg 'structure', :required
|
41
|
+
command :compose do |c|
|
42
|
+
c.switch [:c, :crop]
|
43
|
+
c.flag 'fadeout_ms', arg_name: 'fadeout_ms',
|
44
|
+
type: Integer,
|
45
|
+
desc: 'fadeout in milliseconds'
|
46
|
+
c.flag 'voices_volume', arg_name: 'voices_volume',
|
47
|
+
type: Integer,
|
48
|
+
desc: 'volume of voice track'
|
49
|
+
|
50
|
+
c.action do |global_options, options, args|
|
51
|
+
help_now!('credentials required to compose music') if global_options[:email].nil? || global_options[:password].nil?
|
52
|
+
help_now!('id is required') if args.size < 3
|
53
|
+
genre = args[0]
|
54
|
+
subgenre = args[1]
|
55
|
+
duration = args[2]
|
56
|
+
structure = args[3]
|
57
|
+
puts 'Authenticating to iMuze ....'
|
58
|
+
response = Imuze::CreateToken.call global_options[:email],
|
59
|
+
global_options[:password]
|
60
|
+
FormatResponse.call response, options
|
24
61
|
token = response['token']
|
25
|
-
|
62
|
+
music = "\"#{subgenre}\" \"#{genre}\""
|
63
|
+
puts "Composing your track #{music} on iMuze .... please wait"
|
26
64
|
start = Time.now
|
27
|
-
response = Imuze::CreateMusic.call
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
puts Rainbow(formated_json).red
|
33
|
-
exit
|
34
|
-
else
|
35
|
-
puts Rainbow(formated_json).green if options[:verbose]
|
36
|
-
end
|
37
|
-
|
65
|
+
response = Imuze::CreateMusic.call token,
|
66
|
+
duration,
|
67
|
+
genre, subgenre, structure,
|
68
|
+
options
|
69
|
+
FormatResponse.call response, global_options
|
38
70
|
elapsed = Time.now - start
|
39
|
-
|
71
|
+
puts "Done composing your music in #{elapsed} seconds"
|
40
72
|
mp3_uri = response['mp3_uri']
|
41
|
-
|
42
|
-
Imuze::GetMusic.call
|
73
|
+
puts "Playing your #{music} mp3 from iMuze ...."
|
74
|
+
Imuze::GetMusic.call token, mp3_uri
|
43
75
|
end
|
44
|
-
|
45
|
-
on('-e email','--email','your imuze account email')
|
46
|
-
on('-p password','--password','your imuze password')
|
47
|
-
on('-v','--verbose','Be verbose')
|
48
|
-
|
49
|
-
version Imuzer::VERSION
|
50
|
-
description 'Composes a track with iMuze'
|
51
|
-
arg :duration, 'Track duration'
|
52
|
-
arg :genre, 'Track genre'
|
53
|
-
arg :subgenre, 'Track subgenre'
|
54
|
-
arg :structure, 'Track structure'
|
55
|
-
use_log_level_option toggle_debug_on_signal: 'USR1'
|
56
|
-
go!
|
57
76
|
end
|
77
|
+
|
78
|
+
exit run(ARGV)
|
data/imuzer.gemspec
CHANGED
@@ -4,27 +4,28 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'imuzer/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'imuzer'
|
8
8
|
spec.version = Imuzer::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Yacin Bahi']
|
10
|
+
spec.email = ['yacin@imuze.io']
|
11
11
|
spec.summary = %q{Generate music with iMuze.}
|
12
12
|
spec.description = %q{This gem uses the iMuze (imuze.io) API to generate music. You'll need an account on iMuze.io in order to use it.}
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
13
|
+
spec.homepage = 'https://rubygems.org/gems/imuzer'
|
14
|
+
spec.license = 'custom'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
22
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
23
23
|
spec.add_development_dependency('rdoc')
|
24
24
|
spec.add_development_dependency('aruba')
|
25
25
|
spec.add_development_dependency('rspec', '~> 3')
|
26
26
|
|
27
27
|
spec.add_dependency('methadone', '~> 1.9.2')
|
28
|
+
spec.add_dependency('gli', '2.13.4')
|
28
29
|
spec.add_dependency('json', '~> 1.8.3')
|
29
30
|
spec.add_dependency('rainbow', '~> 2.1.0')
|
30
31
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class FormatResponse < Struct.new(:response, :options)
|
2
|
+
|
3
|
+
def self.call(*args)
|
4
|
+
new(*args).call
|
5
|
+
end
|
6
|
+
|
7
|
+
def call
|
8
|
+
formated_json = JSON.pretty_generate(response)
|
9
|
+
if response['status'] == 500 || response['status'] == 403
|
10
|
+
puts Rainbow(formated_json).red
|
11
|
+
exit
|
12
|
+
else
|
13
|
+
puts Rainbow(formated_json).green if options[:verbose]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/imuze/create_music.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Imuze
|
2
|
-
class CreateMusic < Struct.new(:token, :duration, :genre, :subgenre, :structure)
|
2
|
+
class CreateMusic < Struct.new(:token, :duration, :genre, :subgenre, :structure, :options)
|
3
3
|
require 'uri'
|
4
4
|
require 'net/http'
|
5
5
|
require 'json'
|
@@ -33,12 +33,28 @@ module Imuze
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def request_body
|
36
|
-
{
|
36
|
+
hash = {
|
37
37
|
genre: genre,
|
38
38
|
subgenre: subgenre,
|
39
39
|
duration_ms: duration.to_i,
|
40
40
|
structure: music_structure
|
41
|
-
}
|
41
|
+
}
|
42
|
+
hash.merge!(crop: crop) if crop
|
43
|
+
hash.merge!(fadeout_ms: fadeout_ms) if fadeout_ms
|
44
|
+
hash.merge!(voices_volume: voices_volume) if voices_volume
|
45
|
+
hash.to_json
|
46
|
+
end
|
47
|
+
|
48
|
+
def crop
|
49
|
+
options.nil? ? nil : options[:crop]
|
50
|
+
end
|
51
|
+
|
52
|
+
def fadeout_ms
|
53
|
+
options.nil? ? nil : options[:fadeout_ms]
|
54
|
+
end
|
55
|
+
|
56
|
+
def voices_volume
|
57
|
+
options.nil? ? nil : options[:voices_volume]
|
42
58
|
end
|
43
59
|
|
44
60
|
def music_structure
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Imuze
|
2
|
+
class GetGenres < Struct.new(:global_options)
|
3
|
+
require 'uri'
|
4
|
+
require 'net/http'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
def self.call(*args)
|
8
|
+
new(*args).call
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
response = http.request(get_request)
|
13
|
+
JSON.parse(response.read_body)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def url
|
19
|
+
@url ||= URI('http://joplin.imuze.io/genres')
|
20
|
+
end
|
21
|
+
|
22
|
+
def http
|
23
|
+
@http ||= Net::HTTP.new(url.host, url.port)
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_request
|
27
|
+
request = Net::HTTP::Get.new(url)
|
28
|
+
request['content-type'] = 'application/json'
|
29
|
+
request['cache-control'] = 'no-cache'
|
30
|
+
request
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/imuze/get_music.rb
CHANGED
@@ -19,6 +19,7 @@ module Imuze
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def command
|
22
|
-
%Q(curl "http:#{mp3_uri}" -s -H "Content-Type: application/json" -H "Authorization: #{token}" | mpg123 - 2> /dev/null)
|
22
|
+
%Q(curl "http:#{mp3_uri}" -s -H "Content-Type: application/json" -H "Authorization: #{token}" | mpg123 - 2> /dev/null)
|
23
|
+
end
|
23
24
|
end
|
24
25
|
end
|
data/lib/imuzer/version.rb
CHANGED
data/lib/imuzer.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imuzer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yacin Bahi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 1.9.2
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: gli
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 2.13.4
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 2.13.4
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: json
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -143,13 +157,15 @@ files:
|
|
143
157
|
- features/step_definitions/imuzer_steps.rb
|
144
158
|
- features/support/env.rb
|
145
159
|
- imuzer.gemspec
|
160
|
+
- lib/format_response.rb
|
146
161
|
- lib/imuze/create_music.rb
|
147
162
|
- lib/imuze/create_token.rb
|
163
|
+
- lib/imuze/get_genres.rb
|
148
164
|
- lib/imuze/get_music.rb
|
149
165
|
- lib/imuzer.rb
|
150
166
|
- lib/imuzer/version.rb
|
151
167
|
- spec/something_spec.rb
|
152
|
-
homepage:
|
168
|
+
homepage: https://rubygems.org/gems/imuzer
|
153
169
|
licenses:
|
154
170
|
- custom
|
155
171
|
metadata: {}
|
@@ -169,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
185
|
version: '0'
|
170
186
|
requirements: []
|
171
187
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.
|
188
|
+
rubygems_version: 2.6.2
|
173
189
|
signing_key:
|
174
190
|
specification_version: 4
|
175
191
|
summary: Generate music with iMuze.
|