torchaudio 0.1.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b395ce300252d4d65274f0ddb9d387de1dd836721a8a4f81804c5a888fb5433
4
- data.tar.gz: 9e98ca9a0e8e945e069957990671bf143edb1240f313f65bf87e97bba4e05106
3
+ metadata.gz: f35bd53e4a972f24d5d0a0bfbe8ee45a76a203a535a96043608fa768fee71bf4
4
+ data.tar.gz: 2a6061fa3aa68c13352ec7c12a79faf85a332163f92b976614fb2f59a1c53d68
5
5
  SHA512:
6
- metadata.gz: ab922eef545e50e302f7a72f992f2d6040fb9cd1856c37ff532baed0092783442d649f8c3bc91a4cf92684729d7ce7294cd9a943a8c8a483734bb858e885845f
7
- data.tar.gz: 414ea85a03b53cf21caef57289551fa88747ad2a5e0c60f0e92cb57a017cd04903b359d8d71ac37cecba50492678bc5d4327a9f340aba8f6006339d9379fed26
6
+ metadata.gz: 3f3566e6d1cc9bf1467c39350a4c317c2e192d75851c96d725f4e128be42b9fe9ab9be9c3b6ff33a4ab23f38d7d63b820f001f5b9e4af888f8e8b9b98fe795a5
7
+ data.tar.gz: bde46760427829d4c9955eba0da00f900425e44cb1fe93c6788691c964949d30d9a47ee3e896df226327294018ea4d4149acc25102e85598394644d5f0e3b568
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## 0.3.0 (2022-07-06)
2
+
3
+ - Added `center`, `pad_mode`, and `onesided` options to `Spectogram` transform
4
+ - Dropped support for Ruby < 2.7
5
+
6
+ ## 0.2.1 (2021-07-16)
7
+
8
+ - Added `create_dct` method
9
+ - Added `ComputeDeltas`, `Fade`, `MFCC`, and `Vol` transforms
10
+
11
+ ## 0.2.0 (2021-05-23)
12
+
13
+ - Updated to Rice 4
14
+ - Dropped support for Ruby < 2.6
15
+
1
16
  ## 0.1.2 (2021-02-06)
2
17
 
3
18
  - Added `amplitude_to_DB` and `DB_to_amplitude` methods
data/LICENSE.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  BSD 2-Clause License
2
2
 
3
3
  Copyright (c) 2017 Facebook Inc. (Soumith Chintala),
4
- Copyright (c) 2020-2021 Andrew Kane,
4
+ Copyright (c) 2020-2022 Andrew Kane,
5
5
  All rights reserved.
6
6
 
7
7
  Redistribution and use in source and binary forms, with or without
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # TorchAudio
1
+ # TorchAudio Ruby
2
2
 
3
3
  :fire: An audio library for Torch.rb
4
4
 
