speak_slow 0.0.2 → 0.0.3
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/lib/speak_slow.rb +7 -4
- data/lib/speak_slow.rb.orig +171 -0
- data/lib/speak_slow/version.rb +1 -1
- data/lib/speak_slow/version.rb.orig +7 -0
- metadata +4 -2
data/lib/speak_slow.rb
CHANGED
|
@@ -111,20 +111,23 @@ module SpeakSlow
|
|
|
111
111
|
# `mv #{temp_filepath} #{out_filepath}`
|
|
112
112
|
# end
|
|
113
113
|
# end
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
def apply_sox_to_wav(in_filepath, out_filepath)
|
|
116
116
|
puts "Applying SoX functions to WAV (this might take a few minutes or more)"
|
|
117
117
|
# silence = "silence 0 1 0.3 -32d"
|
|
118
118
|
# silence = "silence 1 0.005 -32d 1 0.3 -32d"
|
|
119
119
|
silence = "silence 1 0.01 1% 1 0.3 1%"
|
|
120
|
-
if @speed and @speed != 1
|
|
120
|
+
if @speed and @speed != 1 and @silence and @silence != 0 #speed and silence
|
|
121
121
|
speed = "tempo -s #{@speed}"
|
|
122
122
|
pad = "pad 0 #{@silence.to_f * @speed}"
|
|
123
123
|
`#{@sox} #{in_filepath} -p #{silence} #{pad} : restart | #{@sox} - -p | #{@sox} - #{out_filepath} #{speed}`
|
|
124
|
-
elsif @
|
|
124
|
+
elsif @speed and @speed != 1 #only speed
|
|
125
|
+
speed = "tempo -s #{@speed}"
|
|
126
|
+
`#{@sox} #{in_filepath} #{out_filepath} #{speed}`
|
|
127
|
+
elsif @silence and @silence != 0 #only silence
|
|
125
128
|
pad = "pad 0 #{@silence.to_f}"
|
|
126
129
|
`#{@sox} #{in_filepath} -p #{silence} #{pad} : restart | #{@sox} - #{out_filepath} `
|
|
127
|
-
else
|
|
130
|
+
else #nothing changed
|
|
128
131
|
`cp #{in_filepath} #{out_filepath}`
|
|
129
132
|
end
|
|
130
133
|
end
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
require "speak_slow/version"
|
|
2
|
+
require "rubygems"
|
|
3
|
+
require "progressbar"
|
|
4
|
+
|
|
5
|
+
SOX = "/usr/local/bin/sox"
|
|
6
|
+
SOXI = "/usr/local/bin/soxi"
|
|
7
|
+
|
|
8
|
+
module SpeakSlow
|
|
9
|
+
DATA_DIR = File.expand_path(File.dirname(__FILE__) + "/../data")
|
|
10
|
+
|
|
11
|
+
class Converter
|
|
12
|
+
def initialize(in_filepath, out_filepath)
|
|
13
|
+
|
|
14
|
+
@sox = check_command(SOX)
|
|
15
|
+
@soxi = check_command(SOXI)
|
|
16
|
+
|
|
17
|
+
if /([^\/]+)\.([^\.]+)\z/ =~ in_filepath and File.exists?(in_filepath)
|
|
18
|
+
@in_filepath = in_filepath
|
|
19
|
+
@basename = File.basename(in_filepath, ".*")
|
|
20
|
+
@in_format = $2
|
|
21
|
+
else
|
|
22
|
+
puts "The filename does not exist or not have a valid format"
|
|
23
|
+
exit
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
if /([^\/]+)\.([^\.]+)\z/ =~ out_filepath
|
|
27
|
+
@out_filepath = out_filepath
|
|
28
|
+
@out_format = $2
|
|
29
|
+
@outdir = File.dirname(out_filepath)
|
|
30
|
+
else
|
|
31
|
+
puts "The filename does not have a valid format"
|
|
32
|
+
exit
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
unless File.exists?(@outdir) && File::ftype(@outdir) == "directory"
|
|
36
|
+
puts "The output directory does not exist"
|
|
37
|
+
exit
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
unless ["wav", "mp3"].index @out_format
|
|
41
|
+
puts "The output format specified is not available"
|
|
42
|
+
exit
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def execute(speed = 1, silence = 0)
|
|
47
|
+
@silence = silence
|
|
48
|
+
@speed = speed
|
|
49
|
+
temp_wav_original = @outdir + "/" + @basename + "-temp-original.wav"
|
|
50
|
+
temp_wav_result = @outdir + "/" + @basename + "-temp-result.wav"
|
|
51
|
+
if @in_format != "wav" # @in_format == "mp3"
|
|
52
|
+
convert_to_wav(@in_filepath, temp_wav_original)
|
|
53
|
+
elsif @in_format == "wav"
|
|
54
|
+
`cp #{@in_filepath} #{temp_wav_original}`
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
apply_sox_to_wav(temp_wav_original, temp_wav_result)
|
|
58
|
+
# split_wav(temp_wav_original)
|
|
59
|
+
# merge_wav(temp_wav_result)
|
|
60
|
+
|
|
61
|
+
if @out_format == "mp3"
|
|
62
|
+
convert_to_mp3(temp_wav_result, @out_filepath)
|
|
63
|
+
`rm #{temp_wav_original} #{temp_wav_result}`
|
|
64
|
+
elsif @out_format == "wav"
|
|
65
|
+
`mv #{temp_wav_result} #{@out_filepath}; rm #{temp_wav_original}`
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# def split_wav(in_filepath)
|
|
70
|
+
# puts "Splitting WAV to segments"
|
|
71
|
+
# result = `#{@sox} #{in_filepath} #{@outdir}/split-.wav silence 0 1 0.3 -32d : newfile : restart`
|
|
72
|
+
# end
|
|
73
|
+
#
|
|
74
|
+
# def merge_wav(out_filepath)
|
|
75
|
+
# temp_filepath = @outdir + "/temp.wav"
|
|
76
|
+
# files = []
|
|
77
|
+
# Dir.foreach(@outdir) do |file|
|
|
78
|
+
# next unless /^split\-\d+\.wav$/ =~ file
|
|
79
|
+
# files << @outdir + "/" + file
|
|
80
|
+
# end
|
|
81
|
+
# index = 0
|
|
82
|
+
# puts "Merging segments back to one WAV file"
|
|
83
|
+
# bar = ProgressBar.new(@basename, files.size)
|
|
84
|
+
# files.sort.each do |filepath|
|
|
85
|
+
# length = `#{@soxi} -D #{filepath}`.to_f
|
|
86
|
+
# num_seconds = @silence == "auto" ? length.to_i + 1 : @silence.to_i
|
|
87
|
+
# index += 1
|
|
88
|
+
# bar.inc(1)
|
|
89
|
+
# if index == 1
|
|
90
|
+
# File.rename(filepath, out_filepath)
|
|
91
|
+
# next
|
|
92
|
+
# end
|
|
93
|
+
#
|
|
94
|
+
# if length == 0 or @silence.to_f == 0
|
|
95
|
+
# `#{@sox} #{out_filepath} #{filepath} #{temp_filepath} ; mv #{temp_filepath} #{out_filepath} ; rm #{filepath}`
|
|
96
|
+
# else
|
|
97
|
+
# if @silence == "auto"
|
|
98
|
+
# silence_length = length
|
|
99
|
+
# elsif @speed and @speed != 1
|
|
100
|
+
# silence_length = @silence.to_f / @speed * 1
|
|
101
|
+
# else
|
|
102
|
+
# silence_length = @silence
|
|
103
|
+
# end
|
|
104
|
+
# `#{@sox} #{out_filepath} -p pad 0 #{silence_length} | #{@sox} - #{filepath} #{temp_filepath} ; mv #{temp_filepath} #{out_filepath} ; rm #{filepath}`
|
|
105
|
+
# end
|
|
106
|
+
# end
|
|
107
|
+
# print "\n"
|
|
108
|
+
# puts "Changing speed of the resulting WAV"
|
|
109
|
+
# if @speed and @speed.to_f != 1.0
|
|
110
|
+
# `#{@sox} #{out_filepath} #{temp_filepath} tempo -s #{@speed}`
|
|
111
|
+
# `mv #{temp_filepath} #{out_filepath}`
|
|
112
|
+
# end
|
|
113
|
+
# end
|
|
114
|
+
|
|
115
|
+
def apply_sox_to_wav(in_filepath, out_filepath)
|
|
116
|
+
puts "Applying SoX functions to WAV (this might take a few minutes or more)"
|
|
117
|
+
# silence = "silence 0 1 0.3 -32d"
|
|
118
|
+
# silence = "silence 1 0.005 -32d 1 0.3 -32d"
|
|
119
|
+
silence = "silence 1 0.01 1% 1 0.3 1%"
|
|
120
|
+
if @speed and @speed != 1 and @silence and @silence != 0 #speed and silence
|
|
121
|
+
speed = "tempo -s #{@speed}"
|
|
122
|
+
pad = "pad 0 #{@silence.to_f * @speed}"
|
|
123
|
+
`#{@sox} #{in_filepath} -p #{silence} #{pad} : restart | #{@sox} - -p | #{@sox} - #{out_filepath} #{speed}`
|
|
124
|
+
<<<<<<< HEAD
|
|
125
|
+
elsif @speed and @speed != 1 #only speed
|
|
126
|
+
speed = "tempo -s #{@speed}"
|
|
127
|
+
`#{@sox} #{in_filepath} #{out_filepath} #{speed}`
|
|
128
|
+
elsif @silence and @silence != 0 #only silence
|
|
129
|
+
pad = "pad 0 #{@silence.to_f}"
|
|
130
|
+
`#{@sox} #{in_filepath} -p #{silence} #{pad} : restart | #{@sox} - #{out_filepath} `
|
|
131
|
+
else #nothing changed
|
|
132
|
+
=======
|
|
133
|
+
elsif @silence and @silence != 0
|
|
134
|
+
pad = "pad 0 #{@silence.to_f}"
|
|
135
|
+
`#{@sox} #{in_filepath} -p #{silence} #{pad} : restart | #{@sox} - #{out_filepath} `
|
|
136
|
+
else
|
|
137
|
+
>>>>>>> origin/master
|
|
138
|
+
`cp #{in_filepath} #{out_filepath}`
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def convert_to_wav(in_filepath, out_filepath)
|
|
143
|
+
basename = File.basename(in_filepath )
|
|
144
|
+
puts "Converting to WAV: #{basename}"
|
|
145
|
+
`#{@sox} #{in_filepath} #{out_filepath}`
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def convert_to_mp3(in_filepath, out_filepath)
|
|
149
|
+
basename = File.basename(out_filepath)
|
|
150
|
+
puts "Converting WAV to MP3: #{basename}"
|
|
151
|
+
`#{@sox} #{in_filepath} #{out_filepath}`
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def check_command(command)
|
|
155
|
+
basename = File.basename(command)
|
|
156
|
+
path = ""
|
|
157
|
+
print "Checking #{basename} command: "
|
|
158
|
+
if open("| which #{command} 2>/dev/null"){ |f| path = f.gets }
|
|
159
|
+
puts "detected at #{path}"
|
|
160
|
+
return path.strip
|
|
161
|
+
elsif open("| which #{basename} 2>/dev/null"){ |f| path = f.gets }
|
|
162
|
+
puts "detected at #{path}"
|
|
163
|
+
return path.strip
|
|
164
|
+
else
|
|
165
|
+
puts "not installed to the system"
|
|
166
|
+
exit
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
end # of class
|
|
171
|
+
end # of module
|
data/lib/speak_slow/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: speak_slow
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.3
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-01-
|
|
12
|
+
date: 2013-01-25 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: minitest
|
|
@@ -77,7 +77,9 @@ files:
|
|
|
77
77
|
- data/MLK_Dream.mp3
|
|
78
78
|
- data/MLK_Dream.wav
|
|
79
79
|
- lib/speak_slow.rb
|
|
80
|
+
- lib/speak_slow.rb.orig
|
|
80
81
|
- lib/speak_slow/version.rb
|
|
82
|
+
- lib/speak_slow/version.rb.orig
|
|
81
83
|
- speak_slow.gemspec
|
|
82
84
|
- test/speak_slow_test.rb
|
|
83
85
|
homepage: http://github.com/yohasebe/speak_slow
|