youpy-scissor 0.0.12 → 0.0.13
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 +0 -8
- data/Rakefile +2 -1
- data/lib/scissor.rb +30 -9
- metadata +12 -2
data/README.rdoc
CHANGED
@@ -13,14 +13,6 @@ supported file format:
|
|
13
13
|
|
14
14
|
=== Requirements
|
15
15
|
|
16
|
-
* {ruby-mp3info}[http://ruby-mp3info.rubyforge.org/]
|
17
|
-
|
18
|
-
gem install ruby-mp3info
|
19
|
-
|
20
|
-
* {RiffLib}[http://rubyforge.org/projects/riff/]
|
21
|
-
|
22
|
-
gem install riff
|
23
|
-
|
24
16
|
* {FFmpeg}[http://ffmpeg.mplayerhq.hu/]
|
25
17
|
* {Ecasound}[http://www.eca.cx/ecasound/] 2.5.0 or higher
|
26
18
|
|
data/Rakefile
CHANGED
@@ -17,7 +17,7 @@ DESCRIPTION = "utility to chop sound 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.13"
|
21
21
|
|
22
22
|
REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
23
23
|
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
@@ -57,6 +57,7 @@ spec = Gem::Specification.new do |s|
|
|
57
57
|
s.homepage = HOMEPATH
|
58
58
|
s.test_files = Dir["test/test_*.rb"]
|
59
59
|
|
60
|
+
s.add_dependency('open4')
|
60
61
|
s.add_dependency('ruby-mp3info')
|
61
62
|
s.add_dependency('riff')
|
62
63
|
#s.required_ruby_version = '>= 1.8.2'
|
data/lib/scissor.rb
CHANGED
@@ -2,19 +2,23 @@ require 'mp3info'
|
|
2
2
|
require 'digest/md5'
|
3
3
|
require 'pathname'
|
4
4
|
require 'riff/reader'
|
5
|
+
require 'open4'
|
6
|
+
require 'logger'
|
5
7
|
|
6
8
|
class Scissor
|
7
9
|
class Error < StandardError; end
|
8
|
-
class CommandNotFound < Error; end
|
9
|
-
class CommandFailed < Error; end
|
10
10
|
class FileExists < Error; end
|
11
11
|
class EmptyFragment < Error; end
|
12
12
|
class OutOfDuration < Error; end
|
13
|
+
class CommandFailed < Error; end
|
13
14
|
|
14
15
|
attr_reader :fragments
|
16
|
+
attr_accessor :logger
|
15
17
|
|
16
18
|
def initialize(filename = nil)
|
17
19
|
@fragments = []
|
20
|
+
@logger = Logger.new(STDOUT)
|
21
|
+
@logger.level = Logger::INFO
|
18
22
|
|
19
23
|
if filename
|
20
24
|
@fragments << Fragment.new(
|
@@ -164,6 +168,8 @@ class Scissor
|
|
164
168
|
end
|
165
169
|
|
166
170
|
def to_file(filename, options = {})
|
171
|
+
filename = Pathname.new(filename)
|
172
|
+
|
167
173
|
if @fragments.empty?
|
168
174
|
raise EmptyFragment
|
169
175
|
end
|
@@ -189,16 +195,17 @@ class Scissor
|
|
189
195
|
tmpdir = Pathname.new('/tmp/scissor-' + $$.to_s)
|
190
196
|
tmpdir.mkpath
|
191
197
|
tmpfile = tmpdir + 'tmp.wav'
|
192
|
-
cmd = %w/ecasound
|
198
|
+
cmd = %w/ecasound/
|
193
199
|
|
194
200
|
begin
|
195
201
|
@fragments.each_with_index do |fragment, index|
|
196
202
|
if !index.zero? && (index % 80).zero?
|
197
203
|
run_command(cmd.join(' '))
|
198
|
-
cmd = %w/ecasound
|
204
|
+
cmd = %w/ecasound/
|
199
205
|
end
|
200
206
|
|
201
207
|
fragment_tmpfile =
|
208
|
+
fragment.filename.extname.downcase == '.wav' ? fragment.filename :
|
202
209
|
tmpdir + (Digest::MD5.hexdigest(fragment.filename) + '.wav')
|
203
210
|
|
204
211
|
unless fragment_tmpfile.exist?
|
@@ -217,7 +224,14 @@ class Scissor
|
|
217
224
|
end
|
218
225
|
|
219
226
|
run_command(cmd.join(' '))
|
220
|
-
|
227
|
+
|
228
|
+
if filename.extname == '.wav'
|
229
|
+
open(filename, 'w') do |file|
|
230
|
+
file.write(tmpfile.read)
|
231
|
+
end
|
232
|
+
else
|
233
|
+
run_command("ffmpeg -i \"#{tmpfile}\" \"#{filename}\"")
|
234
|
+
end
|
221
235
|
ensure
|
222
236
|
tmpdir.rmtree
|
223
237
|
end
|
@@ -229,15 +243,22 @@ class Scissor
|
|
229
243
|
|
230
244
|
def which(command)
|
231
245
|
run_command("which #{command}")
|
232
|
-
|
233
|
-
rescue CommandFailed
|
234
|
-
raise CommandNotFound.new("#{command}: not found")
|
235
246
|
end
|
236
247
|
|
237
248
|
def run_command(cmd)
|
238
|
-
|
249
|
+
@logger.debug("run_command: #{cmd}")
|
250
|
+
|
251
|
+
result = ''
|
252
|
+
status = Open4.popen4(cmd) do |pid, stdin, stdout, stderr|
|
253
|
+
@logger.debug(stderr.read)
|
254
|
+
result = stdout.read
|
255
|
+
end
|
256
|
+
|
257
|
+
if status.exitstatus != 0
|
239
258
|
raise CommandFailed.new(cmd)
|
240
259
|
end
|
260
|
+
|
261
|
+
return result
|
241
262
|
end
|
242
263
|
|
243
264
|
class << self
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: youpy-scissor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- youpy
|
@@ -9,9 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-04-
|
12
|
+
date: 2009-04-06 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: open4
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
15
25
|
- !ruby/object:Gem::Dependency
|
16
26
|
name: ruby-mp3info
|
17
27
|
type: :runtime
|