5
- [![Build Status](https://github.com/ankane/torchaudio/workflows/build/badge.svg?branch=master)](https://github.com/ankane/torchaudio/actions)
5
+ [![Build Status](https://github.com/ankane/torchaudio-ruby/workflows/build/badge.svg?branch=master)](https://github.com/ankane/torchaudio-ruby/actions)
6
6
 
7
7
  ## Installation
8
8
 
@@ -15,7 +15,7 @@ brew install sox
15
15
  Add this line to your application’s Gemfile:
16
16
 
17
17
  ```ruby
18
- gem 'torchaudio'
18
+ gem "torchaudio"
19
19
  ```
20
20
 
21
21
  ## Getting Started
@@ -51,10 +51,16 @@ TorchAudio::Transforms::Spectrogram.new.call(waveform)
51
51
 
52
52
  Supported transforms are:
53
53
 
54
+ - AmplitudeToDB
55
+ - ComputeDeltas
56
+ - Fade
57
+ - MelScale
54
58
  - MelSpectrogram
59
+ - MFCC
55
60
  - MuLawDecoding
56
61
  - MuLawEncoding
57
62
  - Spectrogram
63
+ - Vol
58
64
 
59
65
  ## Functional
60
66
 
@@ -64,7 +70,11 @@ TorchAudio::Functional.lowpass_biquad(waveform, sample_rate, cutoff_freq)
64
70
 
65
71
  Supported functions are:
66
72
 
73
+ - amplitude_to_DB
67
74
  - compute_deltas
75
+ - create_dct
76
+ - create_fb_matrix
77
+ - DB_to_amplitude
68
78
  - dither
69
79
  - gain
70
80
  - highpass_biquad
@@ -124,22 +134,22 @@ addons:
124
134
 
125
135
  ## History
126
136
 
127
- View the [changelog](https://github.com/ankane/torchaudio/blob/master/CHANGELOG.md)
137
+ View the [changelog](https://github.com/ankane/torchaudio-ruby/blob/master/CHANGELOG.md)
128
138
 
129
139
  ## Contributing
130
140
 
131
141
  Everyone is encouraged to help improve this project. Here are a few ways you can help:
132
142
 
133
- - [Report bugs](https://github.com/ankane/torchaudio/issues)
134
- - Fix bugs and [submit pull requests](https://github.com/ankane/torchaudio/pulls)
143
+ - [Report bugs](https://github.com/ankane/torchaudio-ruby/issues)
144
+ - Fix bugs and [submit pull requests](https://github.com/ankane/torchaudio-ruby/pulls)
135
145
  - Write, clarify, or fix documentation
136
146
  - Suggest or add new features
137
147
 
138
148
  To get started with development:
139
149
 
140
150
  ```sh
141
- git clone https://github.com/ankane/torchaudio.git
142
- cd torchaudio
151
+ git clone https://github.com/ankane/torchaudio-ruby.git
152
+ cd torchaudio-ruby
143
153
  bundle install
144
154
  bundle exec rake compile
145
155
  bundle exec rake test
@@ -1,75 +1,33 @@
1
1
  #include <torchaudio/csrc/sox.h>
2
2
 
3
- #include <rice/Constructor.hpp>
4
- #include <rice/Module.hpp>
5
-
6
- using namespace Rice;
7
-
8
- class SignalInfo {
9
- sox_signalinfo_t* value = nullptr;
10
- public:
11
- SignalInfo(Object o) {
12
- if (!o.is_nil()) {
13
- value = from_ruby<sox_signalinfo_t*>(o);
14
- }
15
- }
16
- operator sox_signalinfo_t*() {
17
- return value;
18
- }
19
- };
20
-
21
- template<>
22
- inline
23
- SignalInfo from_ruby<SignalInfo>(Object x)
24
- {
25
- return SignalInfo(x);
26
- }
27
-
28
- class EncodingInfo {
29
- sox_encodinginfo_t* value = nullptr;
30
- public:
31
- EncodingInfo(Object o) {
32
- if (!o.is_nil()) {
33
- value = from_ruby<sox_encodinginfo_t*>(o);
34
- }
35
- }
36
- operator sox_encodinginfo_t*() {
37
- return value;
38
- }
39
- };
40
-
41
- template<>
42
- inline
43
- EncodingInfo from_ruby<EncodingInfo>(Object x)
44
- {
45
- return EncodingInfo(x);
46
- }
3
+ #include <rice/rice.hpp>
4
+ #include <rice/stl.hpp>
47
5
 
48
6
  extern "C"
49
7
  void Init_ext()
50
8
  {
51
- Module rb_mTorchAudio = define_module("TorchAudio");
9
+ auto rb_mTorchAudio = Rice::define_module("TorchAudio");
52
10
 
53
- Module rb_mExt = define_module_under(rb_mTorchAudio, "Ext")
54
- .define_singleton_method(
11
+ auto rb_mExt = Rice::define_module_under(rb_mTorchAudio, "Ext")
12
+ .define_singleton_function(
55
13
  "read_audio_file",
56
- *[](const std::string& file_name, at::Tensor output, bool ch_first, int64_t nframes, int64_t offset, SignalInfo si, EncodingInfo ei, const char* ft) {
14
+ [](const std::string& file_name, at::Tensor output, bool ch_first, int64_t nframes, int64_t offset, sox_signalinfo_t* si, sox_encodinginfo_t* ei, const char* ft) {
57
15
  return torch::audio::read_audio_file(file_name, output, ch_first, nframes, offset, si, ei, ft);
58
16
  })
59
- .define_singleton_method(
17
+ .define_singleton_function(
60
18
  "write_audio_file",
61
- *[](const std::string& file_name, const at::Tensor& tensor, SignalInfo si, EncodingInfo ei, const char* file_type) {
19
+ [](const std::string& file_name, const at::Tensor& tensor, sox_signalinfo_t* si, sox_encodinginfo_t* ei, const char* file_type) {
62
20
  return torch::audio::write_audio_file(file_name, tensor, si, ei, file_type);
63
21
  });
64
22
 
65
- Class rb_cSignalInfo = define_class_under<sox_signalinfo_t>(rb_mExt, "SignalInfo")
66
- .define_constructor(Constructor<sox_signalinfo_t>())
67
- .define_method("rate", *[](sox_signalinfo_t& self) { return self.rate; })
68
- .define_method("channels", *[](sox_signalinfo_t& self) { return self.channels; })
69
- .define_method("precision", *[](sox_signalinfo_t& self) { return self.precision; })
70
- .define_method("length", *[](sox_signalinfo_t& self) { return self.length; })
71
- .define_method("rate=", *[](sox_signalinfo_t& self, sox_rate_t rate) { self.rate = rate; })
72
- .define_method("channels=", *[](sox_signalinfo_t& self, unsigned channels) { self.channels = channels; })
73
- .define_method("precision=", *[](sox_signalinfo_t& self, unsigned precision) { self.precision = precision; })
74
- .define_method("length=", *[](sox_signalinfo_t& self, sox_uint64_t length) { self.length = length; });
23
+ auto rb_cSignalInfo = Rice::define_class_under<sox_signalinfo_t>(rb_mExt, "SignalInfo")
24
+ .define_constructor(Rice::Constructor<sox_signalinfo_t>())
25
+ .define_method("rate", [](sox_signalinfo_t& self) { return self.rate; })
26
+ .define_method("channels", [](sox_signalinfo_t& self) { return self.channels; })
27
+ .define_method("precision", [](sox_signalinfo_t& self) { return self.precision; })
28
+ .define_method("length", [](sox_signalinfo_t& self) { return self.length; })
29
+ .define_method("rate=", [](sox_signalinfo_t& self, sox_rate_t rate) { self.rate = rate; })
30
+ .define_method("channels=", [](sox_signalinfo_t& self, unsigned channels) { self.channels = channels; })
31
+ .define_method("precision=", [](sox_signalinfo_t& self, unsigned precision) { self.precision = precision; })
32
+ .define_method("length=", [](sox_signalinfo_t& self, sox_uint64_t length) { self.length = length; });
75
33
  }
@@ -1,8 +1,6 @@
1
1
  require "mkmf-rice"
2
2
 
3
- abort "Missing stdc++" unless have_library("stdc++")
4
-
5
- $CXXFLAGS += " -std=c++14"
3
+ $CXXFLAGS += " -std=c++17 $(optflags)"
6
4
 
7
5
  abort "SoX not found" unless have_library("sox")
8
6
 
@@ -22,19 +20,9 @@ $CXXFLAGS += " -D_GLIBCXX_USE_CXX11_ABI=1"
22
20
 
23
21
  apple_clang = RbConfig::CONFIG["CC_VERSION_MESSAGE"] =~ /apple clang/i
24
22
 
25
- # check omp first
26
- if have_library("omp") || have_library("gomp")
27
- $CXXFLAGS += " -DAT_PARALLEL_OPENMP=1"
28
- $CXXFLAGS += " -Xclang" if apple_clang
29
- $CXXFLAGS += " -fopenmp"
30
- end
31
-
32
23
  if apple_clang
33
- # silence ruby/intern.h warning
34
- $CXXFLAGS += " -Wno-deprecated-register"
35
-
36
24
  # silence torch warnings
37
- $CXXFLAGS += " -Wno-shorten-64-to-32 -Wno-missing-noreturn"
25
+ $CXXFLAGS += " -Wno-deprecated-declarations"
38
26
  else
39
27
  # silence rice warnings
40
28
  $CXXFLAGS += " -Wno-noexcept-type"
@@ -15,7 +15,9 @@ module TorchAudio
15
15
  end
16
16
 
17
17
  # follows redirects
18
- def download_url_to_file(url, dst, hash_value, hash_type)
18
+ def download_url_to_file(url, dst, hash_value, hash_type, redirects = 0)
19
+ raise "Too many redirects" if redirects > 10
20
+
19
21
  uri = URI(url)
20
22
  tmp = nil
21
23
  location = nil
@@ -41,7 +43,7 @@ module TorchAudio
41
43
  end
42
44
 
43
45
  if location
44
- download_url_to_file(location, dst)
46
+ download_url_to_file(location, dst, hash_value, hash_type, redirects + 1)
45
47
  else
46
48
  # check hash
47
49
  # TODO use hash_type
@@ -1,7 +1,7 @@
1
1
  module TorchAudio
2
2
  module Functional
3
3
  class << self
4
- def spectrogram(waveform, pad, window, n_fft, hop_length, win_length, power, normalized)
4
+ def spectrogram(waveform, pad, window, n_fft, hop_length, win_length, power, normalized, center: true, pad_mode: "reflect", onesided: true)
5
5
  if pad > 0
6
6
  # TODO add "with torch.no_grad():" back when JIT supports it
7
7
  waveform = Torch::NN::Functional.pad(waveform, [pad, pad], "constant")
@@ -12,20 +12,32 @@ module TorchAudio
12
12
  waveform = waveform.reshape(-1, shape[-1])
13
13
 
14
14
  # default values are consistent with librosa.core.spectrum._spectrogram
15
- spec_f = Torch.stft(
16
- waveform, n_fft, hop_length: hop_length, win_length: win_length, window: window, center: true, pad_mode: "reflect", normalized: false, onesided: true
17
- )
15
+ spec_f =
16
+ Torch.stft(
17
+ waveform,
18
+ n_fft,
19
+ hop_length: hop_length,
20
+ win_length: win_length,
21
+ window: window,
22
+ center: center,
23
+ pad_mode: pad_mode,
24
+ normalized: false,
25
+ onesided: onesided,
26
+ return_complex: true
27
+ )
18
28
 
19
29
  # unpack batch
20
- spec_f = spec_f.reshape(shape[0..-2] + spec_f.shape[-3..-1])
30
+ spec_f = spec_f.reshape(shape[0..-2] + spec_f.shape[-2..-1])
21
31
 
22
32
  if normalized
23
- spec_f.div!(window.pow(2.0).sum.sqrt)
33
+ spec_f /= window.pow(2.0).sum.sqrt
24
34
  end
25
- if power
26
- spec_f = complex_norm(spec_f, power: power)
35
+ if !power.nil?
36
+ if power == 1
37
+ return spec_f.abs
38
+ end
39
+ return spec_f.abs.pow(power)
27
40
  end
28
-
29
41
  spec_f
30
42
  end
31
43
 
@@ -240,6 +252,23 @@ module TorchAudio
240
252
  Torch.pow(Torch.pow(10.0, db * 0.1), power) * ref
241
253
  end
242
254
 
255
+ def create_dct(n_mfcc, n_mels, norm: nil)
256
+ n = Torch.arange(n_mels.to_f)
257
+ k = Torch.arange(n_mfcc.to_f).unsqueeze!(1)
258
+ dct = Torch.cos((n + 0.5) * k * Math::PI / n_mels.to_f)
259
+
260
+ if norm.nil?
261
+ dct *= 2.0
262
+ else
263
+ raise ArgumentError, "Invalid DCT norm value" unless norm == :ortho
264
+
265
+ dct[0] *= 1.0 / Math.sqrt(2.0)
266
+ dct *= Math.sqrt(2.0 / n_mels)
267
+ end
268
+
269
+ dct.t
270
+ end
271
+
243
272
  private
244
273
 
245
274
  def _apply_probability_distribution(waveform, density_function: "TPDF")
@@ -0,0 +1,15 @@
1
+ module TorchAudio
2
+ module Transforms
3
+ class ComputeDeltas < Torch::NN::Module
4
+ def initialize(win_length: 5, mode: "replicate")
5
+ super()
6
+ @win_length = win_length
7
+ @mode = mode
8
+ end
9
+
10
+ def forward(specgram)
11
+ F.compute_deltas(specgram, win_length: @win_length, mode: @mode)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,74 @@
1
+ module TorchAudio
2
+ module Transforms
3
+ class Fade < Torch::NN::Module
4
+ def initialize(fade_in_len: 0, fade_out_len: 0, fade_shape: "linear")
5
+ super()
6
+ @fade_in_len = fade_in_len
7
+ @fade_out_len = fade_out_len
8
+ @fade_shape = fade_shape
9
+ end
10
+
11
+ def forward(waveform)
12
+ waveform_length = waveform.size[-1]
13
+ device = waveform.device
14
+ fade_in(waveform_length).to(device) * fade_out(waveform_length).to(device) * waveform
15
+ end
16
+
17
+ private
18
+
19
+ def fade_in(waveform_length)
20
+ fade = Torch.linspace(0, 1, @fade_in_len)
21
+ ones = Torch.ones(waveform_length - @fade_in_len)
22
+
23
+ if @fade_shape == "linear"
24
+ fade = fade
25
+ end
26
+
27
+ if @fade_shape == "exponential"
28
+ fade = Torch.pow(2, (fade - 1)) * fade
29
+ end
30
+
31
+ if @fade_shape == "logarithmic"
32
+ fade = Torch.log10(0.1 + fade) + 1
33
+ end
34
+
35
+ if @fade_shape == "quarter_sine"
36
+ fade = Torch.sin(fade * Math::PI / 2)
37
+ end
38
+
39
+ if @fade_shape == "half_sine"
40
+ fade = Torch.sin(fade * Math::PI - Math::PI / 2) / 2 + 0.5
41
+ end
42
+
43
+ Torch.cat([fade, ones]).clamp!(0, 1)
44
+ end
45
+
46
+ def fade_out(waveform_length)
47
+ fade = Torch.linspace(0, 1, @fade_out_len)
48
+ ones = Torch.ones(waveform_length - @fade_out_len)
49
+
50
+ if @fade_shape == "linear"
51
+ fade = - fade + 1
52
+ end
53
+
54
+ if @fade_shape == "exponential"
55
+ fade = Torch.pow(2, - fade) * (1 - fade)
56
+ end
57
+
58
+ if @fade_shape == "logarithmic"
59
+ fade = Torch.log10(1.1 - fade) + 1
60
+ end
61
+
62
+ if @fade_shape == "quarter_sine"
63
+ fade = Torch.sin(fade * Math::PI / 2 + Math::PI / 2)
64
+ end
65
+
66
+ if @fade_shape == "half_sine"
67
+ fade = Torch.sin(fade * Math::PI + Math::PI / 2) / 2 + 0.5
68
+ end
69
+
70
+ Torch.cat([ones, fade]).clamp!(0, 1)
71
+ end
72
+ end
73
+ end
74
+ end
@@ -1,6 +1,8 @@
1
1
  module TorchAudio
2
2
  module Transforms
3
3
  class MelSpectrogram < Torch::NN::Module
4
+ attr_reader :n_mels
5
+
4
6
  def initialize(
5
7
  sample_rate: 16000, n_fft: 400, win_length: nil, hop_length: nil, f_min: 0.0,
6
8
  f_max: nil, pad: 0, n_mels: 128, window_fn: Torch.method(:hann_window),
@@ -0,0 +1,43 @@
1
+ module TorchAudio
2
+ module Transforms
3
+ class MFCC < Torch::NN::Module
4
+
5
+ SUPPORTED_DCT_TYPES = [2]
6
+
7
+ def initialize(sample_rate: 16000, n_mfcc: 40, dct_type: 2, norm: :ortho, log_mels: false, melkwargs: {})
8
+ super()
9
+
10
+ raise ArgumentError, "DCT type not supported: #{dct_type}" unless SUPPORTED_DCT_TYPES.include?(dct_type)
11
+
12
+ @sample_rate = sample_rate
13
+ @n_mfcc = n_mfcc
14
+ @dct_type = dct_type
15
+ @norm = norm
16
+ @top_db = 80.0
17
+ @amplitude_to_db = TorchAudio::Transforms::AmplitudeToDB.new(stype: :power, top_db: @top_db)
18
+
19
+ @melspectrogram = TorchAudio::Transforms::MelSpectrogram.new(sample_rate: @sample_rate, **melkwargs)
20
+
21
+ raise ArgumentError, "Cannot select more MFCC coefficients than # mel bins" if @n_mfcc > @melspectrogram.n_mels
22
+
23
+ dct_mat = F.create_dct(@n_mfcc, @melspectrogram.n_mels, norm: @norm)
24
+ register_buffer('dct_mat', dct_mat)
25
+
26
+ @log_mels = log_mels
27
+ end
28
+
29
+ def forward(waveform)
30
+ mel_specgram = @melspectrogram.(waveform)
31
+ if @log_mels
32
+ mel_specgram = Torch.log(mel_specgram + 1e-6)
33
+ else
34
+ mel_specgram = @amplitude_to_db.(mel_specgram)
35
+ end
36
+
37
+ Torch
38
+ .matmul(mel_specgram.transpose(-2, -1), @dct_mat)
39
+ .transpose(-2, -1)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -3,7 +3,8 @@ module TorchAudio
3
3
  class Spectrogram < Torch::NN::Module
4
4
  def initialize(
5
5
  n_fft: 400, win_length: nil, hop_length: nil, pad: 0,
6
- window_fn: Torch.method(:hann_window), power: 2.0, normalized: false, wkwargs: nil
6
+ window_fn: Torch.method(:hann_window), power: 2.0, normalized: false, wkwargs: nil,
7
+ center: true, pad_mode: "reflect", onesided: true
7
8
  )
8
9
 
9
10
  super()
@@ -17,10 +18,16 @@ module TorchAudio
17
18
  @pad = pad
18
19
  @power = power
19
20
  @normalized = normalized
21
+ @center = center
22
+ @pad_mode = pad_mode
23
+ @onesided = onesided
20
24
  end
21
25
 
22
26
  def forward(waveform)
23
- F.spectrogram(waveform, @pad, @window, @n_fft, @hop_length, @win_length, @power, @normalized)
27
+ F.spectrogram(
28
+ waveform, @pad, @window, @n_fft, @hop_length, @win_length, @power, @normalized,
29
+ center: @center, pad_mode: @pad_mode, onesided: @onesided
30
+ )
24
31
  end
25
32
  end
26
33
  end
@@ -0,0 +1,31 @@
1
+ module TorchAudio
2
+ module Transforms
3
+ class Vol < Torch::NN::Module
4
+ def initialize(gain, gain_type: "amplitude")
5
+ super()
6
+ @gain = gain
7
+ @gain_type = gain_type
8
+
9
+ if ["amplitude", "power"].include?(gain_type) && gain < 0
10
+ raise ArgumentError, "If gain_type = amplitude or power, gain must be positive."
11
+ end
12
+ end
13
+
14
+ def forward(waveform)
15
+ if @gain_type == "amplitude"
16
+ waveform = waveform * @gain
17
+ end
18
+
19
+ if @gain_type == "db"
20
+ waveform = F.gain(waveform, @gain)
21
+ end
22
+
23
+ if @gain_type == "power"
24
+ waveform = F.gain(waveform, 10 * Math.log10(@gain))
25
+ end
26
+
27
+ Torch.clamp(waveform, -1, 1)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module TorchAudio
2
- VERSION = "0.1.2"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/torchaudio.rb CHANGED
@@ -15,12 +15,16 @@ require "set"
15
15
  require "torchaudio/datasets/utils"
16
16
  require "torchaudio/datasets/yesno"
17
17
  require "torchaudio/functional"
18
+ require "torchaudio/transforms/compute_deltas"
19
+ require "torchaudio/transforms/fade"
18
20
  require "torchaudio/transforms/mel_scale"
19
21
  require "torchaudio/transforms/mel_spectrogram"
20
22
  require "torchaudio/transforms/mu_law_encoding"
21
23
  require "torchaudio/transforms/mu_law_decoding"
22
24
  require "torchaudio/transforms/spectrogram"
23
25
  require "torchaudio/transforms/amplitude_to_db"
26
+ require "torchaudio/transforms/mfcc"
27
+ require "torchaudio/transforms/vol"
24
28
  require "torchaudio/version"
25
29
 
26
30
  module TorchAudio
@@ -91,7 +95,7 @@ module TorchAudio
91
95
  end
92
96
 
93
97
  def save_encinfo(filepath, src, channels_first: true, signalinfo: nil, encodinginfo: nil, filetype: nil)
94
- ch_idx, len_idx = channels_first ? [0, 1] : [1, 0]
98
+ ch_idx, _len_idx = channels_first ? [0, 1] : [1, 0]
95
99
 
96
100
  # check if save directory exists
97
101
  abs_dirpath = File.dirname(File.expand_path(filepath))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: torchaudio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-06 00:00:00.000000000 Z
11
+ date: 2022-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: torch-rb
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.4
19
+ version: 0.11.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.4
26
+ version: 0.11.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rice
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '2.2'
33
+ version: 4.0.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '2.2'
40
+ version: 4.0.2
41
41
  description:
42
42
  email: andrew@ankane.org
43
43
  executables: []
@@ -64,13 +64,17 @@ files:
64
64
  - lib/torchaudio/datasets/yesno.rb
65
65
  - lib/torchaudio/functional.rb
66
66
  - lib/torchaudio/transforms/amplitude_to_db.rb
67
+ - lib/torchaudio/transforms/compute_deltas.rb
68
+ - lib/torchaudio/transforms/fade.rb
67
69
  - lib/torchaudio/transforms/mel_scale.rb
68
70
  - lib/torchaudio/transforms/mel_spectrogram.rb
71
+ - lib/torchaudio/transforms/mfcc.rb
69
72
  - lib/torchaudio/transforms/mu_law_decoding.rb
70
73
  - lib/torchaudio/transforms/mu_law_encoding.rb
71
74
  - lib/torchaudio/transforms/spectrogram.rb
75
+ - lib/torchaudio/transforms/vol.rb
72
76
  - lib/torchaudio/version.rb
73
- homepage: https://github.com/ankane/torchaudio
77
+ homepage: https://github.com/ankane/torchaudio-ruby
74
78
  licenses:
75
79
  - BSD-2-Clause
76
80
  metadata: {}
@@ -82,14 +86,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
82
86
  requirements:
83
87
  - - ">="
84
88
  - !ruby/object:Gem::Version
85
- version: '2.5'
89
+ version: '2.7'
86
90
  required_rubygems_version: !ruby/object:Gem::Requirement
87
91
  requirements:
88
92
  - - ">="
89
93
  - !ruby/object:Gem::Version
90
94
  version: '0'
91
95
  requirements: []
92
- rubygems_version: 3.2.3
96
+ rubygems_version: 3.3.7
93
97
  signing_key:
94
98
  specification_version: 4
95
99
  summary: Data manipulation and transformation for audio signal processing