Facebook
From erucolindo, 1 Year ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 102
  1. #ifndef MFCCCONVERTER_HPP
  2. #define MFCCCONVERTER_HPP
  3. #include<alize.h>
  4. #include<string>
  5. #include"exceptions/simple_exceptions.hpp"
  6. #include<cstdlib>
  7. #include<unistd.h>
  8. #include<thread>
  9. #include<sys/wait.h>
  10. #include<QProcess>
  11. #include"utils/utils.hpp"
  12.  
  13. #include"features/SPro4File.hpp"
  14.  
  15. /**
  16.  * @brief The MfccConverter Klasa, kt├│ra przetwarza plik d┼║wi─Ökowy
  17.  * na wektory cech w formacie SPro4
  18.  * Klasy pochodne implementuj─ů spos├│b konwersji poszczeg├│lnych format├│w d┼║wi─Ökowych.
  19.  */
  20. class MfccConverter
  21. {
  22.  
  23. public:
  24.   const uint32_t DEF_SAMPLE_RATE_= 8000, DEF_FRAME_LENGHT_ = 20, DEF_INTERVAL_ = 10,
  25.   DEF_FEATURE_LENGHT_ = 12;
  26.   const double DEF_PRE_EMPHASIS_ = 0.95;
  27.   const bool DEF_WITH_LOG_ENERGY_ = true;
  28.  
  29.   MfccConverter();
  30.   MfccConverter(const MfccConverter &other) = default;
  31.   MfccConverter& operator=(const MfccConverter &other) = default;
  32.   MfccConverter(MfccConverter &&other) = default;
  33.   MfccConverter& operator=(MfccConverter &&other) = default;
  34.   virtual ~MfccConverter() = default;
  35.   /**
  36.    * @brief convertToSPro4 Przetwarza dane nagranie do postaci wektor├│w cech Mfcc,
  37.    * i zwraca uchwyt do pliku, zawieraj─ůcego wynikowe wektory cech
  38.    * @param source_record Nagranie, kt├│re chcemy przetworzy─ç.
  39.    * Klasy dziedzicz─ůce implementuj─ů konwersj─Ö dla konkretnych format├│w nagra┼ä
  40.    * @return Uchwyt do pliku w formacie SPro4, zawieraj─ůcego wektory cech po przetworzeniu
  41.    * @throw FileNotFound Jesli plik wskazywany przez source_record nie istnieje
  42.    * @throw UnableToConvertToMfcc Jesli program konwertuj─ůcy zawodzi
  43.    */
  44.   virtual SPro4File convertToSPro4(const Record &source_record)const = 0;
  45.  
  46.   /**
  47.    * @brief setSampleRate Ustawia cz─Östotliwo┼Ťc pr├│bkowania sygna┼éu
  48.    * @param sample_rate Cz─Östotliwo┼Ť─ç pr├│bkowania nagrania w herz'ach
  49.    * @throw std::invalid_argument jesli sample_rate nie jest dodatnie
  50.    */
  51.   void setSampleRate(int32_t sample_rate);
  52.   uint32_t getSampleRate()const;
  53.   /**
  54.    * @brief setPreEmphasis Ustawia pre-emphasis coefficient
  55.    * @param pre_emphasis Warto┼Ťc wsp├│┼éczynnika
  56.    * @throw std::invalid_argument Je┼Ťli pre_emphasis wi─Ökszy od 0.95 lub kiedy jest niedodatki
  57.    */
  58.   void setPreEmphasis(double pre_emphasis);
  59.   double getPreEmphasis()const;
  60.  
  61.   /**
  62.    * @brief setFrameLenght Ustawia d┼éugo┼Ť─ç ramki, z kt├│rej b─Ödzie generowany 1 wektor cech
  63.    * @param frame_lenght D┼éugo┼Ť─ç ramki w milisekundach
  64.    * @throw std::invalid_argument je┼Ťli frame_lenght niedodatnie
  65.    */
  66.   void setFrameLenght(int32_t frame_lenght);
  67.   uint32_t getFrameLenght()const;
  68.  
  69.   /**
  70.    * @brief setInterval Ustawia odleg┼éo┼Ť─ç mi─Ödzy kolejnymi ramkami
  71.    * @param interval Odleg┼éo┼Ť─ç pomi─Ödzy ramkami w milisekundach
  72.    * @throw std::invalid_argument je┼Ťli interval niedodatnie
  73.    */
  74.   void setInterval(int32_t interval);
  75.   uint32_t getInterval()const;
  76.  
  77.   /**
  78.    * @brief setFeatureLenght Ustawia d┼éugo┼Ť─ç uzyskiwanego wektora cech z jednej ramki sygna┼éu
  79.    * Nie mo┼╝e by─ç wi─Öksza ni┼╝ 24.
  80.    * Ponadto jest to tylko d┼éugo┼Ť─ç wektora cech - nie bierze pod uwag─Ö logarytmu energii danej ramki sygna┼éu. Jest on dodawany metod─ů setLogEnergy();
  81.    * @param f_lenght D┼éugo┼Ť─ç jednego wektora cech
  82.    * @throw std::invalid_argument je┼Ťli f_lenght niedodatnie lub wi─Öksze ni┼╝ 24
  83.    */
  84.   void setFeatureLenght(int32_t f_lenght);
  85.  
  86.   /**
  87.    * @brief setLogEnergy Okre┼Ťla, czy do wektora cech powinien by─ç dodany logarytm energii danej ramki.
  88.    * Zwi─Öksza do d┼éugo┼Ť─ç wynikowego wektora cech o 1 element
  89.    * @param yes True je┼Ťli log energii ma by─ç dodany, false w przeciwnym razie
  90.    */
  91.   void setLogEnergy(bool yes);
  92.  
  93.   /**
  94.    * @brief getFeatureLenght Zwraca d┼éugo┼Ť─ç wynikowego wektora cech, po konwersji.
  95.    * Przy obliczaniu d┼éugo┼Ťci brany jest pod uwag─Ö logarytm energii w wektorze cech
  96.    * @return Ca┼ékowita d┼éugo┼Ť─ç wynikowego wektora cech
  97.    */
  98.   uint32_t getFeatureLenght()const;
  99.  
  100. protected:
  101.   uint32_t sample_rate_, frame_lenght_, interval_, f_lenght_;
  102.   double pre_emphasis_;
  103.   bool with_log_energy_;
  104.   const uint32_t log_energy_scale_factor_ = 1;
  105.  
  106.  
  107. };
  108. /**
  109.  * @brief The MfccConverterWav class Klasa zdolna konwertowa─ç pliki w formacie .wav.
  110.  * W konstruktorze domy┼Ťlnym ustawiane s─ů parametry konwersji, dedykowane do pliku w formacie .wav o cz─Östotliwo┼Ťci pr├│bkowania 48kHz.
  111.  * Wynikowy wektor cech ma 24 elementy, oraz dodany na ko┼äcu wektora logarytm energii
  112.  */
  113. class MfccConverterWav: public MfccConverter
  114. {
  115. public:
  116.   /**
  117.    * @brief MfccConverterWav Ustawia parametry konwersji, pasuj─ůce do pliku .wav o cz─Östotliwo┼Ťci pr├│bkowania 48kHz
  118.    */
  119.   MfccConverterWav();
  120.   MfccConverterWav(const MfccConverterWav &other) = default;
  121.   MfccConverterWav& operator=(const MfccConverterWav &other) = default;
  122.   MfccConverterWav(MfccConverterWav &&other) = default;
  123.   MfccConverterWav& operator=(MfccConverterWav &&other) = default;
  124.   ~MfccConverterWav() override = default;
  125.  
  126.   /**
  127.    * @brief convertToSPro4 Przetwarza dane nagranie do postaci wektor├│w cech Mfcc,
  128.    * i zwraca uchwyt do pliku, zawieraj─ůcego wynikowe wektory cech
  129.    * @param source_record Nagranie, kt├│re chcemy przetworzy─ç.
  130.    * Musi by─ç to nagranie w formacie WAV, inaczej konwersja si─Ö nie powiedzie
  131.    * @return Uchwyt do pliku w formacie SPro4, zawieraj─ůcego wektory cech po przetworzeniu
  132.    * @throw FileNotFound Jesli plik wskazywany przez source_record nie istnieje
  133.    * @throw UnableToConvertToMfcc Jesli program konwertuj─ůcy zawodzi lub nie mo┼╝na skonwertowa─ç danego formatu pliku
  134.    */
  135.   SPro4File convertToSPro4(const Record &source_record)const override;
  136. protected:
  137.   QStringList setArgumentsToSfbcep(const QString &source_file, const QString &dest_file)const;
  138.   QStringList setArgumentsToSox(const QString &source_file, const QString &dest_file)const;
  139.  
  140.  
  141. };
  142.  
  143. //class MfccConverterLinux
  144. //{
  145. //protected:
  146. //  const std::string CONVERT_SCRIPT_PATH = "./scripts/convert_mp3_to_SPro4.sh";
  147. //public:
  148. //  MfccConverterLinux() = default;
  149. //  MfccConverterLinux(const MfccConverterLinux &other) = default;
  150. //  MfccConverterLinux& operator=(const MfccConverterLinux &other) = default;
  151. //  MfccConverterLinux(MfccConverterLinux &&other) = default;
  152. //  MfccConverterLinux& operator=(MfccConverterLinux &&other) = default;
  153.  
  154. //  int32_t runMadPlay(const std::string &source_dir,const std::string &source_name,
  155. //                  const std::string &dest_dir,const std::string &dest_name)const;
  156. //  int32_t runSfbcep(const std::string &source_dir,const std::string &source_name,
  157. //                    const std::string &dest_dir,const std::string &dest_name)const;
  158. //  virtual void convertToSPro4(const std::string &source_path,
  159. //                              const std::string &dest_dir,const std::string &dest_name)const ;
  160.  
  161. //};
  162.  
  163.  
  164. #endif // MFCCCONVERTER_HPP
  165.