From 004516cd573bce34496710a0290fb6a7f822f371 Mon Sep 17 00:00:00 2001 From: aniawsz Date: Wed, 9 Nov 2022 20:18:44 +0100 Subject: [PATCH] Introduce the problem The example code reproduces the problem found in the original Aquila repository's list of issues: https://github.com/zsiciarz/aquila/issues/55 Build the workshop target and run it with a path to the tone.wav file passed as an argument --- examples/CMakeLists.txt | 2 ++ examples/workshop/CMakeLists.txt | 8 ++++++ examples/workshop/generate_test_wavfile.cpp | 19 ++++++++++++++ examples/workshop/short-tone.wav | Bin 0 -> 1084 bytes examples/workshop/tone.wav | Bin 0 -> 1058434 bytes examples/workshop/workshop.cpp | 27 ++++++++++++++++++++ 6 files changed, 56 insertions(+) create mode 100644 examples/workshop/CMakeLists.txt create mode 100644 examples/workshop/generate_test_wavfile.cpp create mode 100644 examples/workshop/short-tone.wav create mode 100644 examples/workshop/tone.wav create mode 100644 examples/workshop/workshop.cpp diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index bf09365..97c3e15 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -39,3 +39,5 @@ add_subdirectory(fft_filter) add_subdirectory(spectrogram) add_subdirectory(mfcc_calculation) add_subdirectory(dtw_path_recovery) + +add_subdirectory(workshop) diff --git a/examples/workshop/CMakeLists.txt b/examples/workshop/CMakeLists.txt new file mode 100644 index 0000000..e257b97 --- /dev/null +++ b/examples/workshop/CMakeLists.txt @@ -0,0 +1,8 @@ +################################################################################ +# +# AM modulation example. +# +################################################################################ + +aquila_example(workshop) +aquila_example(generate_test_wavfile) diff --git a/examples/workshop/generate_test_wavfile.cpp b/examples/workshop/generate_test_wavfile.cpp new file mode 100644 index 0000000..ba9f21b --- /dev/null +++ b/examples/workshop/generate_test_wavfile.cpp @@ -0,0 +1,19 @@ +#include "aquila/source/WaveFile.h" +#include "aquila/source/generator/SineGenerator.h" + +#include + +int main(int argc, char *argv[]) +{ + if (argc < 2) + { + std::cout << "Usage: generate_test_wavfile " << std::endl; + return 1; + } + + const auto sampleRate = 44100; + Aquila::SineGenerator sineGenerator(sampleRate); + sineGenerator.setFrequency(220).setAmplitude(255).generate(sampleRate*12-5); + + Aquila::WaveFile::save(sineGenerator, argv[1]); +} diff --git a/examples/workshop/short-tone.wav b/examples/workshop/short-tone.wav new file mode 100644 index 0000000000000000000000000000000000000000..63f547c0c279f023b814b91bfdb9c4fb91bb4853 GIT binary patch literal 1084 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
  • dtvD9cFsv?pE5bwdlHZ} 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 literal 0 HcmV?d00001 diff --git a/examples/workshop/workshop.cpp b/examples/workshop/workshop.cpp new file mode 100644 index 0000000..9dde6fe --- /dev/null +++ b/examples/workshop/workshop.cpp @@ -0,0 +1,27 @@ +#include "aquila/source/WaveFile.h" +#include "aquila/transform/Mfcc.h" + +#include + +int main(int argc, char *argv[]) +{ + if (argc < 2) + { + std::cout << "Usage: read_wavs " << std::endl; + return 1; + } + + Aquila::WaveFile wav(argv[1]); + + const auto numSamples = wav.getSamplesCount(); + + Aquila::Mfcc mfcc(numSamples); + const auto mfccValues = mfcc.calculate(wav); + + for (const auto val : mfccValues) + { + std::cout << val << " "; + } + + std::cout << std::endl; +}