You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

audio.cc 24 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598
  1. /**
  2. * Copyright 2021 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include "minddata/dataset/include/dataset/audio.h"
  17. #include "minddata/dataset/audio/ir/kernels/allpass_biquad_ir.h"
  18. #include "minddata/dataset/audio/ir/kernels/amplitude_to_db_ir.h"
  19. #include "minddata/dataset/audio/ir/kernels/angle_ir.h"
  20. #include "minddata/dataset/audio/ir/kernels/band_biquad_ir.h"
  21. #include "minddata/dataset/audio/ir/kernels/bandpass_biquad_ir.h"
  22. #include "minddata/dataset/audio/ir/kernels/bandreject_biquad_ir.h"
  23. #include "minddata/dataset/audio/ir/kernels/bass_biquad_ir.h"
  24. #include "minddata/dataset/audio/ir/kernels/biquad_ir.h"
  25. #include "minddata/dataset/audio/ir/kernels/complex_norm_ir.h"
  26. #include "minddata/dataset/audio/ir/kernels/compute_deltas_ir.h"
  27. #include "minddata/dataset/audio/ir/kernels/contrast_ir.h"
  28. #include "minddata/dataset/audio/ir/kernels/db_to_amplitude_ir.h"
  29. #include "minddata/dataset/audio/ir/kernels/dc_shift_ir.h"
  30. #include "minddata/dataset/audio/ir/kernels/deemph_biquad_ir.h"
  31. #include "minddata/dataset/audio/ir/kernels/detect_pitch_frequency_ir.h"
  32. #include "minddata/dataset/audio/ir/kernels/equalizer_biquad_ir.h"
  33. #include "minddata/dataset/audio/ir/kernels/fade_ir.h"
  34. #include "minddata/dataset/audio/ir/kernels/flanger_ir.h"
  35. #include "minddata/dataset/audio/ir/kernels/frequency_masking_ir.h"
  36. #include "minddata/dataset/audio/ir/kernels/highpass_biquad_ir.h"
  37. #include "minddata/dataset/audio/ir/kernels/lfilter_ir.h"
  38. #include "minddata/dataset/audio/ir/kernels/lowpass_biquad_ir.h"
  39. #include "minddata/dataset/audio/ir/kernels/magphase_ir.h"
  40. #include "minddata/dataset/audio/ir/kernels/mu_law_decoding_ir.h"
  41. #include "minddata/dataset/audio/ir/kernels/mu_law_encoding_ir.h"
  42. #include "minddata/dataset/audio/ir/kernels/overdrive_ir.h"
  43. #include "minddata/dataset/audio/ir/kernels/phaser_ir.h"
  44. #include "minddata/dataset/audio/ir/kernels/riaa_biquad_ir.h"
  45. #include "minddata/dataset/audio/ir/kernels/sliding_window_cmn_ir.h"
  46. #include "minddata/dataset/audio/ir/kernels/time_masking_ir.h"
  47. #include "minddata/dataset/audio/ir/kernels/time_stretch_ir.h"
  48. #include "minddata/dataset/audio/ir/kernels/treble_biquad_ir.h"
  49. #include "minddata/dataset/audio/ir/kernels/vol_ir.h"
  50. #include "minddata/dataset/audio/kernels/audio_utils.h"
  51. namespace mindspore {
  52. namespace dataset {
  53. namespace audio {
  54. // AllpassBiquad Transform Operation.
  55. struct AllpassBiquad::Data {
  56. Data(int32_t sample_rate, float central_freq, float Q)
  57. : sample_rate_(sample_rate), central_freq_(central_freq), Q_(Q) {}
  58. int32_t sample_rate_;
  59. float central_freq_;
  60. float Q_;
  61. };
  62. AllpassBiquad::AllpassBiquad(int32_t sample_rate, float central_freq, float Q)
  63. : data_(std::make_shared<Data>(sample_rate, central_freq, Q)) {}
  64. std::shared_ptr<TensorOperation> AllpassBiquad::Parse() {
  65. return std::make_shared<AllpassBiquadOperation>(data_->sample_rate_, data_->central_freq_, data_->Q_);
  66. }
  67. // AmplitudeToDB Transform Operation.
  68. struct AmplitudeToDB::Data {
  69. Data(ScaleType stype, float ref_value, float amin, float top_db)
  70. : stype_(stype), ref_value_(ref_value), amin_(amin), top_db_(top_db) {}
  71. ScaleType stype_;
  72. float ref_value_;
  73. float amin_;
  74. float top_db_;
  75. };
  76. AmplitudeToDB::AmplitudeToDB(ScaleType stype, float ref_value, float amin, float top_db)
  77. : data_(std::make_shared<Data>(stype, ref_value, amin, top_db)) {}
  78. std::shared_ptr<TensorOperation> AmplitudeToDB::Parse() {
  79. return std::make_shared<AmplitudeToDBOperation>(data_->stype_, data_->ref_value_, data_->amin_, data_->top_db_);
  80. }
  81. // Angle Transform Operation.
  82. Angle::Angle() {}
  83. std::shared_ptr<TensorOperation> Angle::Parse() { return std::make_shared<AngleOperation>(); }
  84. // BandBiquad Transform Operation.
  85. struct BandBiquad::Data {
  86. Data(int32_t sample_rate, float central_freq, float Q, bool noise)
  87. : sample_rate_(sample_rate), central_freq_(central_freq), Q_(Q), noise_(noise) {}
  88. int32_t sample_rate_;
  89. float central_freq_;
  90. float Q_;
  91. bool noise_;
  92. };
  93. BandBiquad::BandBiquad(int32_t sample_rate, float central_freq, float Q, bool noise)
  94. : data_(std::make_shared<Data>(sample_rate, central_freq, Q, noise)) {}
  95. std::shared_ptr<TensorOperation> BandBiquad::Parse() {
  96. return std::make_shared<BandBiquadOperation>(data_->sample_rate_, data_->central_freq_, data_->Q_, data_->noise_);
  97. }
  98. // BandpassBiquad Transform Operation.
  99. struct BandpassBiquad::Data {
  100. Data(int32_t sample_rate, float central_freq, float Q, bool const_skirt_gain)
  101. : sample_rate_(sample_rate), central_freq_(central_freq), Q_(Q), const_skirt_gain_(const_skirt_gain) {}
  102. int32_t sample_rate_;
  103. float central_freq_;
  104. float Q_;
  105. bool const_skirt_gain_;
  106. };
  107. BandpassBiquad::BandpassBiquad(int32_t sample_rate, float central_freq, float Q, bool const_skirt_gain)
  108. : data_(std::make_shared<Data>(sample_rate, central_freq, Q, const_skirt_gain)) {}
  109. std::shared_ptr<TensorOperation> BandpassBiquad::Parse() {
  110. return std::make_shared<BandpassBiquadOperation>(data_->sample_rate_, data_->central_freq_, data_->Q_,
  111. data_->const_skirt_gain_);
  112. }
  113. // BandrejectBiquad Transform Operation.
  114. struct BandrejectBiquad::Data {
  115. Data(int32_t sample_rate, float central_freq, float Q)
  116. : sample_rate_(sample_rate), central_freq_(central_freq), Q_(Q) {}
  117. int32_t sample_rate_;
  118. float central_freq_;
  119. float Q_;
  120. };
  121. BandrejectBiquad::BandrejectBiquad(int32_t sample_rate, float central_freq, float Q)
  122. : data_(std::make_shared<Data>(sample_rate, central_freq, Q)) {}
  123. std::shared_ptr<TensorOperation> BandrejectBiquad::Parse() {
  124. return std::make_shared<BandrejectBiquadOperation>(data_->sample_rate_, data_->central_freq_, data_->Q_);
  125. }
  126. // BassBiquad Transform Operation.
  127. struct BassBiquad::Data {
  128. Data(int32_t sample_rate, float gain, float central_freq, float Q)
  129. : sample_rate_(sample_rate), gain_(gain), central_freq_(central_freq), Q_(Q) {}
  130. int32_t sample_rate_;
  131. float gain_;
  132. float central_freq_;
  133. float Q_;
  134. };
  135. BassBiquad::BassBiquad(int32_t sample_rate, float gain, float central_freq, float Q)
  136. : data_(std::make_shared<Data>(sample_rate, gain, central_freq, Q)) {}
  137. std::shared_ptr<TensorOperation> BassBiquad::Parse() {
  138. return std::make_shared<BassBiquadOperation>(data_->sample_rate_, data_->gain_, data_->central_freq_, data_->Q_);
  139. }
  140. // Biquad Transform Operation.
  141. struct Biquad::Data {
  142. Data(float b0, float b1, float b2, float a0, float a1, float a2)
  143. : b0_(b0), b1_(b1), b2_(b2), a0_(a0), a1_(a1), a2_(a2) {}
  144. float b0_;
  145. float b1_;
  146. float b2_;
  147. float a0_;
  148. float a1_;
  149. float a2_;
  150. };
  151. Biquad::Biquad(float b0, float b1, float b2, float a0, float a1, float a2)
  152. : data_(std::make_shared<Data>(b0, b1, b2, a0, a1, a2)) {}
  153. std::shared_ptr<TensorOperation> Biquad::Parse() {
  154. return std::make_shared<BiquadOperation>(data_->b0_, data_->b1_, data_->b2_, data_->a0_, data_->a1_, data_->a1_);
  155. }
  156. // ComplexNorm Transform Operation.
  157. struct ComplexNorm::Data {
  158. explicit Data(float power) : power_(power) {}
  159. float power_;
  160. };
  161. ComplexNorm::ComplexNorm(float power) : data_(std::make_shared<Data>(power)) {}
  162. std::shared_ptr<TensorOperation> ComplexNorm::Parse() { return std::make_shared<ComplexNormOperation>(data_->power_); }
  163. // ComputeDeltas Transform Operation.
  164. struct ComputeDeltas::Data {
  165. Data(int32_t win_length, BorderType pad_mode) : win_length_(win_length), pad_mode_(pad_mode) {}
  166. int32_t win_length_;
  167. BorderType pad_mode_;
  168. };
  169. ComputeDeltas::ComputeDeltas(int32_t win_length, BorderType pad_mode)
  170. : data_(std::make_shared<Data>(win_length, pad_mode)) {}
  171. std::shared_ptr<TensorOperation> ComputeDeltas::Parse() {
  172. return std::make_shared<ComputeDeltasOperation>(data_->win_length_, data_->pad_mode_);
  173. }
  174. // Contrast Transform Operation.
  175. struct Contrast::Data {
  176. explicit Data(float enhancement_amount) : enhancement_amount_(enhancement_amount) {}
  177. float enhancement_amount_;
  178. };
  179. Contrast::Contrast(float enhancement_amount) : data_(std::make_shared<Data>(enhancement_amount)) {}
  180. std::shared_ptr<TensorOperation> Contrast::Parse() {
  181. return std::make_shared<ContrastOperation>(data_->enhancement_amount_);
  182. }
  183. // DBToAmplitude Transform Operation.
  184. struct DBToAmplitude::Data {
  185. explicit Data(float ref, float power) : ref_(ref), power_(power) {}
  186. float ref_;
  187. float power_;
  188. };
  189. DBToAmplitude::DBToAmplitude(float ref, float power) : data_(std::make_shared<Data>(power, power)) {}
  190. std::shared_ptr<TensorOperation> DBToAmplitude::Parse() {
  191. return std::make_shared<DBToAmplitudeOperation>(data_->ref_, data_->power_);
  192. }
  193. // DCShift Transform Operation.
  194. struct DCShift::Data {
  195. Data(float shift, float limiter_gain) : shift_(shift), limiter_gain_(limiter_gain) {}
  196. float shift_;
  197. float limiter_gain_;
  198. };
  199. DCShift::DCShift(float shift) : data_(std::make_shared<Data>(shift, shift)) {}
  200. DCShift::DCShift(float shift, float limiter_gain) : data_(std::make_shared<Data>(shift, limiter_gain)) {}
  201. std::shared_ptr<TensorOperation> DCShift::Parse() {
  202. return std::make_shared<DCShiftOperation>(data_->shift_, data_->limiter_gain_);
  203. }
  204. Status CreateDct(mindspore::MSTensor *output, int32_t n_mfcc, int32_t n_mels, NormMode norm) {
  205. RETURN_UNEXPECTED_IF_NULL(output);
  206. CHECK_FAIL_RETURN_UNEXPECTED(n_mfcc > 0, "CreateDct: n_mfcc must be greater than 0, got: " + std::to_string(n_mfcc));
  207. CHECK_FAIL_RETURN_UNEXPECTED(n_mels > 0, "CreateDct: n_mels must be greater than 0, got: " + std::to_string(n_mels));
  208. std::shared_ptr<dataset::Tensor> dct;
  209. RETURN_IF_NOT_OK(Dct(&dct, n_mfcc, n_mels, norm));
  210. CHECK_FAIL_RETURN_UNEXPECTED(dct->HasData(), "CreateDct: get an empty tensor with shape " + dct->shape().ToString());
  211. *output = mindspore::MSTensor(std::make_shared<DETensor>(dct));
  212. return Status::OK();
  213. }
  214. // DeemphBiquad Transform Operation.
  215. struct DeemphBiquad::Data {
  216. explicit Data(int32_t sample_rate) : sample_rate_(sample_rate) {}
  217. int32_t sample_rate_;
  218. };
  219. DeemphBiquad::DeemphBiquad(int32_t sample_rate) : data_(std::make_shared<Data>(sample_rate)) {}
  220. std::shared_ptr<TensorOperation> DeemphBiquad::Parse() {
  221. return std::make_shared<DeemphBiquadOperation>(data_->sample_rate_);
  222. }
  223. // DetectPitchFrequency Transform Operation.
  224. struct DetectPitchFrequency::Data {
  225. Data(int32_t sample_rate, float frame_time, int32_t win_length, int32_t freq_low, int32_t freq_high)
  226. : sample_rate_(sample_rate),
  227. frame_time_(frame_time),
  228. win_length_(win_length),
  229. freq_low_(freq_low),
  230. freq_high_(freq_high) {}
  231. int32_t sample_rate_;
  232. float frame_time_;
  233. int32_t win_length_;
  234. int32_t freq_low_;
  235. int32_t freq_high_;
  236. };
  237. DetectPitchFrequency::DetectPitchFrequency(int32_t sample_rate, float frame_time, int32_t win_length, int32_t freq_low,
  238. int32_t freq_high)
  239. : data_(std::make_shared<Data>(sample_rate, frame_time, win_length, freq_low, freq_high)) {}
  240. std::shared_ptr<TensorOperation> DetectPitchFrequency::Parse() {
  241. return std::make_shared<DetectPitchFrequencyOperation>(data_->sample_rate_, data_->frame_time_, data_->win_length_,
  242. data_->freq_low_, data_->freq_high_);
  243. }
  244. // EqualizerBiquad Transform Operation.
  245. struct EqualizerBiquad::Data {
  246. Data(int32_t sample_rate, float center_freq, float gain, float Q)
  247. : sample_rate_(sample_rate), center_freq_(center_freq), gain_(gain), Q_(Q) {}
  248. int32_t sample_rate_;
  249. float center_freq_;
  250. float gain_;
  251. float Q_;
  252. };
  253. EqualizerBiquad::EqualizerBiquad(int32_t sample_rate, float center_freq, float gain, float Q)
  254. : data_(std::make_shared<Data>(sample_rate, center_freq, gain, Q)) {}
  255. std::shared_ptr<TensorOperation> EqualizerBiquad::Parse() {
  256. return std::make_shared<EqualizerBiquadOperation>(data_->sample_rate_, data_->center_freq_, data_->gain_, data_->Q_);
  257. }
  258. // Fade Transform Operation.
  259. struct Fade::Data {
  260. Data(int32_t fade_in_len, int32_t fade_out_len, FadeShape fade_shape)
  261. : fade_in_len_(fade_in_len), fade_out_len_(fade_out_len), fade_shape_(fade_shape) {}
  262. int32_t fade_in_len_;
  263. int32_t fade_out_len_;
  264. FadeShape fade_shape_;
  265. };
  266. Fade::Fade(int32_t fade_in_len, int32_t fade_out_len, FadeShape fade_shape)
  267. : data_(std::make_shared<Data>(fade_in_len, fade_out_len, fade_shape)) {}
  268. std::shared_ptr<TensorOperation> Fade::Parse() {
  269. return std::make_shared<FadeOperation>(data_->fade_in_len_, data_->fade_out_len_, data_->fade_shape_);
  270. }
  271. // Flanger Transform Operation.
  272. struct Flanger::Data {
  273. Data(int32_t sample_rate, float delay, float depth, float regen, float width, float speed, float phase,
  274. Modulation modulation, Interpolation interpolation)
  275. : sample_rate_(sample_rate),
  276. delay_(delay),
  277. depth_(depth),
  278. regen_(regen),
  279. width_(width),
  280. speed_(speed),
  281. phase_(phase),
  282. modulation_(modulation),
  283. interpolation_(interpolation) {}
  284. int32_t sample_rate_;
  285. float delay_;
  286. float depth_;
  287. float regen_;
  288. float width_;
  289. float speed_;
  290. float phase_;
  291. Modulation modulation_;
  292. Interpolation interpolation_;
  293. };
  294. Flanger::Flanger(int32_t sample_rate, float delay, float depth, float regen, float width, float speed, float phase,
  295. Modulation modulation, Interpolation interpolation)
  296. : data_(std::make_shared<Data>(sample_rate, delay, depth, regen, width, speed, phase, modulation, interpolation)) {}
  297. std::shared_ptr<TensorOperation> Flanger::Parse() {
  298. return std::make_shared<FlangerOperation>(data_->sample_rate_, data_->delay_, data_->depth_, data_->regen_,
  299. data_->width_, data_->speed_, data_->phase_, data_->modulation_,
  300. data_->interpolation_);
  301. }
  302. // FrequencyMasking Transform Operation.
  303. struct FrequencyMasking::Data {
  304. Data(bool iid_masks, int32_t frequency_mask_param, int32_t mask_start, float mask_value)
  305. : iid_masks_(iid_masks),
  306. frequency_mask_param_(frequency_mask_param),
  307. mask_start_(mask_start),
  308. mask_value_(mask_value) {}
  309. bool iid_masks_;
  310. int32_t frequency_mask_param_;
  311. int32_t mask_start_;
  312. float mask_value_;
  313. };
  314. FrequencyMasking::FrequencyMasking(bool iid_masks, int32_t frequency_mask_param, int32_t mask_start, float mask_value)
  315. : data_(std::make_shared<Data>(iid_masks, frequency_mask_param, mask_start, mask_value)) {}
  316. std::shared_ptr<TensorOperation> FrequencyMasking::Parse() {
  317. return std::make_shared<FrequencyMaskingOperation>(data_->iid_masks_, data_->frequency_mask_param_,
  318. data_->mask_start_, data_->mask_value_);
  319. }
  320. // HighpassBiquad Transform Operation.
  321. struct HighpassBiquad::Data {
  322. Data(int32_t sample_rate, float cutoff_freq, float Q) : sample_rate_(sample_rate), cutoff_freq_(cutoff_freq), Q_(Q) {}
  323. int32_t sample_rate_;
  324. float cutoff_freq_;
  325. float Q_;
  326. };
  327. HighpassBiquad::HighpassBiquad(int32_t sample_rate, float cutoff_freq, float Q)
  328. : data_(std::make_shared<Data>(sample_rate, cutoff_freq, Q)) {}
  329. std::shared_ptr<TensorOperation> HighpassBiquad::Parse() {
  330. return std::make_shared<HighpassBiquadOperation>(data_->sample_rate_, data_->cutoff_freq_, data_->Q_);
  331. }
  332. // LFilter Transform Operation.
  333. struct LFilter::Data {
  334. Data(const std::vector<float> &a_coeffs, const std::vector<float> &b_coeffs, bool clamp)
  335. : a_coeffs_(a_coeffs), b_coeffs_(b_coeffs), clamp_(clamp) {}
  336. std::vector<float> a_coeffs_;
  337. std::vector<float> b_coeffs_;
  338. bool clamp_;
  339. };
  340. LFilter::LFilter(std::vector<float> a_coeffs, std::vector<float> b_coeffs, bool clamp)
  341. : data_(std::make_shared<Data>(a_coeffs, b_coeffs, clamp)) {}
  342. std::shared_ptr<TensorOperation> LFilter::Parse() {
  343. return std::make_shared<LFilterOperation>(data_->a_coeffs_, data_->b_coeffs_, data_->clamp_);
  344. }
  345. // LowpassBiquad Transform Operation.
  346. struct LowpassBiquad::Data {
  347. Data(int32_t sample_rate, float cutoff_freq, float Q) : sample_rate_(sample_rate), cutoff_freq_(cutoff_freq), Q_(Q) {}
  348. int32_t sample_rate_;
  349. float cutoff_freq_;
  350. float Q_;
  351. };
  352. LowpassBiquad::LowpassBiquad(int32_t sample_rate, float cutoff_freq, float Q)
  353. : data_(std::make_shared<Data>(sample_rate, cutoff_freq, Q)) {}
  354. std::shared_ptr<TensorOperation> LowpassBiquad::Parse() {
  355. return std::make_shared<LowpassBiquadOperation>(data_->sample_rate_, data_->cutoff_freq_, data_->Q_);
  356. }
  357. // Magphase Transform Operation.
  358. struct Magphase::Data {
  359. explicit Data(float power) : power_(power) {}
  360. float power_;
  361. };
  362. Magphase::Magphase(float power) : data_(std::make_shared<Data>(power)) {}
  363. std::shared_ptr<TensorOperation> Magphase::Parse() { return std::make_shared<MagphaseOperation>(data_->power_); }
  364. // MuLawDecoding Transform Operation.
  365. struct MuLawDecoding::Data {
  366. explicit Data(int32_t quantization_channels) : quantization_channels_(quantization_channels) {}
  367. int32_t quantization_channels_;
  368. };
  369. MuLawDecoding::MuLawDecoding(int32_t quantization_channels) : data_(std::make_shared<Data>(quantization_channels)) {}
  370. std::shared_ptr<TensorOperation> MuLawDecoding::Parse() {
  371. return std::make_shared<MuLawDecodingOperation>(data_->quantization_channels_);
  372. }
  373. // MuLawEncoding Transform Operation.
  374. struct MuLawEncoding::Data {
  375. explicit Data(int32_t quantization_channels) : quantization_channels_(quantization_channels) {}
  376. int32_t quantization_channels_;
  377. };
  378. MuLawEncoding::MuLawEncoding(int32_t quantization_channels) : data_(std::make_shared<Data>(quantization_channels)) {}
  379. std::shared_ptr<TensorOperation> MuLawEncoding::Parse() {
  380. return std::make_shared<MuLawEncodingOperation>(data_->quantization_channels_);
  381. }
  382. // Overdrive Transform Operation.
  383. struct Overdrive::Data {
  384. Data(float gain, float color) : gain_(gain), color_(color) {}
  385. float gain_;
  386. float color_;
  387. };
  388. Overdrive::Overdrive(float gain, float color) : data_(std::make_shared<Data>(gain, color)) {}
  389. std::shared_ptr<TensorOperation> Overdrive::Parse() {
  390. return std::make_shared<OverdriveOperation>(data_->gain_, data_->color_);
  391. }
  392. // Phaser Transform Operation.
  393. struct Phaser::Data {
  394. Data(int32_t sample_rate, float gain_in, float gain_out, float delay_ms, float decay, float mod_speed,
  395. bool sinusoidal)
  396. : sample_rate_(sample_rate),
  397. gain_in_(gain_in),
  398. gain_out_(gain_out),
  399. delay_ms_(delay_ms),
  400. decay_(decay),
  401. mod_speed_(mod_speed),
  402. sinusoidal_(sinusoidal) {}
  403. int32_t sample_rate_;
  404. float gain_in_;
  405. float gain_out_;
  406. float delay_ms_;
  407. float decay_;
  408. float mod_speed_;
  409. bool sinusoidal_;
  410. };
  411. Phaser::Phaser(int32_t sample_rate, float gain_in, float gain_out, float delay_ms, float decay, float mod_speed,
  412. bool sinusoidal)
  413. : data_(std::make_shared<Data>(sample_rate, gain_in, gain_out, delay_ms, decay, mod_speed, sinusoidal)) {}
  414. std::shared_ptr<TensorOperation> Phaser::Parse() {
  415. return std::make_shared<PhaserOperation>(data_->sample_rate_, data_->gain_in_, data_->gain_out_, data_->delay_ms_,
  416. data_->decay_, data_->mod_speed_, data_->sinusoidal_);
  417. }
  418. // RiaaBiquad Transform Operation.
  419. struct RiaaBiquad::Data {
  420. explicit Data(int32_t sample_rate) : sample_rate_(sample_rate) {}
  421. int32_t sample_rate_;
  422. };
  423. RiaaBiquad::RiaaBiquad(int32_t sample_rate) : data_(std::make_shared<Data>(sample_rate)) {}
  424. std::shared_ptr<TensorOperation> RiaaBiquad::Parse() {
  425. return std::make_shared<RiaaBiquadOperation>(data_->sample_rate_);
  426. }
  427. // SlidingWindowCmn Transform Operation.
  428. struct SlidingWindowCmn::Data {
  429. Data(int32_t cmn_window, int32_t min_cmn_window, bool center, bool norm_vars)
  430. : cmn_window_(cmn_window), min_cmn_window_(min_cmn_window), center_(center), norm_vars_(norm_vars) {}
  431. int32_t cmn_window_;
  432. int32_t min_cmn_window_;
  433. bool center_;
  434. bool norm_vars_;
  435. };
  436. SlidingWindowCmn::SlidingWindowCmn(int32_t cmn_window, int32_t min_cmn_window, bool center, bool norm_vars)
  437. : data_(std::make_shared<Data>(cmn_window, min_cmn_window, center, norm_vars)) {}
  438. std::shared_ptr<TensorOperation> SlidingWindowCmn::Parse() {
  439. return std::make_shared<SlidingWindowCmnOperation>(data_->cmn_window_, data_->min_cmn_window_, data_->center_,
  440. data_->norm_vars_);
  441. }
  442. // TimeMasking Transform Operation.
  443. struct TimeMasking::Data {
  444. Data(bool iid_masks, int32_t time_mask_param, int32_t mask_start, float mask_value)
  445. : iid_masks_(iid_masks), time_mask_param_(time_mask_param), mask_start_(mask_start), mask_value_(mask_value) {}
  446. bool iid_masks_;
  447. int32_t time_mask_param_;
  448. int32_t mask_start_;
  449. float mask_value_;
  450. };
  451. TimeMasking::TimeMasking(bool iid_masks, int32_t time_mask_param, int32_t mask_start, float mask_value)
  452. : data_(std::make_shared<Data>(iid_masks, time_mask_param, mask_start, mask_value)) {}
  453. std::shared_ptr<TensorOperation> TimeMasking::Parse() {
  454. return std::make_shared<TimeMaskingOperation>(data_->iid_masks_, data_->time_mask_param_, data_->mask_start_,
  455. data_->mask_value_);
  456. }
  457. // TimeStretch Transform Operation.
  458. struct TimeStretch::Data {
  459. explicit Data(float hop_length, int32_t n_freq, float fixed_rate)
  460. : hop_length_(hop_length), n_freq_(n_freq), fixed_rate_(fixed_rate) {}
  461. float hop_length_;
  462. int32_t n_freq_;
  463. float fixed_rate_;
  464. };
  465. TimeStretch::TimeStretch(float hop_length, int32_t n_freq, float fixed_rate)
  466. : data_(std::make_shared<Data>(hop_length, n_freq, fixed_rate)) {}
  467. std::shared_ptr<TensorOperation> TimeStretch::Parse() {
  468. return std::make_shared<TimeStretchOperation>(data_->hop_length_, data_->n_freq_, data_->fixed_rate_);
  469. }
  470. // TrebleBiquad Transform Operation.
  471. struct TrebleBiquad::Data {
  472. Data(int32_t sample_rate, float gain, float central_freq, float Q)
  473. : sample_rate_(sample_rate), gain_(gain), central_freq_(central_freq), Q_(Q) {}
  474. int32_t sample_rate_;
  475. float gain_;
  476. float central_freq_;
  477. float Q_;
  478. };
  479. TrebleBiquad::TrebleBiquad(int32_t sample_rate, float gain, float central_freq, float Q)
  480. : data_(std::make_shared<Data>(sample_rate, gain, central_freq, Q)) {}
  481. std::shared_ptr<TensorOperation> TrebleBiquad::Parse() {
  482. return std::make_shared<TrebleBiquadOperation>(data_->sample_rate_, data_->gain_, data_->central_freq_, data_->Q_);
  483. }
  484. // Vol Transform Operation.
  485. struct Vol::Data {
  486. Data(float gain, GainType gain_type) : gain_(gain), gain_type_(gain_type) {}
  487. float gain_;
  488. GainType gain_type_;
  489. };
  490. Vol::Vol(float gain, GainType gain_type) : data_(std::make_shared<Data>(gain, gain_type)) {}
  491. std::shared_ptr<TensorOperation> Vol::Parse() {
  492. return std::make_shared<VolOperation>(data_->gain_, data_->gain_type_);
  493. }
  494. } // namespace audio
  495. } // namespace dataset
  496. } // namespace mindspore