youpy-scissor 0.0.9 → 0.0.10
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.
- data/README.rdoc +4 -0
- data/Rakefile +1 -1
- data/lib/scissor.rb +33 -5
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -41,6 +41,10 @@ utility to chop mp3 files
|
|
41
41
|
# replace first 10 seconds with 30 seconds of silence
|
42
42
|
foo.replace(0, 10, Scissor.silence(30)).to_file('replace.mp3')
|
43
43
|
|
44
|
+
# reverse + concat + loop
|
45
|
+
beat = foo.slice(0, 1)
|
46
|
+
((beat * 3) + beat.reverse) * 80
|
47
|
+
|
44
48
|
== Copyright
|
45
49
|
|
46
50
|
Author:: youpy <youpy@buycheapviagraonlinenow.com>
|
data/Rakefile
CHANGED
@@ -17,7 +17,7 @@ DESCRIPTION = "utility to chop mp3 files"
|
|
17
17
|
RUBYFORGE_PROJECT = "scissor"
|
18
18
|
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
19
19
|
BIN_FILES = %w( )
|
20
|
-
VERS = "0.0.
|
20
|
+
VERS = "0.0.10"
|
21
21
|
|
22
22
|
REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
23
23
|
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
data/lib/scissor.rb
CHANGED
@@ -52,7 +52,8 @@ class Scissor
|
|
52
52
|
new_instance.add_fragment(Fragment.new(
|
53
53
|
fragment.filename,
|
54
54
|
fragment.start + start,
|
55
|
-
remain
|
55
|
+
remain,
|
56
|
+
fragment.reversed?))
|
56
57
|
|
57
58
|
break
|
58
59
|
else
|
@@ -60,7 +61,8 @@ class Scissor
|
|
60
61
|
new_instance.add_fragment(Fragment.new(
|
61
62
|
fragment.filename,
|
62
63
|
fragment.start + start,
|
63
|
-
fragment.duration - start
|
64
|
+
fragment.duration - start,
|
65
|
+
fragment.reversed?))
|
64
66
|
|
65
67
|
start = 0
|
66
68
|
end
|
@@ -146,6 +148,20 @@ class Scissor
|
|
146
148
|
new_instance
|
147
149
|
end
|
148
150
|
|
151
|
+
def reverse
|
152
|
+
new_instance = self.class.new
|
153
|
+
|
154
|
+
@fragments.reverse.each do |fragment|
|
155
|
+
new_instance.add_fragment(Fragment.new(
|
156
|
+
fragment.filename,
|
157
|
+
fragment.start,
|
158
|
+
fragment.duration,
|
159
|
+
!fragment.reversed?))
|
160
|
+
end
|
161
|
+
|
162
|
+
new_instance
|
163
|
+
end
|
164
|
+
|
149
165
|
def to_file(filename, options = {})
|
150
166
|
if @fragments.empty?
|
151
167
|
raise EmptyFragment
|
@@ -176,6 +192,11 @@ class Scissor
|
|
176
192
|
|
177
193
|
begin
|
178
194
|
@fragments.each_with_index do |fragment, index|
|
195
|
+
if !index.zero? && (index % 80).zero?
|
196
|
+
run_command(cmd.join(' '))
|
197
|
+
cmd = %w/ecasound/
|
198
|
+
end
|
199
|
+
|
179
200
|
fragment_tmpfile =
|
180
201
|
tmpdir + (Digest::MD5.hexdigest(fragment.filename) + '.wav')
|
181
202
|
|
@@ -185,8 +206,10 @@ class Scissor
|
|
185
206
|
|
186
207
|
cmd <<
|
187
208
|
"-a:#{index} " +
|
188
|
-
"-i:
|
189
|
-
|
209
|
+
"-i:" +
|
210
|
+
(fragment.reversed? ? 'reverse,' : '') +
|
211
|
+
"select,#{fragment.start},#{fragment.duration},\"#{fragment_tmpfile}\" " +
|
212
|
+
"-o:#{tmpfile} " +
|
190
213
|
"-y:#{position}"
|
191
214
|
|
192
215
|
position += fragment.duration
|
@@ -225,12 +248,17 @@ class Scissor
|
|
225
248
|
class Fragment
|
226
249
|
attr_reader :filename, :start, :duration
|
227
250
|
|
228
|
-
def initialize(filename, start, duration)
|
251
|
+
def initialize(filename, start, duration, reverse = false)
|
229
252
|
@filename = filename
|
230
253
|
@start = start
|
231
254
|
@duration = duration
|
255
|
+
@reverse = reverse
|
232
256
|
|
233
257
|
freeze
|
234
258
|
end
|
259
|
+
|
260
|
+
def reversed?
|
261
|
+
@reverse
|
262
|
+
end
|
235
263
|
end
|
236
264
|
end
|