WaveSwissKnife 0.3.1.20130103 → 0.4.0.20130322
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +1 -0
- data/ChangeLog +6 -0
- data/ReleaseInfo +1 -1
- data/bin/WSK.rb +1 -1
- data/ext/WSK/CommonBuild.rb +83 -1
- data/lib/WSK/Actions/DrawFct.rb +1 -1
- data/lib/WSK/Actions/VolumeProfile.rb +1 -1
- data/lib/WSK/Functions.rb +13 -4
- metadata +2 -2
data/AUTHORS
CHANGED
data/ChangeLog
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
= WaveSwissKnife Release History
|
2
2
|
|
3
|
+
== 0.4.0.20130322 (Beta)
|
4
|
+
|
5
|
+
* GMP library automatically installs if absent
|
6
|
+
* Added support for Travis
|
7
|
+
* Bug correction: Rational did not inspect the same as before.
|
8
|
+
|
3
9
|
== 0.3.1.20130103 (Beta)
|
4
10
|
|
5
11
|
* Bug correction: Core dumps using Ruby 1.9 and/or 64 bits environments
|
data/ReleaseInfo
CHANGED
data/bin/WSK.rb
CHANGED
data/ext/WSK/CommonBuild.rb
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
# Licensed under the terms specified in LICENSE file. No warranty is provided.
|
4
4
|
#++
|
5
5
|
|
6
|
+
require 'rubygems'
|
7
|
+
require 'mkmf'
|
8
|
+
|
9
|
+
ROOT_DIR = File.expand_path("#{File.dirname(__FILE__)}/../..")
|
10
|
+
|
6
11
|
# Build external libraries.
|
7
12
|
# Set CFLAGS and LDFLAGS accordingly.
|
8
13
|
#
|
@@ -24,6 +29,83 @@ def build_external_libs(*iLstExternalLibs)
|
|
24
29
|
end
|
25
30
|
end
|
26
31
|
|
27
|
-
|
32
|
+
# Execute a command, with nice logging and error handling around
|
33
|
+
#
|
34
|
+
# Parameters:
|
35
|
+
# * *iCmd* (_String_): Command to execute
|
36
|
+
def exec_cmd(iCmd)
|
37
|
+
puts "[#{Dir.getwd}]> #{iCmd}"
|
38
|
+
raise RuntimeError, "Unable to execute \"#{iCmd}\" on your system." if !system(iCmd)
|
39
|
+
puts ''
|
40
|
+
end
|
41
|
+
|
42
|
+
# Build a local copy of GMP, downloaded directly from the Internet
|
43
|
+
def build_local_gmp
|
44
|
+
lGMPBaseName = 'gmp-5.1.1'
|
45
|
+
lGMPDir = "#{ROOT_DIR}/gmp"
|
46
|
+
lGMPInstallDir = "#{ROOT_DIR}/gmp/#{lGMPBaseName}-install"
|
47
|
+
|
48
|
+
puts "**** Have to download, compile and install the GMP library in #{lGMPInstallDir}."
|
49
|
+
puts ''
|
50
|
+
|
51
|
+
FileUtils::mkdir_p(lGMPDir)
|
52
|
+
lOldDir = Dir.getwd
|
53
|
+
Dir.chdir(lGMPDir)
|
54
|
+
begin
|
55
|
+
puts "** Download #{lGMPBaseName} from ftp://ftp.gmplib.org/pub/gmp/#{lGMPBaseName}.tar.bz2 ..."
|
56
|
+
require 'net/ftp'
|
57
|
+
ftp = Net::FTP.new('ftp.gmplib.org')
|
58
|
+
ftp.login
|
59
|
+
ftp.getbinaryfile("pub/gmp/#{lGMPBaseName}.tar.bz2")
|
60
|
+
ftp.close
|
61
|
+
puts '** Extract archive contents ...'
|
62
|
+
exec_cmd "tar xjf #{lGMPBaseName}.tar.bz2"
|
63
|
+
Dir.chdir(lGMPBaseName)
|
64
|
+
puts '** Configure GMP for compilation ...'
|
65
|
+
exec_cmd "./configure --prefix=#{lGMPInstallDir}"
|
66
|
+
puts '** Compile GMP ...'
|
67
|
+
exec_cmd 'make'
|
68
|
+
puts "** Install locally GMP in #{lGMPInstallDir} ..."
|
69
|
+
exec_cmd 'make install'
|
70
|
+
ensure
|
71
|
+
Dir.chdir(lOldDir)
|
72
|
+
end
|
73
|
+
|
74
|
+
puts "**** GMP installed correctly in #{lGMPInstallDir}."
|
75
|
+
puts ''
|
76
|
+
end
|
77
|
+
|
78
|
+
# Look for GMP in system and locally
|
79
|
+
# If it is found, compilation and link options will include it
|
80
|
+
#
|
81
|
+
# Return:
|
82
|
+
# * _Boolean_: Has GMP been found?
|
83
|
+
def find_gmp
|
84
|
+
rSuccess = have_library('gmp','mpz_get_str','gmp.h')
|
85
|
+
|
86
|
+
if (!rSuccess)
|
87
|
+
# Find locally installed GMP
|
88
|
+
lGMPDir = File.expand_path("#{File.dirname(__FILE__)}/../../gmp")
|
89
|
+
if (File.exist?(lGMPDir))
|
90
|
+
lLastInstalledGMP = Dir.glob("#{lGMPDir}/*-install").sort[-1]
|
91
|
+
if (lLastInstalledGMP != nil)
|
92
|
+
puts "Found GMP installed in #{lLastInstalledGMP}."
|
93
|
+
find_header('gmp.h',"#{lLastInstalledGMP}/include")
|
94
|
+
find_library('gmp',nil,"#{lLastInstalledGMP}/lib")
|
95
|
+
rSuccess = true
|
96
|
+
else
|
97
|
+
puts 'Could not find GMP library installed locally.'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
return rSuccess
|
103
|
+
end
|
104
|
+
|
28
105
|
$CFLAGS += ' -Wall '
|
106
|
+
if (!find_gmp)
|
107
|
+
build_local_gmp
|
108
|
+
raise RuntimeError, 'Unable to install GMP library automatically. Please do it manually from http://gmplib.org before attempting to install WaveSwissKnife.' unless find_gmp
|
109
|
+
end
|
110
|
+
|
29
111
|
build_external_libs('CommonUtils')
|
data/lib/WSK/Actions/DrawFct.rb
CHANGED
@@ -23,7 +23,7 @@ module WSK
|
|
23
23
|
def get_nbr_samples(iInputData)
|
24
24
|
@Function = WSK::Functions::Function.new
|
25
25
|
@Function.read_from_file(@FctFileName)
|
26
|
-
lMinX,
|
26
|
+
lMinX, _, lMaxX, _ = @Function.get_bounds
|
27
27
|
@NbrSamplesOut = lMaxX.to_i-lMinX.to_i+1
|
28
28
|
|
29
29
|
return @NbrSamplesOut
|
@@ -46,7 +46,7 @@ module WSK
|
|
46
46
|
lFunction.read_from_input_volume(iInputData, lIdxBegin, lIdxEnd, lInterval, @RMSRatio)
|
47
47
|
# Normalize the volume function on a [-1..1] scale
|
48
48
|
lFunction.divide_by(Rational(2)**(iInputData.Header.NbrBitsPerSample-1))
|
49
|
-
|
49
|
+
_, lMinY, _, lMaxY = lFunction.get_bounds
|
50
50
|
lDBMinY = lFunction.value_val_2_db(lMinY, Rational(1))
|
51
51
|
lDBMaxY = lFunction.value_val_2_db(lMaxY, Rational(1))
|
52
52
|
log_info "Dynamic range: [#{sprintf('%.2f',lMinY)} - #{sprintf('%.2f',lMaxY)}] ([#{sprintf('%.2f',lDBMinY)}db - #{sprintf('%.2f',lDBMaxY)}db] = #{sprintf('%.2f',lDBMaxY-lDBMinY)}db)"
|
data/lib/WSK/Functions.rb
CHANGED
@@ -5,6 +5,15 @@
|
|
5
5
|
|
6
6
|
require 'rational'
|
7
7
|
|
8
|
+
# Make sure pretty_inspect uses Rational constructor
|
9
|
+
class Rational
|
10
|
+
|
11
|
+
def inspect
|
12
|
+
"Rational(#{self.numerator}, #{self.denominator})"
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
8
17
|
# Convert a float to a Rational
|
9
18
|
class Float
|
10
19
|
|
@@ -227,7 +236,7 @@ module WSK
|
|
227
236
|
log_err "Unknown function type: #{@Function[:FunctionType]}"
|
228
237
|
end
|
229
238
|
end
|
230
|
-
|
239
|
+
|
231
240
|
# Round values to a given precision
|
232
241
|
#
|
233
242
|
# Parameters::
|
@@ -244,7 +253,7 @@ module WSK
|
|
244
253
|
end
|
245
254
|
optimize
|
246
255
|
end
|
247
|
-
|
256
|
+
|
248
257
|
# Apply damping.
|
249
258
|
#
|
250
259
|
# Parameters::
|
@@ -607,7 +616,7 @@ module WSK
|
|
607
616
|
def value_log(iValue)
|
608
617
|
return Math::log(iValue).to_r
|
609
618
|
end
|
610
|
-
|
619
|
+
|
611
620
|
# Compute a DB value out of a ratio using function values
|
612
621
|
#
|
613
622
|
# Parameters::
|
@@ -618,7 +627,7 @@ module WSK
|
|
618
627
|
def value_val_2_db(iValue, iMaxValue)
|
619
628
|
@Log2 = Math::log(2).to_r
|
620
629
|
@LogMax = value_log(iMaxValue)
|
621
|
-
|
630
|
+
|
622
631
|
return value_val_2_db_Internal(iValue)
|
623
632
|
end
|
624
633
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: WaveSwissKnife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0.20130322
|
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-
|
12
|
+
date: 2013-03-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rUtilAnts
|