#pragma once #include #include #include #include #include #include #include #include #include #include #include "global.h" #include "dr_wav.h" using namespace std; using namespace cv; namespace fs = std::filesystem; using namespace Eigen; vector> general(const vector>& w, int m, int n, int a, int b); std::vector> matToVector(const cv::Mat& ww, int rows, int cols); void printSignal(vector &signal, int length); //void PQIMfft_embed(vector> &Gp, vector> &fp, vector &w1, int M, double DD, double EE, vector> &oo, vector> &rr, vector> &Gp_watermarked); void PQIMfft_embed(MatrixXd Gp, MatrixXd fp, vector& w1, int M, double DD, double EE, vector>& oo, vector>& rr, vector>& Gp_watermarked); void saveAudio(const char* outputFilename, std::vector& yo, int sampleRate, int channels); // 对于复数的sign函数,返回其实部和虚部的符号组成的复数 template std::complex complex_sign(const std::complex &z); void zhishujurec622(vector> A_nm, vector> &zmlist_selected, int M, vector> oo, vector> rr, vector>> &result); int wm_embed(const wchar_t* path, const wchar_t* save_path, const int* wm, const int wm_size, const double start_time = 0, const double end_time = 25); void printIntSignal(vector &signal, int length); void printMat(vector> mat); double calculateMean(std::vector> &yo, int start, int end, int column); vector wavelet(vector BLOCK1, int level); vector inverseWavelet(vector signal, int level); void printIntMat(std::vector> mat); //void wmLog(char* txt); //void save_audio_drmp3(const char* outputFilename, vector& yo, int sampleRate, int channels); vector readWav(drwav& wav, int& wavelength, int& channels, int& Fs); bool canFormSquareMatrix(const int wm_size); void getAudio20sFront(bool split, int max_wavelength, int Fs, int channels, int& wavelength, vector yo_origin, vector& yo); void splitAudioByTime(int max_wavelength, int Fs, int channels, int& wavelength, vector yo_origin, vector& yo, const double start_time, const double end_time, int start);